startactivity: workaround for intent mismatch

Fixes the infamous issue that a new activity is started every time
from the laucnher if open was pressed on the app install screen.

#470
refactor-toolbar
Floens 7 years ago
parent afbde77b4a
commit bbfb4cd73b
  1. 33
      Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java

@ -42,9 +42,9 @@ import org.floens.chan.core.manager.WatchManager;
import org.floens.chan.core.model.orm.Board; import org.floens.chan.core.model.orm.Board;
import org.floens.chan.core.model.orm.Loadable; import org.floens.chan.core.model.orm.Loadable;
import org.floens.chan.core.model.orm.Pin; import org.floens.chan.core.model.orm.Pin;
import org.floens.chan.core.repository.SiteRepository;
import org.floens.chan.core.settings.ChanSettings; import org.floens.chan.core.settings.ChanSettings;
import org.floens.chan.core.site.Site; import org.floens.chan.core.site.Site;
import org.floens.chan.core.repository.SiteRepository;
import org.floens.chan.core.site.SiteResolver; import org.floens.chan.core.site.SiteResolver;
import org.floens.chan.core.site.SiteService; import org.floens.chan.core.site.SiteService;
import org.floens.chan.ui.controller.BrowseController; import org.floens.chan.ui.controller.BrowseController;
@ -86,6 +86,8 @@ public class StartActivity extends AppCompatActivity implements NfcAdapter.Creat
private RuntimePermissionsHelper runtimePermissionsHelper; private RuntimePermissionsHelper runtimePermissionsHelper;
private VersionHandler versionHandler; private VersionHandler versionHandler;
private boolean intentMismatchWorkaroundActive = false;
@Inject @Inject
DatabaseManager databaseManager; DatabaseManager databaseManager;
@ -103,6 +105,10 @@ public class StartActivity extends AppCompatActivity implements NfcAdapter.Creat
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
inject(this); inject(this);
if (intentMismatchWorkaround()) {
return;
}
ThemeHelper.getInstance().setupContext(this); ThemeHelper.getInstance().setupContext(this);
imagePickDelegate = new ImagePickDelegate(this); imagePickDelegate = new ImagePickDelegate(this);
@ -467,6 +473,10 @@ public class StartActivity extends AppCompatActivity implements NfcAdapter.Creat
protected void onDestroy() { protected void onDestroy() {
super.onDestroy(); super.onDestroy();
if (intentMismatchWorkaround()) {
return;
}
// TODO: clear whole stack? // TODO: clear whole stack?
stackTop().onHide(); stackTop().onHide();
stackTop().onDestroy(); stackTop().onDestroy();
@ -483,4 +493,25 @@ public class StartActivity extends AppCompatActivity implements NfcAdapter.Creat
private Controller stackTop() { private Controller stackTop() {
return stack.get(stack.size() - 1); return stack.get(stack.size() - 1);
} }
private boolean intentMismatchWorkaround() {
// Workaround for an intent mismatch that causes a new activity instance to be started
// every time the app is launched from the launcher.
// See https://issuetracker.google.com/issues/36907463
if (intentMismatchWorkaroundActive) {
return true;
}
if (!isTaskRoot()) {
Intent intent = getIntent();
if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) &&
Intent.ACTION_MAIN.equals(intent.getAction())) {
Logger.w(TAG, "Workaround for intent mismatch.");
intentMismatchWorkaroundActive = true;
finish();
return true;
}
}
return false;
}
} }

Loading…
Cancel
Save