OSDN Git Service

Don't try to create an app state instance during restore.
authorChris Wren <cwren@android.com>
Mon, 24 Nov 2014 21:57:54 +0000 (16:57 -0500)
committerChris Wren <cwren@android.com>
Mon, 24 Nov 2014 21:57:54 +0000 (16:57 -0500)
Added a static utility function to get the DeviceProfile instead.

Bug: 18504164
Change-Id: Ia510a84f1c195e58acf3bf4d1f6a42c739fdd413

src/com/android/launcher3/LauncherAppState.java
src/com/android/launcher3/LauncherBackupHelper.java

index ec914d8..b7c45a3 100644 (file)
@@ -195,6 +195,13 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks {
 
     @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
     DeviceProfile initDynamicGrid(Context context) {
+        mDynamicGrid = createDynamicGrid(context, mDynamicGrid);
+        mDynamicGrid.getDeviceProfile().addCallback(this);
+        return mDynamicGrid.getDeviceProfile();
+    }
+
+    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
+    static DynamicGrid createDynamicGrid(Context context, DynamicGrid dynamicGrid) {
         // Determine the dynamic grid properties
         WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
         Display display = wm.getDefaultDisplay();
@@ -204,27 +211,27 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks {
         DisplayMetrics dm = new DisplayMetrics();
         display.getMetrics(dm);
 
-        if (mDynamicGrid == null) {
+        if (dynamicGrid == null) {
             Point smallestSize = new Point();
             Point largestSize = new Point();
             display.getCurrentSizeRange(smallestSize, largestSize);
 
-            mDynamicGrid = new DynamicGrid(context,
+            dynamicGrid = new DynamicGrid(context,
                     context.getResources(),
                     Math.min(smallestSize.x, smallestSize.y),
                     Math.min(largestSize.x, largestSize.y),
                     realSize.x, realSize.y,
                     dm.widthPixels, dm.heightPixels);
-            mDynamicGrid.getDeviceProfile().addCallback(this);
         }
 
         // Update the icon size
-        DeviceProfile grid = mDynamicGrid.getDeviceProfile();
+        DeviceProfile grid = dynamicGrid.getDeviceProfile();
         grid.updateFromConfiguration(context, context.getResources(),
                 realSize.x, realSize.y,
                 dm.widthPixels, dm.heightPixels);
-        return grid;
+        return dynamicGrid;
     }
+
     public DynamicGrid getDynamicGrid() {
         return mDynamicGrid;
     }
index c260fbc..4374347 100644 (file)
@@ -371,16 +371,9 @@ public class LauncherBackupHelper implements BackupHelper {
         if (mCurrentProfile != null) {
             return mCurrentProfile;
         }
-        LauncherAppState.setApplicationContext(mContext.getApplicationContext());
-        LauncherAppState app = LauncherAppState.getInstance();
-
-        DeviceProfile profile;
-        if (app.getDynamicGrid() == null) {
-            // Initialize the grid
-            profile = app.initDynamicGrid(mContext);
-        } else {
-            profile = app.getDynamicGrid().getDeviceProfile();
-        }
+        final Context applicationContext = mContext.getApplicationContext();
+        DeviceProfile profile = LauncherAppState.createDynamicGrid(applicationContext, null)
+                .getDeviceProfile();
 
         mCurrentProfile = new DeviceProfieData();
         mCurrentProfile.desktopRows = profile.numRows;