From 0630e2482ff6a3d26015db7585ca3bb874c57ddd Mon Sep 17 00:00:00 2001 From: Roger Yang Date: Fri, 21 Feb 2020 09:02:13 -0500 Subject: [PATCH] Closes #8544: Activity should be reused when opening intents from other apps (#8547) --- app/src/main/AndroidManifest.xml | 9 ++++++++- .../org/mozilla/fenix/IntentReceiverActivity.kt | 13 +++++++++++-- .../mozilla/fenix/browser/BaseBrowserFragment.kt | 1 - 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be1750d5c..65efb553a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -108,7 +108,14 @@ android:taskAffinity="" android:windowSoftInputMode="adjustResize|stateAlwaysHidden" /> - + + diff --git a/app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt b/app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt index ed60886e6..8d86a5484 100644 --- a/app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt @@ -57,6 +57,15 @@ class IntentReceiverActivity : Activity() { modeDependentProcessors + NewTabShortcutIntentProcessor() + // Explicitly remove the new task and clear task flags (Our browser activity is a single + // task activity and we never want to start a second task here). + intent.flags = intent.flags and Intent.FLAG_ACTIVITY_NEW_TASK.inv() + intent.flags = intent.flags and Intent.FLAG_ACTIVITY_CLEAR_TASK.inv() + + // IntentReceiverActivity is started with the "excludeFromRecents" flag (set in manifest). We + // do not want to propagate this flag from the intent receiver activity to the browser. + intent.flags = intent.flags and Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS.inv() + // Call process for side effects, short on the first that returns true intentProcessors.any { it.process(intent) } @@ -66,8 +75,8 @@ class IntentReceiverActivity : Activity() { intent.setClassName(applicationContext, intentProcessorType.activityClassName) intent.putExtra(HomeActivity.OPEN_TO_BROWSER, intentProcessorType.shouldOpenToBrowser(intent)) - // finish() before starting another activity. Don't keep this on the activities back stack. - finish() startActivity(intent) + // must finish() after starting the other activity + finish() } } diff --git a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt index adb770c4f..db1e49364 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -191,7 +191,6 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session }, openInFenixIntent = Intent(context, IntentReceiverActivity::class.java).apply { action = Intent.ACTION_VIEW - flags = Intent.FLAG_ACTIVITY_NEW_TASK }, bookmarkTapped = { lifecycleScope.launch { bookmarkTapped(it) } }, scope = lifecycleScope,