author | Chenxia Liu <liuche@mozilla.com> |
Tue, 30 Jul 2013 11:45:25 -0700 | |
changeset 152878 | dd1908156c2f3abbb60b0e1d97cc2a3356725a93 |
parent 152877 | b5506e604ae47f5b764450bfef41f5245fbd9529 |
child 152879 | 4aeb00521c9dc231465abbd7f74a693b0641d4f0 |
push id | 2859 |
push user | akeybl@mozilla.com |
push date | Mon, 16 Sep 2013 19:14:59 +0000 |
treeherder | mozilla-beta@87d3c51cd2bf [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | kats |
bugs | 896992 |
milestone | 25.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/mobile/android/base/GeckoApp.java +++ b/mobile/android/base/GeckoApp.java @@ -147,16 +147,17 @@ abstract public class GeckoApp public static final String ACTION_ALERT_CALLBACK = "org.mozilla.gecko.ACTION_ALERT_CALLBACK"; public static final String ACTION_WEBAPP_PREFIX = "org.mozilla.gecko.WEBAPP"; public static final String ACTION_DEBUG = "org.mozilla.gecko.DEBUG"; public static final String ACTION_BOOKMARK = "org.mozilla.gecko.BOOKMARK"; public static final String ACTION_LOAD = "org.mozilla.gecko.LOAD"; public static final String ACTION_LAUNCH_SETTINGS = "org.mozilla.gecko.SETTINGS"; public static final String ACTION_INIT_PW = "org.mozilla.gecko.INIT_PW"; + public static final String SAVED_STATE_INTENT_HANDLED = "intentHandled"; public static final String SAVED_STATE_IN_BACKGROUND = "inBackground"; public static final String SAVED_STATE_PRIVATE_SESSION = "privateSession"; public static final String PREFS_NAME = "GeckoApp"; public static final String PREFS_OOM_EXCEPTION = "OOMException"; public static final String PREFS_WAS_STOPPED = "wasStopped"; public static final String PREFS_CRASHED = "crashed"; public static final String PREFS_VERSION_CODE = "versionCode"; @@ -179,16 +180,17 @@ abstract public class GeckoApp public List<GeckoAppShell.AppStateListener> mAppStateListeners; private static GeckoApp sAppContext; protected MenuPanel mMenuPanel; protected Menu mMenu; private static GeckoThread sGeckoThread; protected GeckoProfile mProfile; public static int mOrientation; protected boolean mIsRestoringActivity; + private boolean mIntentHandled; private String mCurrentResponse = ""; public static boolean sIsUsingCustomProfile = false; private ContactService mContactService; private PromptService mPromptService; private TextSelection mTextSelection; protected DoorHangerPopup mDoorHangerPopup; @@ -487,16 +489,21 @@ abstract public class GeckoApp protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); if (outState == null) outState = new Bundle(); outState.putBoolean(SAVED_STATE_IN_BACKGROUND, isApplicationInBackground()); outState.putString(SAVED_STATE_PRIVATE_SESSION, mPrivateBrowsingSession); + + // Bug 896992 - Replace intent action with ACTION_MAIN on restart. + if (mIntentHandled) { + outState.putBoolean(SAVED_STATE_INTENT_HANDLED, true); + } } void handleFaviconRequest(final String url) { (new UiAsyncTask<Void, Void, String>(ThreadUtils.getBackgroundHandler()) { @Override public String doInBackground(Void... params) { return Favicons.getInstance().getFaviconUrlForPageUrl(url); } @@ -1329,16 +1336,26 @@ abstract public class GeckoApp savedInstanceState.getBoolean(SAVED_STATE_IN_BACKGROUND, false); // Don't log OOM-kills if only one activity was destroyed. (For example // from "Don't keep activities" on ICS) if (!wasInBackground && !mIsRestoringActivity) { Telemetry.HistogramAdd("FENNEC_WAS_KILLED", 1); } + if (savedInstanceState.getBoolean(SAVED_STATE_INTENT_HANDLED, false)) { + Intent thisIntent = getIntent(); + // Bug 896992 - This intent has already been handled, clear the intent action. + thisIntent.setAction(Intent.ACTION_MAIN); + setIntent(thisIntent); + + // Persist this flag for reincarnations of this Activity Intent. + mIntentHandled = true; + } + mPrivateBrowsingSession = savedInstanceState.getString(SAVED_STATE_PRIVATE_SESSION); } // Perform background initialization. ThreadUtils.postToBackgroundThread(new Runnable() { @Override public void run() { final SharedPreferences prefs = GeckoApp.getAppSharedPreferences(); @@ -1511,16 +1528,17 @@ abstract public class GeckoApp GeckoThread.setLaunchState(GeckoThread.LaunchState.Launching); sGeckoThread.start(); } }, 1000 * 5 /* 5 seconds */); } // Check if launched from data reporting notification. if (ACTION_LAUNCH_SETTINGS.equals(action)) { + mIntentHandled = true; Intent settingsIntent = new Intent(GeckoApp.this, GeckoPreferences.class); // Copy extras. settingsIntent.putExtras(intent); startActivity(settingsIntent); } //app state callbacks mAppStateListeners = new LinkedList<GeckoAppShell.AppStateListener>(); @@ -1915,17 +1933,18 @@ abstract public class GeckoApp } else if (ACTION_BOOKMARK.equals(action)) { String uri = getURIFromIntent(intent); GeckoAppShell.sendEventToGecko(GeckoEvent.createBookmarkLoadEvent(uri)); } else if (Intent.ACTION_SEARCH.equals(action)) { String uri = getURIFromIntent(intent); GeckoAppShell.sendEventToGecko(GeckoEvent.createURILoadEvent(uri)); } else if (ACTION_ALERT_CALLBACK.equals(action)) { processAlertCallback(intent); - } if (ACTION_LAUNCH_SETTINGS.equals(action)) { + } else if (ACTION_LAUNCH_SETTINGS.equals(action)) { + mIntentHandled = true; // Check if launched from data reporting notification. Intent settingsIntent = new Intent(GeckoApp.this, GeckoPreferences.class); // Copy extras. settingsIntent.putExtras(intent); startActivity(settingsIntent); } }