diff options
4 files changed, 45 insertions, 11 deletions
diff --git a/gallerycommon/src/com/android/gallery3d/common/ApiHelper.java b/gallerycommon/src/com/android/gallery3d/common/ApiHelper.java index 4545b92f3..305fb2cf3 100644 --- a/gallerycommon/src/com/android/gallery3d/common/ApiHelper.java +++ b/gallerycommon/src/com/android/gallery3d/common/ApiHelper.java @@ -16,6 +16,7 @@ package com.android.gallery3d.common; +import android.app.Activity; import android.os.Build; import android.provider.MediaStore.MediaColumns; import android.view.View; @@ -60,6 +61,9 @@ public class ApiHelper { public static final boolean HAS_AUTO_FOCUS_MOVE_CALLBACK = Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; + public static final boolean HAS_ACTIVITY_INVALIDATE_OPTIONS_MENU = + hasMethod(Activity.class, "invalidateOptionsMenu"); + private static boolean hasField(Class<?> klass, String fieldName) { try { klass.getDeclaredField(fieldName); @@ -72,11 +76,21 @@ public class ApiHelper { private static boolean hasMethod(String className, String methodName, Class<?>... parameterTypes) { try { - Class klass = Class.forName(className); + Class<?> klass = Class.forName(className); klass.getDeclaredMethod(methodName, parameterTypes); return true; } catch (Throwable th) { return false; } } + + private static boolean hasMethod( + Class<?> klass, String methodName, Class<?> ... paramTypes) { + try { + klass.getDeclaredMethod(methodName, paramTypes); + return true; + } catch (NoSuchMethodException e) { + return false; + } + } } diff --git a/src/com/android/gallery3d/app/AbstractGalleryActivity.java b/src/com/android/gallery3d/app/AbstractGalleryActivity.java index 9b2a85ed4..24d5dbcdf 100644 --- a/src/com/android/gallery3d/app/AbstractGalleryActivity.java +++ b/src/com/android/gallery3d/app/AbstractGalleryActivity.java @@ -16,6 +16,7 @@ package com.android.gallery3d.app; +import android.annotation.TargetApi; import android.app.Activity; import android.app.AlertDialog; import android.content.BroadcastReceiver; @@ -27,11 +28,13 @@ 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.android.gallery3d.R; +import com.android.gallery3d.common.ApiHelper; import com.android.gallery3d.data.BitmapPool; import com.android.gallery3d.data.DataManager; import com.android.gallery3d.data.MediaItem; @@ -85,18 +88,42 @@ public class AbstractGalleryActivity extends Activity implements GalleryActivity toggleStatusBarByOrientation(); } + private Menu mOptionsMenu; + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + mOptionsMenu = menu; + super.onCreateOptionsMenu(menu); + return getStateManager().createOptionsMenu(menu); + } + + @Override + @TargetApi(ApiHelper.VERSION_CODES.HONEYCOMB) + public void invalidateOptionsMenu() { + if (ApiHelper.HAS_ACTIVITY_INVALIDATE_OPTIONS_MENU) { + super.invalidateOptionsMenu(); + } else if (mOptionsMenu != null) { + mOptionsMenu.clear(); + getStateManager().createOptionsMenu(mOptionsMenu); + } + } + + @Override public Context getAndroidContext() { return this; } + @Override public DataManager getDataManager() { return ((GalleryApp) getApplication()).getDataManager(); } + @Override public ThreadPool getThreadPool() { return ((GalleryApp) getApplication()).getThreadPool(); } + @Override public synchronized StateManager getStateManager() { if (mStateManager == null) { mStateManager = new StateManager(this); @@ -104,10 +131,12 @@ public class AbstractGalleryActivity extends Activity implements GalleryActivity return mStateManager; } + @Override public GLRoot getGLRoot() { return mGLRootView; } + @Override public OrientationManager getOrientationManager() { return mOrientationManager; } diff --git a/src/com/android/gallery3d/app/ActivityState.java b/src/com/android/gallery3d/app/ActivityState.java index 867cda3e5..c870855c9 100644 --- a/src/com/android/gallery3d/app/ActivityState.java +++ b/src/com/android/gallery3d/app/ActivityState.java @@ -27,7 +27,6 @@ import android.os.BatteryManager; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; -import android.view.View; import android.view.Window; import android.view.WindowManager; @@ -135,7 +134,7 @@ abstract public class ActivityState { // should only be called by StateManager void resume() { - Activity activity = (Activity) mActivity; + AbstractGalleryActivity activity = (AbstractGalleryActivity) mActivity; ActionBar actionBar = activity.getActionBar(); if (actionBar != null) { if ((mFlags & FLAG_HIDE_ACTION_BAR) != 0) { diff --git a/src/com/android/gallery3d/app/Gallery.java b/src/com/android/gallery3d/app/Gallery.java index 468d202d4..0d5770cd5 100644 --- a/src/com/android/gallery3d/app/Gallery.java +++ b/src/com/android/gallery3d/app/Gallery.java @@ -26,7 +26,6 @@ import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.OpenableColumns; -import android.view.Menu; import android.view.Window; import android.widget.Toast; @@ -37,7 +36,6 @@ import com.android.gallery3d.data.MediaItem; import com.android.gallery3d.data.MediaSet; import com.android.gallery3d.data.Path; import com.android.gallery3d.picasasource.PicasaSource; -import com.android.gallery3d.ui.GLRoot; import com.android.gallery3d.util.GalleryUtils; public final class Gallery extends AbstractGalleryActivity implements OnCancelListener { @@ -232,12 +230,6 @@ public final class Gallery extends AbstractGalleryActivity implements OnCancelLi } @Override - public boolean onCreateOptionsMenu(Menu menu) { - super.onCreateOptionsMenu(menu); - return getStateManager().createOptionsMenu(menu); - } - - @Override protected void onResume() { Utils.assertTrue(getStateManager().getStateCount() > 0); super.onResume(); |