diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index 6d4fb8eb67..3750760bf3 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -115,6 +115,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB private boolean exit = false; private boolean searching = false; + private int lastBackStackCount = 0; private Snackbar lastSnackbar = null; static final int REQUEST_UNIFIED = 1; @@ -148,12 +149,18 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState, false); + if (savedInstanceState != null) { + Intent intent = savedInstanceState.getParcelable("fair:intent"); + if (intent != null) + setIntent(intent); + } + // Workaround stale intents from recent apps screen boolean recents = (getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0; if (recents) { Intent intent = getIntent(); + Log.i("Stale intent=" + intent); intent.setAction(null); - setIntent(intent); } LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this); @@ -427,6 +434,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB @Override protected void onSaveInstanceState(Bundle outState) { + outState.putParcelable("fair:intent", getIntent()); outState.putBoolean("fair:toggle", drawerToggle.isDrawerIndicatorEnabled()); outState.putBoolean("fair:searching", searching); super.onSaveInstanceState(outState); @@ -718,6 +726,13 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB if (count == 0) finish(); else { + if (count < lastBackStackCount) { + Intent intent = getIntent(); + intent.setAction(null); + Log.i("Reset intent"); + } + lastBackStackCount = count; + if (drawerLayout.isDrawerOpen(drawerContainer) && !drawerLayout.isLocked(drawerContainer)) drawerLayout.closeDrawer(drawerContainer); @@ -1018,7 +1033,6 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB // Refresh from widget if (intent.getBooleanExtra("refresh", false)) { intent.removeExtra("refresh"); - setIntent(intent); int version = intent.getIntExtra("version", 0); @@ -1030,9 +1044,6 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB String action = intent.getAction(); if (action != null) { - intent.setAction(null); - setIntent(intent); - if (action.startsWith("unified")) { if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) getSupportFragmentManager().popBackStack("unified", 0); @@ -1041,6 +1052,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB Intent clear = new Intent(this, ServiceUI.class) .setAction(action.replace("unified", "clear")); startService(clear); + intent.setAction("unified"); } } else if (action.startsWith("folders")) { @@ -1066,6 +1078,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB Intent clear = new Intent(this, ServiceUI.class) .setAction("clear:" + parts[2]); startService(clear); + intent.setAction("folder:" + folder); } } else if ("why".equals(action)) { @@ -1079,12 +1092,16 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB Helper.viewFAQ(this, 2); } + intent.setAction(null); + } else if ("alert".equals(action) || "error".equals(action)) { if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) getSupportFragmentManager().popBackStack("unified", 0); Helper.viewFAQ(this, "alert".equals(action) ? 23 : 22); + intent.setAction(null); + } else if ("outbox".equals(action)) { if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) getSupportFragmentManager().popBackStack("unified", 0); @@ -1139,7 +1156,6 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB } intent.removeExtra(Intent.EXTRA_PROCESS_TEXT); - setIntent(intent); } }