summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Cohen <adamcohen@google.com>2011-09-02 17:35:00 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-09-02 17:35:00 -0700
commitfead8f976700906101714b3265e64e30c0a80180 (patch)
treee6f2d2197f2cec8610b9802c65c199f129c66612
parent6b0c11da5a7a7ea236fd9dc409d1ce7a33bff9c2 (diff)
parent15d161f61bd97e937e95fe8a8e520a947113c7b1 (diff)
downloadframeworks_base-fead8f976700906101714b3265e64e30c0a80180.zip
frameworks_base-fead8f976700906101714b3265e64e30c0a80180.tar.gz
frameworks_base-fead8f976700906101714b3265e64e30c0a80180.tar.bz2
Merge "Ensure appwidgets are loaded before usage."
-rw-r--r--services/java/com/android/server/AppWidgetService.java35
1 files changed, 33 insertions, 2 deletions
diff --git a/services/java/com/android/server/AppWidgetService.java b/services/java/com/android/server/AppWidgetService.java
index f5fd6bd..9f4936d 100644
--- a/services/java/com/android/server/AppWidgetService.java
+++ b/services/java/com/android/server/AppWidgetService.java
@@ -170,6 +170,7 @@ class AppWidgetService extends IAppWidgetService.Stub
final ArrayList<AppWidgetId> mAppWidgetIds = new ArrayList<AppWidgetId>();
ArrayList<Host> mHosts = new ArrayList<Host>();
boolean mSafeMode;
+ boolean mStateLoaded;
AppWidgetService(Context context) {
mContext = context;
@@ -180,8 +181,9 @@ class AppWidgetService extends IAppWidgetService.Stub
public void systemReady(boolean safeMode) {
mSafeMode = safeMode;
- loadAppWidgetList();
- loadStateLocked();
+ synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
+ }
// Register for the boot completed broadcast, so we can send the
// ENABLE broacasts. If we try to send them now, they time out,
@@ -209,6 +211,14 @@ class AppWidgetService extends IAppWidgetService.Stub
mContext.registerReceiver(mBroadcastReceiver, sdFilter);
}
+ private void ensureStateLoadedLocked() {
+ if (!mStateLoaded) {
+ loadAppWidgetList();
+ loadStateLocked();
+ mStateLoaded = true;
+ }
+ }
+
@Override
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
@@ -285,6 +295,7 @@ class AppWidgetService extends IAppWidgetService.Stub
public int allocateAppWidgetId(String packageName, int hostId) {
int callingUid = enforceCallingUid(packageName);
synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
int appWidgetId = mNextAppWidgetId++;
Host host = lookupOrAddHostLocked(callingUid, packageName, hostId);
@@ -304,6 +315,7 @@ class AppWidgetService extends IAppWidgetService.Stub
public void deleteAppWidgetId(int appWidgetId) {
synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
AppWidgetId id = lookupAppWidgetIdLocked(appWidgetId);
if (id != null) {
deleteAppWidgetLocked(id);
@@ -314,6 +326,7 @@ class AppWidgetService extends IAppWidgetService.Stub
public void deleteHost(int hostId) {
synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
int callingUid = getCallingUid();
Host host = lookupHostLocked(callingUid, hostId);
if (host != null) {
@@ -325,6 +338,7 @@ class AppWidgetService extends IAppWidgetService.Stub
public void deleteAllHosts() {
synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
int callingUid = getCallingUid();
final int N = mHosts.size();
boolean changed = false;
@@ -405,6 +419,7 @@ class AppWidgetService extends IAppWidgetService.Stub
final long ident = Binder.clearCallingIdentity();
try {
synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
AppWidgetId id = lookupAppWidgetIdLocked(appWidgetId);
if (id == null) {
throw new IllegalArgumentException("bad appWidgetId");
@@ -448,6 +463,7 @@ class AppWidgetService extends IAppWidgetService.Stub
// Binds to a specific RemoteViewsService
public void bindRemoteViewsService(int appWidgetId, Intent intent, IBinder connection) {
synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
AppWidgetId id = lookupAppWidgetIdLocked(appWidgetId);
if (id == null) {
throw new IllegalArgumentException("bad appWidgetId");
@@ -499,6 +515,7 @@ class AppWidgetService extends IAppWidgetService.Stub
// Unbinds from a specific RemoteViewsService
public void unbindRemoteViewsService(int appWidgetId, Intent intent) {
synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
// Unbind from the RemoteViewsService (which will trigger a callback to the bound
// RemoteViewsAdapter)
Pair<Integer, FilterComparison> key = Pair.create(appWidgetId,
@@ -610,6 +627,7 @@ class AppWidgetService extends IAppWidgetService.Stub
public AppWidgetProviderInfo getAppWidgetInfo(int appWidgetId) {
synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
AppWidgetId id = lookupAppWidgetIdLocked(appWidgetId);
if (id != null && id.provider != null && !id.provider.zombie) {
return id.provider.info;
@@ -620,6 +638,7 @@ class AppWidgetService extends IAppWidgetService.Stub
public RemoteViews getAppWidgetViews(int appWidgetId) {
synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
AppWidgetId id = lookupAppWidgetIdLocked(appWidgetId);
if (id != null) {
return id.views;
@@ -630,6 +649,7 @@ class AppWidgetService extends IAppWidgetService.Stub
public List<AppWidgetProviderInfo> getInstalledProviders() {
synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
final int N = mInstalledProviders.size();
ArrayList<AppWidgetProviderInfo> result = new ArrayList<AppWidgetProviderInfo>(N);
for (int i=0; i<N; i++) {
@@ -652,6 +672,7 @@ class AppWidgetService extends IAppWidgetService.Stub
final int N = appWidgetIds.length;
synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
for (int i=0; i<N; i++) {
AppWidgetId id = lookupAppWidgetIdLocked(appWidgetIds[i]);
updateAppWidgetInstanceLocked(id, views);
@@ -669,6 +690,7 @@ class AppWidgetService extends IAppWidgetService.Stub
final int N = appWidgetIds.length;
synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
for (int i=0; i<N; i++) {
AppWidgetId id = lookupAppWidgetIdLocked(appWidgetIds[i]);
updateAppWidgetInstanceLocked(id, views, true);
@@ -686,6 +708,7 @@ class AppWidgetService extends IAppWidgetService.Stub
final int N = appWidgetIds.length;
synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
for (int i=0; i<N; i++) {
AppWidgetId id = lookupAppWidgetIdLocked(appWidgetIds[i]);
notifyAppWidgetViewDataChangedInstanceLocked(id, viewId);
@@ -695,6 +718,7 @@ class AppWidgetService extends IAppWidgetService.Stub
public void updateAppWidgetProvider(ComponentName provider, RemoteViews views) {
synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
Provider p = lookupProviderLocked(provider);
if (p == null) {
Slog.w(TAG, "updateAppWidgetProvider: provider doesn't exist: " + provider);
@@ -759,6 +783,7 @@ class AppWidgetService extends IAppWidgetService.Stub
List<RemoteViews> updatedViews) {
int callingUid = enforceCallingUid(packageName);
synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
Host host = lookupOrAddHostLocked(callingUid, packageName, hostId);
host.callbacks = callbacks;
@@ -778,6 +803,7 @@ class AppWidgetService extends IAppWidgetService.Stub
public void stopListening(int hostId) {
synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
Host host = lookupHostLocked(getCallingUid(), hostId);
if (host != null) {
host.callbacks = null;
@@ -965,6 +991,7 @@ class AppWidgetService extends IAppWidgetService.Stub
public int[] getAppWidgetIds(ComponentName provider) {
synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
Provider p = lookupProviderLocked(provider);
if (p != null && getCallingUid() == p.uid) {
return getAppWidgetIds(p);
@@ -1087,6 +1114,7 @@ class AppWidgetService extends IAppWidgetService.Stub
void sendInitialBroadcasts() {
synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
final int N = mInstalledProviders.size();
for (int i=0; i<N; i++) {
Provider p = mInstalledProviders.get(i);
@@ -1391,6 +1419,7 @@ class AppWidgetService extends IAppWidgetService.Stub
mLocale = revised;
synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
int N = mInstalledProviders.size();
for (int i=N-1; i>=0; i--) {
Provider p = mInstalledProviders.get(i);
@@ -1428,6 +1457,7 @@ class AppWidgetService extends IAppWidgetService.Stub
}
if (added || changed) {
synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
Bundle extras = intent.getExtras();
if (changed || (extras != null &&
extras.getBoolean(Intent.EXTRA_REPLACING, false))) {
@@ -1449,6 +1479,7 @@ class AppWidgetService extends IAppWidgetService.Stub
// The package is being updated. We'll receive a PACKAGE_ADDED shortly.
} else {
synchronized (mAppWidgetIds) {
+ ensureStateLoadedLocked();
for (String pkgName : pkgList) {
removeProvidersForPackageLocked(pkgName);
saveStateLocked();