From b6284920898627fa787900a99fc97b71a0c77574 Mon Sep 17 00:00:00 2001 From: Owen Lin Date: Fri, 26 Aug 2011 20:45:35 +0800 Subject: Launch Gallery from review intent. Change-Id: Iaa2e9bdfde3ac6566dd65464ece82f4a5ced6831 fix: 3462852 --- src/com/android/gallery3d/app/ActivityState.java | 1 + src/com/android/gallery3d/app/Gallery.java | 3 ++- src/com/android/gallery3d/app/StateManager.java | 22 ++++++++++++++++++---- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/com/android/gallery3d/app/ActivityState.java b/src/com/android/gallery3d/app/ActivityState.java index bfacc5484..c8aa2150e 100644 --- a/src/com/android/gallery3d/app/ActivityState.java +++ b/src/com/android/gallery3d/app/ActivityState.java @@ -97,6 +97,7 @@ abstract public class ActivityState { actionBar.setDisplayOptions( stateCount == 1 ? 0 : ActionBar.DISPLAY_HOME_AS_UP, ActionBar.DISPLAY_HOME_AS_UP); + actionBar.setHomeButtonEnabled(true); } activity.invalidateOptionsMenu(); diff --git a/src/com/android/gallery3d/app/Gallery.java b/src/com/android/gallery3d/app/Gallery.java index 2c5263b03..4408dbaef 100644 --- a/src/com/android/gallery3d/app/Gallery.java +++ b/src/com/android/gallery3d/app/Gallery.java @@ -25,7 +25,6 @@ import com.android.gallery3d.data.Path; import com.android.gallery3d.ui.GLRoot; import com.android.gallery3d.util.GalleryUtils; -import android.app.ActionBar; import android.content.ContentResolver; import android.content.Intent; import android.net.Uri; @@ -106,6 +105,7 @@ public final class Gallery extends AbstractGalleryActivity { data.putInt(KEY_TYPE_BITS, typeBits); data.putString(AlbumSetPage.KEY_MEDIA_PATH, getDataManager().getTopSetPath(typeBits)); + getStateManager().setLaunchGalleryOnTop(true); getStateManager().startState(AlbumSetPage.class, data); } @@ -124,6 +124,7 @@ public final class Gallery extends AbstractGalleryActivity { private void startViewAction(Intent intent) { Boolean slideshow = intent.getBooleanExtra(EXTRA_SLIDESHOW, false); + getStateManager().setLaunchGalleryOnTop(true); if (slideshow) { getActionBar().hide(); DataManager manager = getDataManager(); diff --git a/src/com/android/gallery3d/app/StateManager.java b/src/com/android/gallery3d/app/StateManager.java index b551f693a..caa6e7b58 100644 --- a/src/com/android/gallery3d/app/StateManager.java +++ b/src/com/android/gallery3d/app/StateManager.java @@ -36,10 +36,12 @@ public class StateManager { private static final String KEY_DATA = "data"; private static final String KEY_STATE = "bundle"; private static final String KEY_CLASS = "class"; + private static final String KEY_LAUNCH_GALLERY_ON_TOP = "launch-gallery-on-top"; private GalleryActivity mContext; private Stack mStack = new Stack(); private ActivityState.ResultEntry mResult; + private boolean mLaunchGalleryOnTop = false; public StateManager(GalleryActivity context) { mContext = context; @@ -65,6 +67,10 @@ public class StateManager { if (mIsResumed) state.resume(); } + public void setLaunchGalleryOnTop(boolean enabled) { + mLaunchGalleryOnTop = enabled; + } + public void startStateForResult(Class klass, int requestCode, Bundle data) { Log.v(TAG, "startStateForResult " + klass + ", " + requestCode); @@ -122,8 +128,15 @@ public class StateManager { public boolean itemSelected(MenuItem item) { if (!mStack.isEmpty()) { - if (mStack.size() > 1 && item.getItemId() == android.R.id.home) { - getTopState().onBackPressed(); + if (item.getItemId() == android.R.id.home) { + if (mStack.size() > 1) { + getTopState().onBackPressed(); + } else if (mLaunchGalleryOnTop) { + Activity activity = (Activity) mContext; + Intent intent = new Intent(activity, Gallery.class) + .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + ((Activity) mContext).startActivity(intent); + } return true; } else { return getTopState().onItemSelected(item); @@ -210,8 +223,8 @@ public class StateManager { @SuppressWarnings("unchecked") public void restoreFromState(Bundle inState) { Log.v(TAG, "restoreFromState"); + mLaunchGalleryOnTop = inState.getBoolean(KEY_LAUNCH_GALLERY_ON_TOP, false); Parcelable list[] = inState.getParcelableArray(KEY_MAIN); - for (Parcelable parcelable : list) { Bundle bundle = (Bundle) parcelable; Class klass = @@ -235,8 +248,9 @@ public class StateManager { public void saveState(Bundle outState) { Log.v(TAG, "saveState"); - Parcelable list[] = new Parcelable[mStack.size()]; + outState.putBoolean(KEY_LAUNCH_GALLERY_ON_TOP, mLaunchGalleryOnTop); + Parcelable list[] = new Parcelable[mStack.size()]; int i = 0; for (StateEntry entry : mStack) { Bundle bundle = new Bundle(); -- cgit v1.2.3