diff options
Diffstat (limited to 'src')
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(); } |