summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdam Cohen <adamcohen@google.com>2011-10-17 22:02:07 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-10-17 22:02:07 -0700
commit00ed85a3d613b02e3abf9f37c298661b92f3200e (patch)
tree0bc3bf7ba81f67fcf8c09bce5e488a9566d7ce93 /src
parent7fe4f8ba0a3c065773f3166940f6b34e42194389 (diff)
parent93f824ac2f2f3ec92a775cad58dcf59e4302fe64 (diff)
downloadandroid_packages_apps_Trebuchet-00ed85a3d613b02e3abf9f37c298661b92f3200e.tar.gz
android_packages_apps_Trebuchet-00ed85a3d613b02e3abf9f37c298661b92f3200e.tar.bz2
android_packages_apps_Trebuchet-00ed85a3d613b02e3abf9f37c298661b92f3200e.zip
Merge "Listen for ACTION_CONFIGURATION_CHANGED for an mcc change to reload AllApps" into ics-mr0
Diffstat (limited to 'src')
-rw-r--r--src/com/android/launcher2/LauncherApplication.java1
-rw-r--r--src/com/android/launcher2/LauncherModel.java86
2 files changed, 62 insertions, 25 deletions
diff --git a/src/com/android/launcher2/LauncherApplication.java b/src/com/android/launcher2/LauncherApplication.java
index ba028efea..755168cab 100644
--- a/src/com/android/launcher2/LauncherApplication.java
+++ b/src/com/android/launcher2/LauncherApplication.java
@@ -58,6 +58,7 @@ public class LauncherApplication extends Application {
filter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);
filter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);
filter.addAction(Intent.ACTION_LOCALE_CHANGED);
+ filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
registerReceiver(mModel, filter);
filter = new IntentFilter();
filter.addAction(SearchManager.INTENT_GLOBAL_SEARCH_ACTIVITY_CHANGED);
diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java
index fc31d653b..3ee273214 100644
--- a/src/com/android/launcher2/LauncherModel.java
+++ b/src/com/android/launcher2/LauncherModel.java
@@ -30,6 +30,7 @@ import android.content.Intent.ShortcutIconResource;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
+import android.content.res.Configuration;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Bitmap;
@@ -120,6 +121,8 @@ public class LauncherModel extends BroadcastReceiver {
private static int mCellCountX;
private static int mCellCountY;
+ protected Configuration mPreviousConfig;
+
public interface Callbacks {
public boolean setLoadOnResume();
public int getCurrentWorkspaceScreen();
@@ -146,9 +149,10 @@ public class LauncherModel extends BroadcastReceiver {
mDefaultIcon = Utilities.createIconBitmap(
mIconCache.getFullResDefaultActivityIcon(), app);
- mAllAppsLoadDelay = app.getResources().getInteger(R.integer.config_allAppsBatchLoadDelay);
-
- mBatchSize = app.getResources().getInteger(R.integer.config_allAppsBatchSize);
+ final Resources res = app.getResources();
+ mAllAppsLoadDelay = res.getInteger(R.integer.config_allAppsBatchLoadDelay);
+ mBatchSize = res.getInteger(R.integer.config_allAppsBatchSize);
+ mPreviousConfig = res.getConfiguration();
}
public Bitmap getFallbackIcon() {
@@ -612,14 +616,20 @@ public class LauncherModel extends BroadcastReceiver {
enqueuePackageUpdated(new PackageUpdatedTask(
PackageUpdatedTask.OP_UNAVAILABLE, packages));
} else if (Intent.ACTION_LOCALE_CHANGED.equals(action)) {
- // If we have changed locale we need to clear out the labels in all apps.
- // Do this here because if the launcher activity is running it will be restarted.
- // If it's not running startLoaderFromBackground will merely tell it that it needs
- // to reload. Either way, mAllAppsLoaded will be cleared so it re-reads everything
- // next time.
- mAllAppsLoaded = false;
- mWorkspaceLoaded = false;
- startLoaderFromBackground();
+ // If we have changed locale we need to clear out the labels in all apps/workspace.
+ forceReload();
+ } else if (Intent.ACTION_CONFIGURATION_CHANGED.equals(action)) {
+ // Check if configuration change was an mcc/mnc change which would affect app resources
+ // and we would need to clear out the labels in all apps/workspace. Same handling as
+ // above for ACTION_LOCALE_CHANGED
+ Configuration currentConfig = context.getResources().getConfiguration();
+ if((mPreviousConfig.diff(currentConfig) & ActivityInfo.CONFIG_MCC) != 0){
+ Log.d(TAG, "Reload apps on config change. curr_mcc:"
+ + currentConfig.mcc + " prevmcc:" + mPreviousConfig.mcc);
+ forceReload();
+ }
+ // Update previousConfig
+ mPreviousConfig = currentConfig;
} else if (SearchManager.INTENT_GLOBAL_SEARCH_ACTIVITY_CHANGED.equals(action) ||
SearchManager.INTENT_ACTION_SEARCHABLES_CHANGED.equals(action)) {
if (mCallbacks != null) {
@@ -631,6 +641,20 @@ public class LauncherModel extends BroadcastReceiver {
}
}
+ private void forceReload() {
+ synchronized (mLock) {
+ // Stop any existing loaders first, so they don't set mAllAppsLoaded or
+ // mWorkspaceLoaded to true later
+ stopLoaderLocked();
+ mAllAppsLoaded = false;
+ mWorkspaceLoaded = false;
+ }
+ // Do this here because if the launcher activity is running it will be restarted.
+ // If it's not running startLoaderFromBackground will merely tell it that it needs
+ // to reload.
+ startLoaderFromBackground();
+ }
+
/**
* When the launcher is in the background, it's possible for it to miss paired
* configuration changes. So whenever we trigger the loader from the background
@@ -653,6 +677,20 @@ public class LauncherModel extends BroadcastReceiver {
}
}
+ // If there is already a loader task running, tell it to stop.
+ // returns true if isLaunching() was true on the old task
+ private boolean stopLoaderLocked() {
+ boolean isLaunching = false;
+ LoaderTask oldTask = mLoaderTask;
+ if (oldTask != null) {
+ if (oldTask.isLaunching()) {
+ isLaunching = true;
+ }
+ oldTask.stopLocked();
+ }
+ return isLaunching;
+ }
+
public void startLoader(Context context, boolean isLaunching) {
synchronized (mLock) {
if (DEBUG_LOADERS) {
@@ -662,14 +700,8 @@ public class LauncherModel extends BroadcastReceiver {
// Don't bother to start the thread if we know it's not going to do anything
if (mCallbacks != null && mCallbacks.get() != null) {
// If there is already one running, tell it to stop.
- LoaderTask oldTask = mLoaderTask;
- if (oldTask != null) {
- if (oldTask.isLaunching()) {
- // don't downgrade isLaunching if we're already running
- isLaunching = true;
- }
- oldTask.stopLocked();
- }
+ // also, don't downgrade isLaunching if we're already running
+ isLaunching = isLaunching || stopLoaderLocked();
mLoaderTask = new LoaderTask(context, isLaunching);
sWorkerThread.setPriority(Thread.NORM_PRIORITY);
sWorker.post(mLoaderTask);
@@ -721,10 +753,12 @@ public class LauncherModel extends BroadcastReceiver {
if (!mWorkspaceLoaded) {
loadWorkspace();
- if (mStopped) {
- return;
+ synchronized (LoaderTask.this) {
+ if (mStopped) {
+ return;
+ }
+ mWorkspaceLoaded = true;
}
- mWorkspaceLoaded = true;
}
// Bind the workspace
@@ -1289,10 +1323,12 @@ public class LauncherModel extends BroadcastReceiver {
}
if (!mAllAppsLoaded) {
loadAllAppsByBatch();
- if (mStopped) {
- return;
+ synchronized (LoaderTask.this) {
+ if (mStopped) {
+ return;
+ }
+ mAllAppsLoaded = true;
}
- mAllAppsLoaded = true;
} else {
onlyBindAllApps();
}