summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/android/gallery3d/actionbar/ActionBarInterface.java64
-rw-r--r--src/com/android/gallery3d/actionbar/ActionBarUtils.java31
-rw-r--r--src/com/android/gallery3d/actionbar/ActionModeInterface.java46
-rw-r--r--src/com/android/gallery3d/actionbar/MenuHolder.java25
-rw-r--r--src/com/android/gallery3d/actionbar/SystemActionBarWrapper.java175
-rw-r--r--src/com/android/gallery3d/actionbar/SystemActionModeWrapper.java137
-rw-r--r--src/com/android/gallery3d/app/AlbumPage.java43
-rw-r--r--src/com/android/gallery3d/app/AlbumSetPage.java57
-rw-r--r--src/com/android/gallery3d/app/CropImage.java13
-rw-r--r--src/com/android/gallery3d/app/GalleryActionBar.java73
-rw-r--r--src/com/android/gallery3d/app/MovieActivity.java29
-rw-r--r--src/com/android/gallery3d/app/PhotoPage.java68
-rw-r--r--src/com/android/gallery3d/ui/ActionModeHandler.java89
-rw-r--r--src/com/android/gallery3d/ui/MenuExecutor.java30
-rw-r--r--src/com/android/gallery3d/util/HelpUtils.java55
15 files changed, 652 insertions, 283 deletions
diff --git a/src/com/android/gallery3d/actionbar/ActionBarInterface.java b/src/com/android/gallery3d/actionbar/ActionBarInterface.java
new file mode 100644
index 000000000..db732483f
--- /dev/null
+++ b/src/com/android/gallery3d/actionbar/ActionBarInterface.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.gallery3d.actionbar;
+
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
+import android.view.Menu;
+import android.widget.SpinnerAdapter;
+
+public interface ActionBarInterface extends MenuHolder {
+ // These values are copied from android.app.ActionBar
+ public static final int NAVIGATION_MODE_LIST = 1;
+ public static final int NAVIGATION_MODE_STANDARD = 0;
+
+ // These values are copied from android.app.ActionBar
+ public static final int DISPLAY_HOME_AS_UP = 4;
+ public static final int DISPLAY_SHOW_TITLE = 8;
+
+ public static interface OnNavigationListener {
+ public boolean onNavigationItemSelected(int itemPosition, long itemId);
+ }
+
+ public static interface OnMenuVisibilityListener {
+ public void onMenuVisibilityChanged(boolean isVisible);
+ }
+
+ public int getHeight();
+
+ public void setListNavigationCallbacks(
+ SpinnerAdapter adapter, OnNavigationListener listener);
+ public void setNavigationMode(int mode);
+ public void setSelectedNavigationItem(int index);
+
+ public void addOnMenuVisibilityListener(OnMenuVisibilityListener l);
+ public void removeOnMenuVisibilityListener(OnMenuVisibilityListener l);
+
+ public void setDisplayOptions(int options, int mask);
+ public void setHomeButtonEnabled(boolean enabled);
+ public void setTitle(String title);
+ public void setSubtitle(String subtitle);
+ public void show();
+ public void hide();
+
+ public void setShareIntent(Intent intent);
+
+ public void setLogo(Drawable logo);
+
+ public boolean createActionMenu(Menu menu, int menuResId);
+ public boolean hasShareMenuItem();
+}
diff --git a/src/com/android/gallery3d/actionbar/ActionBarUtils.java b/src/com/android/gallery3d/actionbar/ActionBarUtils.java
new file mode 100644
index 000000000..22a3f9c9c
--- /dev/null
+++ b/src/com/android/gallery3d/actionbar/ActionBarUtils.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.gallery3d.actionbar;
+
+import android.app.Activity;
+
+public class ActionBarUtils {
+
+ public static ActionBarInterface getActionBar(Activity activity) {
+ return new SystemActionBarWrapper(activity);
+ }
+
+ public static ActionModeInterface startActionMode(
+ Activity activity, ActionModeInterface.Callback callback) {
+ return new SystemActionModeWrapper(activity, callback);
+ }
+}
diff --git a/src/com/android/gallery3d/actionbar/ActionModeInterface.java b/src/com/android/gallery3d/actionbar/ActionModeInterface.java
new file mode 100644
index 000000000..32cf815f3
--- /dev/null
+++ b/src/com/android/gallery3d/actionbar/ActionModeInterface.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.gallery3d.actionbar;
+
+import android.content.Intent;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+
+public interface ActionModeInterface extends MenuHolder {
+
+ public static interface Callback {
+
+ public boolean onCreateActionMode(ActionModeInterface mode, Menu menu);
+
+ public void onDestroyActionMode(ActionModeInterface mode);
+
+ public boolean onActionItemClicked(ActionModeInterface mode, MenuItem item);
+ }
+
+ public static interface OnShareTargetSelectedListener {
+ public boolean onShareTargetSelected(Intent shareIntent);
+ }
+
+ public void inflateMenu(int operation);
+ public void setCustomView(View view);
+ public void finish();
+
+ public void setShareIntent(Intent intent);
+ public boolean hasShareButton();
+ public void setOnShareTargetSelectedListener(OnShareTargetSelectedListener listener);
+}
diff --git a/src/com/android/gallery3d/actionbar/MenuHolder.java b/src/com/android/gallery3d/actionbar/MenuHolder.java
new file mode 100644
index 000000000..2001d087a
--- /dev/null
+++ b/src/com/android/gallery3d/actionbar/MenuHolder.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.gallery3d.actionbar;
+
+import android.content.Intent;
+
+public interface MenuHolder {
+ public void setMenuItemVisible(int menuItemId, boolean visible);
+ public void setMenuItemTitle(int menuItemId, String title);
+ public void setMenuItemIntent(int menuItemId, Intent intent);
+}
diff --git a/src/com/android/gallery3d/actionbar/SystemActionBarWrapper.java b/src/com/android/gallery3d/actionbar/SystemActionBarWrapper.java
new file mode 100644
index 000000000..cf3589cef
--- /dev/null
+++ b/src/com/android/gallery3d/actionbar/SystemActionBarWrapper.java
@@ -0,0 +1,175 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.gallery3d.actionbar;
+
+import android.annotation.TargetApi;
+import android.app.ActionBar;
+import android.app.Activity;
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.widget.ShareActionProvider;
+import android.widget.SpinnerAdapter;
+
+import com.android.gallery3d.R;
+import com.android.gallery3d.common.ApiHelper;
+import com.android.gallery3d.common.Utils;
+
+import java.util.HashMap;
+
+@TargetApi(ApiHelper.VERSION_CODES.HONEYCOMB)
+public class SystemActionBarWrapper implements ActionBarInterface {
+ private final ActionBar mActionBar;
+ private final Activity mActivity;
+ private final HashMap<Integer, Object> mListenerMap = new HashMap<Integer, Object>();
+
+ private Menu mMenu;
+ private MenuItem mShareMenuItem;
+ private ShareActionProvider mShareActionProvider;
+
+ public SystemActionBarWrapper(Activity activity) {
+ mActivity = activity;
+ mActionBar = activity.getActionBar();
+ }
+
+ @Override
+ public int getHeight() {
+ return mActionBar.getHeight();
+ }
+
+ @Override
+ public void setListNavigationCallbacks(
+ SpinnerAdapter adapter, final OnNavigationListener listener) {
+ mActionBar.setListNavigationCallbacks(adapter, new ActionBar.OnNavigationListener() {
+ @Override
+ public boolean onNavigationItemSelected(int itemPosition, long itemId) {
+ return listener.onNavigationItemSelected(itemPosition, itemId);
+ }
+ });
+ }
+
+ @Override
+ public void setNavigationMode(int mode) {
+ mActionBar.setNavigationMode(mode);
+ }
+
+ @Override
+ public void setSelectedNavigationItem(int index) {
+ mActionBar.setSelectedNavigationItem(index);
+ }
+
+ @Override
+ public void addOnMenuVisibilityListener(final OnMenuVisibilityListener l) {
+ ActionBar.OnMenuVisibilityListener wrapper =
+ new ActionBar.OnMenuVisibilityListener() {
+ @Override
+ public void onMenuVisibilityChanged(boolean isVisible) {
+ l.onMenuVisibilityChanged(isVisible);
+ }
+ };
+ Utils.assertTrue(mListenerMap.put(System.identityHashCode(l), wrapper) == null);
+ mActionBar.addOnMenuVisibilityListener(wrapper);
+ }
+
+ @Override
+ public void removeOnMenuVisibilityListener(OnMenuVisibilityListener l) {
+ ActionBar.OnMenuVisibilityListener wrapper = (ActionBar.OnMenuVisibilityListener)
+ mListenerMap.remove(System.identityHashCode(l));
+ if (wrapper != null) mActionBar.removeOnMenuVisibilityListener(wrapper);
+ }
+
+ @Override
+ public void setDisplayOptions(int options, int mask) {
+ mActionBar.setDisplayOptions(options, mask);
+ }
+
+ @Override
+ public void setHomeButtonEnabled(boolean enabled) {
+ mActionBar.setHomeButtonEnabled(enabled);
+ }
+
+ @Override
+ public void setTitle(String title) {
+ mActionBar.setTitle(title);
+ }
+
+ @Override
+ public void setLogo(Drawable logo) {
+ mActionBar.setLogo(logo);
+ }
+
+ @Override
+ public void setSubtitle(String subtitle) {
+ mActionBar.setSubtitle(subtitle);
+ }
+
+ @Override
+ public void show() {
+ mActionBar.show();
+ }
+
+ @Override
+ public void hide() {
+ mActionBar.hide();
+ }
+
+ @Override
+ public void setShareIntent(Intent intent) {
+ if (mShareMenuItem != null) {
+ mShareMenuItem.setEnabled(intent != null);
+ }
+ if (mShareActionProvider != null) {
+ mShareActionProvider.setShareIntent(intent);
+ }
+ }
+
+ @Override
+ public boolean createActionMenu(Menu menu, int menuRes) {
+ mActivity.getMenuInflater().inflate(menuRes, menu);
+ mMenu = menu;
+ mShareMenuItem = menu.findItem(R.id.action_share);
+ if (mShareMenuItem != null) {
+ mShareActionProvider = new ShareActionProvider(mActivity);
+ mShareMenuItem.setActionProvider(mShareActionProvider);
+ }
+ return true;
+ }
+
+ @Override
+ public boolean hasShareMenuItem() {
+ return mShareMenuItem != null;
+ }
+
+ @Override
+ public void setMenuItemVisible(int menuItemId, boolean visible) {
+ MenuItem item = mMenu.findItem(menuItemId);
+ if (item != null) item.setVisible(visible);
+ }
+
+ @Override
+ public void setMenuItemTitle(int menuItemId, String title) {
+ MenuItem item = mMenu.findItem(menuItemId);
+ if (item != null) item.setTitle(title);
+ }
+
+ @Override
+ public void setMenuItemIntent(int menuItemId, Intent intent) {
+ MenuItem item = mMenu.findItem(menuItemId);
+ if (item != null) item.setIntent(intent);
+ }
+} \ No newline at end of file
diff --git a/src/com/android/gallery3d/actionbar/SystemActionModeWrapper.java b/src/com/android/gallery3d/actionbar/SystemActionModeWrapper.java
new file mode 100644
index 000000000..97261e657
--- /dev/null
+++ b/src/com/android/gallery3d/actionbar/SystemActionModeWrapper.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.gallery3d.actionbar;
+
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.content.Intent;
+import android.view.ActionMode;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.ShareActionProvider;
+
+import com.android.gallery3d.R;
+import com.android.gallery3d.common.ApiHelper;
+import com.android.gallery3d.common.Utils;
+
+@TargetApi(ApiHelper.VERSION_CODES.HONEYCOMB)
+public class SystemActionModeWrapper implements ActionModeInterface {
+ private ActionMode mActionMode;
+ private Menu mMenu;
+ private MenuItem mShareMenuItem;
+ private ShareActionProvider mShareActionProvider;
+
+ public SystemActionModeWrapper(Activity activity, ActionModeInterface.Callback callback) {
+ // mActionMode will be set in callback.onCreateActionMode
+ activity.startActionMode(new CallbackWrapper(callback));
+ }
+
+ private class CallbackWrapper implements ActionMode.Callback {
+ ActionModeInterface.Callback mActual;
+
+ public CallbackWrapper(Callback callback) {
+ mActual = callback;
+ }
+
+ @Override
+ public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+ mMenu = menu;
+ mActionMode = mode;
+ return mActual.onCreateActionMode(SystemActionModeWrapper.this, menu);
+ }
+
+ @Override
+ public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+ // return true to turn on the system action mode
+ return true;
+ }
+
+ @Override
+ public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
+ return mActual.onActionItemClicked(SystemActionModeWrapper.this, item);
+ }
+
+ @Override
+ public void onDestroyActionMode(ActionMode mode) {
+ mActual.onDestroyActionMode(SystemActionModeWrapper.this);
+ }
+ }
+
+ @Override
+ public void setCustomView(View view) {
+ mActionMode.setCustomView(view);
+ }
+
+ @Override
+ public void finish() {
+ mActionMode.finish();
+ }
+
+ @Override
+ public void inflateMenu(int menuRes) {
+ Utils.assertTrue(mMenu != null);
+ mActionMode.getMenuInflater().inflate(menuRes, mMenu);
+ mShareActionProvider = null;
+ mShareMenuItem = mMenu.findItem(R.id.action_share);
+ if (mShareMenuItem != null) {
+ mShareActionProvider = (ShareActionProvider) mShareMenuItem.getActionProvider();
+ }
+ }
+
+ @Override
+ public void setShareIntent(Intent shareIntent) {
+ if (mShareMenuItem != null) {
+ mShareMenuItem.setEnabled(shareIntent != null);
+ mShareActionProvider.setShareIntent(shareIntent);
+ }
+ }
+
+ @Override
+ public boolean hasShareButton() {
+ return mShareMenuItem != null;
+ }
+
+ @Override
+ public void setOnShareTargetSelectedListener(final OnShareTargetSelectedListener listener) {
+ mShareActionProvider.setOnShareTargetSelectedListener(
+ new ShareActionProvider.OnShareTargetSelectedListener() {
+ @Override
+ public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) {
+ return listener.onShareTargetSelected(intent);
+ }
+ });
+ }
+
+ @Override
+ public void setMenuItemVisible(int menuItemId, boolean visible) {
+ MenuItem item = mMenu.findItem(menuItemId);
+ if (item != null) item.setVisible(visible);
+ }
+
+ @Override
+ public void setMenuItemTitle(int menuItemId, String title) {
+ MenuItem item = mMenu.findItem(menuItemId);
+ if (item != null) item.setTitle(title);
+ }
+
+ @Override
+ public void setMenuItemIntent(int menuItemId, Intent intent) {
+ MenuItem item = mMenu.findItem(menuItemId);
+ if (item != null) item.setIntent(intent);
+ }
+}
diff --git a/src/com/android/gallery3d/app/AlbumPage.java b/src/com/android/gallery3d/app/AlbumPage.java
index be17f975a..cfd1dc3d0 100644
--- a/src/com/android/gallery3d/app/AlbumPage.java
+++ b/src/com/android/gallery3d/app/AlbumPage.java
@@ -26,9 +26,7 @@ import android.os.Handler;
import android.os.Message;
import android.os.Vibrator;
import android.provider.MediaStore;
-import android.view.ActionMode;
import android.view.Menu;
-import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;
@@ -96,7 +94,6 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
private boolean mGetContent;
private boolean mShowClusterMenu;
- private ActionMode mActionMode;
private ActionModeHandler mActionModeHandler;
private int mFocusIndex = 0;
private DetailsHelper mDetailsHelper;
@@ -502,44 +499,31 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
@Override
protected boolean onCreateActionBar(Menu menu) {
- Activity activity = (Activity) mActivity;
GalleryActionBar actionBar = mActivity.getGalleryActionBar();
- MenuInflater inflater = activity.getMenuInflater();
-
+ boolean result;
if (mGetContent) {
- inflater.inflate(R.menu.pickup, menu);
+ result = actionBar.createActionMenu(menu, R.menu.pickup);
int typeBits = mData.getInt(Gallery.KEY_TYPE_BITS,
DataManager.INCLUDE_IMAGE);
actionBar.setTitle(GalleryUtils.getSelectionModePrompt(typeBits));
} else {
- inflater.inflate(R.menu.album, menu);
+ result = actionBar.createActionMenu(menu, R.menu.album);
actionBar.setTitle(mMediaSet.getName());
- if (mMediaSet instanceof MtpDevice) {
- menu.findItem(R.id.action_slideshow).setVisible(false);
- } else {
- menu.findItem(R.id.action_slideshow).setVisible(true);
- }
+ actionBar.setMenuItemVisible(
+ R.id.action_slideshow, !(mMediaSet instanceof MtpDevice));
FilterUtils.setupMenuItems(actionBar, mMediaSetPath, true);
-
- MenuItem groupBy = menu.findItem(R.id.action_group_by);
- if (groupBy != null) {
- groupBy.setVisible(mShowClusterMenu);
- }
-
- MenuItem switchCamera = menu.findItem(R.id.action_camera);
- if (switchCamera != null) {
- switchCamera.setVisible(
- MediaSetUtils.isCameraSource(mMediaSetPath)
- && GalleryUtils.isCameraAvailable(activity));
- }
+ actionBar.setMenuItemVisible(R.id.action_group_by, mShowClusterMenu);
+ actionBar.setMenuItemVisible(R.id.action_camera,
+ MediaSetUtils.isCameraSource(mMediaSetPath)
+ && GalleryUtils.isCameraAvailable((Activity) mActivity));
actionBar.setTitle(mMediaSet.getName());
}
actionBar.setSubtitle(null);
- return true;
+ return result;
}
@Override
@@ -613,12 +597,12 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
public void onSelectionModeChange(int mode) {
switch (mode) {
case SelectionManager.ENTER_SELECTION_MODE: {
- mActionMode = mActionModeHandler.startActionMode();
- if(mHapticsEnabled) mVibrator.vibrate(100);
+ mActionModeHandler.startActionMode();
+ if (mHapticsEnabled) mVibrator.vibrate(100);
break;
}
case SelectionManager.LEAVE_SELECTION_MODE: {
- mActionMode.finish();
+ mActionModeHandler.finishActionMode();
mRootPane.invalidate();
break;
}
@@ -632,7 +616,6 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
@Override
public void onSelectionChange(Path path, boolean selected) {
- Utils.assertTrue(mActionMode != null);
int count = mSelectionManager.getSelectedCount();
String format = mActivity.getResources().getQuantityString(
R.plurals.number_of_items_selected, count);
diff --git a/src/com/android/gallery3d/app/AlbumSetPage.java b/src/com/android/gallery3d/app/AlbumSetPage.java
index 1c5e1f908..5f212345c 100644
--- a/src/com/android/gallery3d/app/AlbumSetPage.java
+++ b/src/com/android/gallery3d/app/AlbumSetPage.java
@@ -24,9 +24,7 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Vibrator;
-import android.view.ActionMode;
import android.view.Menu;
-import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;
@@ -93,7 +91,6 @@ public class AlbumSetPage extends ActivityState implements
private boolean mGetContent;
private boolean mGetAlbum;
- private ActionMode mActionMode;
private ActionModeHandler mActionModeHandler;
private DetailsHelper mDetailsHelper;
private MyDetailsSource mDetailsSource;
@@ -409,13 +406,10 @@ public class AlbumSetPage extends ActivityState implements
@Override
protected boolean onCreateActionBar(Menu menu) {
Activity activity = (Activity) mActivity;
- MenuInflater inflater = activity.getMenuInflater();
-
- final boolean inAlbum = mActivity.getStateManager().hasStateClass(
- AlbumPage.class);
-
+ final boolean inAlbum = mActivity.getStateManager().hasStateClass(AlbumPage.class);
+ boolean result;
if (mGetContent) {
- inflater.inflate(R.menu.pickup, menu);
+ result = mActionBar.createActionMenu(menu, R.menu.pickup);
int typeBits = mData.getInt(
Gallery.KEY_TYPE_BITS, DataManager.INCLUDE_IMAGE);
int id = R.string.select_image;
@@ -426,36 +420,32 @@ public class AlbumSetPage extends ActivityState implements
}
mActionBar.setTitle(id);
} else if (mGetAlbum) {
- inflater.inflate(R.menu.pickup, menu);
+ result = mActionBar.createActionMenu(menu, R.menu.pickup);
mActionBar.setTitle(R.string.select_album);
} else {
+ result = mActionBar.createActionMenu(menu, R.menu.albumset);
mShowClusterMenu = !inAlbum;
- inflater.inflate(R.menu.albumset, menu);
- MenuItem selectItem = menu.findItem(R.id.action_select);
-
- if (selectItem != null) {
- boolean selectAlbums = !inAlbum &&
- mActionBar.getClusterTypeAction() == FilterUtils.CLUSTER_BY_ALBUM;
- if (selectAlbums) {
- selectItem.setTitle(R.string.select_album);
- } else {
- selectItem.setTitle(R.string.select_group);
- }
- }
+ boolean selectAlbums = !inAlbum &&
+ mActionBar.getClusterTypeAction() == FilterUtils.CLUSTER_BY_ALBUM;
+ mActionBar.setMenuItemTitle(R.id.action_select, activity.getString(
+ selectAlbums ? R.string.select_album : R.string.select_group));
FilterUtils.setupMenuItems(mActionBar, mMediaSet.getPath(), false);
- MenuItem switchCamera = menu.findItem(R.id.action_camera);
- if (switchCamera != null) {
- switchCamera.setVisible(GalleryUtils.isCameraAvailable(activity));
- }
- final MenuItem helpMenu = menu.findItem(R.id.action_general_help);
- HelpUtils.prepareHelpMenuItem(mActivity.getAndroidContext(),
- helpMenu, R.string.help_url_gallery_main);
+ mActionBar.setMenuItemVisible(
+ R.id.action_camera, GalleryUtils.isCameraAvailable(activity));
+
+ Intent helpIntent = HelpUtils.getHelpIntent(activity, R.string.help_url_gallery_main);
+ if (helpIntent == null) {
+ mActionBar.setMenuItemVisible(R.id.action_general_help, false);
+ } else {
+ mActionBar.setMenuItemVisible(R.id.action_general_help, true);
+ mActionBar.setMenuItemIntent(R.id.action_general_help, helpIntent);
+ }
mActionBar.setTitle(mTitle);
mActionBar.setSubtitle(mSubtitle);
}
- return true;
+ return result;
}
@Override
@@ -532,12 +522,12 @@ public class AlbumSetPage extends ActivityState implements
switch (mode) {
case SelectionManager.ENTER_SELECTION_MODE: {
mActionBar.disableClusterMenu(true);
- mActionMode = mActionModeHandler.startActionMode();
- if(mHapticsEnabled) mVibrator.vibrate(100);
+ mActionModeHandler.startActionMode();
+ if (mHapticsEnabled) mVibrator.vibrate(100);
break;
}
case SelectionManager.LEAVE_SELECTION_MODE: {
- mActionMode.finish();
+ mActionModeHandler.finishActionMode();
if (mShowClusterMenu) {
mActionBar.enableClusterMenu(mSelectedAction, this);
}
@@ -554,7 +544,6 @@ public class AlbumSetPage extends ActivityState implements
@Override
public void onSelectionChange(Path path, boolean selected) {
- Utils.assertTrue(mActionMode != null);
mActionModeHandler.setTitle(getSelectedString());
mActionModeHandler.updateSupportedOperation(path, selected);
}
diff --git a/src/com/android/gallery3d/app/CropImage.java b/src/com/android/gallery3d/app/CropImage.java
index 6faf8cbcc..50e7938d4 100644
--- a/src/com/android/gallery3d/app/CropImage.java
+++ b/src/com/android/gallery3d/app/CropImage.java
@@ -17,7 +17,6 @@
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;
@@ -47,6 +46,8 @@ import android.view.Window;
import android.widget.Toast;
import com.android.gallery3d.R;
+import com.android.gallery3d.actionbar.ActionBarUtils;
+import com.android.gallery3d.actionbar.ActionBarInterface;
import com.android.gallery3d.common.ApiHelper;
import com.android.gallery3d.common.BitmapUtils;
import com.android.gallery3d.common.ExifTags;
@@ -162,12 +163,14 @@ public class CropImage extends AbstractGalleryActivity {
mCropView = new CropView(this);
getGLRoot().setContentPane(mCropView);
- ActionBar actionBar = getActionBar();
- actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_TITLE,
- ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_TITLE);
+ ActionBarInterface actionBar = ActionBarUtils.getActionBar(this);
+ int displayOptions = ActionBarInterface.DISPLAY_HOME_AS_UP
+ | ActionBarInterface.DISPLAY_SHOW_TITLE;
+ actionBar.setDisplayOptions(displayOptions, displayOptions);
+
Bundle extra = getIntent().getExtras();
if (extra != null && extra.getBoolean(KEY_SET_AS_WALLPAPER, false)) {
- actionBar.setTitle(R.string.set_wallpaper);
+ actionBar.setTitle(getString(R.string.set_wallpaper));
}
mMainHandler = new SynchronizedHandler(getGLRoot()) {
diff --git a/src/com/android/gallery3d/app/GalleryActionBar.java b/src/com/android/gallery3d/app/GalleryActionBar.java
index 69f51bccb..4c6a56309 100644
--- a/src/com/android/gallery3d/app/GalleryActionBar.java
+++ b/src/com/android/gallery3d/app/GalleryActionBar.java
@@ -17,27 +17,28 @@
package com.android.gallery3d.app;
import android.annotation.TargetApi;
-import android.app.ActionBar;
-import android.app.ActionBar.OnMenuVisibilityListener;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
+import android.content.Intent;
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.android.gallery3d.R;
+import com.android.gallery3d.actionbar.ActionBarInterface;
+import com.android.gallery3d.actionbar.ActionBarInterface.OnMenuVisibilityListener;
+import com.android.gallery3d.actionbar.ActionBarUtils;
+import com.android.gallery3d.actionbar.MenuHolder;
import com.android.gallery3d.common.ApiHelper;
import java.util.ArrayList;
-public class GalleryActionBar implements ActionBar.OnNavigationListener {
+public class GalleryActionBar implements ActionBarInterface.OnNavigationListener, MenuHolder {
@SuppressWarnings("unused")
private static final String TAG = "GalleryActionBar";
@@ -47,7 +48,7 @@ public class GalleryActionBar implements ActionBar.OnNavigationListener {
private Context mContext;
private LayoutInflater mInflater;
private GalleryActivity mActivity;
- private ActionBar mActionBar;
+ private ActionBarInterface mActionBar;
private int mCurrentIndex;
private ClusterAdapter mAdapter = new ClusterAdapter();
@@ -130,17 +131,8 @@ public class GalleryActionBar implements ActionBar.OnNavigationListener {
return null;
}
- @TargetApi(ApiHelper.VERSION_CODES.ICE_CREAM_SANDWICH)
- public static ShareActionProvider initializeShareActionProvider(Menu menu,
- Context context) {
- MenuItem item = menu.findItem(R.id.action_share);
- ShareActionProvider shareActionProvider = new ShareActionProvider(context);
- item.setActionProvider(shareActionProvider);
- return shareActionProvider;
- }
-
public GalleryActionBar(GalleryActivity activity) {
- mActionBar = ((Activity) activity).getActionBar();
+ mActionBar = ActionBarUtils.getActionBar((Activity) activity);
mContext = activity.getAndroidContext();
mActivity = activity;
mInflater = ((Activity) mActivity).getLayoutInflater();
@@ -191,7 +183,7 @@ public class GalleryActionBar implements ActionBar.OnNavigationListener {
// Don't set cluster runner until action bar is ready.
mClusterRunner = null;
mActionBar.setListNavigationCallbacks(mAdapter, this);
- mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
+ mActionBar.setNavigationMode(ActionBarInterface.NAVIGATION_MODE_LIST);
setSelectedAction(action);
mClusterRunner = runner;
}
@@ -204,7 +196,7 @@ public class GalleryActionBar implements ActionBar.OnNavigationListener {
if (mActionBar != null) {
mClusterRunner = null;
if (hideMenu) {
- mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
+ mActionBar.setNavigationMode(ActionBarInterface.NAVIGATION_MODE_STANDARD);
}
}
}
@@ -236,13 +228,14 @@ public class GalleryActionBar implements ActionBar.OnNavigationListener {
}
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);
- setHomeButtonEnabled(displayHomeAsUp);
- }
+ if (mActionBar == null) return;
+ int options = 0;
+ if (displayHomeAsUp) options |= ActionBarInterface.DISPLAY_HOME_AS_UP;
+ if (showTitle) options |= ActionBarInterface.DISPLAY_SHOW_TITLE;
+
+ mActionBar.setDisplayOptions(options,
+ ActionBarInterface.DISPLAY_HOME_AS_UP | ActionBarInterface.DISPLAY_SHOW_TITLE);
+ mActionBar.setHomeButtonEnabled(displayHomeAsUp);
}
public void setTitle(String title) {
@@ -250,7 +243,9 @@ public class GalleryActionBar implements ActionBar.OnNavigationListener {
}
public void setTitle(int titleId) {
- if (mActionBar != null) mActionBar.setTitle(titleId);
+ if (mActionBar != null) {
+ mActionBar.setTitle(mContext.getString(titleId));
+ }
}
public void setSubtitle(String title) {
@@ -301,4 +296,30 @@ public class GalleryActionBar implements ActionBar.OnNavigationListener {
}
return false;
}
+
+ public boolean hasShareMenuItem() {
+ return mActionBar == null ? false : mActionBar.hasShareMenuItem();
+ }
+
+ public void setShareIntent(Intent intent) {
+ mActionBar.setShareIntent(intent);
+ }
+
+ public boolean createActionMenu(Menu menu, int menuRes) {
+ return mActionBar.createActionMenu(menu, menuRes);
+ }
+
+ @Override
+ public void setMenuItemVisible(int menuItemId, boolean visible) {
+ mActionBar.setMenuItemVisible(menuItemId, visible);
+ }
+
+ @Override
+ public void setMenuItemTitle(int menuItemId, String title) {
+ mActionBar.setMenuItemTitle(menuItemId, title);
+ }
+
+ public void setMenuItemIntent(int menuItemId, Intent intent) {
+ mActionBar.setMenuItemIntent(menuItemId, intent);
+ }
}
diff --git a/src/com/android/gallery3d/app/MovieActivity.java b/src/com/android/gallery3d/app/MovieActivity.java
index 8fe0f0087..26ae37e43 100644
--- a/src/com/android/gallery3d/app/MovieActivity.java
+++ b/src/com/android/gallery3d/app/MovieActivity.java
@@ -17,7 +17,6 @@
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;
@@ -38,9 +37,10 @@ import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
-import android.widget.ShareActionProvider;
import com.android.gallery3d.R;
+import com.android.gallery3d.actionbar.ActionBarInterface;
+import com.android.gallery3d.actionbar.ActionBarUtils;
import com.android.gallery3d.common.ApiHelper;
import com.android.gallery3d.common.Utils;
@@ -128,10 +128,10 @@ public class MovieActivity extends Activity {
private void initializeActionBar(Intent intent) {
mUri = intent.getData();
- final ActionBar actionBar = getActionBar();
+ final ActionBarInterface actionBar = ActionBarUtils.getActionBar(this);
setActionBarLogoFromIntent(intent);
- actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP,
- ActionBar.DISPLAY_HOME_AS_UP);
+ actionBar.setDisplayOptions(ActionBarInterface.DISPLAY_HOME_AS_UP,
+ ActionBarInterface.DISPLAY_HOME_AS_UP);
String title = intent.getStringExtra(Intent.EXTRA_TITLE);
if (title != null) {
@@ -167,25 +167,18 @@ public class MovieActivity extends Activity {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
- getMenuInflater().inflate(R.menu.movie, menu);
-
+ ActionBarInterface actionBar = ActionBarUtils.getActionBar(this);
+ boolean result = actionBar.createActionMenu(menu, R.menu.movie);
// Document says EXTRA_STREAM should be a content: Uri
// So, we only share the video if it's "content:".
if (ContentResolver.SCHEME_CONTENT.equals(mUri.getScheme())) {
- initializeShareActionProvider(menu);
+ if (actionBar.hasShareMenuItem()) {
+ actionBar.setShareIntent(createShareIntent());
+ }
} else {
menu.findItem(R.id.action_share).setVisible(false);
}
- return true;
- }
-
- @TargetApi(ApiHelper.VERSION_CODES.ICE_CREAM_SANDWICH)
- private void initializeShareActionProvider(Menu menu) {
- if (!ApiHelper.HAS_SHARE_ACTION_PROVIDER) return;
-
- ShareActionProvider provider = GalleryActionBar.initializeShareActionProvider(
- menu, this);
- provider.setShareIntent(createShareIntent());
+ return result;
}
private Intent createShareIntent() {
diff --git a/src/com/android/gallery3d/app/PhotoPage.java b/src/com/android/gallery3d/app/PhotoPage.java
index c71312dd3..120eb7d3b 100644
--- a/src/com/android/gallery3d/app/PhotoPage.java
+++ b/src/com/android/gallery3d/app/PhotoPage.java
@@ -17,7 +17,6 @@
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.ContentResolver;
@@ -30,12 +29,11 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
-import android.view.MenuInflater;
import android.view.MenuItem;
-import android.widget.ShareActionProvider;
import android.widget.Toast;
import com.android.gallery3d.R;
+import com.android.gallery3d.actionbar.ActionBarInterface.OnMenuVisibilityListener;
import com.android.gallery3d.common.ApiHelper;
import com.android.gallery3d.common.Utils;
import com.android.gallery3d.data.DataManager;
@@ -108,19 +106,16 @@ public class PhotoPage extends ActivityState implements
// mMediaSet could be null if there is no KEY_MEDIA_SET_PATH supplied.
// E.g., viewing a photo in gmail attachment
private FilterDeleteSet mMediaSet;
- private Menu mMenu;
private int mCurrentIndex = 0;
private Handler mHandler;
private boolean mShowBars = true;
private volatile boolean mActionBarAllowed = true;
private GalleryActionBar mActionBar;
- private MyMenuVisibilityListener mMenuVisibilityListener;
private boolean mIsMenuVisible;
private MediaItem mCurrentPhoto = null;
private MenuExecutor mMenuExecutor;
private boolean mIsActive;
- private Object mShareActionProvider; // class ShareActionProvider
private String mSetPathString;
// This is the original mSetPathString before adding the camera preview item.
private String mOriginalSetPathString;
@@ -137,6 +132,9 @@ public class PhotoPage extends ActivityState implements
private NfcAdapter mNfcAdapter;
+ private final MyMenuVisibilityListener mMenuVisibilityListener =
+ new MyMenuVisibilityListener();
+
public static interface Model extends PhotoView.Model {
public void resume();
public void pause();
@@ -327,32 +325,25 @@ public class PhotoPage extends ActivityState implements
private Intent createShareIntent(Path path) {
DataManager manager = mActivity.getDataManager();
- Uri uri = manager.getContentUri(path);
int type = manager.getMediaType(path);
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType(MenuExecutor.getMimeType(type));
+ Uri uri = manager.getContentUri(path);
intent.putExtra(Intent.EXTRA_STREAM, uri);
return intent;
- }
- private void updateShareURI(Path path) {
- DataManager manager = mActivity.getDataManager();
- Uri uri = manager.getContentUri(path);
- setNfcBeamPushUris(new Uri[]{uri});
- setShareActionProviderIntent(path);
}
- @TargetApi(ApiHelper.VERSION_CODES.ICE_CREAM_SANDWICH)
- private void setShareActionProviderIntent(Path path) {
- if (ApiHelper.HAS_SHARE_ACTION_PROVIDER) {
- if (mShareActionProvider != null) {
- Intent intent = createShareIntent(path);
- ((ShareActionProvider) mShareActionProvider).setShareIntent(intent);
- mPendingSharePath = null;
- } else {
- // This happens when ActionBar is not created yet.
- mPendingSharePath = path;
- }
+ private void updateShareURI(Path path) {
+ if (mActionBar.hasShareMenuItem()) {
+ DataManager manager = mActivity.getDataManager();
+ Uri uri = manager.getContentUri(path);
+ mActionBar.setShareIntent(createShareIntent(path));
+ setNfcBeamPushUris(new Uri[]{uri});
+ mPendingSharePath = null;
+ } else {
+ // This happens when ActionBar is not created yet.
+ mPendingSharePath = path;
}
}
@@ -374,25 +365,21 @@ public class PhotoPage extends ActivityState implements
if (mCurrentPhoto == null) return;
boolean showTitle = mActivity.getAndroidContext().getResources().getBoolean(
R.bool.show_action_bar_title);
- if (showTitle && mCurrentPhoto.getName() != null)
+ if (showTitle && mCurrentPhoto.getName() != null) {
mActionBar.setTitle(mCurrentPhoto.getName());
- else
+ } else {
mActionBar.setTitle("");
+ }
}
private void updateMenuOperations() {
- if (mMenu == null) return;
- MenuItem item = mMenu.findItem(R.id.action_slideshow);
- if (item != null) {
- item.setVisible(canDoSlideShow());
- }
+ mActionBar.setMenuItemVisible(R.id.action_slideshow, canDoSlideShow());
if (mCurrentPhoto == null) return;
int supportedOperations = mCurrentPhoto.getSupportedOperations();
if (!GalleryUtils.isEditorAvailable((Context) mActivity, "image/*")) {
supportedOperations &= ~MediaObject.SUPPORT_EDIT;
}
-
- MenuExecutor.updateMenuOperation(mMenu, supportedOperations);
+ MenuExecutor.updateMenuOperation(mActionBar, supportedOperations);
}
private boolean canDoSlideShow() {
@@ -545,18 +532,12 @@ public class PhotoPage extends ActivityState implements
@Override
protected boolean onCreateActionBar(Menu menu) {
- MenuInflater inflater = ((Activity) mActivity).getMenuInflater();
- inflater.inflate(R.menu.photo, menu);
-
- if (ApiHelper.HAS_SHARE_ACTION_PROVIDER) {
- mShareActionProvider = GalleryActionBar.initializeShareActionProvider(
- menu, mActivity.getAndroidContext());
- }
+ GalleryActionBar actionBar = mActionBar;
+ boolean result = actionBar.createActionMenu(menu, R.menu.photo);
if (mPendingSharePath != null) updateShareURI(mPendingSharePath);
- mMenu = menu;
updateMenuOperations();
updateTitle();
- return true;
+ return result;
}
private MenuExecutor.ProgressListener mConfirmDialogListener =
@@ -905,9 +886,6 @@ public class PhotoPage extends ActivityState implements
mModel.resume();
mPhotoView.resume();
- if (mMenuVisibilityListener == null) {
- mMenuVisibilityListener = new MyMenuVisibilityListener();
- }
mActionBar.setDisplayOptions(mSetPathString != null, true);
mActionBar.addOnMenuVisibilityListener(mMenuVisibilityListener);
diff --git a/src/com/android/gallery3d/ui/ActionModeHandler.java b/src/com/android/gallery3d/ui/ActionModeHandler.java
index 12a0e89f4..2ab1521ce 100644
--- a/src/com/android/gallery3d/ui/ActionModeHandler.java
+++ b/src/com/android/gallery3d/ui/ActionModeHandler.java
@@ -23,18 +23,16 @@ import android.content.Intent;
import android.net.Uri;
import android.nfc.NfcAdapter;
import android.os.Handler;
-import android.view.ActionMode;
import android.view.LayoutInflater;
import android.view.Menu;
-import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
-import android.widget.ShareActionProvider;
-import android.widget.ShareActionProvider.OnShareTargetSelectedListener;
import com.android.gallery3d.R;
-import com.android.gallery3d.app.GalleryActionBar;
+import com.android.gallery3d.actionbar.ActionBarUtils;
+import com.android.gallery3d.actionbar.ActionModeInterface;
+import com.android.gallery3d.actionbar.ActionModeInterface.OnShareTargetSelectedListener;
import com.android.gallery3d.app.GalleryActivity;
import com.android.gallery3d.common.ApiHelper;
import com.android.gallery3d.common.Utils;
@@ -50,9 +48,11 @@ import com.android.gallery3d.util.ThreadPool.JobContext;
import java.util.ArrayList;
public class ActionModeHandler implements
- ActionMode.Callback, PopupList.OnPopupItemClickListener {
+ ActionModeInterface.Callback, PopupList.OnPopupItemClickListener {
+
@SuppressWarnings("unused")
private static final String TAG = "ActionModeHandler";
+
private static final int SUPPORT_MULTIPLE_MASK = MediaObject.SUPPORT_DELETE
| MediaObject.SUPPORT_ROTATE | MediaObject.SUPPORT_SHARE
| MediaObject.SUPPORT_CACHE | MediaObject.SUPPORT_IMPORT;
@@ -70,7 +70,7 @@ public class ActionModeHandler implements
private ActionModeListener mListener;
private Future<?> mMenuTask;
private final Handler mMainHandler;
- private Object mShareActionProvider; // class ShareActionProvider
+ private ActionModeInterface mActionMode;
public ActionModeHandler(
GalleryActivity activity, SelectionManager selectionManager) {
@@ -81,17 +81,19 @@ public class ActionModeHandler implements
mNfcAdapter = NfcAdapter.getDefaultAdapter(mActivity.getAndroidContext());
}
- public ActionMode startActionMode() {
+ public void startActionMode() {
Activity a = (Activity) mActivity;
- final ActionMode actionMode = a.startActionMode(this);
+ mActionMode = ActionBarUtils.startActionMode(a, this);
View customView = LayoutInflater.from(a).inflate(
R.layout.action_mode, null);
- actionMode.setCustomView(customView);
+ mActionMode.setCustomView(customView);
mSelectionMenu = new SelectionMenu(a,
(Button) customView.findViewById(R.id.selection_menu), this);
updateSelectionMenu();
+ }
- return actionMode;
+ public void finishActionMode() {
+ mActionMode.finish();
}
public void setTitle(String title) {
@@ -103,7 +105,7 @@ public class ActionModeHandler implements
}
@Override
- public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
+ public boolean onActionItemClicked(ActionModeInterface mode, MenuItem item) {
GLRoot root = mActivity.getGLRoot();
root.lockRenderThread();
try {
@@ -163,45 +165,26 @@ public class ActionModeHandler implements
}
@Override
- public boolean onCreateActionMode(ActionMode mode, Menu menu) {
- MenuInflater inflater = mode.getMenuInflater();
- inflater.inflate(R.menu.operation, menu);
- initializeShareActionProvider(menu);
+ public boolean onCreateActionMode(ActionModeInterface mode, Menu menu) {
+ mode.inflateMenu(R.menu.operation);
+
+ OnShareTargetSelectedListener listener = new OnShareTargetSelectedListener() {
+ @Override
+ public boolean onShareTargetSelected(Intent intent) {
+ mSelectionManager.leaveSelectionMode();
+ return false;
+ }
+ };
+ mode.setOnShareTargetSelectedListener(listener);
mMenu = menu;
return true;
}
- @TargetApi(ApiHelper.VERSION_CODES.ICE_CREAM_SANDWICH)
- private void initializeShareActionProvider(Menu menu) {
- if (ApiHelper.HAS_SHARE_ACTION_PROVIDER) {
- mShareActionProvider = GalleryActionBar.initializeShareActionProvider(menu,
- mActivity.getAndroidContext());
- OnShareTargetSelectedListener listener = new OnShareTargetSelectedListener() {
- @Override
- public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) {
- mSelectionManager.leaveSelectionMode();
- return false;
- }
- };
- ((ShareActionProvider) mShareActionProvider).setOnShareTargetSelectedListener(listener);
- }
- }
-
- @TargetApi(ApiHelper.VERSION_CODES.ICE_CREAM_SANDWICH)
- private void setShareActionProviderIntent(Intent intent) {
- ((ShareActionProvider) mShareActionProvider).setShareIntent(intent);
- }
-
@Override
- public void onDestroyActionMode(ActionMode mode) {
+ public void onDestroyActionMode(ActionModeInterface mode) {
mSelectionManager.leaveSelectionMode();
}
- @Override
- public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
- return true;
- }
-
// Menu options are determined by selection set itself.
// We cannot expand it because MenuExecuter executes it based on
// the selection set instead of the expanded result.
@@ -299,11 +282,8 @@ public class ActionModeHandler implements
updateSelectionMenu();
// Disable share action until share intent is in good shape
- final MenuItem item = (!ApiHelper.HAS_SHARE_ACTION_PROVIDER
- || (mShareActionProvider != null))
- ? mMenu.findItem(R.id.action_share) : null;
- final boolean supportShare = item != null;
- if (supportShare) item.setEnabled(false);
+ final boolean hasShareButton = mActionMode.hasShareButton();
+ if (hasShareButton) mActionMode.setShareIntent(null);
// Generate sharing intent and update supported operations in the background
// The task can take a long time and be canceled in the mean time.
@@ -314,20 +294,15 @@ public class ActionModeHandler implements
final int operation = computeMenuOptions(jc);
// Pass2: Deal with expanded media object list for sharing operation.
- final Intent intent = supportShare ? computeSharingIntent(jc) : null;
+ final Intent intent = hasShareButton ? computeSharingIntent(jc) : null;
mMainHandler.post(new Runnable() {
@Override
public void run() {
mMenuTask = null;
if (!jc.isCancelled()) {
- MenuExecutor.updateMenuOperation(mMenu, operation);
- if (supportShare) {
- item.setEnabled(true);
- if (ApiHelper.HAS_SHARE_ACTION_PROVIDER) {
- setShareActionProviderIntent(intent);
- } else {
- mMenuExecutor.setShareIntent(intent);
- }
+ MenuExecutor.updateMenuOperation(mActionMode, operation);
+ if (hasShareButton) {
+ mActionMode.setShareIntent(intent);
}
}
}
diff --git a/src/com/android/gallery3d/ui/MenuExecutor.java b/src/com/android/gallery3d/ui/MenuExecutor.java
index 9a2377d8e..ff6a61f7a 100644
--- a/src/com/android/gallery3d/ui/MenuExecutor.java
+++ b/src/com/android/gallery3d/ui/MenuExecutor.java
@@ -26,10 +26,10 @@ 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.android.gallery3d.R;
+import com.android.gallery3d.actionbar.MenuHolder;
import com.android.gallery3d.app.CropImage;
import com.android.gallery3d.app.GalleryActivity;
import com.android.gallery3d.common.ApiHelper;
@@ -157,13 +157,7 @@ public class MenuExecutor {
mHandler.sendMessage(mHandler.obtainMessage(MSG_TASK_COMPLETE, result, 0, listener));
}
- private static void setMenuItemVisibility(
- Menu menu, int id, boolean visibility) {
- MenuItem item = menu.findItem(id);
- if (item != null) item.setVisible(visibility);
- }
-
- public static void updateMenuOperation(Menu menu, int supported) {
+ public static void updateMenuOperation(MenuHolder menu, int supported) {
boolean supportDelete = (supported & MediaObject.SUPPORT_DELETE) != 0;
boolean supportRotate = (supported & MediaObject.SUPPORT_ROTATE) != 0;
boolean supportCrop = (supported & MediaObject.SUPPORT_CROP) != 0;
@@ -175,16 +169,16 @@ public class MenuExecutor {
boolean supportInfo = (supported & MediaObject.SUPPORT_INFO) != 0;
boolean supportImport = (supported & MediaObject.SUPPORT_IMPORT) != 0;
- setMenuItemVisibility(menu, R.id.action_delete, supportDelete);
- setMenuItemVisibility(menu, R.id.action_rotate_ccw, supportRotate);
- setMenuItemVisibility(menu, R.id.action_rotate_cw, supportRotate);
- setMenuItemVisibility(menu, R.id.action_crop, supportCrop);
- setMenuItemVisibility(menu, R.id.action_share, supportShare);
- setMenuItemVisibility(menu, R.id.action_setas, supportSetAs);
- setMenuItemVisibility(menu, R.id.action_show_on_map, supportShowOnMap);
- setMenuItemVisibility(menu, R.id.action_edit, supportEdit);
- setMenuItemVisibility(menu, R.id.action_details, supportInfo);
- setMenuItemVisibility(menu, R.id.action_import, supportImport);
+ menu.setMenuItemVisible(R.id.action_delete, supportDelete);
+ menu.setMenuItemVisible(R.id.action_rotate_ccw, supportRotate);
+ menu.setMenuItemVisible(R.id.action_rotate_cw, supportRotate);
+ menu.setMenuItemVisible(R.id.action_crop, supportCrop);
+ menu.setMenuItemVisible(R.id.action_share, supportShare);
+ menu.setMenuItemVisible(R.id.action_setas, supportSetAs);
+ menu.setMenuItemVisible(R.id.action_show_on_map, supportShowOnMap);
+ menu.setMenuItemVisible(R.id.action_edit, supportEdit);
+ menu.setMenuItemVisible(R.id.action_details, supportInfo);
+ menu.setMenuItemVisible(R.id.action_import, supportImport);
}
private Path getSingleSelectedPath() {
diff --git a/src/com/android/gallery3d/util/HelpUtils.java b/src/com/android/gallery3d/util/HelpUtils.java
index a029b3c26..2a1128393 100644
--- a/src/com/android/gallery3d/util/HelpUtils.java
+++ b/src/com/android/gallery3d/util/HelpUtils.java
@@ -16,7 +16,6 @@
package com.android.gallery3d.util;
-import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
@@ -24,9 +23,6 @@ import android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
-import android.view.MenuItem;
-
-import com.android.gallery3d.common.ApiHelper;
import java.util.Locale;
@@ -53,39 +49,13 @@ public class HelpUtils {
private static String sCachedVersionCode = null;
/** Static helper that is not instantiable*/
- private HelpUtils() { }
+ private HelpUtils() {}
- /**
- * Prepares the help menu item by doing the following.
- * - If the string corresponding to the helpUrlResourceId is empty or null, then the help menu
- * item is made invisible.
- * - Otherwise, this makes the help menu item visible and sets the intent for the help menu
- * item to view the URL.
- *
- * @return returns whether the help menu item has been made visible.
- */
- public static boolean prepareHelpMenuItem(Context context, MenuItem helpMenuItem,
- int helpUrlResourceId) {
- String helpUrlString = context.getResources().getString(helpUrlResourceId);
- return prepareHelpMenuItem(context, helpMenuItem, helpUrlString);
- }
+ public static Intent getHelpIntent(Context context, int helpUrlResId) {
+ String helpUrlString = context.getString(helpUrlResId);
- /**
- * Prepares the help menu item by doing the following.
- * - If the helpUrlString is empty or null, the help menu item is made invisible.
- * - Otherwise, this makes the help menu item visible and sets the intent for the help menu
- * item to view the URL.
- *
- * @return returns whether the help menu item has been made visible.
- */
- public static boolean prepareHelpMenuItem(Context context, MenuItem helpMenuItem,
- String helpUrlString) {
if (TextUtils.isEmpty(helpUrlString)) {
- // The help url string is empty or null, so set the help menu item to be invisible.
- helpMenuItem.setVisible(false);
-
- // return that the help menu item is not visible (i.e. false)
- return false;
+ return null;
} else {
// The help url string exists, so first add in some extra query parameters.
final Uri fullUri = uriWithAddedParameters(context, Uri.parse(helpUrlString));
@@ -95,22 +65,7 @@ public class HelpUtils {
Intent intent = new Intent(Intent.ACTION_VIEW, fullUri);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
-
- // Set the intent to the help menu item, show the help menu item in the overflow
- // menu, and make it visible.
- helpMenuItem.setIntent(intent);
- setMenuItemShowAsAction(helpMenuItem);
- helpMenuItem.setVisible(true);
-
- // return that the help menu item is visible (i.e., true)
- return true;
- }
- }
-
- @TargetApi(ApiHelper.VERSION_CODES.HONEYCOMB)
- private static void setMenuItemShowAsAction(MenuItem menuItem) {
- if (ApiHelper.HAS_MENU_ITEM_SHOW_AS_ACTION) {
- menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
+ return intent;
}
}