diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2014-05-24 16:09:36 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2014-05-24 16:09:36 +0200 |
| commit | a5e7f74edd2f24c765a8ea87540782e26dd26bf4 (patch) | |
| tree | ce601a632dc842c977943ed1d773eb985d00c6e3 /main | |
| parent | b91529a6aaf8ac2460ec18cddcafc0d41f83f8b6 (diff) | |
| download | cgeo-a5e7f74edd2f24c765a8ea87540782e26dd26bf4.zip cgeo-a5e7f74edd2f24c765a8ea87540782e26dd26bf4.tar.gz cgeo-a5e7f74edd2f24c765a8ea87540782e26dd26bf4.tar.bz2 | |
fix #3871: provide up navigation
Diffstat (limited to 'main')
19 files changed, 83 insertions, 68 deletions
diff --git a/main/AndroidManifest.xml b/main/AndroidManifest.xml index 4f0135e..0268762 100644 --- a/main/AndroidManifest.xml +++ b/main/AndroidManifest.xml @@ -22,7 +22,6 @@ <uses-feature android:name="android.hardware.screen.portrait" android:required="false" /> - <uses-feature android:name="android.hardware.nfc" android:required="false" /> @@ -84,12 +83,16 @@ android:configChanges="keyboardHidden|orientation" android:label="@string/app_name" android:launchMode="singleTop" + android:parentActivityName="cgeo.geocaching.MainActivity" android:windowSoftInputMode="stateHidden" > <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data + android:name="android.support.PARENT_ACTIVITY" + android:value="cgeo.geocaching.MainActivity" /> + <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> </activity> @@ -104,13 +107,21 @@ android:name=".AboutActivity" android:configChanges="keyboardHidden|orientation" android:label="@string/about" + android:parentActivityName="cgeo.geocaching.MainActivity" android:windowSoftInputMode="stateHidden" > + <meta-data + android:name="android.support.PARENT_ACTIVITY" + android:value="cgeo.geocaching.MainActivity" /> </activity> <activity android:name=".UsefulAppsActivity" android:configChanges="keyboardHidden|orientation" android:label="@string/helpers" + android:parentActivityName="cgeo.geocaching.MainActivity" android:windowSoftInputMode="stateHidden" > + <meta-data + android:name="android.support.PARENT_ACTIVITY" + android:value="cgeo.geocaching.MainActivity" /> </activity> <activity android:name=".twitter.TwitterAuthorizationActivity" @@ -139,24 +150,40 @@ android:name=".NavigateAnyPointActivity" android:configChanges="keyboardHidden|orientation" android:label="@string/search_destination" + android:parentActivityName="cgeo.geocaching.MainActivity" android:windowSoftInputMode="stateHidden" > + <meta-data + android:name="android.support.PARENT_ACTIVITY" + android:value="cgeo.geocaching.MainActivity" /> </activity> <activity android:name=".AddressListActivity" android:configChanges="keyboardHidden|orientation" android:label="@string/search_address_result" + android:parentActivityName="cgeo.geocaching.SearchActivity" android:windowSoftInputMode="stateHidden" > + <meta-data + android:name="android.support.PARENT_ACTIVITY" + android:value="cgeo.geocaching.SearchActivity" /> </activity> <activity android:name=".settings.SettingsActivity" android:configChanges="keyboardHidden|orientation" android:label="@string/settings_titlebar" + android:parentActivityName="cgeo.geocaching.MainActivity" android:theme="@style/settings" > + <meta-data + android:name="android.support.PARENT_ACTIVITY" + android:value="cgeo.geocaching.MainActivity" /> </activity> <activity android:name=".CacheListActivity" android:configChanges="keyboardHidden|orientation|screenSize" - android:label="@string/app_name" > + android:label="@string/app_name" + android:parentActivityName="cgeo.geocaching.MainActivity" > + <meta-data + android:name="android.support.PARENT_ACTIVITY" + android:value="cgeo.geocaching.MainActivity" /> <!-- intent filter for local gpx files --> <intent-filter> @@ -425,9 +452,12 @@ <activity android:name=".SelectMapfileActivity" android:configChanges="keyboardHidden|orientation" - android:label="@string/map_file_select_title" > + android:label="@string/map_file_select_title" + android:parentActivityName="cgeo.geocaching.settings.SettingsActivity" > + <meta-data + android:name="android.support.PARENT_ACTIVITY" + android:value="cgeo.geocaching.settings.SettingsActivity" /> </activity> - <activity android:name="WaypointPopup" android:configChanges="keyboardHidden|orientation" @@ -469,7 +499,8 @@ </activity> <activity android:name=".CreateShortcutActivity" - android:label="@string/cgeo_shortcut" > + android:label="@string/cgeo_shortcut" + android:parentActivityName="cgeo.geocaching.MainActivity" > <intent-filter> <action android:name="android.intent.action.CREATE_SHORTCUT" /> diff --git a/main/res/layout/actionbar_maps.xml b/main/res/layout/actionbar_maps.xml index 348342c..0e3dc0e 100644 --- a/main/res/layout/actionbar_maps.xml +++ b/main/res/layout/actionbar_maps.xml @@ -13,7 +13,7 @@ <ImageView style="@style/action_bar_action" android:layout_marginLeft="-13dp" - android:onClick="goHome" /> + android:onClick="navigateUp" /> <View style="@style/action_bar_separator" /> diff --git a/main/res/layout/addresslist_activity.xml b/main/res/layout/addresslist_activity.xml index e5c6491..3410137 100644 --- a/main/res/layout/addresslist_activity.xml +++ b/main/res/layout/addresslist_activity.xml @@ -4,8 +4,6 @@ android:layout_height="fill_parent" android:orientation="vertical" > - <include layout="@layout/actionbar_maps" /> - <ListView android:id="@android:id/list" android:layout_width="fill_parent" diff --git a/main/src/cgeo/geocaching/AbstractLoggingActivity.java b/main/src/cgeo/geocaching/AbstractLoggingActivity.java index 3b0f78d..75dc3bf 100644 --- a/main/src/cgeo/geocaching/AbstractLoggingActivity.java +++ b/main/src/cgeo/geocaching/AbstractLoggingActivity.java @@ -79,7 +79,7 @@ public abstract class AbstractLoggingActivity extends AbstractActionBarActivity return true; } - return false; + return super.onOptionsItemSelected(item); } protected abstract LogContext getLogContext(); diff --git a/main/src/cgeo/geocaching/CompassActivity.java b/main/src/cgeo/geocaching/CompassActivity.java index e5c38a3..1d86c49 100644 --- a/main/src/cgeo/geocaching/CompassActivity.java +++ b/main/src/cgeo/geocaching/CompassActivity.java @@ -217,7 +217,7 @@ public class CompassActivity extends AbstractActionBarActivity { return true; } } - return false; + return super.onOptionsItemSelected(item); } private void setTitle() { diff --git a/main/src/cgeo/geocaching/LogCacheActivity.java b/main/src/cgeo/geocaching/LogCacheActivity.java index 5149dbc..15bc0ea 100644 --- a/main/src/cgeo/geocaching/LogCacheActivity.java +++ b/main/src/cgeo/geocaching/LogCacheActivity.java @@ -410,10 +410,6 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia @Override public boolean onOptionsItemSelected(MenuItem item) { - if (super.onOptionsItemSelected(item)) { - return true; - } - final int id = item.getItemId(); if (id >= 10 && id <= 19) { rating = (id - 9) / 2.0f; @@ -423,8 +419,7 @@ public class LogCacheActivity extends AbstractLoggingActivity implements DateDia updatePostButtonText(); return true; } - - return false; + return super.onOptionsItemSelected(item); } @Override diff --git a/main/src/cgeo/geocaching/MainActivity.java b/main/src/cgeo/geocaching/MainActivity.java index 8de27b0..cf323bb 100644 --- a/main/src/cgeo/geocaching/MainActivity.java +++ b/main/src/cgeo/geocaching/MainActivity.java @@ -326,9 +326,8 @@ public class MainActivity extends AbstractActionBarActivity { case R.id.menu_gosearch: onSearchRequested(); return true; - default: - return super.onOptionsItemSelected(item); } + return super.onOptionsItemSelected(item); } private void startScannerApplication() { diff --git a/main/src/cgeo/geocaching/NavigateAnyPointActivity.java b/main/src/cgeo/geocaching/NavigateAnyPointActivity.java index c9b1b3f..39531f1 100644 --- a/main/src/cgeo/geocaching/NavigateAnyPointActivity.java +++ b/main/src/cgeo/geocaching/NavigateAnyPointActivity.java @@ -361,9 +361,8 @@ public class NavigateAnyPointActivity extends AbstractActionBarActivity implemen case R.id.menu_navigate: NavigationAppFactory.showNavigationMenu(this, null, null, coords); return true; - default: - return super.onOptionsItemSelected(item); } + return super.onOptionsItemSelected(item); } private void addToHistory(final Geopoint coords) { diff --git a/main/src/cgeo/geocaching/TrackableActivity.java b/main/src/cgeo/geocaching/TrackableActivity.java index ee45ba7..29ffe45 100644 --- a/main/src/cgeo/geocaching/TrackableActivity.java +++ b/main/src/cgeo/geocaching/TrackableActivity.java @@ -254,9 +254,8 @@ public class TrackableActivity extends AbstractViewPagerActivity<TrackableActivi case R.id.menu_browser_trackable: startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(trackable.getBrowserUrl()))); return true; - default: - return false; } + return super.onOptionsItemSelected(item); } @Override diff --git a/main/src/cgeo/geocaching/activity/AbstractActivity.java b/main/src/cgeo/geocaching/activity/AbstractActivity.java index d542b13..05dde40 100644 --- a/main/src/cgeo/geocaching/activity/AbstractActivity.java +++ b/main/src/cgeo/geocaching/activity/AbstractActivity.java @@ -49,11 +49,6 @@ public abstract class AbstractActivity extends ActionBarActivity implements IAbs this.keepScreenOn = keepScreenOn; } - @Override - final public void goHome(final View view) { - ActivityMixin.navigateToMain(this); - } - final protected void showProgress(final boolean show) { ActivityMixin.showProgress(this, show); } @@ -83,9 +78,8 @@ public abstract class AbstractActivity extends ActionBarActivity implements IAbs @Override public boolean onOptionsItemSelected(MenuItem item) { - if (item.getItemId()== android.R.id.home) { - ActivityMixin.navigateToMain(this); - return true; + if (item.getItemId() == android.R.id.home) { + return ActivityMixin.navigateUp(this); } return super.onOptionsItemSelected(item); } @@ -208,8 +202,9 @@ public abstract class AbstractActivity extends ActionBarActivity implements IAbs } protected void initializeAndroidBeam(ActivitySharingInterface sharingInterface) { - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH) + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH) { initializeICSAndroidBeam(sharingInterface); + } } @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) diff --git a/main/src/cgeo/geocaching/activity/AbstractListActivity.java b/main/src/cgeo/geocaching/activity/AbstractListActivity.java index eaa8a96..eac191a 100644 --- a/main/src/cgeo/geocaching/activity/AbstractListActivity.java +++ b/main/src/cgeo/geocaching/activity/AbstractListActivity.java @@ -5,7 +5,6 @@ import cgeo.geocaching.CgeoApplication; import android.content.res.Resources; import android.os.Bundle; import android.view.MenuItem; -import android.view.View; import android.view.Window; public abstract class AbstractListActivity extends ActionBarListActivity implements @@ -24,11 +23,6 @@ public abstract class AbstractListActivity extends ActionBarListActivity impleme this.keepScreenOn = keepScreenOn; } - @Override - final public void goHome(View view) { - ActivityMixin.navigateToMain(this); - } - final public void showProgress(final boolean show) { ActivityMixin.showProgress(this, show); } @@ -41,7 +35,7 @@ public abstract class AbstractListActivity extends ActionBarListActivity impleme public final void showToast(String text) { ActivityMixin.showToast(this, text); } - + @Override public final void showShortToast(String text) { ActivityMixin.showShortToast(this, text); @@ -56,16 +50,14 @@ public abstract class AbstractListActivity extends ActionBarListActivity impleme initUpAction(); } - protected void initUpAction() - { + protected void initUpAction() { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId()== android.R.id.home) { - ActivityMixin.navigateToMain(this); - return true; + return ActivityMixin.navigateUp(this); } return super.onOptionsItemSelected(item); } diff --git a/main/src/cgeo/geocaching/activity/ActivityMixin.java b/main/src/cgeo/geocaching/activity/ActivityMixin.java index c43e1bd..f699112 100644 --- a/main/src/cgeo/geocaching/activity/ActivityMixin.java +++ b/main/src/cgeo/geocaching/activity/ActivityMixin.java @@ -1,15 +1,16 @@ package cgeo.geocaching.activity; -import cgeo.geocaching.MainActivity; import cgeo.geocaching.R; import cgeo.geocaching.compatibility.Compatibility; import cgeo.geocaching.settings.Settings; import org.apache.commons.lang3.StringUtils; +import org.eclipse.jdt.annotation.NonNull; import android.app.Activity; import android.content.Intent; import android.support.v4.app.NavUtils; +import android.support.v4.app.TaskStackBuilder; import android.support.v7.app.ActionBarActivity; import android.view.Gravity; import android.view.WindowManager; @@ -114,8 +115,26 @@ public final class ActivityMixin { editText.setSelection(newCursor); } - public static void navigateToMain(Activity activity) { - final Intent main = new Intent(activity, MainActivity.class); - NavUtils.navigateUpTo(activity, main); + public static boolean navigateUp(@NonNull final Activity activity) { + // see http://developer.android.com/training/implementing-navigation/ancestral.html + Intent upIntent = NavUtils.getParentActivityIntent(activity); + if (upIntent == null) { + activity.finish(); + return true; + } + if (NavUtils.shouldUpRecreateTask(activity, upIntent)) { + // This activity is NOT part of this app's task, so create a new task + // when navigating up, with a synthesized back stack. + TaskStackBuilder.create(activity) + // Add all of this activity's parents to the back stack + .addNextIntentWithParentStack(upIntent) + // Navigate up to the closest parent + .startActivities(); + } else { + // This activity is part of this app's task, so simply + // navigate up to the logical parent activity. + NavUtils.navigateUpTo(activity, upIntent); + } + return true; } } diff --git a/main/src/cgeo/geocaching/activity/IAbstractActivity.java b/main/src/cgeo/geocaching/activity/IAbstractActivity.java index 7ca2322..4fb6a2a 100644 --- a/main/src/cgeo/geocaching/activity/IAbstractActivity.java +++ b/main/src/cgeo/geocaching/activity/IAbstractActivity.java @@ -1,11 +1,8 @@ package cgeo.geocaching.activity; -import android.view.View; public interface IAbstractActivity { - public void goHome(View view); - public void showToast(String text); public void showShortToast(String text); diff --git a/main/src/cgeo/geocaching/maps/AbstractMap.java b/main/src/cgeo/geocaching/maps/AbstractMap.java index aff9c75..2eceadb 100644 --- a/main/src/cgeo/geocaching/maps/AbstractMap.java +++ b/main/src/cgeo/geocaching/maps/AbstractMap.java @@ -9,7 +9,6 @@ import android.os.Build; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; -import android.view.View; import android.view.Window; /** @@ -70,8 +69,6 @@ public abstract class AbstractMap { return mapActivity.superOnOptionsItemSelected(item); } - public abstract void goHome(View view); - public abstract void onSaveInstanceState(final Bundle outState); } diff --git a/main/src/cgeo/geocaching/maps/CGeoMap.java b/main/src/cgeo/geocaching/maps/CGeoMap.java index 9c67723..978d3af 100644 --- a/main/src/cgeo/geocaching/maps/CGeoMap.java +++ b/main/src/cgeo/geocaching/maps/CGeoMap.java @@ -706,7 +706,7 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto final int id = item.getItemId(); switch (id) { case android.R.id.home: - ActivityMixin.navigateToMain(activity); + ActivityMixin.navigateUp(activity); return true; case R.id.menu_trail_mode: Settings.setMapTrail(!Settings.isMapTrail()); @@ -1593,12 +1593,6 @@ public class CGeoMap extends AbstractMap implements OnMapDragListener, ViewFacto return mapItemFactory.getGeoPointBase(coords); } - // close activity and open homescreen - @Override - public void goHome(View view) { - ActivityMixin.navigateToMain(activity); - } - @Override public View makeView() { ImageView imageView = new ImageView(activity); diff --git a/main/src/cgeo/geocaching/maps/google/GoogleMapActivity.java b/main/src/cgeo/geocaching/maps/google/GoogleMapActivity.java index 8a1bad6..2a29cc9 100644 --- a/main/src/cgeo/geocaching/maps/google/GoogleMapActivity.java +++ b/main/src/cgeo/geocaching/maps/google/GoogleMapActivity.java @@ -98,8 +98,8 @@ public class GoogleMapActivity extends MapActivity implements MapActivityImpl, F } @Override - public void goHome(View view) { - ActivityMixin.navigateToMain(this); + public void navigateUp(View view) { + ActivityMixin.navigateUp(this); } @Override diff --git a/main/src/cgeo/geocaching/maps/interfaces/MapActivityImpl.java b/main/src/cgeo/geocaching/maps/interfaces/MapActivityImpl.java index 08309f4..3596d5f 100644 --- a/main/src/cgeo/geocaching/maps/interfaces/MapActivityImpl.java +++ b/main/src/cgeo/geocaching/maps/interfaces/MapActivityImpl.java @@ -33,5 +33,5 @@ public interface MapActivityImpl { boolean superOnOptionsItemSelected(MenuItem item); - public abstract void goHome(View view); + public abstract void navigateUp(View view); } diff --git a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapActivity.java b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapActivity.java index a0384b8..94213ba 100644 --- a/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapActivity.java +++ b/main/src/cgeo/geocaching/maps/mapsforge/MapsforgeMapActivity.java @@ -1,5 +1,6 @@ package cgeo.geocaching.maps.mapsforge; +import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.activity.FilteredActivity; import cgeo.geocaching.maps.AbstractMap; import cgeo.geocaching.maps.CGeoMap; @@ -111,10 +112,9 @@ public class MapsforgeMapActivity extends MapActivity implements MapActivityImpl return super.onPrepareOptionsMenu(menu); } - // close activity and open homescreen @Override - public void goHome(View view) { - mapBase.goHome(view); + public void navigateUp(View view) { + ActivityMixin.navigateUp(this); } @Override diff --git a/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapActivity024.java b/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapActivity024.java index 33ed30e..daeb2b8 100644 --- a/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapActivity024.java +++ b/main/src/cgeo/geocaching/maps/mapsforge/v024/MapsforgeMapActivity024.java @@ -1,5 +1,6 @@ package cgeo.geocaching.maps.mapsforge.v024; +import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.activity.FilteredActivity; import cgeo.geocaching.maps.AbstractMap; import cgeo.geocaching.maps.CGeoMap; @@ -111,10 +112,9 @@ public class MapsforgeMapActivity024 extends MapActivity implements MapActivityI return super.onPrepareOptionsMenu(menu); } - // close activity and open homescreen @Override - public void goHome(View view) { - mapBase.goHome(view); + public void navigateUp(View view) { + ActivityMixin.navigateUp(this); } @Override |
