Richard Pospesel pushed to branch tor-browser-102.2.1-12.5-1 at The Tor Project / Applications / fenix
Commits:
-
667092ef
by Tommy Webb at 2023-02-02T23:23:07+00:00
2 changed files:
- app/src/main/java/org/mozilla/fenix/HomeActivity.kt
- app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt
Changes:
... | ... | @@ -129,6 +129,7 @@ import org.mozilla.fenix.tabstray.TabsTrayFragment |
129 | 129 | import org.mozilla.fenix.tabstray.TabsTrayFragmentDirections
|
130 | 130 | import org.mozilla.fenix.theme.DefaultThemeManager
|
131 | 131 | import org.mozilla.fenix.theme.ThemeManager
|
132 | +import org.mozilla.fenix.tor.TorEvents
|
|
132 | 133 | import org.mozilla.fenix.trackingprotection.TrackingProtectionPanelDialogFragmentDirections
|
133 | 134 | import org.mozilla.fenix.utils.BrowsersCache
|
134 | 135 | import org.mozilla.fenix.utils.Settings
|
... | ... | @@ -533,6 +534,24 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity { |
533 | 534 | * Handles intents received when the activity is open.
|
534 | 535 | */
|
535 | 536 | final override fun onNewIntent(intent: Intent?) {
|
537 | + if (intent?.action == ACTION_MAIN || components.torController.isConnected) {
|
|
538 | + onNewIntentInternal(intent)
|
|
539 | + } else {
|
|
540 | + // Wait until Tor is connected to handle intents from external apps for links, search, etc.
|
|
541 | + components.torController.registerTorListener(object : TorEvents {
|
|
542 | + override fun onTorConnected() {
|
|
543 | + components.torController.unregisterTorListener(this)
|
|
544 | + onNewIntentInternal(intent)
|
|
545 | + }
|
|
546 | + override fun onTorConnecting() { /* no-op */ }
|
|
547 | + override fun onTorStopped() { /* no-op */ }
|
|
548 | + override fun onTorStatusUpdate(entry: String?, status: String?) { /* no-op */ }
|
|
549 | + })
|
|
550 | + return
|
|
551 | + }
|
|
552 | + }
|
|
553 | + |
|
554 | + private fun onNewIntentInternal(intent: Intent?) {
|
|
536 | 555 | super.onNewIntent(intent)
|
537 | 556 | intent?.let {
|
538 | 557 | handleNewIntent(it)
|
... | ... | @@ -1092,13 +1111,16 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity { |
1092 | 1111 | |
1093 | 1112 | /**
|
1094 | 1113 | * Indicates if the user should be redirected to the [BrowserFragment] or to the [HomeFragment],
|
1095 | - * links from an external apps should always opened in the [BrowserFragment].
|
|
1114 | + * links from an external apps should always opened in the [BrowserFragment],
|
|
1115 | + * unless Tor is not yet connected.
|
|
1096 | 1116 | */
|
1097 | 1117 | fun shouldStartOnHome(intent: Intent? = this.intent): Boolean {
|
1098 | 1118 | return components.strictMode.resetAfter(StrictMode.allowThreadDiskReads()) {
|
1099 | 1119 | // We only want to open on home when users tap the app,
|
1100 | - // we want to ignore other cases when the app gets open by users clicking on links.
|
|
1101 | - getSettings().shouldStartOnHome() && intent?.action == ACTION_MAIN
|
|
1120 | + // we want to ignore other cases when the app gets open by users clicking on links,
|
|
1121 | + // unless Tor is not yet connected.
|
|
1122 | + getSettings().shouldStartOnHome() && (intent?.action == ACTION_MAIN ||
|
|
1123 | + !components.torController.isConnected)
|
|
1102 | 1124 | }
|
1103 | 1125 | }
|
1104 | 1126 |
... | ... | @@ -6,6 +6,7 @@ package org.mozilla.fenix |
6 | 6 | |
7 | 7 | import android.app.Activity
|
8 | 8 | import android.content.Intent
|
9 | +import android.content.Intent.ACTION_MAIN
|
|
9 | 10 | import android.content.pm.PackageManager
|
10 | 11 | import android.os.Build
|
11 | 12 | import android.os.Bundle
|
... | ... | @@ -24,6 +25,7 @@ import org.mozilla.fenix.ext.settings |
24 | 25 | import org.mozilla.fenix.perf.MarkersActivityLifecycleCallbacks
|
25 | 26 | import org.mozilla.fenix.perf.StartupTimeline
|
26 | 27 | import org.mozilla.fenix.shortcut.NewTabShortcutIntentProcessor
|
28 | +import org.mozilla.fenix.tor.TorEvents
|
|
27 | 29 | |
28 | 30 | /**
|
29 | 31 | * Processes incoming intents and sends them to the corresponding activity.
|
... | ... | @@ -45,7 +47,23 @@ class IntentReceiverActivity : Activity() { |
45 | 47 | // the HomeActivity.
|
46 | 48 | val intent = intent?.let { Intent(it) } ?: Intent()
|
47 | 49 | intent.sanitize().stripUnwantedFlags()
|
48 | - processIntent(intent)
|
|
50 | + if (intent.action == ACTION_MAIN || components.torController.isConnected) {
|
|
51 | + processIntent(intent)
|
|
52 | + } else {
|
|
53 | + // Wait until Tor is connected to handle intents from external apps for links, search, etc.
|
|
54 | + components.torController.registerTorListener(object : TorEvents {
|
|
55 | + override fun onTorConnected() {
|
|
56 | + components.torController.unregisterTorListener(this)
|
|
57 | + processIntent(intent)
|
|
58 | + }
|
|
59 | + override fun onTorConnecting() { /* no-op */ }
|
|
60 | + override fun onTorStopped() { /* no-op */ }
|
|
61 | + override fun onTorStatusUpdate(entry: String?, status: String?) { /* no-op */ }
|
|
62 | + })
|
|
63 | + |
|
64 | + // In the meantime, open the HomeActivity so the user can get connected.
|
|
65 | + processIntent(Intent())
|
|
66 | + }
|
|
49 | 67 | |
50 | 68 | components.core.engine.profiler?.addMarker(
|
51 | 69 | MarkersActivityLifecycleCallbacks.MARKER_NAME, startTimeProfiler, "IntentReceiverActivity.onCreate"
|