summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/app
diff options
context:
space:
mode:
authorRay Chen <raychen@google.com>2012-03-06 17:24:28 +0800
committerRay Chen <raychen@google.com>2012-03-15 08:50:35 +0800
commitf3f7f56af19f3f04a7daefd16981e5f55e39053d (patch)
treef932b44f1959b36ab2a5cdd62a5bb4453ac05512 /src/com/android/gallery3d/app
parent762f8e20f608bc805d9e9f01fa2c4925f4735cf0 (diff)
downloadandroid_packages_apps_Snap-f3f7f56af19f3f04a7daefd16981e5f55e39053d.tar.gz
android_packages_apps_Snap-f3f7f56af19f3f04a7daefd16981e5f55e39053d.tar.bz2
android_packages_apps_Snap-f3f7f56af19f3f04a7daefd16981e5f55e39053d.zip
Fix 3462852 [UI] When linking from Camera preview - App icon with 'Up' arrow should go to next level up.
Some changes in this CL: 1. ActivityState can decide whether to enable home button and show up arrow 2. ActivityState can handle home_up event on its own 3. Support getContentUri in LocalAlbum (Image/Video Roll) and LocalMergeAlbum (Camera Roll) 4. Gallery supports view action for AlbumPage (Camera Roll) Change-Id: I85a75cdce9cbc2a877651fdec34a0180ed8e785c
Diffstat (limited to 'src/com/android/gallery3d/app')
-rw-r--r--src/com/android/gallery3d/app/ActivityState.java7
-rw-r--r--src/com/android/gallery3d/app/AlbumPage.java21
-rw-r--r--src/com/android/gallery3d/app/Gallery.java5
-rw-r--r--src/com/android/gallery3d/app/GalleryActionBar.java11
-rw-r--r--src/com/android/gallery3d/app/PhotoPage.java32
-rw-r--r--src/com/android/gallery3d/app/StateManager.java16
6 files changed, 63 insertions, 29 deletions
diff --git a/src/com/android/gallery3d/app/ActivityState.java b/src/com/android/gallery3d/app/ActivityState.java
index 8cff1326e..443e2bd29 100644
--- a/src/com/android/gallery3d/app/ActivityState.java
+++ b/src/com/android/gallery3d/app/ActivityState.java
@@ -141,12 +141,7 @@ abstract public class ActivityState {
actionBar.show();
}
int stateCount = mActivity.getStateManager().getStateCount();
- actionBar.setDisplayOptions(
- stateCount == 1 ? 0 : ActionBar.DISPLAY_HOME_AS_UP,
- ActionBar.DISPLAY_HOME_AS_UP);
- actionBar.setHomeButtonEnabled(
- (actionBar.getDisplayOptions() & ActionBar.DISPLAY_HOME_AS_UP) != 0);
- actionBar.setDisplayShowTitleEnabled(true);
+ mActivity.getGalleryActionBar().setDisplayOptions(stateCount > 1, true);
// Default behavior, this can be overridden in ActivityState's onResume.
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
}
diff --git a/src/com/android/gallery3d/app/AlbumPage.java b/src/com/android/gallery3d/app/AlbumPage.java
index ead2a2005..411464e86 100644
--- a/src/com/android/gallery3d/app/AlbumPage.java
+++ b/src/com/android/gallery3d/app/AlbumPage.java
@@ -63,6 +63,7 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
private static final String TAG = "AlbumPage";
public static final String KEY_MEDIA_PATH = "media-path";
+ public static final String KEY_PARENT_MEDIA_PATH = "parent-media-path";
public static final String KEY_SET_CENTER = "set-center";
public static final String KEY_AUTO_SELECT_ALL = "auto-select-all";
public static final String KEY_SHOW_CLUSTER_MENU = "cluster-menu";
@@ -79,6 +80,7 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
private boolean mIsActive = false;
private AlbumView mAlbumView;
private Path mMediaSetPath;
+ private String mParentMediaSetString;
private AlbumDataAdapter mAlbumDataAdapter;
@@ -314,6 +316,11 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
mIsActive = true;
setContentPane(mRootPane);
+ Path path = mMediaSet.getPath();
+ boolean enableHomeButton = (mActivity.getStateManager().getStateCount() > 1) |
+ mParentMediaSetString != null;
+ mActivity.getGalleryActionBar().setDisplayOptions(enableHomeButton, true);
+
// Set the reload bit here to prevent it exit this page in clearLoadingBit().
setLoadingBit(BIT_LOADING_RELOAD);
mAlbumDataAdapter.resume();
@@ -391,6 +398,7 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
private void initializeData(Bundle data) {
mMediaSetPath = Path.fromString(data.getString(KEY_MEDIA_PATH));
+ mParentMediaSetString = data.getString(KEY_PARENT_MEDIA_PATH);
mMediaSet = mActivity.getDataManager().getMediaSet(mMediaSetPath);
if (mMediaSet == null) {
Utils.fail("MediaSet is null. Path = %s", mMediaSetPath);
@@ -462,6 +470,19 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
@Override
protected boolean onItemSelected(MenuItem item) {
switch (item.getItemId()) {
+ case android.R.id.home: {
+ if (mActivity.getStateManager().getStateCount() > 1) {
+ onBackPressed();
+ } else if (mParentMediaSetString != null) {
+ Activity a = (Activity) mActivity;
+ int flags = Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK;
+ Intent intent = new Intent()
+ .setClass(a, Gallery.class)
+ .setFlags(flags);
+ a.startActivity(intent);
+ }
+ return true;
+ }
case R.id.action_cancel:
mActivity.getStateManager().finishState(this);
return true;
diff --git a/src/com/android/gallery3d/app/Gallery.java b/src/com/android/gallery3d/app/Gallery.java
index c45c603fb..624083494 100644
--- a/src/com/android/gallery3d/app/Gallery.java
+++ b/src/com/android/gallery3d/app/Gallery.java
@@ -118,7 +118,6 @@ public final class Gallery extends AbstractGalleryActivity implements OnCancelLi
data.putInt(KEY_TYPE_BITS, typeBits);
data.putString(AlbumSetPage.KEY_MEDIA_PATH,
getDataManager().getTopSetPath(typeBits));
- getStateManager().setLaunchGalleryOnTop(true);
getStateManager().startState(AlbumSetPage.class, data);
}
@@ -137,7 +136,6 @@ public final class Gallery extends AbstractGalleryActivity implements OnCancelLi
private void startViewAction(Intent intent) {
Boolean slideshow = intent.getBooleanExtra(EXTRA_SLIDESHOW, false);
- getStateManager().setLaunchGalleryOnTop(true);
if (slideshow) {
getActionBar().hide();
DataManager manager = getDataManager();
@@ -168,7 +166,6 @@ public final class Gallery extends AbstractGalleryActivity implements OnCancelLi
data.putInt(KEY_TYPE_BITS, typeBits);
data.putString(AlbumSetPage.KEY_MEDIA_PATH,
getDataManager().getTopSetPath(typeBits));
- getStateManager().setLaunchGalleryOnTop(true);
getStateManager().startState(AlbumSetPage.class, data);
} else if (contentType.startsWith(
ContentResolver.CURSOR_DIR_BASE_TYPE)) {
@@ -186,6 +183,8 @@ public final class Gallery extends AbstractGalleryActivity implements OnCancelLi
if (mediaSet != null) {
if (mediaSet.isLeafAlbum()) {
data.putString(AlbumPage.KEY_MEDIA_PATH, setPath.toString());
+ data.putString(AlbumPage.KEY_PARENT_MEDIA_PATH,
+ dm.getTopSetPath(DataManager.INCLUDE_ALL));
getStateManager().startState(AlbumPage.class, data);
} else {
data.putString(AlbumSetPage.KEY_MEDIA_PATH, setPath.toString());
diff --git a/src/com/android/gallery3d/app/GalleryActionBar.java b/src/com/android/gallery3d/app/GalleryActionBar.java
index 93b6e8b1e..35cb8b4cb 100644
--- a/src/com/android/gallery3d/app/GalleryActionBar.java
+++ b/src/com/android/gallery3d/app/GalleryActionBar.java
@@ -210,6 +210,17 @@ public class GalleryActionBar implements ActionBar.OnNavigationListener {
}).create().show();
}
+ public void setDisplayOptions(boolean displayHomeAsUp, boolean showTitle) {
+ if (mActionBar != null) {
+ int options = (displayHomeAsUp ? ActionBar.DISPLAY_HOME_AS_UP : 0) |
+ (showTitle ? ActionBar.DISPLAY_SHOW_TITLE : 0);
+ mActionBar.setDisplayOptions(
+ options,
+ ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_TITLE);
+ mActionBar.setHomeButtonEnabled(displayHomeAsUp);
+ }
+ }
+
public void setTitle(String title) {
if (mActionBar != null) mActionBar.setTitle(title);
}
diff --git a/src/com/android/gallery3d/app/PhotoPage.java b/src/com/android/gallery3d/app/PhotoPage.java
index 3aaa26336..8040a2fc6 100644
--- a/src/com/android/gallery3d/app/PhotoPage.java
+++ b/src/com/android/gallery3d/app/PhotoPage.java
@@ -20,6 +20,7 @@ import android.app.ActionBar;
import android.app.ActionBar.OnMenuVisibilityListener;
import android.app.Activity;
import android.content.ActivityNotFoundException;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
@@ -104,6 +105,7 @@ public class PhotoPage extends ActivityState
private MenuExecutor mMenuExecutor;
private boolean mIsActive;
private ShareActionProvider mShareActionProvider;
+ private String mSetPathString;
public static interface Model extends PhotoView.Model {
public void resume();
@@ -176,16 +178,16 @@ public class PhotoPage extends ActivityState
mRootPane.addComponent(mPhotoView);
mApplication = (GalleryApp)((Activity) mActivity).getApplication();
- String setPathString = data.getString(KEY_MEDIA_SET_PATH);
+ mSetPathString = data.getString(KEY_MEDIA_SET_PATH);
Path itemPath = Path.fromString(data.getString(KEY_MEDIA_ITEM_PATH));
- if (setPathString != null) {
- mMediaSet = mActivity.getDataManager().getMediaSet(setPathString);
+ if (mSetPathString != null) {
+ mMediaSet = mActivity.getDataManager().getMediaSet(mSetPathString);
mCurrentIndex = data.getInt(KEY_INDEX_HINT, 0);
mMediaSet = (MediaSet)
- mActivity.getDataManager().getMediaObject(setPathString);
+ mActivity.getDataManager().getMediaObject(mSetPathString);
if (mMediaSet == null) {
- Log.w(TAG, "failed to restore " + setPathString);
+ Log.w(TAG, "failed to restore " + mSetPathString);
}
PhotoDataAdapter pda = new PhotoDataAdapter(
mActivity, mPhotoView, mMediaSet, itemPath, mCurrentIndex);
@@ -438,6 +440,24 @@ public class PhotoPage extends ActivityState
DataManager manager = mActivity.getDataManager();
int action = item.getItemId();
switch (action) {
+ case android.R.id.home: {
+ if (mSetPathString != null) {
+ if (mActivity.getStateManager().getStateCount() > 1) {
+ onBackPressed();
+ } else {
+ Activity a = (Activity) mActivity;
+ Uri uri = mActivity.getDataManager().getContentUri(
+ Path.fromString(mSetPathString));
+ Intent intent = new Intent(Intent.ACTION_VIEW)
+ .setClass(a, Gallery.class)
+ .setDataAndType(uri, ContentResolver.CURSOR_DIR_BASE_TYPE)
+ .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
+ Intent.FLAG_ACTIVITY_NEW_TASK);
+ a.startActivity(intent);
+ }
+ }
+ return true;
+ }
case R.id.action_slideshow: {
Bundle data = new Bundle();
data.putString(SlideshowPage.KEY_SET_PATH, mMediaSet.getPath().toString());
@@ -610,6 +630,8 @@ public class PhotoPage extends ActivityState
if (mMenuVisibilityListener == null) {
mMenuVisibilityListener = new MyMenuVisibilityListener();
}
+ mActivity.getGalleryActionBar().setDisplayOptions(mSetPathString != null, true);
+
mActionBar.addOnMenuVisibilityListener(mMenuVisibilityListener);
onUserInteraction();
}
diff --git a/src/com/android/gallery3d/app/StateManager.java b/src/com/android/gallery3d/app/StateManager.java
index b91eac644..5866be948 100644
--- a/src/com/android/gallery3d/app/StateManager.java
+++ b/src/com/android/gallery3d/app/StateManager.java
@@ -37,12 +37,10 @@ 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<StateEntry> mStack = new Stack<StateEntry>();
private ActivityState.ResultEntry mResult;
- private boolean mLaunchGalleryOnTop = false;
public StateManager(GalleryActivity context) {
mContext = context;
@@ -68,10 +66,6 @@ public class StateManager {
if (mIsResumed) state.resume();
}
- public void setLaunchGalleryOnTop(boolean enabled) {
- mLaunchGalleryOnTop = enabled;
- }
-
public void startStateForResult(Class<? extends ActivityState> klass,
int requestCode, Bundle data) {
Log.v(TAG, "startStateForResult " + klass + ", " + requestCode);
@@ -135,18 +129,12 @@ public class StateManager {
public boolean itemSelected(MenuItem item) {
if (!mStack.isEmpty()) {
+ if (getTopState().onItemSelected(item)) return true;
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);
}
}
return false;
@@ -235,7 +223,6 @@ 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;
@@ -261,7 +248,6 @@ public class StateManager {
public void saveState(Bundle outState) {
Log.v(TAG, "saveState");
- outState.putBoolean(KEY_LAUNCH_GALLERY_ON_TOP, mLaunchGalleryOnTop);
Parcelable list[] = new Parcelable[mStack.size()];
int i = 0;
for (StateEntry entry : mStack) {