OSDN Git Service

Reskin: Fix stability bugs introduced by reskin
authorBobby Georgescu <georgescu@google.com>
Wed, 12 Sep 2012 20:48:50 +0000 (13:48 -0700)
committerThe Android Automerger <android-build@android.com>
Thu, 13 Sep 2012 00:33:24 +0000 (17:33 -0700)
Bug: 7150348
Bug: 7144206
Bug: 7050303

If PhotoPage is launched/resumed on a completely empty
album (for instance, if Gallery was opened to the Camera
folder and paused, all photos were deleted via the Camera
app, and then Gallery is resumed), bail out of PhotoPage
since it cannot handle this. Also fixes an NPE.

Change-Id: I162ff5ad149c322704c8af7d4705d87ae6c6098a

src/com/android/gallery3d/app/AlbumPage.java
src/com/android/gallery3d/app/PhotoPage.java

index cbf9c1a..363b876 100644 (file)
@@ -560,7 +560,7 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
     }
 
     private void prepareAnimationBackToFilmstrip(int slotIndex) {
-        if (!mAlbumDataAdapter.isActive(slotIndex)) return;
+        if (mAlbumDataAdapter == null || !mAlbumDataAdapter.isActive(slotIndex)) return;
         prepareFadeOutTexture();
         TransitionStore transitions = mActivity.getTransitionStore();
         transitions.put(PhotoPage.KEY_INDEX_HINT, slotIndex);
index 0f927df..d7f701a 100644 (file)
@@ -245,6 +245,51 @@ public class PhotoPage extends ActivityState implements
         mOrientationManager.addListener(this);
         mActivity.getGLRoot().setOrientationSource(mOrientationManager);
 
+        mHandler = new SynchronizedHandler(mActivity.getGLRoot()) {
+            @Override
+            public void handleMessage(Message message) {
+                switch (message.what) {
+                    case MSG_HIDE_BARS: {
+                        hideBars();
+                        break;
+                    }
+                    case MSG_REFRESH_GRID_BUTTON: {
+                        setGridButtonVisibility(mPhotoView.getFilmMode());
+                        break;
+                    }
+                    case MSG_REFRESH_EDIT_BUTTON: {
+                        refreshEditButton();
+                        break;
+                    }
+                    case MSG_LOCK_ORIENTATION: {
+                        mOrientationManager.lockOrientation();
+                        break;
+                    }
+                    case MSG_UNLOCK_ORIENTATION: {
+                        mOrientationManager.unlockOrientation();
+                        break;
+                    }
+                    case MSG_ON_FULL_SCREEN_CHANGED: {
+                        mAppBridge.onFullScreenChanged(message.arg1 == 1);
+                        break;
+                    }
+                    case MSG_UPDATE_ACTION_BAR: {
+                        updateBars();
+                        break;
+                    }
+                    case MSG_WANT_BARS: {
+                        wantBars();
+                        break;
+                    }
+                    case MSG_UNFREEZE_GLROOT: {
+                        mActivity.getGLRoot().unfreeze();
+                        break;
+                    }
+                    default: throw new AssertionError(message.what);
+                }
+            }
+        };
+
         mSetPathString = data.getString(KEY_MEDIA_SET_PATH);
         mOriginalSetPathString = mSetPathString;
         mNfcAdapter = NfcAdapter.getDefaultAdapter(mActivity.getAndroidContext());
@@ -306,8 +351,13 @@ public class PhotoPage extends ActivityState implements
                 Log.w(TAG, "failed to restore " + mSetPathString);
             }
             if (itemPath == null) {
-               itemPath = mMediaSet.getMediaItem(mCurrentIndex, 1)
-                       .get(0).getPath();
+                mMediaSet.reload();
+                if (mMediaSet.getMediaItemCount() > 0) {
+                    itemPath = mMediaSet.getMediaItem(mCurrentIndex, 1)
+                        .get(0).getPath();
+                } else {
+                    return;
+                }
             }
             PhotoDataAdapter pda = new PhotoDataAdapter(
                     mActivity, mPhotoView, mMediaSet, itemPath, mCurrentIndex,
@@ -357,51 +407,6 @@ public class PhotoPage extends ActivityState implements
             updateCurrentPhoto(mediaItem);
         }
 
-        mHandler = new SynchronizedHandler(mActivity.getGLRoot()) {
-            @Override
-            public void handleMessage(Message message) {
-                switch (message.what) {
-                    case MSG_HIDE_BARS: {
-                        hideBars();
-                        break;
-                    }
-                    case MSG_REFRESH_GRID_BUTTON: {
-                        setGridButtonVisibility(mPhotoView.getFilmMode());
-                        break;
-                    }
-                    case MSG_REFRESH_EDIT_BUTTON: {
-                        refreshEditButton();
-                        break;
-                    }
-                    case MSG_LOCK_ORIENTATION: {
-                        mOrientationManager.lockOrientation();
-                        break;
-                    }
-                    case MSG_UNLOCK_ORIENTATION: {
-                        mOrientationManager.unlockOrientation();
-                        break;
-                    }
-                    case MSG_ON_FULL_SCREEN_CHANGED: {
-                        mAppBridge.onFullScreenChanged(message.arg1 == 1);
-                        break;
-                    }
-                    case MSG_UPDATE_ACTION_BAR: {
-                        updateBars();
-                        break;
-                    }
-                    case MSG_WANT_BARS: {
-                        wantBars();
-                        break;
-                    }
-                    case MSG_UNFREEZE_GLROOT: {
-                        mActivity.getGLRoot().unfreeze();
-                        break;
-                    }
-                    default: throw new AssertionError(message.what);
-                }
-            }
-        };
-
         mPhotoView.setFilmMode(mStartInFilmstrip);
         setupEditButton();
     }
@@ -725,6 +730,7 @@ public class PhotoPage extends ActivityState implements
 
     @Override
     protected boolean onItemSelected(MenuItem item) {
+        if (mModel == null) return true;
         refreshHidingMessage();
         MediaItem current = mModel.getMediaItem(0);
 
@@ -1048,11 +1054,13 @@ public class PhotoPage extends ActivityState implements
 
         mActivity.getGLRoot().unfreeze();
         mHandler.removeMessages(MSG_UNFREEZE_GLROOT);
-        if (isFinishing()) preparePhotoFallbackView();
 
         DetailsHelper.pause();
+        if (mModel != null) {
+            if (isFinishing()) preparePhotoFallbackView();
+            mModel.pause();
+        }
         mPhotoView.pause();
-        mModel.pause();
         mHandler.removeMessages(MSG_HIDE_BARS);
         mActionBar.removeOnMenuVisibilityListener(mMenuVisibilityListener);
 
@@ -1118,6 +1126,10 @@ public class PhotoPage extends ActivityState implements
     protected void onResume() {
         super.onResume();
 
+        if (mModel == null) {
+            mActivity.getStateManager().finishState(this);
+            return;
+        }
         transitionFromAlbumPageIfNeeded();
 
         mActivity.getGLRoot().freeze();