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 ->
val browserToolbarController = DefaultBrowserToolbarController(
context,
requireActivity(),
findNavController(),
(activity as HomeActivity).browsingModeManager,
findInPageLauncher = { findInPageIntegration.withFeature { it.launch() } },

View File

@ -5,7 +5,6 @@
package org.mozilla.fenix.components.toolbar
import android.app.Activity
import android.content.Context
import android.content.Intent
import androidx.core.widget.NestedScrollView
import androidx.lifecycle.LifecycleCoroutineScope
@ -43,7 +42,7 @@ interface BrowserToolbarController {
}
class DefaultBrowserToolbarController(
private val context: Context,
private val activity: Activity,
private val navController: NavController,
private val browsingModeManager: BrowsingModeManager,
private val findInPageLauncher: () -> Unit,
@ -56,30 +55,31 @@ class DefaultBrowserToolbarController(
private val scope: LifecycleCoroutineScope
) : BrowserToolbarController {
private val currentSession
get() = customTabSession ?: activity.components.core.sessionManager.selectedSession
override fun handleToolbarPaste(text: String) {
navController.nav(
R.id.browserFragment,
BrowserFragmentDirections.actionBrowserFragmentToSearchFragment(
sessionId = customTabSession?.id ?: context.components.core.sessionManager.selectedSession?.id,
sessionId = currentSession?.id,
pastedText = text
)
)
}
override fun handleToolbarPasteAndGo(text: String) {
context.components.core.sessionManager.selectedSession?.searchTerms = ""
context.components.useCases.sessionUseCases.loadUrl(text)
activity.components.core.sessionManager.selectedSession?.searchTerms = ""
activity.components.useCases.sessionUseCases.loadUrl(text)
}
override fun handleToolbarClick() {
context.components.analytics.metrics.track(
activity.components.analytics.metrics.track(
Event.SearchBarTapped(Event.SearchBarTapped.Source.BROWSER)
)
navController.nav(
R.id.browserFragment,
BrowserFragmentDirections.actionBrowserFragmentToSearchFragment(
customTabSession?.id ?: context.components.core.sessionManager.selectedSession?.id
)
BrowserFragmentDirections.actionBrowserFragmentToSearchFragment(currentSession?.id)
)
}
@ -87,9 +87,8 @@ class DefaultBrowserToolbarController(
@ObsoleteCoroutinesApi
@SuppressWarnings("ComplexMethod", "LongMethod")
override fun handleToolbarItemInteraction(item: ToolbarMenu.Item) {
val sessionUseCases = context.components.useCases.sessionUseCases
val sessionUseCases = activity.components.useCases.sessionUseCases
trackToolbarItemInteraction(item)
val currentSession = customTabSession ?: context.components.core.sessionManager.selectedSession
Do exhaustive when (item) {
ToolbarMenu.Item.Back -> sessionUseCases.goBack.invoke(currentSession)
@ -110,7 +109,7 @@ class DefaultBrowserToolbarController(
)
ToolbarMenu.Item.AddToHomeScreen -> {
MainScope().launch {
with(context.components.useCases.webAppUseCases) {
with(activity.components.useCases.webAppUseCases) {
if (isInstallable()) {
addToHomescreen()
} else {
@ -144,27 +143,27 @@ class DefaultBrowserToolbarController(
ToolbarMenu.Item.FindInPage -> {
bottomSheetBehavior.state = BottomSheetBehavior.STATE_COLLAPSED
findInPageLauncher()
context.components.analytics.metrics.track(Event.FindInPageOpened)
activity.components.analytics.metrics.track(Event.FindInPageOpened)
}
ToolbarMenu.Item.ReportIssue -> {
val currentUrl = currentSession?.url
currentUrl?.apply {
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 -> {
context.components.useCases.tabsUseCases.addTab.invoke(getSupportUrl())
activity.components.useCases.tabsUseCases.addTab.invoke(getSupportUrl())
}
ToolbarMenu.Item.SaveToCollection -> {
context.components.analytics.metrics
activity.components.analytics.metrics
.track(Event.CollectionSaveButtonPressed(TELEMETRY_BROWSER_IDENTIFIER))
currentSession?.toTab(context)?.let { currentSessionAsTab ->
currentSession?.toTab(activity)?.let { currentSessionAsTab ->
viewModel.saveTabToCollection(
tabs = listOf(currentSessionAsTab),
selectedTab = currentSessionAsTab,
cachedTabCollections = context.components.core.tabCollectionStorage.cachedTabCollections
cachedTabCollections = activity.components.core.tabCollectionStorage.cachedTabCollections
)
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
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
context.startActivity(openInFenixIntent)
activity.startActivity(openInFenixIntent)
// 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
}
context.components.analytics.metrics.track(Event.BrowserMenuItemTapped(eventItem))
activity.components.analytics.metrics.track(Event.BrowserMenuItemTapped(eventItem))
}
companion object {

View File

@ -4,38 +4,37 @@
package org.mozilla.fenix.utils
import android.content.Context
import android.app.Activity
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.mozilla.fenix.ext.asActivity
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 {
launch {
val controller =
DefaultDeleteBrowsingDataController(this@deleteAndQuit, coroutineContext)
if (Settings.getInstance(this@deleteAndQuit).deleteCacheOnQuit) {
controller.deleteCachedFiles()
val controller = DefaultDeleteBrowsingDataController(activity, coroutineContext)
if (Settings.getInstance(activity).deleteCacheOnQuit) {
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(this@deleteAndQuit).deletePermissionsOnQuit) {
launch(Dispatchers.IO) {
controller.deleteSitePermissions()
}
}
if (Settings.getInstance(this@deleteAndQuit).deleteCookiesOnQuit) {
controller.deleteCookies()
}
if (Settings.getInstance(this@deleteAndQuit).deleteHistoryOnQuit) {
controller.deleteHistoryAndDOMStorages()
}
}.invokeOnCompletion { this@deleteAndQuit.asActivity()?.finish() }
}
if (Settings.getInstance(activity).deleteCookiesOnQuit) {
controller.deleteCookies()
}
if (Settings.getInstance(activity).deleteHistoryOnQuit) {
controller.deleteHistoryAndDOMStorages()
}
activity.finish()
}
}

View File

@ -4,7 +4,6 @@
package org.mozilla.fenix.components.toolbar
import android.content.Context
import android.content.Intent
import androidx.core.widget.NestedScrollView
import androidx.lifecycle.LifecycleCoroutineScope
@ -55,7 +54,7 @@ class DefaultBrowserToolbarControllerTest {
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 val browsingModeManager: BrowsingModeManager = mockk(relaxed = true)
private var navController: NavController = mockk(relaxed = true)
@ -79,7 +78,7 @@ class DefaultBrowserToolbarControllerTest {
Dispatchers.setMain(mainThreadSurrogate)
controller = DefaultBrowserToolbarController(
context = context,
activity = activity,
navController = navController,
browsingModeManager = browsingModeManager,
findInPageLauncher = findInPageLauncher,
@ -100,12 +99,12 @@ class DefaultBrowserToolbarControllerTest {
mockkStatic(
"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 { context.components.useCases.sessionUseCases } returns sessionUseCases
every { context.components.core.sessionManager.selectedSession } returns currentSession
every { activity.components.useCases.sessionUseCases } returns sessionUseCases
every { activity.components.core.sessionManager.selectedSession } returns currentSession
}
@Test
@ -184,7 +183,7 @@ class DefaultBrowserToolbarControllerTest {
fun handleToolbarReloadPress() {
val item = ToolbarMenu.Item.Reload
every { context.components.useCases.sessionUseCases } returns sessionUseCases
every { activity.components.useCases.sessionUseCases } returns sessionUseCases
controller.handleToolbarItemInteraction(item)
@ -329,7 +328,7 @@ class DefaultBrowserToolbarControllerTest {
every { currentSession.id } returns "1"
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
controller.handleToolbarItemInteraction(item)
@ -353,7 +352,7 @@ class DefaultBrowserToolbarControllerTest {
val item = ToolbarMenu.Item.Help
every { context.components.useCases.tabsUseCases } returns tabsUseCases
every { activity.components.useCases.tabsUseCases } returns tabsUseCases
every { tabsUseCases.addTab } returns addTabUseCase
controller.handleToolbarItemInteraction(item)
@ -385,8 +384,8 @@ class DefaultBrowserToolbarControllerTest {
fun handleToolbarSaveToCollectionPress() {
val item = ToolbarMenu.Item.SaveToCollection
val cachedTabCollections: List<TabCollection> = mockk(relaxed = true)
every { context.components.useCases.sessionUseCases } returns sessionUseCases
every { context.components.core.tabCollectionStorage.cachedTabCollections } returns cachedTabCollections
every { activity.components.useCases.sessionUseCases } returns sessionUseCases
every { activity.components.core.tabCollectionStorage.cachedTabCollections } returns cachedTabCollections
controller.handleToolbarItemInteraction(item)
@ -410,7 +409,7 @@ class DefaultBrowserToolbarControllerTest {
@Test
fun handleToolbarOpenInFenixPress() {
controller = DefaultBrowserToolbarController(
context = context,
activity = activity,
navController = navController,
browsingModeManager = browsingModeManager,
findInPageLauncher = findInPageLauncher,
@ -426,17 +425,17 @@ class DefaultBrowserToolbarControllerTest {
val sessionManager: SessionManager = mockk(relaxed = true)
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 { context.startActivity(any()) } just Runs
every { activity.startActivity(any()) } just Runs
controller.handleToolbarItemInteraction(item)
verify { engineView.release() }
verify { currentSession.customTabConfig = null }
verify { sessionManager.select(currentSession) }
verify { context.startActivity(openInFenixIntent) }
verify { context.finish() }
verify { activity.startActivity(openInFenixIntent) }
verify { activity.finish() }
}
@Test
@ -445,6 +444,6 @@ class DefaultBrowserToolbarControllerTest {
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.TestApplication
import org.mozilla.fenix.components.PermissionStorage
import org.mozilla.fenix.ext.asActivity
import org.mozilla.fenix.ext.clearAndCommit
import org.mozilla.fenix.ext.components
import org.robolectric.annotation.Config
@ -41,7 +40,7 @@ class DeleteAndQuitTest {
private val mainThreadSurrogate = newSingleThreadContext("UI thread")
private var context: HomeActivity = mockk(relaxed = true)
private var activity: HomeActivity = mockk(relaxed = true)
lateinit var settings: Settings
private val tabUseCases: TabsUseCases = mockk(relaxed = true)
private val historyStorage: PlacesHistoryStorage = mockk(relaxed = true)
@ -57,11 +56,11 @@ class DeleteAndQuitTest {
Dispatchers.setMain(mainThreadSurrogate)
every { context.components.core.historyStorage } returns historyStorage
every { context.components.core.permissionStorage } returns permissionStorage
every { context.components.useCases.tabsUseCases } returns tabUseCases
every { activity.components.core.historyStorage } returns historyStorage
every { activity.components.core.permissionStorage } returns permissionStorage
every { activity.components.useCases.tabsUseCases } returns tabUseCases
every { tabUseCases.removeAllTabs } returns removeAllTabsUseCases
every { context.components.core.engine } returns engine
every { activity.components.core.engine } returns engine
}
@After
@ -79,11 +78,11 @@ class DeleteAndQuitTest {
// When
settings.deleteTabsOnQuit = true
context.deleteAndQuit(this)
deleteAndQuit(activity, this)
verify {
removeAllTabsUseCases.invoke()
context.asActivity()?.finish()
activity.finish()
}
verify(exactly = 0) {
@ -110,7 +109,7 @@ class DeleteAndQuitTest {
settings.deleteCookiesOnQuit = true
settings.deleteCacheOnQuit = true
context.deleteAndQuit(this)
deleteAndQuit(activity, this)
verify(exactly = 1) {
engine.clearData(Engine.BrowsingData.allCaches())
@ -134,7 +133,7 @@ class DeleteAndQuitTest {
historyStorage
context.asActivity()?.finish()
activity.finish()
}
}
}