diff options
author | Bananeweizen <Bananeweizen@gmx.de> | 2012-02-17 18:01:47 +0100 |
---|---|---|
committer | Bananeweizen <Bananeweizen@gmx.de> | 2012-02-17 18:01:47 +0100 |
commit | 9649d1c0fc401be51432c7e23943c5cb40679954 (patch) | |
tree | 579a5aeeec7d7fe6eadc6e59995eede3016695e1 /main/src/cgeo/geocaching | |
parent | 5252edc70a02378624144a8e42ae4e71318f9ed3 (diff) | |
download | cgeo-9649d1c0fc401be51432c7e23943c5cb40679954.zip cgeo-9649d1c0fc401be51432c7e23943c5cb40679954.tar.gz cgeo-9649d1c0fc401be51432c7e23943c5cb40679954.tar.bz2 |
fix #1110: onPrepareOptionsMenu compatible with Android 3.0
Diffstat (limited to 'main/src/cgeo/geocaching')
17 files changed, 103 insertions, 14 deletions
diff --git a/main/src/cgeo/geocaching/activity/AbstractActivity.java b/main/src/cgeo/geocaching/activity/AbstractActivity.java index d4d578e..941cd08 100644 --- a/main/src/cgeo/geocaching/activity/AbstractActivity.java +++ b/main/src/cgeo/geocaching/activity/AbstractActivity.java @@ -98,4 +98,9 @@ public abstract class AbstractActivity extends Activity implements IAbstractActi protected void restartActivity() { Compatibility.restartActivity(this); } + + public void invalidateOptionsMenuCompatible() { + ActivityMixin.invalidateOptionsMenu(this); + } + } diff --git a/main/src/cgeo/geocaching/activity/AbstractListActivity.java b/main/src/cgeo/geocaching/activity/AbstractListActivity.java index 00e04cf..b3bbb3f 100644 --- a/main/src/cgeo/geocaching/activity/AbstractListActivity.java +++ b/main/src/cgeo/geocaching/activity/AbstractListActivity.java @@ -3,6 +3,7 @@ package cgeo.geocaching.activity; import cgeo.geocaching.cgBase; import cgeo.geocaching.cgCache; import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.compatibility.Compatibility; import android.app.ListActivity; import android.content.res.Resources; @@ -85,4 +86,8 @@ public abstract class AbstractListActivity extends ListActivity implements ActivityMixin.addVisitMenu(this, menu, cache); } + @Override + public void invalidateOptionsMenuCompatible() { + Compatibility.invalidateOptionsMenu(this); + } } diff --git a/main/src/cgeo/geocaching/activity/ActivityMixin.java b/main/src/cgeo/geocaching/activity/ActivityMixin.java index 30bc7bb..0e0041a 100644 --- a/main/src/cgeo/geocaching/activity/ActivityMixin.java +++ b/main/src/cgeo/geocaching/activity/ActivityMixin.java @@ -4,6 +4,7 @@ import cgeo.geocaching.R; import cgeo.geocaching.Settings; import cgeo.geocaching.cgCache; import cgeo.geocaching.cgeo; +import cgeo.geocaching.compatibility.Compatibility; import cgeo.geocaching.enumerations.LogType; import org.apache.commons.lang3.StringUtils; @@ -153,4 +154,8 @@ public final class ActivityMixin { abstractActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } } + + public static void invalidateOptionsMenu(Activity activity) { + Compatibility.invalidateOptionsMenu(activity); + } } diff --git a/main/src/cgeo/geocaching/activity/IAbstractActivity.java b/main/src/cgeo/geocaching/activity/IAbstractActivity.java index 85a112a..dd22cff 100644 --- a/main/src/cgeo/geocaching/activity/IAbstractActivity.java +++ b/main/src/cgeo/geocaching/activity/IAbstractActivity.java @@ -27,4 +27,5 @@ public interface IAbstractActivity { void addVisitMenu(Menu menu, cgCache cache); + public void invalidateOptionsMenuCompatible(); } diff --git a/main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java b/main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java index 3bea266..fd19353 100644 --- a/main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java +++ b/main/src/cgeo/geocaching/apps/cachelist/CacheListAppFactory.java @@ -5,6 +5,7 @@ import cgeo.geocaching.SearchResult; import cgeo.geocaching.Settings; import cgeo.geocaching.cgCache; import cgeo.geocaching.cgGeo; +import cgeo.geocaching.activity.IAbstractActivity; import cgeo.geocaching.apps.AbstractAppFactory; import org.apache.commons.lang3.ArrayUtils; @@ -62,12 +63,14 @@ public final class CacheListAppFactory extends AbstractAppFactory { } public static boolean onMenuItemSelected(final MenuItem item, - final cgGeo geo, final List<cgCache> caches, final Activity activity, + final cgGeo geo, final List<cgCache> caches, final IAbstractActivity activity, final SearchResult search) { CacheListApp app = (CacheListApp) getAppFromMenuItem(item, apps); if (app != null) { try { - return app.invoke(geo, caches, activity, search); + boolean result = app.invoke(geo, caches, (Activity) activity, search); + activity.invalidateOptionsMenuCompatible(); + return result; } catch (Exception e) { Log.e(Settings.tag, "CacheListAppFactory.onMenuItemSelected: " + e.toString()); } diff --git a/main/src/cgeo/geocaching/cgeocaches.java b/main/src/cgeo/geocaching/cgeocaches.java index 0ac8461..fc25d1b 100644 --- a/main/src/cgeo/geocaching/cgeocaches.java +++ b/main/src/cgeo/geocaching/cgeocaches.java @@ -977,24 +977,31 @@ public class cgeocaches extends AbstractListActivity { if (adapter != null) { adapter.switchSelectMode(); } + invalidateOptionsMenuCompatible(); return true; case MENU_REFRESH_STORED: refreshStored(); + invalidateOptionsMenuCompatible(); return true; case MENU_DROP_CACHES: dropStored(false); + invalidateOptionsMenuCompatible(); return false; case MENU_DROP_CACHES_AND_LIST: dropStored(true); + invalidateOptionsMenuCompatible(); return true; case MENU_IMPORT_GPX: importGpx(); + invalidateOptionsMenuCompatible(); return false; case MENU_CREATE_LIST: createList(null); + invalidateOptionsMenuCompatible(); return false; case MENU_DROP_LIST: removeList(true); + invalidateOptionsMenuCompatible(); return false; case MENU_RENAME_LIST: renameList(); @@ -1003,6 +1010,7 @@ public class cgeocaches extends AbstractListActivity { if (adapter != null) { adapter.invertSelection(); } + invalidateOptionsMenuCompatible(); return false; case MENU_SORT_DISTANCE: setComparator(item, null); @@ -1027,6 +1035,7 @@ public class cgeocaches extends AbstractListActivity { return false; case MENU_SWITCH_LIST: selectList(null); + invalidateOptionsMenuCompatible(); return false; case MENU_SORT_RATING: setComparator(item, new RatingComparator()); @@ -1074,9 +1083,11 @@ public class cgeocaches extends AbstractListActivity { return false; case MENU_REMOVE_FROM_HISTORY: removeFromHistoryCheck(); + invalidateOptionsMenuCompatible(); return false; case MENU_MOVE_TO_LIST: moveCachesToOtherList(); + invalidateOptionsMenuCompatible(); return true; } @@ -1284,6 +1295,7 @@ public class cgeocaches extends AbstractListActivity { if (adapter != null) { adapter.setFilter(filter); prepareFilterBar(); + invalidateOptionsMenuCompatible(); return true; } return false; @@ -2377,6 +2389,7 @@ public class cgeocaches extends AbstractListActivity { setLoadingCaches(); (new MoveCachesToListThread(listId, new MoveHandler())).start(); + invalidateOptionsMenuCompatible(); } private class MoveHandler extends Handler { diff --git a/main/src/cgeo/geocaching/cgeonavigate.java b/main/src/cgeo/geocaching/cgeonavigate.java index e0ffb80..e5600a9 100644 --- a/main/src/cgeo/geocaching/cgeonavigate.java +++ b/main/src/cgeo/geocaching/cgeonavigate.java @@ -232,8 +232,7 @@ public class cgeonavigate extends AbstractActivity { public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); - MenuItem item; - item = menu.findItem(1); + MenuItem item = menu.findItem(MENU_SWITCH_COMPASS_GPS); if (Settings.isUseCompass()) { item.setTitle(res.getString(R.string.use_gps)); } else { @@ -252,6 +251,7 @@ public class cgeonavigate extends AbstractActivity { } else if (id == MENU_SWITCH_COMPASS_GPS) { boolean oldSetting = Settings.isUseCompass(); Settings.setUseCompass(!oldSetting); + invalidateOptionsMenuCompatible(); if (oldSetting) { if (dir != null) { dir = app.removeDir(); diff --git a/main/src/cgeo/geocaching/cgeopopup.java b/main/src/cgeo/geocaching/cgeopopup.java index ace1abc..0e0f1b2 100644 --- a/main/src/cgeo/geocaching/cgeopopup.java +++ b/main/src/cgeo/geocaching/cgeopopup.java @@ -559,6 +559,7 @@ public class cgeopopup extends AbstractActivity { @Override public void run() { cache.store(cgeopopup.this, handler); + invalidateOptionsMenuCompatible(); } } diff --git a/main/src/cgeo/geocaching/compatibility/AndroidLevel11.java b/main/src/cgeo/geocaching/compatibility/AndroidLevel11.java new file mode 100644 index 0000000..acb9dca --- /dev/null +++ b/main/src/cgeo/geocaching/compatibility/AndroidLevel11.java @@ -0,0 +1,17 @@ +package cgeo.geocaching.compatibility; + +import android.app.Activity; + +/** + * Android level 11 support + * + * @author bananeweizen + * + */ +public class AndroidLevel11 implements AndroidLevel11Interface { + + public void invalidateOptionsMenu(final Activity activity) { + activity.invalidateOptionsMenu(); + } + +} diff --git a/main/src/cgeo/geocaching/compatibility/AndroidLevel11Dummy.java b/main/src/cgeo/geocaching/compatibility/AndroidLevel11Dummy.java new file mode 100644 index 0000000..cd18f67 --- /dev/null +++ b/main/src/cgeo/geocaching/compatibility/AndroidLevel11Dummy.java @@ -0,0 +1,17 @@ +package cgeo.geocaching.compatibility; + +import android.app.Activity; + +/** + * dummy class which has no functionality in the level 11 API + * + * @author bananeweizen + * + */ +public class AndroidLevel11Dummy implements AndroidLevel11Interface { + + public void invalidateOptionsMenu(final Activity activity) { + // do nothing + } + +} diff --git a/main/src/cgeo/geocaching/compatibility/AndroidLevel11Interface.java b/main/src/cgeo/geocaching/compatibility/AndroidLevel11Interface.java new file mode 100644 index 0000000..236e92d --- /dev/null +++ b/main/src/cgeo/geocaching/compatibility/AndroidLevel11Interface.java @@ -0,0 +1,8 @@ +package cgeo.geocaching.compatibility; + +import android.app.Activity; + +public interface AndroidLevel11Interface { + public void invalidateOptionsMenu(final Activity activity); + +} diff --git a/main/src/cgeo/geocaching/compatibility/Compatibility.java b/main/src/cgeo/geocaching/compatibility/Compatibility.java index 61e2629..b6d1061 100644 --- a/main/src/cgeo/geocaching/compatibility/Compatibility.java +++ b/main/src/cgeo/geocaching/compatibility/Compatibility.java @@ -24,6 +24,7 @@ public final class Compatibility { private static Method dataChangedMethod = null; private static Method getRotationMethod = null; + private static AndroidLevel11Interface level11; static { if (isLevel8) { @@ -36,6 +37,12 @@ public final class Compatibility { Log.e(Settings.tag, "Cannot load AndroidLevel8 class", e); } } + if (sdkVersion >= 11) { + level11 = new AndroidLevel11(); + } + else { + level11 = new AndroidLevel11Dummy(); + } } public static float getDirectionNow(final float directionNowPre, @@ -109,4 +116,8 @@ public final class Compatibility { activity.startActivity(intent); } + public static void invalidateOptionsMenu(final Activity activity) { + level11.invalidateOptionsMenu(activity); + } + } diff --git a/main/src/cgeo/geocaching/maps/CGeoMap.java b/main/src/cgeo/geocaching/maps/CGeoMap.java index 61d7a80..8d25bf9 100644 --- a/main/src/cgeo/geocaching/maps/CGeoMap.java +++ b/main/src/cgeo/geocaching/maps/CGeoMap.java @@ -29,7 +29,7 @@ import cgeo.geocaching.maps.interfaces.MapActivityImpl; import cgeo.geocaching.maps.interfaces.MapControllerImpl; import cgeo.geocaching.maps.interfaces.MapProvider; import cgeo.geocaching.maps.interfaces.MapViewImpl; -import cgeo.geocaching.maps.interfaces.OnDragListener; +import cgeo.geocaching.maps.interfaces.OnMapDragListener; import cgeo.geocaching.maps.interfaces.OtherCachersOverlayItemImpl; import cgeo.geocaching.utils.CancellableHandler; @@ -70,7 +70,7 @@ import java.util.Set; /** * Class representing the Map in c:geo */ -public class CGeoMap extends AbstractMap implements OnDragListener, ViewFactory { +public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFactory { /** Handler Messages */ private static final int HIDE_PROGRESS = 0; @@ -597,12 +597,14 @@ public class CGeoMap extends AbstractMap implements OnDragListener, ViewFactory switch (id) { case MENU_TRAIL_MODE: Settings.setMapTrail(!Settings.isMapTrail()); + ActivityMixin.invalidateOptionsMenu(activity); return true; case MENU_MAP_LIVE: Settings.setLiveMap(!Settings.isLiveMap()); liveChanged = true; search = null; searchIntent = null; + ActivityMixin.invalidateOptionsMenu(activity); return true; case MENU_STORE_CACHES: if (live && !isLoading() && CollectionUtils.isNotEmpty(caches)) { @@ -688,6 +690,7 @@ public class CGeoMap extends AbstractMap implements OnDragListener, ViewFactory overlayCaches.switchCircles(); mapView.repaintRequired(overlayCaches); + ActivityMixin.invalidateOptionsMenu(activity); return true; case MENU_AS_LIST: { final SearchResult searchResult = new SearchResult(); diff --git a/main/src/cgeo/geocaching/maps/google/GoogleMapView.java b/main/src/cgeo/geocaching/maps/google/GoogleMapView.java index 65e0ed1..9d9f3c9 100644 --- a/main/src/cgeo/geocaching/maps/google/GoogleMapView.java +++ b/main/src/cgeo/geocaching/maps/google/GoogleMapView.java @@ -12,7 +12,7 @@ import cgeo.geocaching.maps.interfaces.GeoPointImpl; import cgeo.geocaching.maps.interfaces.MapControllerImpl; import cgeo.geocaching.maps.interfaces.MapProjectionImpl; import cgeo.geocaching.maps.interfaces.MapViewImpl; -import cgeo.geocaching.maps.interfaces.OnDragListener; +import cgeo.geocaching.maps.interfaces.OnMapDragListener; import cgeo.geocaching.maps.interfaces.OverlayImpl; import cgeo.geocaching.maps.interfaces.OverlayImpl.overlayType; @@ -34,7 +34,7 @@ import android.widget.FrameLayout; public class GoogleMapView extends MapView implements MapViewImpl { private GestureDetector gestureDetector; - private OnDragListener onDragListener; + private OnMapDragListener onDragListener; public GoogleMapView(Context context, AttributeSet attrs) { super(context, attrs); @@ -151,7 +151,7 @@ public class GoogleMapView extends MapView implements MapViewImpl { } @Override - public void setOnDragListener(OnDragListener onDragListener) { + public void setOnDragListener(OnMapDragListener onDragListener) { this.onDragListener = onDragListener; } diff --git a/main/src/cgeo/geocaching/maps/interfaces/MapViewImpl.java b/main/src/cgeo/geocaching/maps/interfaces/MapViewImpl.java index ad35d26..08eaaf4 100644 --- a/main/src/cgeo/geocaching/maps/interfaces/MapViewImpl.java +++ b/main/src/cgeo/geocaching/maps/interfaces/MapViewImpl.java @@ -69,7 +69,7 @@ public interface MapViewImpl { */ void repaintRequired(GeneralOverlay overlay); - void setOnDragListener(OnDragListener onDragListener); + void setOnDragListener(OnMapDragListener onDragListener); /** * Indicates if overlay text or line colours should be dark (normal case) diff --git a/main/src/cgeo/geocaching/maps/interfaces/OnDragListener.java b/main/src/cgeo/geocaching/maps/interfaces/OnMapDragListener.java index 285aafa..0e51b32 100644 --- a/main/src/cgeo/geocaching/maps/interfaces/OnDragListener.java +++ b/main/src/cgeo/geocaching/maps/interfaces/OnMapDragListener.java @@ -6,7 +6,7 @@ package cgeo.geocaching.maps.interfaces; * @author cachapa * */ -public interface OnDragListener { +public interface OnMapDragListener { public void onDrag(); diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java index 9a64980..bcb6e61 100644 --- a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java +++ b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapView.java @@ -10,7 +10,7 @@ import cgeo.geocaching.maps.interfaces.GeoPointImpl; import cgeo.geocaching.maps.interfaces.MapControllerImpl; import cgeo.geocaching.maps.interfaces.MapProjectionImpl; import cgeo.geocaching.maps.interfaces.MapViewImpl; -import cgeo.geocaching.maps.interfaces.OnDragListener; +import cgeo.geocaching.maps.interfaces.OnMapDragListener; import cgeo.geocaching.maps.interfaces.OverlayImpl; import cgeo.geocaching.maps.interfaces.OverlayImpl.overlayType; @@ -33,7 +33,7 @@ import android.view.MotionEvent; public class MapsforgeMapView extends MapView implements MapViewImpl { private GestureDetector gestureDetector; - private OnDragListener onDragListener; + private OnMapDragListener onDragListener; public MapsforgeMapView(Context context, AttributeSet attrs) { super(context, attrs); @@ -205,7 +205,7 @@ public class MapsforgeMapView extends MapView implements MapViewImpl { } @Override - public void setOnDragListener(OnDragListener onDragListener) { + public void setOnDragListener(OnMapDragListener onDragListener) { this.onDragListener = onDragListener; } |