From 5d51c4f059645a663e57fd28715d16d9a1ee940a Mon Sep 17 00:00:00 2001 From: ekager Date: Sat, 18 Apr 2020 13:03:57 -0700 Subject: [PATCH] Don't use ProcessLifecycleOwner for view-tied consume --- .../java/org/mozilla/fenix/home/HomeFragment.kt | 6 ++++-- .../mozilla/fenix/home/HomeScreenViewModel.kt | 1 - .../home/sessioncontrol/SessionControlView.kt | 5 +++-- .../library/bookmarks/BookmarkController.kt | 9 +++------ .../fenix/library/bookmarks/BookmarkFragment.kt | 16 +++++++++++----- .../library/bookmarks/BookmarkControllerTest.kt | 11 ++++------- 6 files changed, 25 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index 74efbf0b0..e70cb9e3f 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -222,7 +222,7 @@ class HomeFragment : Fragment() { showDeleteCollectionPrompt = ::showDeleteCollectionPrompt, openSettingsScreen = ::openSettingsScreen, openSearchScreen = ::navigateToSearch, - openWhatsNewLink = { openCustomTab(SupportUtils.getWhatsNewUrl(view.context)) }, + openWhatsNewLink = { openCustomTab(SupportUtils.getWhatsNewUrl(activity)) }, openPrivacyNotice = { openCustomTab(SupportUtils.getPrivacyNoticeUrl()) } ) ) @@ -230,7 +230,9 @@ class HomeFragment : Fragment() { setOffset(view) sessionControlView = SessionControlView( homeFragmentStore, - view.sessionControlRecyclerView, sessionControlInteractor, + view.sessionControlRecyclerView, + sessionControlInteractor, + viewLifecycleOwner, homeViewModel ) activity.themeManager.applyStatusBarTheme(activity) diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeScreenViewModel.kt b/app/src/main/java/org/mozilla/fenix/home/HomeScreenViewModel.kt index db1fed214..ae3f3fcc1 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeScreenViewModel.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeScreenViewModel.kt @@ -9,7 +9,6 @@ import androidx.lifecycle.ViewModel class HomeScreenViewModel : ViewModel() { var layoutManagerState: Parcelable? = null - var motionLayoutProgress = 0F /** * Used to remember if we need to scroll to top of the homeFragment's recycleView (top sites) see #8561 diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlView.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlView.kt index 4b5730a94..8d6a5e24b 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlView.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlView.kt @@ -6,7 +6,7 @@ package org.mozilla.fenix.home.sessioncontrol import android.os.Build import android.view.View -import androidx.lifecycle.ProcessLifecycleOwner +import androidx.lifecycle.LifecycleOwner import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -164,6 +164,7 @@ class SessionControlView( private val homeFragmentStore: HomeFragmentStore, override val containerView: View?, interactor: SessionControlInteractor, + private val viewLifecycleOwner: LifecycleOwner, private var homeScreenViewModel: HomeScreenViewModel ) : LayoutContainer { @@ -183,7 +184,7 @@ class SessionControlView( ) itemTouchHelper.attachToRecyclerView(this) - view.consumeFrom(homeFragmentStore, ProcessLifecycleOwner.get()) { + view.consumeFrom(homeFragmentStore, viewLifecycleOwner) { update(it) } } diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkController.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkController.kt index b0cadb66d..2df8de1b5 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkController.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkController.kt @@ -17,7 +17,6 @@ import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.browser.browsingmode.BrowsingMode -import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.ext.nav @@ -43,7 +42,7 @@ interface BookmarkController { class DefaultBookmarkController( private val context: Context, private val navController: NavController, - private val snackbar: FenixSnackbar, + private val showSnackbar: (String) -> Unit, private val deleteBookmarkNodes: (Set, Event) -> Unit, private val invokePendingDeletion: () -> Unit ) : BookmarkController { @@ -68,15 +67,13 @@ class DefaultBookmarkController( } override fun handleBookmarkSelected(node: BookmarkNode) { - snackbar.setText(resources.getString(R.string.bookmark_cannot_edit_root)) - snackbar.show() + showSnackbar(resources.getString(R.string.bookmark_cannot_edit_root)) } override fun handleCopyUrl(item: BookmarkNode) { val urlClipData = ClipData.newPlainText(item.url, item.url) context.getSystemService()?.primaryClip = urlClipData - snackbar.setText(resources.getString(R.string.url_copied)) - snackbar.show() + showSnackbar(resources.getString(R.string.url_copied)) } override fun handleBookmarkSharing(item: BookmarkNode) { diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragment.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragment.kt index 88d2246a8..1402c43c1 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragment.kt @@ -83,11 +83,7 @@ class BookmarkFragment : LibraryPageFragment(), UserInteractionHan bookmarksController = DefaultBookmarkController( context = context!!, navController = findNavController(), - snackbar = FenixSnackbar.make( - view = view, - duration = FenixSnackbar.LENGTH_LONG, - isDisplayedWithBrowserToolbar = false - ), + showSnackbar = ::showSnackBarWithText, deleteBookmarkNodes = ::deleteMulti, invokePendingDeletion = ::invokePendingDeletion ), @@ -107,6 +103,16 @@ class BookmarkFragment : LibraryPageFragment(), UserInteractionHan return view } + private fun showSnackBarWithText(text: String) { + view?.let { + FenixSnackbar.make( + view = it, + duration = FenixSnackbar.LENGTH_LONG, + isDisplayedWithBrowserToolbar = false + ).setText(text).show() + } + } + @ExperimentalCoroutinesApi override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) diff --git a/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkControllerTest.kt b/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkControllerTest.kt index 03ffca3a9..f79bc853c 100644 --- a/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkControllerTest.kt @@ -29,7 +29,6 @@ import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.browser.browsingmode.BrowsingMode -import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.components.Services import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.ext.components @@ -41,7 +40,7 @@ class BookmarkControllerTest { private val context: Context = mockk(relaxed = true) private val navController: NavController = mockk(relaxed = true) - private val snackbar: FenixSnackbar = mockk(relaxed = true) + private val showSnackbar: (String) -> Unit = mockk(relaxed = true) private val deleteBookmarkNodes: (Set, Event) -> Unit = mockk(relaxed = true) private val invokePendingDeletion: () -> Unit = mockk(relaxed = true) @@ -91,7 +90,7 @@ class BookmarkControllerTest { controller = DefaultBookmarkController( context = homeActivity, navController = navController, - snackbar = snackbar, + showSnackbar = showSnackbar, deleteBookmarkNodes = deleteBookmarkNodes, invokePendingDeletion = invokePendingDeletion ) @@ -166,8 +165,7 @@ class BookmarkControllerTest { controller.handleBookmarkSelected(root) verify { - snackbar.setText(errorMessage) - snackbar.show() + showSnackbar(errorMessage) } } @@ -182,8 +180,7 @@ class BookmarkControllerTest { verifyOrder { ClipData.newPlainText(item.url, item.url) - snackbar.setText(urlCopiedMessage) - snackbar.show() + showSnackbar(urlCopiedMessage) } }