diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b3771542f..a4593e02e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -75,14 +75,6 @@ android:taskAffinity="" android:windowSoftInputMode="adjustResize|stateAlwaysHidden" /> - - @@ -185,6 +177,17 @@ android:enabled="${isRaptorEnabled}" android:exported="${isRaptorEnabled}" /> + + + + diff --git a/app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt b/app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt index 89a348382..0478b64ef 100644 --- a/app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt @@ -13,8 +13,6 @@ import kotlinx.coroutines.MainScope import kotlinx.coroutines.launch import mozilla.components.feature.intent.processing.TabIntentProcessor import mozilla.components.support.utils.Browsers -import org.mozilla.fenix.customtabs.AuthCustomTabActivity -import org.mozilla.fenix.customtabs.AuthCustomTabActivity.Companion.EXTRA_AUTH_CUSTOM_TAB import org.mozilla.fenix.customtabs.ExternalAppBrowserActivity import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings @@ -77,13 +75,7 @@ class IntentReceiverActivity : Activity() { private fun setIntentActivity(intent: Intent, tabIntentProcessor: TabIntentProcessor) { val openToBrowser = when { components.intentProcessors.externalAppIntentProcessors.any { it.matches(intent) } -> { - // TODO this needs to change: https://github.com/mozilla-mobile/fenix/issues/5225 - val activityClass = if (intent.hasExtra(EXTRA_AUTH_CUSTOM_TAB)) { - AuthCustomTabActivity::class - } else { - ExternalAppBrowserActivity::class - } - intent.setClassName(applicationContext, activityClass.java.name) + intent.setClassName(applicationContext, ExternalAppBrowserActivity::class.java.name) true } tabIntentProcessor.matches(intent) -> { diff --git a/app/src/main/java/org/mozilla/fenix/components/IntentProcessors.kt b/app/src/main/java/org/mozilla/fenix/components/IntentProcessors.kt index 230b12611..e4cac05ca 100644 --- a/app/src/main/java/org/mozilla/fenix/components/IntentProcessors.kt +++ b/app/src/main/java/org/mozilla/fenix/components/IntentProcessors.kt @@ -44,6 +44,10 @@ class IntentProcessors( TabIntentProcessor(sessionManager, sessionUseCases.loadUrl, searchUseCases.newTabSearch, isPrivate = true) } + val customTabIntentProcessor by lazy { + CustomTabIntentProcessor(sessionManager, sessionUseCases.loadUrl, context.resources) + } + val externalAppIntentProcessors by lazy { listOf( TrustedWebActivityIntentProcessor( @@ -55,7 +59,7 @@ class IntentProcessors( store = customTabsStore ), WebAppIntentProcessor(sessionManager, sessionUseCases.loadUrl, ManifestStorage(context)), - CustomTabIntentProcessor(sessionManager, sessionUseCases.loadUrl, context.resources) + customTabIntentProcessor ) } } diff --git a/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt b/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt index 82a83e682..30ae842b4 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt @@ -12,8 +12,8 @@ import mozilla.components.support.ktx.android.content.appVersionName import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.IntentReceiverActivity import org.mozilla.fenix.R -import org.mozilla.fenix.customtabs.AuthCustomTabActivity.Companion.EXTRA_AUTH_CUSTOM_TAB import org.mozilla.fenix.ext.getColorFromAttr +import org.mozilla.fenix.settings.account.AuthIntentReceiverActivity import java.io.UnsupportedEncodingException import java.net.URLEncoder import java.util.Locale @@ -68,11 +68,11 @@ object SupportUtils { .build() .intent .setData(url.toUri()) - .setClassName(context.applicationContext, IntentReceiverActivity::class.java.name) + .setClassName(context, IntentReceiverActivity::class.java.name) .setPackage(context.packageName) fun createAuthCustomTabIntent(context: Context, url: String): Intent = - createCustomTabIntent(context, url).putExtra(EXTRA_AUTH_CUSTOM_TAB, true) + createCustomTabIntent(context, url).setClassName(context, AuthIntentReceiverActivity::class.java.name) private fun getEncodedTopicUTF8(topic: String): String { try { diff --git a/app/src/main/java/org/mozilla/fenix/customtabs/AuthCustomTabActivity.kt b/app/src/main/java/org/mozilla/fenix/settings/account/AuthCustomTabActivity.kt similarity index 88% rename from app/src/main/java/org/mozilla/fenix/customtabs/AuthCustomTabActivity.kt rename to app/src/main/java/org/mozilla/fenix/settings/account/AuthCustomTabActivity.kt index cf1e30f56..98b986dc7 100644 --- a/app/src/main/java/org/mozilla/fenix/customtabs/AuthCustomTabActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/account/AuthCustomTabActivity.kt @@ -2,11 +2,12 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.mozilla.fenix.customtabs +package org.mozilla.fenix.settings.account import mozilla.components.concept.sync.AccountObserver import mozilla.components.concept.sync.AuthType import mozilla.components.concept.sync.OAuthAccount +import org.mozilla.fenix.customtabs.ExternalAppBrowserActivity import org.mozilla.fenix.ext.components /** @@ -28,8 +29,4 @@ class AuthCustomTabActivity : ExternalAppBrowserActivity() { val accountManager = components.backgroundServices.accountManager accountManager.register(accountStateObserver, this, true) } - - companion object { - const val EXTRA_AUTH_CUSTOM_TAB = "support.customtabs.extra.AUTH" - } } diff --git a/app/src/main/java/org/mozilla/fenix/settings/account/AuthIntentReceiverActivity.kt b/app/src/main/java/org/mozilla/fenix/settings/account/AuthIntentReceiverActivity.kt new file mode 100644 index 000000000..427b81d9e --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/settings/account/AuthIntentReceiverActivity.kt @@ -0,0 +1,39 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.settings.account + +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import androidx.annotation.VisibleForTesting +import kotlinx.coroutines.MainScope +import kotlinx.coroutines.launch +import org.mozilla.fenix.HomeActivity +import org.mozilla.fenix.ext.components + +/** + * Processes incoming intents and sends them to the corresponding activity. + */ +class AuthIntentReceiverActivity : Activity() { + + @VisibleForTesting + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + MainScope().launch { + // The intent property is nullable, but the rest of the code below + // assumes it is not. If it's null, then we make a new one and open + // the HomeActivity. + val intent = intent?.let { Intent(intent) } ?: Intent() + components.intentProcessors.customTabIntentProcessor.process(intent) + intent.setClassName(applicationContext, AuthCustomTabActivity::class.java.name) + intent.putExtra(HomeActivity.OPEN_TO_BROWSER, true) + + startActivity(intent) + + finish() + } + } +}