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/src/cgeo/geocaching/activity | |
| parent | b91529a6aaf8ac2460ec18cddcafc0d41f83f8b6 (diff) | |
| download | cgeo-a5e7f74edd2f24c765a8ea87540782e26dd26bf4.zip cgeo-a5e7f74edd2f24c765a8ea87540782e26dd26bf4.tar.gz cgeo-a5e7f74edd2f24c765a8ea87540782e26dd26bf4.tar.bz2 | |
fix #3871: provide up navigation
Diffstat (limited to 'main/src/cgeo/geocaching/activity')
4 files changed, 30 insertions, 27 deletions
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); |
