1
0
Fork 0

Closes #5678: Selected session may render in ExternalAppBrowserActivity

master
Christian Sadilek 2019-10-25 17:25:09 -04:00 committed by Emily Kager
parent b413a57159
commit ee3871cd7c
3 changed files with 49 additions and 4 deletions

View File

@ -17,6 +17,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavDestination import androidx.navigation.NavDestination
import androidx.navigation.NavDirections
import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.NavigationUI import androidx.navigation.ui.NavigationUI
@ -247,14 +248,15 @@ open class HomeActivity : AppCompatActivity() {
if (navHost.navController.alreadyOnDestination(R.id.browserFragment)) return if (navHost.navController.alreadyOnDestination(R.id.browserFragment)) return
@IdRes val fragmentId = if (from.fragmentId != 0) from.fragmentId else null @IdRes val fragmentId = if (from.fragmentId != 0) from.fragmentId else null
val directions = getNavDirections(from, customTabSessionId) val directions = getNavDirections(from, customTabSessionId)
if (directions != null) {
navHost.navController.nav(fragmentId, directions) navHost.navController.nav(fragmentId, directions)
}
} }
protected open fun getNavDirections( protected open fun getNavDirections(
from: BrowserDirection, from: BrowserDirection,
customTabSessionId: String? customTabSessionId: String?
) = when (from) { ): NavDirections? = when (from) {
BrowserDirection.FromGlobal -> BrowserDirection.FromGlobal ->
NavGraphDirections.actionGlobalBrowser(customTabSessionId) NavGraphDirections.actionGlobalBrowser(customTabSessionId)
BrowserDirection.FromHome -> BrowserDirection.FromHome ->

View File

@ -39,7 +39,12 @@ open class ExternalAppBrowserActivity : HomeActivity() {
override fun getNavDirections( override fun getNavDirections(
from: BrowserDirection, from: BrowserDirection,
customTabSessionId: String? customTabSessionId: String?
): NavDirections { ): NavDirections? {
if (customTabSessionId == null) {
finish()
return null
}
val manifest = intent val manifest = intent
.getWebAppManifest() .getWebAppManifest()
?.let { WebAppManifestParser().serialize(it).toString() } ?.let { WebAppManifestParser().serialize(it).toString() }

View File

@ -5,10 +5,20 @@
package org.mozilla.fenix.customtabs package org.mozilla.fenix.customtabs
import android.content.Intent import android.content.Intent
import android.os.Bundle
import androidx.navigation.NavDirections
import io.mockk.every
import io.mockk.mockk
import mozilla.components.support.utils.toSafeIntent import mozilla.components.support.utils.toSafeIntent
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.Mockito.never
import org.mockito.Mockito.spy
import org.mockito.Mockito.verify
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.TestApplication import org.mozilla.fenix.TestApplication
import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.Event
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
@ -33,4 +43,32 @@ class ExternalAppBrowserActivityTest {
val otherIntent = Intent().toSafeIntent() val otherIntent = Intent().toSafeIntent()
assertEquals(Event.OpenedApp.Source.CUSTOM_TAB, activity.getIntentSource(otherIntent)) assertEquals(Event.OpenedApp.Source.CUSTOM_TAB, activity.getIntentSource(otherIntent))
} }
@Test
fun `getNavDirections finishes activity if session ID is null`() {
val activity = spy(object : ExternalAppBrowserActivity() {
public override fun getNavDirections(
from: BrowserDirection,
customTabSessionId: String?
): NavDirections? {
return super.getNavDirections(from, customTabSessionId)
}
override fun getIntent(): Intent {
val intent: Intent = mockk()
val bundle: Bundle = mockk()
every { bundle.getString(any()) } returns ""
every { intent.extras } returns bundle
return intent
}
})
var directions = activity.getNavDirections(BrowserDirection.FromGlobal, "id")
assertNotNull(directions)
verify(activity, never()).finish()
directions = activity.getNavDirections(BrowserDirection.FromGlobal, null)
assertNull(directions)
verify(activity).finish()
}
} }