1
0
Fork 0

Change deleteAndQuit to take an activity

master
Tiger Oakes 2019-09-14 11:51:12 -07:00 committed by Emily Kager
parent 1d66af34b0
commit 42bb3e1410
5 changed files with 72 additions and 76 deletions

View File

@ -155,7 +155,7 @@ abstract class BaseBrowserFragment : Fragment(), BackHandler, SessionManager.Obs
return getSessionById()?.also { session -> return getSessionById()?.also { session ->
val browserToolbarController = DefaultBrowserToolbarController( val browserToolbarController = DefaultBrowserToolbarController(
context, requireActivity(),
findNavController(), findNavController(),
(activity as HomeActivity).browsingModeManager, (activity as HomeActivity).browsingModeManager,
findInPageLauncher = { findInPageIntegration.withFeature { it.launch() } }, findInPageLauncher = { findInPageIntegration.withFeature { it.launch() } },

View File

@ -5,7 +5,6 @@
package org.mozilla.fenix.components.toolbar package org.mozilla.fenix.components.toolbar
import android.app.Activity import android.app.Activity
import android.content.Context
import android.content.Intent import android.content.Intent
import androidx.core.widget.NestedScrollView import androidx.core.widget.NestedScrollView
import androidx.lifecycle.LifecycleCoroutineScope import androidx.lifecycle.LifecycleCoroutineScope
@ -43,7 +42,7 @@ interface BrowserToolbarController {
} }
class DefaultBrowserToolbarController( class DefaultBrowserToolbarController(
private val context: Context, private val activity: Activity,
private val navController: NavController, private val navController: NavController,
private val browsingModeManager: BrowsingModeManager, private val browsingModeManager: BrowsingModeManager,
private val findInPageLauncher: () -> Unit, private val findInPageLauncher: () -> Unit,
@ -56,30 +55,31 @@ class DefaultBrowserToolbarController(
private val scope: LifecycleCoroutineScope private val scope: LifecycleCoroutineScope
) : BrowserToolbarController { ) : BrowserToolbarController {
private val currentSession
get() = customTabSession ?: activity.components.core.sessionManager.selectedSession
override fun handleToolbarPaste(text: String) { override fun handleToolbarPaste(text: String) {
navController.nav( navController.nav(
R.id.browserFragment, R.id.browserFragment,
BrowserFragmentDirections.actionBrowserFragmentToSearchFragment( BrowserFragmentDirections.actionBrowserFragmentToSearchFragment(
sessionId = customTabSession?.id ?: context.components.core.sessionManager.selectedSession?.id, sessionId = currentSession?.id,
pastedText = text pastedText = text
) )
) )
} }
override fun handleToolbarPasteAndGo(text: String) { override fun handleToolbarPasteAndGo(text: String) {
context.components.core.sessionManager.selectedSession?.searchTerms = "" activity.components.core.sessionManager.selectedSession?.searchTerms = ""
context.components.useCases.sessionUseCases.loadUrl(text) activity.components.useCases.sessionUseCases.loadUrl(text)
} }
override fun handleToolbarClick() { override fun handleToolbarClick() {
context.components.analytics.metrics.track( activity.components.analytics.metrics.track(
Event.SearchBarTapped(Event.SearchBarTapped.Source.BROWSER) Event.SearchBarTapped(Event.SearchBarTapped.Source.BROWSER)
) )
navController.nav( navController.nav(
R.id.browserFragment, R.id.browserFragment,
BrowserFragmentDirections.actionBrowserFragmentToSearchFragment( BrowserFragmentDirections.actionBrowserFragmentToSearchFragment(currentSession?.id)
customTabSession?.id ?: context.components.core.sessionManager.selectedSession?.id
)
) )
} }
@ -87,9 +87,8 @@ class DefaultBrowserToolbarController(
@ObsoleteCoroutinesApi @ObsoleteCoroutinesApi
@SuppressWarnings("ComplexMethod", "LongMethod") @SuppressWarnings("ComplexMethod", "LongMethod")
override fun handleToolbarItemInteraction(item: ToolbarMenu.Item) { override fun handleToolbarItemInteraction(item: ToolbarMenu.Item) {
val sessionUseCases = context.components.useCases.sessionUseCases val sessionUseCases = activity.components.useCases.sessionUseCases
trackToolbarItemInteraction(item) trackToolbarItemInteraction(item)
val currentSession = customTabSession ?: context.components.core.sessionManager.selectedSession
Do exhaustive when (item) { Do exhaustive when (item) {
ToolbarMenu.Item.Back -> sessionUseCases.goBack.invoke(currentSession) ToolbarMenu.Item.Back -> sessionUseCases.goBack.invoke(currentSession)
@ -110,7 +109,7 @@ class DefaultBrowserToolbarController(
) )
ToolbarMenu.Item.AddToHomeScreen -> { ToolbarMenu.Item.AddToHomeScreen -> {
MainScope().launch { MainScope().launch {
with(context.components.useCases.webAppUseCases) { with(activity.components.useCases.webAppUseCases) {
if (isInstallable()) { if (isInstallable()) {
addToHomescreen() addToHomescreen()
} else { } else {
@ -144,27 +143,27 @@ class DefaultBrowserToolbarController(
ToolbarMenu.Item.FindInPage -> { ToolbarMenu.Item.FindInPage -> {
bottomSheetBehavior.state = BottomSheetBehavior.STATE_COLLAPSED bottomSheetBehavior.state = BottomSheetBehavior.STATE_COLLAPSED
findInPageLauncher() findInPageLauncher()
context.components.analytics.metrics.track(Event.FindInPageOpened) activity.components.analytics.metrics.track(Event.FindInPageOpened)
} }
ToolbarMenu.Item.ReportIssue -> { ToolbarMenu.Item.ReportIssue -> {
val currentUrl = currentSession?.url val currentUrl = currentSession?.url
currentUrl?.apply { currentUrl?.apply {
val reportUrl = String.format(BrowserFragment.REPORT_SITE_ISSUE_URL, this) val reportUrl = String.format(BrowserFragment.REPORT_SITE_ISSUE_URL, this)
context.components.useCases.tabsUseCases.addTab.invoke(reportUrl) activity.components.useCases.tabsUseCases.addTab.invoke(reportUrl)
} }
} }
ToolbarMenu.Item.Help -> { ToolbarMenu.Item.Help -> {
context.components.useCases.tabsUseCases.addTab.invoke(getSupportUrl()) activity.components.useCases.tabsUseCases.addTab.invoke(getSupportUrl())
} }
ToolbarMenu.Item.SaveToCollection -> { ToolbarMenu.Item.SaveToCollection -> {
context.components.analytics.metrics activity.components.analytics.metrics
.track(Event.CollectionSaveButtonPressed(TELEMETRY_BROWSER_IDENTIFIER)) .track(Event.CollectionSaveButtonPressed(TELEMETRY_BROWSER_IDENTIFIER))
currentSession?.toTab(context)?.let { currentSessionAsTab -> currentSession?.toTab(activity)?.let { currentSessionAsTab ->
viewModel.saveTabToCollection( viewModel.saveTabToCollection(
tabs = listOf(currentSessionAsTab), tabs = listOf(currentSessionAsTab),
selectedTab = currentSessionAsTab, selectedTab = currentSessionAsTab,
cachedTabCollections = context.components.core.tabCollectionStorage.cachedTabCollections cachedTabCollections = activity.components.core.tabCollectionStorage.cachedTabCollections
) )
viewModel.previousFragmentId = R.id.browserFragment viewModel.previousFragmentId = R.id.browserFragment
@ -178,15 +177,15 @@ class DefaultBrowserToolbarController(
// Strip the CustomTabConfig to turn this Session into a regular tab and then select it // Strip the CustomTabConfig to turn this Session into a regular tab and then select it
customTabSession!!.customTabConfig = null customTabSession!!.customTabConfig = null
context.components.core.sessionManager.select(customTabSession) activity.components.core.sessionManager.select(customTabSession)
// Switch to the actual browser which should now display our new selected session // Switch to the actual browser which should now display our new selected session
context.startActivity(openInFenixIntent) activity.startActivity(openInFenixIntent)
// Close this activity since it is no longer displaying any session // Close this activity since it is no longer displaying any session
(context as Activity).finish() activity.finish()
} }
ToolbarMenu.Item.Quit -> context.deleteAndQuit(scope) ToolbarMenu.Item.Quit -> deleteAndQuit(activity, scope)
} }
} }
@ -218,7 +217,7 @@ class DefaultBrowserToolbarController(
ToolbarMenu.Item.Quit -> Event.BrowserMenuItemTapped.Item.QUIT ToolbarMenu.Item.Quit -> Event.BrowserMenuItemTapped.Item.QUIT
} }
context.components.analytics.metrics.track(Event.BrowserMenuItemTapped(eventItem)) activity.components.analytics.metrics.track(Event.BrowserMenuItemTapped(eventItem))
} }
companion object { companion object {

View File

@ -4,38 +4,37 @@
package org.mozilla.fenix.utils package org.mozilla.fenix.utils
import android.content.Context import android.app.Activity
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.mozilla.fenix.ext.asActivity
import org.mozilla.fenix.settings.DefaultDeleteBrowsingDataController import org.mozilla.fenix.settings.DefaultDeleteBrowsingDataController
/** /**
* Deletes selected browsing data and finishes the activity * Deletes selected browsing data and finishes the activity.
*/ */
fun Context.deleteAndQuit(coroutineScope: CoroutineScope) { fun deleteAndQuit(activity: Activity, coroutineScope: CoroutineScope) {
coroutineScope.launch { coroutineScope.launch {
launch { val controller = DefaultDeleteBrowsingDataController(activity, coroutineContext)
val controller =
DefaultDeleteBrowsingDataController(this@deleteAndQuit, coroutineContext) if (Settings.getInstance(activity).deleteCacheOnQuit) {
if (Settings.getInstance(this@deleteAndQuit).deleteCacheOnQuit) { controller.deleteCachedFiles()
controller.deleteCachedFiles() }
if (Settings.getInstance(activity).deleteTabsOnQuit) {
controller.deleteTabs()
}
if (Settings.getInstance(activity).deletePermissionsOnQuit) {
launch(Dispatchers.IO) {
controller.deleteSitePermissions()
} }
if (Settings.getInstance(this@deleteAndQuit).deleteTabsOnQuit) { }
controller.deleteTabs() if (Settings.getInstance(activity).deleteCookiesOnQuit) {
} controller.deleteCookies()
if (Settings.getInstance(this@deleteAndQuit).deletePermissionsOnQuit) { }
launch(Dispatchers.IO) { if (Settings.getInstance(activity).deleteHistoryOnQuit) {
controller.deleteSitePermissions() controller.deleteHistoryAndDOMStorages()
} }
}
if (Settings.getInstance(this@deleteAndQuit).deleteCookiesOnQuit) { activity.finish()
controller.deleteCookies()
}
if (Settings.getInstance(this@deleteAndQuit).deleteHistoryOnQuit) {
controller.deleteHistoryAndDOMStorages()
}
}.invokeOnCompletion { this@deleteAndQuit.asActivity()?.finish() }
} }
} }

View File

@ -4,7 +4,6 @@
package org.mozilla.fenix.components.toolbar package org.mozilla.fenix.components.toolbar
import android.content.Context
import android.content.Intent import android.content.Intent
import androidx.core.widget.NestedScrollView import androidx.core.widget.NestedScrollView
import androidx.lifecycle.LifecycleCoroutineScope import androidx.lifecycle.LifecycleCoroutineScope
@ -55,7 +54,7 @@ class DefaultBrowserToolbarControllerTest {
private val mainThreadSurrogate = newSingleThreadContext("UI thread") private val mainThreadSurrogate = newSingleThreadContext("UI thread")
private var context: HomeActivity = mockk(relaxed = true) private var activity: HomeActivity = mockk(relaxed = true)
private var analytics: Analytics = mockk(relaxed = true) private var analytics: Analytics = mockk(relaxed = true)
private val browsingModeManager: BrowsingModeManager = mockk(relaxed = true) private val browsingModeManager: BrowsingModeManager = mockk(relaxed = true)
private var navController: NavController = mockk(relaxed = true) private var navController: NavController = mockk(relaxed = true)
@ -79,7 +78,7 @@ class DefaultBrowserToolbarControllerTest {
Dispatchers.setMain(mainThreadSurrogate) Dispatchers.setMain(mainThreadSurrogate)
controller = DefaultBrowserToolbarController( controller = DefaultBrowserToolbarController(
context = context, activity = activity,
navController = navController, navController = navController,
browsingModeManager = browsingModeManager, browsingModeManager = browsingModeManager,
findInPageLauncher = findInPageLauncher, findInPageLauncher = findInPageLauncher,
@ -100,12 +99,12 @@ class DefaultBrowserToolbarControllerTest {
mockkStatic( mockkStatic(
"org.mozilla.fenix.utils.DeleteAndQuitKt" "org.mozilla.fenix.utils.DeleteAndQuitKt"
) )
every { any<Context>().deleteAndQuit(any()) } just Runs every { deleteAndQuit(any(), any()) } just Runs
every { context.components.analytics } returns analytics every { activity.components.analytics } returns analytics
every { analytics.metrics } returns metrics every { analytics.metrics } returns metrics
every { context.components.useCases.sessionUseCases } returns sessionUseCases every { activity.components.useCases.sessionUseCases } returns sessionUseCases
every { context.components.core.sessionManager.selectedSession } returns currentSession every { activity.components.core.sessionManager.selectedSession } returns currentSession
} }
@Test @Test
@ -184,7 +183,7 @@ class DefaultBrowserToolbarControllerTest {
fun handleToolbarReloadPress() { fun handleToolbarReloadPress() {
val item = ToolbarMenu.Item.Reload val item = ToolbarMenu.Item.Reload
every { context.components.useCases.sessionUseCases } returns sessionUseCases every { activity.components.useCases.sessionUseCases } returns sessionUseCases
controller.handleToolbarItemInteraction(item) controller.handleToolbarItemInteraction(item)
@ -329,7 +328,7 @@ class DefaultBrowserToolbarControllerTest {
every { currentSession.id } returns "1" every { currentSession.id } returns "1"
every { currentSession.url } returns "https://mozilla.org" every { currentSession.url } returns "https://mozilla.org"
every { context.components.useCases.tabsUseCases } returns tabsUseCases every { activity.components.useCases.tabsUseCases } returns tabsUseCases
every { tabsUseCases.addTab } returns addTabUseCase every { tabsUseCases.addTab } returns addTabUseCase
controller.handleToolbarItemInteraction(item) controller.handleToolbarItemInteraction(item)
@ -353,7 +352,7 @@ class DefaultBrowserToolbarControllerTest {
val item = ToolbarMenu.Item.Help val item = ToolbarMenu.Item.Help
every { context.components.useCases.tabsUseCases } returns tabsUseCases every { activity.components.useCases.tabsUseCases } returns tabsUseCases
every { tabsUseCases.addTab } returns addTabUseCase every { tabsUseCases.addTab } returns addTabUseCase
controller.handleToolbarItemInteraction(item) controller.handleToolbarItemInteraction(item)
@ -385,8 +384,8 @@ class DefaultBrowserToolbarControllerTest {
fun handleToolbarSaveToCollectionPress() { fun handleToolbarSaveToCollectionPress() {
val item = ToolbarMenu.Item.SaveToCollection val item = ToolbarMenu.Item.SaveToCollection
val cachedTabCollections: List<TabCollection> = mockk(relaxed = true) val cachedTabCollections: List<TabCollection> = mockk(relaxed = true)
every { context.components.useCases.sessionUseCases } returns sessionUseCases every { activity.components.useCases.sessionUseCases } returns sessionUseCases
every { context.components.core.tabCollectionStorage.cachedTabCollections } returns cachedTabCollections every { activity.components.core.tabCollectionStorage.cachedTabCollections } returns cachedTabCollections
controller.handleToolbarItemInteraction(item) controller.handleToolbarItemInteraction(item)
@ -410,7 +409,7 @@ class DefaultBrowserToolbarControllerTest {
@Test @Test
fun handleToolbarOpenInFenixPress() { fun handleToolbarOpenInFenixPress() {
controller = DefaultBrowserToolbarController( controller = DefaultBrowserToolbarController(
context = context, activity = activity,
navController = navController, navController = navController,
browsingModeManager = browsingModeManager, browsingModeManager = browsingModeManager,
findInPageLauncher = findInPageLauncher, findInPageLauncher = findInPageLauncher,
@ -426,17 +425,17 @@ class DefaultBrowserToolbarControllerTest {
val sessionManager: SessionManager = mockk(relaxed = true) val sessionManager: SessionManager = mockk(relaxed = true)
val item = ToolbarMenu.Item.OpenInFenix val item = ToolbarMenu.Item.OpenInFenix
every { context.components.core.sessionManager } returns sessionManager every { activity.components.core.sessionManager } returns sessionManager
every { currentSession.customTabConfig } returns mockk() every { currentSession.customTabConfig } returns mockk()
every { context.startActivity(any()) } just Runs every { activity.startActivity(any()) } just Runs
controller.handleToolbarItemInteraction(item) controller.handleToolbarItemInteraction(item)
verify { engineView.release() } verify { engineView.release() }
verify { currentSession.customTabConfig = null } verify { currentSession.customTabConfig = null }
verify { sessionManager.select(currentSession) } verify { sessionManager.select(currentSession) }
verify { context.startActivity(openInFenixIntent) } verify { activity.startActivity(openInFenixIntent) }
verify { context.finish() } verify { activity.finish() }
} }
@Test @Test
@ -445,6 +444,6 @@ class DefaultBrowserToolbarControllerTest {
controller.handleToolbarItemInteraction(item) controller.handleToolbarItemInteraction(item)
verify { context.deleteAndQuit(scope) } verify { deleteAndQuit(activity, scope) }
} }
} }

View File

@ -28,7 +28,6 @@ import org.junit.runner.RunWith
import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.TestApplication import org.mozilla.fenix.TestApplication
import org.mozilla.fenix.components.PermissionStorage import org.mozilla.fenix.components.PermissionStorage
import org.mozilla.fenix.ext.asActivity
import org.mozilla.fenix.ext.clearAndCommit import org.mozilla.fenix.ext.clearAndCommit
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
@ -41,7 +40,7 @@ class DeleteAndQuitTest {
private val mainThreadSurrogate = newSingleThreadContext("UI thread") private val mainThreadSurrogate = newSingleThreadContext("UI thread")
private var context: HomeActivity = mockk(relaxed = true) private var activity: HomeActivity = mockk(relaxed = true)
lateinit var settings: Settings lateinit var settings: Settings
private val tabUseCases: TabsUseCases = mockk(relaxed = true) private val tabUseCases: TabsUseCases = mockk(relaxed = true)
private val historyStorage: PlacesHistoryStorage = mockk(relaxed = true) private val historyStorage: PlacesHistoryStorage = mockk(relaxed = true)
@ -57,11 +56,11 @@ class DeleteAndQuitTest {
Dispatchers.setMain(mainThreadSurrogate) Dispatchers.setMain(mainThreadSurrogate)
every { context.components.core.historyStorage } returns historyStorage every { activity.components.core.historyStorage } returns historyStorage
every { context.components.core.permissionStorage } returns permissionStorage every { activity.components.core.permissionStorage } returns permissionStorage
every { context.components.useCases.tabsUseCases } returns tabUseCases every { activity.components.useCases.tabsUseCases } returns tabUseCases
every { tabUseCases.removeAllTabs } returns removeAllTabsUseCases every { tabUseCases.removeAllTabs } returns removeAllTabsUseCases
every { context.components.core.engine } returns engine every { activity.components.core.engine } returns engine
} }
@After @After
@ -79,11 +78,11 @@ class DeleteAndQuitTest {
// When // When
settings.deleteTabsOnQuit = true settings.deleteTabsOnQuit = true
context.deleteAndQuit(this) deleteAndQuit(activity, this)
verify { verify {
removeAllTabsUseCases.invoke() removeAllTabsUseCases.invoke()
context.asActivity()?.finish() activity.finish()
} }
verify(exactly = 0) { verify(exactly = 0) {
@ -110,7 +109,7 @@ class DeleteAndQuitTest {
settings.deleteCookiesOnQuit = true settings.deleteCookiesOnQuit = true
settings.deleteCacheOnQuit = true settings.deleteCacheOnQuit = true
context.deleteAndQuit(this) deleteAndQuit(activity, this)
verify(exactly = 1) { verify(exactly = 1) {
engine.clearData(Engine.BrowsingData.allCaches()) engine.clearData(Engine.BrowsingData.allCaches())
@ -134,7 +133,7 @@ class DeleteAndQuitTest {
historyStorage historyStorage
context.asActivity()?.finish() activity.finish()
} }
} }
} }