summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/gallery3d/app/AbstractGalleryActivity.java8
-rw-r--r--src/com/android/gallery3d/app/ActivityState.java13
-rw-r--r--src/com/android/gallery3d/app/AlbumPage.java42
-rw-r--r--src/com/android/gallery3d/app/AlbumSetPage.java6
-rw-r--r--src/com/android/gallery3d/app/CropImage.java12
-rw-r--r--src/com/android/gallery3d/app/Gallery.java2
-rw-r--r--src/com/android/gallery3d/app/GalleryActionBar.java103
-rw-r--r--src/com/android/gallery3d/app/MovieActivity.java22
-rw-r--r--src/com/android/gallery3d/app/PhotoPage.java120
-rw-r--r--src/com/android/gallery3d/app/PickerActivity.java10
-rw-r--r--src/com/android/gallery3d/app/SinglePhotoDataAdapter.java1
-rw-r--r--src/com/android/gallery3d/app/StateManager.java4
-rw-r--r--src/com/android/gallery3d/data/ComboAlbum.java6
-rw-r--r--src/com/android/gallery3d/data/LocalMergeAlbum.java13
-rw-r--r--src/com/android/gallery3d/data/UnlockImage.java2
-rw-r--r--src/com/android/gallery3d/filtershow/FilterShowActivity.java6
-rw-r--r--src/com/android/gallery3d/filtershow/cache/ImageLoader.java18
-rw-r--r--src/com/android/gallery3d/filtershow/filters/ImageFilterExposure.java (renamed from src/com/android/gallery3d/filtershow/filters/ImageFilterBrightness.java)7
-rw-r--r--src/com/android/gallery3d/ui/ActionModeHandler.java17
-rw-r--r--src/com/android/gallery3d/ui/MenuExecutor.java5
-rw-r--r--src/com/android/gallery3d/ui/PopupList.java2
-rw-r--r--src/com/android/gallery3d/ui/SurfaceTextureScreenNail.java1
22 files changed, 254 insertions, 166 deletions
diff --git a/src/com/android/gallery3d/app/AbstractGalleryActivity.java b/src/com/android/gallery3d/app/AbstractGalleryActivity.java
index b11db39a1..5e779cd59 100644
--- a/src/com/android/gallery3d/app/AbstractGalleryActivity.java
+++ b/src/com/android/gallery3d/app/AbstractGalleryActivity.java
@@ -17,6 +17,7 @@
package com.android.gallery3d.app;
import android.annotation.TargetApi;
+import android.app.Activity;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -27,12 +28,11 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Configuration;
import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
import android.view.Window;
import android.view.WindowManager;
-import com.actionbarsherlock.app.SherlockActivity;
-import com.actionbarsherlock.view.Menu;
-import com.actionbarsherlock.view.MenuItem;
import com.android.gallery3d.R;
import com.android.gallery3d.common.ApiHelper;
import com.android.gallery3d.data.BitmapPool;
@@ -42,7 +42,7 @@ import com.android.gallery3d.ui.GLRoot;
import com.android.gallery3d.ui.GLRootView;
import com.android.gallery3d.util.ThreadPool;
-public class AbstractGalleryActivity extends SherlockActivity implements GalleryContext {
+public class AbstractGalleryActivity extends Activity implements GalleryContext {
@SuppressWarnings("unused")
private static final String TAG = "AbstractGalleryActivity";
private GLRootView mGLRootView;
diff --git a/src/com/android/gallery3d/app/ActivityState.java b/src/com/android/gallery3d/app/ActivityState.java
index 2eb480a20..75327e477 100644
--- a/src/com/android/gallery3d/app/ActivityState.java
+++ b/src/com/android/gallery3d/app/ActivityState.java
@@ -16,6 +16,7 @@
package com.android.gallery3d.app;
+import android.app.ActionBar;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
@@ -27,14 +28,12 @@ import android.os.BatteryManager;
import android.os.Bundle;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import android.view.Window;
import android.view.WindowManager;
-import com.actionbarsherlock.app.ActionBar;
-import com.actionbarsherlock.app.SherlockActivity;
-import com.actionbarsherlock.view.Menu;
-import com.actionbarsherlock.view.MenuInflater;
-import com.actionbarsherlock.view.MenuItem;
import com.android.gallery3d.R;
import com.android.gallery3d.ui.GLView;
import com.android.gallery3d.util.GalleryUtils;
@@ -167,7 +166,7 @@ abstract public class ActivityState {
// should only be called by StateManager
void resume() {
AbstractGalleryActivity activity = mActivity;
- ActionBar actionBar = ((SherlockActivity) activity).getSupportActionBar();
+ ActionBar actionBar = activity.getActionBar();
if (actionBar != null) {
if ((mFlags & FLAG_HIDE_ACTION_BAR) != 0) {
actionBar.hide();
@@ -240,6 +239,6 @@ abstract public class ActivityState {
}
protected MenuInflater getSupportMenuInflater() {
- return ((SherlockActivity) mActivity).getSupportMenuInflater();
+ return mActivity.getMenuInflater();
}
}
diff --git a/src/com/android/gallery3d/app/AlbumPage.java b/src/com/android/gallery3d/app/AlbumPage.java
index addee0ed7..6736d350c 100644
--- a/src/com/android/gallery3d/app/AlbumPage.java
+++ b/src/com/android/gallery3d/app/AlbumPage.java
@@ -24,11 +24,11 @@ import android.net.Uri;
import android.os.Bundle;
import android.os.Vibrator;
import android.provider.MediaStore;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import android.widget.Toast;
-import com.actionbarsherlock.view.Menu;
-import com.actionbarsherlock.view.MenuInflater;
-import com.actionbarsherlock.view.MenuItem;
import com.android.gallery3d.R;
import com.android.gallery3d.common.Utils;
import com.android.gallery3d.data.DataManager;
@@ -56,7 +56,7 @@ import com.android.gallery3d.util.GalleryUtils;
import com.android.gallery3d.util.MediaSetUtils;
public class AlbumPage extends ActivityState implements GalleryActionBar.ClusterRunner,
- SelectionManager.SelectionListener, MediaSet.SyncListener {
+ SelectionManager.SelectionListener, MediaSet.SyncListener, GalleryActionBar.OnAlbumModeSelectedListener {
@SuppressWarnings("unused")
private static final String TAG = "AlbumPage";
@@ -399,7 +399,9 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
boolean enableHomeButton = (mActivity.getStateManager().getStateCount() > 1) |
mParentMediaSetString != null;
- mActivity.getGalleryActionBar().setDisplayOptions(enableHomeButton, true);
+ GalleryActionBar actionBar = mActivity.getGalleryActionBar();
+ actionBar.setDisplayOptions(enableHomeButton, false);
+ actionBar.enableAlbumModeMenu(GalleryActionBar.ALBUM_GRID_MODE_SELECTED, this);
// Set the reload bit here to prevent it exit this page in clearLoadingBit().
setLoadingBit(BIT_LOADING_RELOAD);
@@ -423,6 +425,7 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
mAlbumDataAdapter.pause();
mAlbumView.pause();
DetailsHelper.pause();
+ mActivity.getGalleryActionBar().disableAlbumModeMenu(true);
if (mSyncTask != null) {
mSyncTask.cancel();
@@ -560,6 +563,17 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
mSlotView.getSlotRect(slotIndex, mRootPane));
}
+ private void switchToFilmstrip() {
+ if (mAlbumDataAdapter.size() < 1) return;
+ int targetPhoto = mSlotView.getVisibleStart();
+ prepareAnimationBackToFilmstrip(targetPhoto);
+ if(mLaunchedFromPhotoPage) {
+ onBackPressed();
+ } else {
+ pickPhoto(targetPhoto, true);
+ }
+ }
+
@Override
protected boolean onItemSelected(MenuItem item) {
switch (item.getItemId()) {
@@ -587,17 +601,6 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
SlideshowPage.class, REQUEST_SLIDESHOW, data);
return true;
}
- case R.id.action_filmstrip: {
- if (mAlbumDataAdapter.size() < 1) return true;
- int targetPhoto = mSlotView.getVisibleStart();
- prepareAnimationBackToFilmstrip(targetPhoto);
- if(mLaunchedFromPhotoPage) {
- onBackPressed();
- } else {
- pickPhoto(targetPhoto, true);
- }
- return true;
- }
case R.id.action_details: {
if (mShowDetails) {
hideDetails();
@@ -750,4 +753,11 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
}
}
}
+
+ @Override
+ public void onAlbumModeSelected(int mode) {
+ if (mode == GalleryActionBar.ALBUM_FILMSTRIP_MODE_SELECTED) {
+ switchToFilmstrip();
+ }
+ }
}
diff --git a/src/com/android/gallery3d/app/AlbumSetPage.java b/src/com/android/gallery3d/app/AlbumSetPage.java
index daadc3210..a7d5d15ae 100644
--- a/src/com/android/gallery3d/app/AlbumSetPage.java
+++ b/src/com/android/gallery3d/app/AlbumSetPage.java
@@ -24,15 +24,15 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Vibrator;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.Toast;
-import com.actionbarsherlock.view.Menu;
-import com.actionbarsherlock.view.MenuInflater;
-import com.actionbarsherlock.view.MenuItem;
import com.android.gallery3d.R;
import com.android.gallery3d.common.Utils;
import com.android.gallery3d.data.DataManager;
diff --git a/src/com/android/gallery3d/app/CropImage.java b/src/com/android/gallery3d/app/CropImage.java
index 10048fc27..2b7450441 100644
--- a/src/com/android/gallery3d/app/CropImage.java
+++ b/src/com/android/gallery3d/app/CropImage.java
@@ -17,6 +17,7 @@
package com.android.gallery3d.app;
import android.annotation.TargetApi;
+import android.app.ActionBar;
import android.app.ProgressDialog;
import android.app.WallpaperManager;
import android.content.ContentValues;
@@ -39,13 +40,12 @@ import android.os.Message;
import android.provider.MediaStore;
import android.provider.MediaStore.Images;
import android.util.FloatMath;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
-import com.actionbarsherlock.app.ActionBar;
-import com.actionbarsherlock.view.Menu;
-import com.actionbarsherlock.view.MenuItem;
-import com.actionbarsherlock.view.Window;
import com.android.camera.Util;
import com.android.gallery3d.R;
import com.android.gallery3d.common.ApiHelper;
@@ -170,7 +170,7 @@ public class CropImage extends AbstractGalleryActivity {
mCropView = new CropView(this);
getGLRoot().setContentPane(mCropView);
- ActionBar actionBar = getSupportActionBar();
+ ActionBar actionBar = getActionBar();
int displayOptions = ActionBar.DISPLAY_HOME_AS_UP
| ActionBar.DISPLAY_SHOW_TITLE;
actionBar.setDisplayOptions(displayOptions, displayOptions);
@@ -233,7 +233,7 @@ public class CropImage extends AbstractGalleryActivity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
- getSupportMenuInflater().inflate(R.menu.crop, menu);
+ getMenuInflater().inflate(R.menu.crop, menu);
return true;
}
diff --git a/src/com/android/gallery3d/app/Gallery.java b/src/com/android/gallery3d/app/Gallery.java
index 488c6c12f..dadb32c48 100644
--- a/src/com/android/gallery3d/app/Gallery.java
+++ b/src/com/android/gallery3d/app/Gallery.java
@@ -26,9 +26,9 @@ import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.OpenableColumns;
+import android.view.Window;
import android.widget.Toast;
-import com.actionbarsherlock.view.Window;
import com.android.gallery3d.R;
import com.android.gallery3d.common.Utils;
import com.android.gallery3d.data.DataManager;
diff --git a/src/com/android/gallery3d/app/GalleryActionBar.java b/src/com/android/gallery3d/app/GalleryActionBar.java
index 2630c3e4a..620add631 100644
--- a/src/com/android/gallery3d/app/GalleryActionBar.java
+++ b/src/com/android/gallery3d/app/GalleryActionBar.java
@@ -17,23 +17,25 @@
package com.android.gallery3d.app;
import android.annotation.TargetApi;
+import android.app.ActionBar;
+import android.app.ActionBar.OnMenuVisibilityListener;
+import android.app.ActionBar.OnNavigationListener;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.res.Resources;
+import android.text.TextUtils.TruncateAt;
import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
+import android.widget.ShareActionProvider;
import android.widget.TextView;
-import com.actionbarsherlock.app.ActionBar;
-import com.actionbarsherlock.app.ActionBar.OnMenuVisibilityListener;
-import com.actionbarsherlock.app.ActionBar.OnNavigationListener;
-import com.actionbarsherlock.view.Menu;
-import com.actionbarsherlock.view.MenuItem;
-import com.actionbarsherlock.widget.ShareActionProvider;
import com.android.gallery3d.R;
import com.android.gallery3d.common.ApiHelper;
@@ -53,10 +55,20 @@ public class GalleryActionBar implements OnNavigationListener {
private int mCurrentIndex;
private ClusterAdapter mAdapter = new ClusterAdapter();
+ private AlbumModeAdapter mAlbumModeAdapter;
+ private OnAlbumModeSelectedListener mAlbumModeListener;
+ private CharSequence [] mAlbumModes;
+ public static final int ALBUM_FILMSTRIP_MODE_SELECTED = 0;
+ public static final int ALBUM_GRID_MODE_SELECTED = 1;
+
public interface ClusterRunner {
public void doCluster(int id);
}
+ public interface OnAlbumModeSelectedListener {
+ public void onAlbumModeSelected(int mode);
+ }
+
private static class ActionItem {
public int action;
public boolean enabled;
@@ -123,6 +135,45 @@ public class GalleryActionBar implements OnNavigationListener {
}
}
+ private class AlbumModeAdapter extends BaseAdapter {
+ @Override
+ public int getCount() {
+ return mAlbumModes.length;
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mAlbumModes[position];
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ private View getView(CharSequence label, View convertView,
+ ViewGroup parent, boolean ellipsize) {
+ if (convertView == null) {
+ convertView = mInflater.inflate(R.layout.action_bar_text,
+ parent, false);
+ }
+ TextView view = (TextView) convertView;
+ view.setEllipsize(ellipsize ? TruncateAt.END : null);
+ view.setText(label);
+ return convertView;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ return getView(mActionBar.getTitle(), convertView, parent, true);
+ }
+
+ @Override
+ public View getDropDownView(int position, View convertView, ViewGroup parent) {
+ return getView((CharSequence) getItem(position), convertView, parent, false);
+ }
+ }
+
public static String getClusterByTypeString(Context context, int type) {
for (ActionItem item : sClusterItems) {
if (item.action == type) {
@@ -133,7 +184,7 @@ public class GalleryActionBar implements OnNavigationListener {
}
public GalleryActionBar(AbstractGalleryActivity activity) {
- mActionBar = activity.getSupportActionBar();
+ mActionBar = activity.getActionBar();
mContext = activity.getAndroidContext();
mActivity = activity;
mInflater = ((Activity) mActivity).getLayoutInflater();
@@ -202,6 +253,33 @@ public class GalleryActionBar implements OnNavigationListener {
}
}
+ public void enableAlbumModeMenu(int selected, OnAlbumModeSelectedListener listener) {
+ if (mActionBar != null) {
+ if (mAlbumModeAdapter == null) {
+ // Initialize the album mode options if they haven't been already
+ Resources res = mActivity.getResources();
+ mAlbumModes = new CharSequence[] {
+ res.getString(R.string.switch_photo_filmstrip),
+ res.getString(R.string.switch_photo_grid)};
+ mAlbumModeAdapter = new AlbumModeAdapter();
+ }
+ mAlbumModeListener = null;
+ mActionBar.setListNavigationCallbacks(mAlbumModeAdapter, this);
+ mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
+ mActionBar.setSelectedNavigationItem(selected);
+ mAlbumModeListener = listener;
+ }
+ }
+
+ public void disableAlbumModeMenu(boolean hideMenu) {
+ if (mActionBar != null) {
+ mAlbumModeListener = null;
+ if (hideMenu) {
+ mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
+ }
+ }
+ }
+
public void showClusterDialog(final ClusterRunner clusterRunner) {
createDialogData();
final ArrayList<Integer> actions = mActions;
@@ -283,12 +361,17 @@ public class GalleryActionBar implements OnNavigationListener {
@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
- if (itemPosition != mCurrentIndex && mClusterRunner != null) {
+ if (itemPosition != mCurrentIndex && mClusterRunner != null
+ || mAlbumModeListener != null) {
// Need to lock rendering when operations invoked by system UI (main thread) are
// modifying slot data used in GL thread for rendering.
mActivity.getGLRoot().lockRenderThread();
try {
- mClusterRunner.doCluster(sClusterItems[itemPosition].action);
+ if (mAlbumModeListener != null) {
+ mAlbumModeListener.onAlbumModeSelected(itemPosition);
+ } else {
+ mClusterRunner.doCluster(sClusterItems[itemPosition].action);
+ }
} finally {
mActivity.getGLRoot().unlockRenderThread();
}
@@ -303,7 +386,7 @@ public class GalleryActionBar implements OnNavigationListener {
private ShareActionProvider mShareActionProvider;
public void createActionBarMenu(int menuRes, Menu menu) {
- mActivity.getSupportMenuInflater().inflate(menuRes, menu);
+ mActivity.getMenuInflater().inflate(menuRes, menu);
mActionBarMenu = menu;
mSharePanoramaMenuItem = menu.findItem(R.id.action_share_panorama);
diff --git a/src/com/android/gallery3d/app/MovieActivity.java b/src/com/android/gallery3d/app/MovieActivity.java
index d725e6d12..3123644c7 100644
--- a/src/com/android/gallery3d/app/MovieActivity.java
+++ b/src/com/android/gallery3d/app/MovieActivity.java
@@ -17,6 +17,8 @@
package com.android.gallery3d.app;
import android.annotation.TargetApi;
+import android.app.ActionBar;
+import android.app.Activity;
import android.content.AsyncQueryHandler;
import android.content.ContentResolver;
import android.content.Intent;
@@ -31,15 +33,13 @@ import android.os.Bundle;
import android.provider.MediaStore;
import android.provider.OpenableColumns;
import android.view.KeyEvent;
+import android.view.Menu;
+import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
+import android.widget.ShareActionProvider;
-import com.actionbarsherlock.app.ActionBar;
-import com.actionbarsherlock.app.SherlockActivity;
-import com.actionbarsherlock.view.Menu;
-import com.actionbarsherlock.view.MenuItem;
-import com.actionbarsherlock.widget.ShareActionProvider;
import com.android.gallery3d.R;
import com.android.gallery3d.common.ApiHelper;
import com.android.gallery3d.common.Utils;
@@ -51,7 +51,7 @@ import com.android.gallery3d.common.Utils;
* to set the action bar logo so the playback process looks more seamlessly integrated with
* the original activity.
*/
-public class MovieActivity extends SherlockActivity {
+public class MovieActivity extends Activity {
@SuppressWarnings("unused")
private static final String TAG = "MovieActivity";
public static final String KEY_LOGO_BITMAP = "logo-bitmap";
@@ -75,8 +75,8 @@ public class MovieActivity extends SherlockActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- getSherlock().requestFeature(Window.FEATURE_ACTION_BAR);
- getSherlock().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
+ requestWindowFeature(Window.FEATURE_ACTION_BAR);
+ requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
setContentView(R.layout.movie_view);
View rootView = findViewById(R.id.movie_view_root);
@@ -119,14 +119,14 @@ public class MovieActivity extends SherlockActivity {
private void setActionBarLogoFromIntent(Intent intent) {
Bitmap logo = intent.getParcelableExtra(KEY_LOGO_BITMAP);
if (logo != null) {
- getSupportActionBar().setLogo(
+ getActionBar().setLogo(
new BitmapDrawable(getResources(), logo));
}
}
private void initializeActionBar(Intent intent) {
mUri = intent.getData();
- final ActionBar actionBar = getSupportActionBar();
+ final ActionBar actionBar = getActionBar();
setActionBarLogoFromIntent(intent);
actionBar.setDisplayOptions(
ActionBar.DISPLAY_HOME_AS_UP,
@@ -166,7 +166,7 @@ public class MovieActivity extends SherlockActivity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
- getSupportMenuInflater().inflate(R.menu.movie, menu);
+ getMenuInflater().inflate(R.menu.movie, menu);
// Document says EXTRA_STREAM should be a content: Uri
// So, we only share the video if it's "content:".
diff --git a/src/com/android/gallery3d/app/PhotoPage.java b/src/com/android/gallery3d/app/PhotoPage.java
index 74dc7a95d..8e2356e7b 100644
--- a/src/com/android/gallery3d/app/PhotoPage.java
+++ b/src/com/android/gallery3d/app/PhotoPage.java
@@ -17,6 +17,7 @@
package com.android.gallery3d.app;
import android.annotation.TargetApi;
+import android.app.ActionBar.OnMenuVisibilityListener;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
@@ -31,17 +32,17 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
+import android.view.Menu;
+import android.view.MenuItem;
import android.view.animation.AccelerateInterpolator;
import android.widget.RelativeLayout;
import android.widget.Toast;
-import com.actionbarsherlock.app.ActionBar.OnMenuVisibilityListener;
-import com.actionbarsherlock.view.Menu;
-import com.actionbarsherlock.view.MenuItem;
import com.android.gallery3d.R;
import com.android.gallery3d.anim.FloatAnimation;
import com.android.gallery3d.common.ApiHelper;
import com.android.gallery3d.common.Utils;
+import com.android.gallery3d.data.ComboAlbum;
import com.android.gallery3d.data.DataManager;
import com.android.gallery3d.data.FilterDeleteSet;
import com.android.gallery3d.data.MediaDetails;
@@ -78,7 +79,7 @@ import com.android.gallery3d.util.LightCycleHelper;
public class PhotoPage extends ActivityState implements
PhotoView.Listener, OrientationManager.Listener, AppBridge.Server,
- PhotoPageBottomControls.Delegate {
+ PhotoPageBottomControls.Delegate, GalleryActionBar.OnAlbumModeSelectedListener {
private static final String TAG = "PhotoPage";
private static final int MSG_HIDE_BARS = 1;
@@ -88,9 +89,8 @@ public class PhotoPage extends ActivityState implements
private static final int MSG_UPDATE_ACTION_BAR = 5;
private static final int MSG_UNFREEZE_GLROOT = 6;
private static final int MSG_WANT_BARS = 7;
- private static final int MSG_REFRESH_GRID_BUTTON = 8;
- private static final int MSG_REFRESH_BOTTOM_CONTROLS = 9;
- private static final int MSG_ON_CAMERA_CENTER = 10;
+ private static final int MSG_REFRESH_BOTTOM_CONTROLS = 8;
+ private static final int MSG_ON_CAMERA_CENTER = 9;
private static final int HIDE_BARS_TIMEOUT = 3500;
private static final int UNFREEZE_GLROOT_TIMEOUT = 250;
@@ -260,10 +260,6 @@ public class PhotoPage extends ActivityState implements
hideBars();
break;
}
- case MSG_REFRESH_GRID_BUTTON: {
- setGridButtonVisibility(mPhotoView.getFilmMode());
- break;
- }
case MSG_REFRESH_BOTTOM_CONTROLS: {
if (mBottomControls != null) mBottomControls.refresh();
break;
@@ -330,7 +326,6 @@ public class PhotoPage extends ActivityState implements
mStartedFromAlbumPage =
data.getInt(KEY_ALBUMPAGE_TRANSITION,
MSG_ALBUMPAGE_NONE) == MSG_ALBUMPAGE_STARTED;
- setGridButtonVisibility(!mStartedFromAlbumPage);
if (mSetPathString != null) {
mAppBridge = (AppBridge) data.getParcelable(KEY_APP_BRIDGE);
if (mAppBridge != null) {
@@ -375,6 +370,11 @@ public class PhotoPage extends ActivityState implements
MediaSet originalSet = mActivity.getDataManager()
.getMediaSet(mSetPathString);
+ if (originalSet instanceof ComboAlbum) {
+ // Use the name of the camera album rather than the default
+ // ComboAlbum behavior
+ ((ComboAlbum) originalSet).useNameOfChild(1);
+ }
mSelectionManager.setSourceMediaSet(originalSet);
mSetPathString = "/filter/delete/{" + mSetPathString + "}";
mMediaSet = (FilterDeleteSet) mActivity.getDataManager()
@@ -517,6 +517,7 @@ public class PhotoPage extends ActivityState implements
NfcAdapter adapter = NfcAdapter.getDefaultAdapter(mActivity);
if (adapter != null) {
+ adapter.setBeamPushUris(null, mActivity);
adapter.setBeamPushUrisCallback(new CreateBeamUrisCallback() {
@Override
public Uri[] createBeamUris(NfcEvent event) {
@@ -555,7 +556,10 @@ public class PhotoPage extends ActivityState implements
private void launchPhotoEditor() {
MediaItem current = mModel.getMediaItem(0);
- if (current == null) return;
+ if (current == null || (current.getSupportedOperations()
+ & MediaObject.SUPPORT_EDIT) == 0) {
+ return;
+ }
Intent intent = new Intent(ACTION_NEXTGEN_EDIT);
intent.setData(mActivity.getDataManager().getContentUri(current.getPath())).setFlags(
@@ -591,7 +595,6 @@ public class PhotoPage extends ActivityState implements
}
updateMenuOperations();
- updateTitle();
if (mBottomControls != null) mBottomControls.refresh();
if (mShowDetails) {
mDetailsHelper.reloadDetails();
@@ -602,25 +605,12 @@ public class PhotoPage extends ActivityState implements
}
}
- private void updateTitle() {
- if (mCurrentPhoto == null) return;
- boolean showTitle = mActivity.getAndroidContext().getResources().getBoolean(
- R.bool.show_action_bar_title);
- if (showTitle && mCurrentPhoto.getName() != null) {
- mActionBar.setTitle(mCurrentPhoto.getName());
- } else {
- mActionBar.setTitle("");
- }
- }
-
private void updateMenuOperations() {
Menu menu = mActionBar.getMenu();
// it could be null if onCreateActionBar has not been called yet
if (menu == null) return;
- setGridButtonVisibility(mPhotoView.getFilmMode());
-
MenuItem item = menu.findItem(R.id.action_slideshow);
if (item != null) {
item.setVisible((mSecureAlbum == null) && canDoSlideShow());
@@ -800,7 +790,7 @@ public class PhotoPage extends ActivityState implements
mActionBar.createActionBarMenu(R.menu.photo, menu);
mHaveImageEditor = GalleryUtils.isEditorAvailable(mActivity, "image/*");
updateMenuOperations();
- updateTitle();
+ mActionBar.setTitle(mMediaSet != null ? mMediaSet.getName() : "");
return true;
}
@@ -826,6 +816,34 @@ public class PhotoPage extends ActivityState implements
public void onProgressStart() {}
};
+ private void switchToGrid() {
+ if (mStartedFromAlbumPage) {
+ onUpPressed();
+ } else {
+ if (mOriginalSetPathString == null) return;
+ preparePhotoFallbackView();
+ Bundle data = new Bundle(getData());
+ data.putString(AlbumPage.KEY_MEDIA_PATH, mOriginalSetPathString);
+ data.putString(AlbumPage.KEY_PARENT_MEDIA_PATH,
+ mActivity.getDataManager().getTopSetPath(
+ DataManager.INCLUDE_ALL));
+
+ // We only show cluster menu in the first AlbumPage in stack
+ // TODO: Enable this when running from the camera app
+ boolean inAlbum = mActivity.getStateManager().hasStateClass(AlbumPage.class);
+ data.putBoolean(AlbumPage.KEY_SHOW_CLUSTER_MENU, !inAlbum
+ && mAppBridge == null);
+
+ data.putBoolean(PhotoPage.KEY_APP_BRIDGE, mAppBridge != null);
+
+ // Account for live preview being first item
+ mActivity.getTransitionStore().put(KEY_RETURN_INDEX_HINT,
+ mAppBridge != null ? mCurrentIndex - 1 : mCurrentIndex);
+
+ mActivity.getStateManager().startState(AlbumPage.class, data);
+ }
+ }
+
@Override
protected boolean onItemSelected(MenuItem item) {
if (mModel == null) return true;
@@ -848,33 +866,6 @@ public class PhotoPage extends ActivityState implements
onUpPressed();
return true;
}
- case R.id.action_grid: {
- if (mStartedFromAlbumPage) {
- onUpPressed();
- } else {
- preparePhotoFallbackView();
- Bundle data = new Bundle(getData());
- data.putString(AlbumPage.KEY_MEDIA_PATH, mOriginalSetPathString);
- data.putString(AlbumPage.KEY_PARENT_MEDIA_PATH,
- mActivity.getDataManager().getTopSetPath(
- DataManager.INCLUDE_ALL));
-
- // We only show cluster menu in the first AlbumPage in stack
- // TODO: Enable this when running from the camera app
- boolean inAlbum = mActivity.getStateManager().hasStateClass(AlbumPage.class);
- data.putBoolean(AlbumPage.KEY_SHOW_CLUSTER_MENU, !inAlbum
- && mAppBridge == null);
-
- data.putBoolean(PhotoPage.KEY_APP_BRIDGE, mAppBridge != null);
-
- // Account for live preview being first item
- mActivity.getTransitionStore().put(KEY_RETURN_INDEX_HINT,
- mAppBridge != null ? mCurrentIndex - 1 : mCurrentIndex);
-
- mActivity.getStateManager().startState(AlbumPage.class, data);
- }
- return true;
- }
case R.id.action_slideshow: {
Bundle data = new Bundle();
data.putString(SlideshowPage.KEY_SET_PATH, mMediaSet.getPath().toString());
@@ -1176,6 +1167,7 @@ public class PhotoPage extends ActivityState implements
mPhotoView.pause();
mHandler.removeMessages(MSG_HIDE_BARS);
mActionBar.removeOnMenuVisibilityListener(mMenuVisibilityListener);
+ mActionBar.disableAlbumModeMenu(true);
onCommitDeleteImage();
mMenuExecutor.pause();
@@ -1187,15 +1179,7 @@ public class PhotoPage extends ActivityState implements
mActivity.getGLRoot().unfreeze();
}
- private void setGridButtonVisibility(boolean enabled) {
- Menu menu = mActionBar.getMenu();
- if (menu == null) return;
- MenuItem item = menu.findItem(R.id.action_grid);
- if (item != null) item.setVisible((mSecureAlbum == null) && enabled);
- }
-
public void onFilmModeChanged(boolean enabled) {
- mHandler.sendEmptyMessage(MSG_REFRESH_GRID_BUTTON);
mHandler.sendEmptyMessage(MSG_REFRESH_BOTTOM_CONTROLS);
if (enabled) {
mHandler.removeMessages(MSG_HIDE_BARS);
@@ -1265,8 +1249,9 @@ public class PhotoPage extends ActivityState implements
mModel.resume();
mPhotoView.resume();
mActionBar.setDisplayOptions(
- ((mSecureAlbum == null) && (mSetPathString != null)), true);
+ ((mSecureAlbum == null) && (mSetPathString != null)), false);
mActionBar.addOnMenuVisibilityListener(mMenuVisibilityListener);
+ mActionBar.enableAlbumModeMenu(GalleryActionBar.ALBUM_FILMSTRIP_MODE_SELECTED, this);
if (!mShowBars) {
mActionBar.hide();
mActivity.getGLRoot().setLightsOutMode(true);
@@ -1317,4 +1302,11 @@ public class PhotoPage extends ActivityState implements
return mModel.getCurrentIndex();
}
}
+
+ @Override
+ public void onAlbumModeSelected(int mode) {
+ if (mode == GalleryActionBar.ALBUM_GRID_MODE_SELECTED) {
+ switchToGrid();
+ }
+ }
}
diff --git a/src/com/android/gallery3d/app/PickerActivity.java b/src/com/android/gallery3d/app/PickerActivity.java
index 1eb95d0c6..d5bb218ea 100644
--- a/src/com/android/gallery3d/app/PickerActivity.java
+++ b/src/com/android/gallery3d/app/PickerActivity.java
@@ -17,13 +17,13 @@
package com.android.gallery3d.app;
import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
+import android.view.Window;
-import com.actionbarsherlock.view.Menu;
-import com.actionbarsherlock.view.MenuInflater;
-import com.actionbarsherlock.view.MenuItem;
-import com.actionbarsherlock.view.Window;
import com.android.gallery3d.R;
import com.android.gallery3d.ui.GLRootView;
@@ -62,7 +62,7 @@ public class PickerActivity extends AbstractGalleryActivity
@Override
public boolean onCreateOptionsMenu(Menu menu) {
- MenuInflater inflater = getSupportMenuInflater();
+ MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.pickup, menu);
return true;
}
diff --git a/src/com/android/gallery3d/app/SinglePhotoDataAdapter.java b/src/com/android/gallery3d/app/SinglePhotoDataAdapter.java
index 60817556d..2f6f16f3a 100644
--- a/src/com/android/gallery3d/app/SinglePhotoDataAdapter.java
+++ b/src/com/android/gallery3d/app/SinglePhotoDataAdapter.java
@@ -33,7 +33,6 @@ import com.android.gallery3d.ui.SynchronizedHandler;
import com.android.gallery3d.ui.TileImageViewAdapter;
import com.android.gallery3d.util.Future;
import com.android.gallery3d.util.FutureListener;
-import com.android.gallery3d.util.LightCycleHelper;
import com.android.gallery3d.util.ThreadPool;
public class SinglePhotoDataAdapter extends TileImageViewAdapter
diff --git a/src/com/android/gallery3d/app/StateManager.java b/src/com/android/gallery3d/app/StateManager.java
index e22fdf2c7..c041b0e6f 100644
--- a/src/com/android/gallery3d/app/StateManager.java
+++ b/src/com/android/gallery3d/app/StateManager.java
@@ -21,9 +21,9 @@ import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Parcelable;
+import android.view.Menu;
+import android.view.MenuItem;
-import com.actionbarsherlock.view.Menu;
-import com.actionbarsherlock.view.MenuItem;
import com.android.gallery3d.common.Utils;
import java.util.Stack;
diff --git a/src/com/android/gallery3d/data/ComboAlbum.java b/src/com/android/gallery3d/data/ComboAlbum.java
index e100dc3e6..cadd9f8af 100644
--- a/src/com/android/gallery3d/data/ComboAlbum.java
+++ b/src/com/android/gallery3d/data/ComboAlbum.java
@@ -27,7 +27,7 @@ public class ComboAlbum extends MediaSet implements ContentListener {
@SuppressWarnings("unused")
private static final String TAG = "ComboAlbum";
private final MediaSet[] mSets;
- private final String mName;
+ private String mName;
public ComboAlbum(Path path, MediaSet[] mediaSets, String name) {
super(path, nextVersionNumber());
@@ -76,6 +76,10 @@ public class ComboAlbum extends MediaSet implements ContentListener {
return mName;
}
+ public void useNameOfChild(int i) {
+ if (i < mSets.length) mName = mSets[i].getName();
+ }
+
@Override
public long reload() {
boolean changed = false;
diff --git a/src/com/android/gallery3d/data/LocalMergeAlbum.java b/src/com/android/gallery3d/data/LocalMergeAlbum.java
index 14c1c6e6b..cbaf82fff 100644
--- a/src/com/android/gallery3d/data/LocalMergeAlbum.java
+++ b/src/com/android/gallery3d/data/LocalMergeAlbum.java
@@ -59,6 +59,7 @@ public class LocalMergeAlbum extends MediaSet implements ContentListener {
for (MediaSet set : mSources) {
set.addContentListener(this);
}
+ reload();
}
@Override
@@ -123,17 +124,7 @@ public class LocalMergeAlbum extends MediaSet implements ContentListener {
// First find the nearest mark position <= start.
SortedMap<Integer, int[]> head = mIndex.headMap(start + 1);
- int markPos;
- try {
- markPos = head.lastKey();
- } catch (NoSuchElementException e) {
- Log.e(TAG, "getMediaItem("+start+","+count+") failed");
- Log.e(TAG, "mSources: ");
- for (MediaSet set : mSources) {
- Log.e(TAG, "\t"+set.getPath());
- }
- throw e;
- }
+ int markPos = head.lastKey();
int[] subPos = head.get(markPos).clone();
MediaItem[] slot = new MediaItem[mSources.length];
diff --git a/src/com/android/gallery3d/data/UnlockImage.java b/src/com/android/gallery3d/data/UnlockImage.java
index 19189e42d..ed3b485c4 100644
--- a/src/com/android/gallery3d/data/UnlockImage.java
+++ b/src/com/android/gallery3d/data/UnlockImage.java
@@ -24,7 +24,7 @@ public class UnlockImage extends ActionImage {
private static final String TAG = "UnlockImage";
public UnlockImage(Path path, GalleryApp application) {
- super(path, application, R.drawable.ic_lockscreen_handle_normal);
+ super(path, application, R.drawable.placeholder_locked);
}
@Override
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
index eb95d7452..4570eb017 100644
--- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java
+++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
@@ -753,14 +753,14 @@ public class FilterShowActivity extends Activity implements OnItemClickListener
mImageShow.setVisibility(View.VISIBLE);
mImageShow.setShowControls(true);
ImagePreset preset = mImageShow.getImagePreset();
- ImageFilter filter = preset.getFilter("Brightness");
+ ImageFilter filter = preset.getFilter("Exposure");
if (filter == null) {
- ImageFilterBrightness bright = new ImageFilterBrightness();
+ ImageFilterExposure bright = new ImageFilterExposure();
ImagePreset copy = new ImagePreset(preset);
copy.add(bright);
copy.setHistoryName(bright.getName());
copy.setIsFx(false);
- filter = copy.getFilter("Brightness");
+ filter = copy.getFilter("Exposure");
mImageShow.setImagePreset(copy);
}
mImageShow.setCurrentFilter(filter);
diff --git a/src/com/android/gallery3d/filtershow/cache/ImageLoader.java b/src/com/android/gallery3d/filtershow/cache/ImageLoader.java
index 19a841a4b..2c8fff9a2 100644
--- a/src/com/android/gallery3d/filtershow/cache/ImageLoader.java
+++ b/src/com/android/gallery3d/filtershow/cache/ImageLoader.java
@@ -7,6 +7,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.util.Vector;
+import com.android.gallery3d.common.Utils;
import com.android.gallery3d.filtershow.FilterShowActivity;
import com.android.gallery3d.filtershow.HistoryAdapter;
import com.android.gallery3d.filtershow.imageshow.ImageShow;
@@ -17,6 +18,7 @@ import com.android.gallery3d.R;
import android.content.Context;
import android.content.res.Resources;
import android.database.Cursor;
+import android.database.sqlite.SQLiteException;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
@@ -58,11 +60,17 @@ public class ImageLoader {
}
private int getOrientation(Uri uri) {
- Cursor cursor = mContext.getContentResolver().query(uri,
- new String[] {
- MediaStore.Images.ImageColumns.ORIENTATION
- },
- null, null, null);
+ Cursor cursor = null;
+ try {
+ cursor = mContext.getContentResolver().query(uri,
+ new String[] {
+ MediaStore.Images.ImageColumns.ORIENTATION
+ },
+ null, null, null);
+ } catch (SQLiteException e){
+ Utils.closeSilently(cursor);
+ return ExifInterface.ORIENTATION_UNDEFINED;
+ }
if (cursor.getCount() != 1) {
return -1;
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterBrightness.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterExposure.java
index ab61a00c2..85b6e4f6b 100644
--- a/src/com/android/gallery3d/filtershow/filters/ImageFilterBrightness.java
+++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterExposure.java
@@ -3,14 +3,15 @@ package com.android.gallery3d.filtershow.filters;
import android.graphics.Bitmap;
-public class ImageFilterBrightness extends ImageFilter {
+public class ImageFilterExposure extends ImageFilter {
- public ImageFilterBrightness() {
- mName = "Brightness";
+ public ImageFilterExposure() {
+ mName = "Exposure";
}
native protected void nativeApplyFilter(Bitmap bitmap, int w, int h, float bright);
+ @Override
public void apply(Bitmap bitmap) {
int w = bitmap.getWidth();
int h = bitmap.getHeight();
diff --git a/src/com/android/gallery3d/ui/ActionModeHandler.java b/src/com/android/gallery3d/ui/ActionModeHandler.java
index e4b3b4125..c738f66e9 100644
--- a/src/com/android/gallery3d/ui/ActionModeHandler.java
+++ b/src/com/android/gallery3d/ui/ActionModeHandler.java
@@ -17,21 +17,21 @@
package com.android.gallery3d.ui;
import android.annotation.TargetApi;
+import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.nfc.NfcAdapter;
import android.os.Handler;
+import android.view.ActionMode;
+import android.view.ActionMode.Callback;
import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
+import android.widget.ShareActionProvider;
+import android.widget.ShareActionProvider.OnShareTargetSelectedListener;
-import com.actionbarsherlock.app.SherlockActivity;
-import com.actionbarsherlock.view.ActionMode;
-import com.actionbarsherlock.view.ActionMode.Callback;
-import com.actionbarsherlock.view.Menu;
-import com.actionbarsherlock.view.MenuItem;
-import com.actionbarsherlock.widget.ShareActionProvider;
-import com.actionbarsherlock.widget.ShareActionProvider.OnShareTargetSelectedListener;
import com.android.gallery3d.R;
import com.android.gallery3d.app.AbstractGalleryActivity;
import com.android.gallery3d.common.ApiHelper;
@@ -86,7 +86,7 @@ public class ActionModeHandler implements Callback, PopupList.OnPopupItemClickLi
}
public void startActionMode() {
- SherlockActivity a = mActivity;
+ Activity a = mActivity;
mActionMode = a.startActionMode(this);
View customView = LayoutInflater.from(a).inflate(
R.layout.action_mode, null);
@@ -249,6 +249,7 @@ public class ActionModeHandler implements Callback, PopupList.OnPopupItemClickLi
@TargetApi(ApiHelper.VERSION_CODES.JELLY_BEAN)
private void setNfcBeamPushUris(Uri[] uris) {
if (mNfcAdapter != null && ApiHelper.HAS_SET_BEAM_PUSH_URIS) {
+ mNfcAdapter.setBeamPushUrisCallback(null, mActivity);
mNfcAdapter.setBeamPushUris(uris, mActivity);
}
}
diff --git a/src/com/android/gallery3d/ui/MenuExecutor.java b/src/com/android/gallery3d/ui/MenuExecutor.java
index f866688e6..1f9d0c434 100644
--- a/src/com/android/gallery3d/ui/MenuExecutor.java
+++ b/src/com/android/gallery3d/ui/MenuExecutor.java
@@ -26,13 +26,12 @@ import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
+import android.view.Menu;
+import android.view.MenuItem;
-import com.actionbarsherlock.view.Menu;
-import com.actionbarsherlock.view.MenuItem;
import com.android.gallery3d.R;
import com.android.gallery3d.app.AbstractGalleryActivity;
import com.android.gallery3d.app.CropImage;
-import com.android.gallery3d.common.ApiHelper;
import com.android.gallery3d.common.Utils;
import com.android.gallery3d.data.DataManager;
import com.android.gallery3d.data.MediaItem;
diff --git a/src/com/android/gallery3d/ui/PopupList.java b/src/com/android/gallery3d/ui/PopupList.java
index dd6269380..248f50b25 100644
--- a/src/com/android/gallery3d/ui/PopupList.java
+++ b/src/com/android/gallery3d/ui/PopupList.java
@@ -159,7 +159,7 @@ public class PopupList {
R.drawable.menu_dropdown_panel_holo_dark));
mContentList = new ListView(mContext, null,
- com.actionbarsherlock.R.attr.dropDownListViewStyle);
+ android.R.attr.dropDownListViewStyle);
mContentList.setAdapter(new ItemDataAdapter());
mContentList.setOnItemClickListener(mOnItemClickListener);
popup.setContentView(mContentList);
diff --git a/src/com/android/gallery3d/ui/SurfaceTextureScreenNail.java b/src/com/android/gallery3d/ui/SurfaceTextureScreenNail.java
index ee5fe3dcb..1930e3877 100644
--- a/src/com/android/gallery3d/ui/SurfaceTextureScreenNail.java
+++ b/src/com/android/gallery3d/ui/SurfaceTextureScreenNail.java
@@ -60,6 +60,7 @@ public abstract class SurfaceTextureScreenNail implements ScreenNail,
@TargetApi(ApiHelper.VERSION_CODES.ICE_CREAM_SANDWICH)
private static void releaseSurfaceTexture(SurfaceTexture st) {
+ st.setOnFrameAvailableListener(null);
if (ApiHelper.HAS_RELEASE_SURFACE_TEXTURE) {
st.release();
}