Tweak locking in launcher so mLock isn't held while the slow stuff happens.

Bug 2652948

Change-Id: I9d386395278830ead5deda17b8b09e0dcfeff989
diff --git a/src/com/android/launcher2/IconCache.java b/src/com/android/launcher2/IconCache.java
index 04762e9..4bb7d08 100644
--- a/src/com/android/launcher2/IconCache.java
+++ b/src/com/android/launcher2/IconCache.java
@@ -100,24 +100,28 @@
     }
 
     public Bitmap getIcon(Intent intent) {
-        final ResolveInfo resolveInfo = mPackageManager.resolveActivity(intent, 0);
-        ComponentName component = intent.getComponent();
+        synchronized (mCache) {
+            final ResolveInfo resolveInfo = mPackageManager.resolveActivity(intent, 0);
+            ComponentName component = intent.getComponent();
 
-        if (resolveInfo == null || component == null) {
-            return mDefaultIcon;
+            if (resolveInfo == null || component == null) {
+                return mDefaultIcon;
+            }
+
+            CacheEntry entry = cacheLocked(component, resolveInfo);
+            return entry.icon;
         }
-
-        CacheEntry entry = cacheLocked(component, resolveInfo);
-        return entry.icon;
     }
 
     public Bitmap getIcon(ComponentName component, ResolveInfo resolveInfo) {
-        if (resolveInfo == null || component == null) {
-            return null;
-        }
+        synchronized (mCache) {
+            if (resolveInfo == null || component == null) {
+                return null;
+            }
 
-        CacheEntry entry = cacheLocked(component, resolveInfo);
-        return entry.icon;
+            CacheEntry entry = cacheLocked(component, resolveInfo);
+            return entry.icon;
+        }
     }
 
     private CacheEntry cacheLocked(ComponentName componentName, ResolveInfo info) {
diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java
index d5b5859..a867200 100644
--- a/src/com/android/launcher2/LauncherModel.java
+++ b/src/com/android/launcher2/LauncherModel.java
@@ -73,6 +73,7 @@
     private boolean mBeforeFirstLoad = true; // only access this from main thread
     private WeakReference<Callbacks> mCallbacks;
 
+    private final Object mAllAppsListLock = new Object();
     private AllAppsList mAllAppsList;
     private IconCache mIconCache;
 
@@ -306,7 +307,7 @@
         ArrayList<ApplicationInfo> removed = null;
         ArrayList<ApplicationInfo> modified = null;
 
-        synchronized (mLock) {
+        synchronized (mAllAppsListLock) {
             if (mBeforeFirstLoad) {
                 // If we haven't even loaded yet, don't bother, since we'll just pick
                 // up the changes.
@@ -1047,7 +1048,7 @@
                 int i=0;
                 int batchSize = -1;
                 while (i < N && !mStopped) {
-                    synchronized (mLock) {
+                    synchronized (mAllAppsListLock) {
                         if (i == 0) {
                             // This needs to happen inside the same lock block as when we
                             // prepare the first batch for bindAllApplications.  Otherwise