Don't use ProcessLifecycleOwner for view-tied consume
parent
f801f32027
commit
5d51c4f059
|
@ -222,7 +222,7 @@ class HomeFragment : Fragment() {
|
||||||
showDeleteCollectionPrompt = ::showDeleteCollectionPrompt,
|
showDeleteCollectionPrompt = ::showDeleteCollectionPrompt,
|
||||||
openSettingsScreen = ::openSettingsScreen,
|
openSettingsScreen = ::openSettingsScreen,
|
||||||
openSearchScreen = ::navigateToSearch,
|
openSearchScreen = ::navigateToSearch,
|
||||||
openWhatsNewLink = { openCustomTab(SupportUtils.getWhatsNewUrl(view.context)) },
|
openWhatsNewLink = { openCustomTab(SupportUtils.getWhatsNewUrl(activity)) },
|
||||||
openPrivacyNotice = { openCustomTab(SupportUtils.getPrivacyNoticeUrl()) }
|
openPrivacyNotice = { openCustomTab(SupportUtils.getPrivacyNoticeUrl()) }
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -230,7 +230,9 @@ class HomeFragment : Fragment() {
|
||||||
setOffset(view)
|
setOffset(view)
|
||||||
sessionControlView = SessionControlView(
|
sessionControlView = SessionControlView(
|
||||||
homeFragmentStore,
|
homeFragmentStore,
|
||||||
view.sessionControlRecyclerView, sessionControlInteractor,
|
view.sessionControlRecyclerView,
|
||||||
|
sessionControlInteractor,
|
||||||
|
viewLifecycleOwner,
|
||||||
homeViewModel
|
homeViewModel
|
||||||
)
|
)
|
||||||
activity.themeManager.applyStatusBarTheme(activity)
|
activity.themeManager.applyStatusBarTheme(activity)
|
||||||
|
|
|
@ -9,7 +9,6 @@ import androidx.lifecycle.ViewModel
|
||||||
|
|
||||||
class HomeScreenViewModel : ViewModel() {
|
class HomeScreenViewModel : ViewModel() {
|
||||||
var layoutManagerState: Parcelable? = null
|
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
|
* Used to remember if we need to scroll to top of the homeFragment's recycleView (top sites) see #8561
|
||||||
|
|
|
@ -6,7 +6,7 @@ package org.mozilla.fenix.home.sessioncontrol
|
||||||
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.lifecycle.ProcessLifecycleOwner
|
import androidx.lifecycle.LifecycleOwner
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper
|
import androidx.recyclerview.widget.ItemTouchHelper
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
@ -164,6 +164,7 @@ class SessionControlView(
|
||||||
private val homeFragmentStore: HomeFragmentStore,
|
private val homeFragmentStore: HomeFragmentStore,
|
||||||
override val containerView: View?,
|
override val containerView: View?,
|
||||||
interactor: SessionControlInteractor,
|
interactor: SessionControlInteractor,
|
||||||
|
private val viewLifecycleOwner: LifecycleOwner,
|
||||||
private var homeScreenViewModel: HomeScreenViewModel
|
private var homeScreenViewModel: HomeScreenViewModel
|
||||||
) : LayoutContainer {
|
) : LayoutContainer {
|
||||||
|
|
||||||
|
@ -183,7 +184,7 @@ class SessionControlView(
|
||||||
)
|
)
|
||||||
itemTouchHelper.attachToRecyclerView(this)
|
itemTouchHelper.attachToRecyclerView(this)
|
||||||
|
|
||||||
view.consumeFrom(homeFragmentStore, ProcessLifecycleOwner.get()) {
|
view.consumeFrom(homeFragmentStore, viewLifecycleOwner) {
|
||||||
update(it)
|
update(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,6 @@ import org.mozilla.fenix.BrowserDirection
|
||||||
import org.mozilla.fenix.HomeActivity
|
import org.mozilla.fenix.HomeActivity
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
|
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
|
||||||
import org.mozilla.fenix.components.FenixSnackbar
|
|
||||||
import org.mozilla.fenix.components.metrics.Event
|
import org.mozilla.fenix.components.metrics.Event
|
||||||
import org.mozilla.fenix.ext.nav
|
import org.mozilla.fenix.ext.nav
|
||||||
|
|
||||||
|
@ -43,7 +42,7 @@ interface BookmarkController {
|
||||||
class DefaultBookmarkController(
|
class DefaultBookmarkController(
|
||||||
private val context: Context,
|
private val context: Context,
|
||||||
private val navController: NavController,
|
private val navController: NavController,
|
||||||
private val snackbar: FenixSnackbar,
|
private val showSnackbar: (String) -> Unit,
|
||||||
private val deleteBookmarkNodes: (Set<BookmarkNode>, Event) -> Unit,
|
private val deleteBookmarkNodes: (Set<BookmarkNode>, Event) -> Unit,
|
||||||
private val invokePendingDeletion: () -> Unit
|
private val invokePendingDeletion: () -> Unit
|
||||||
) : BookmarkController {
|
) : BookmarkController {
|
||||||
|
@ -68,15 +67,13 @@ class DefaultBookmarkController(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun handleBookmarkSelected(node: BookmarkNode) {
|
override fun handleBookmarkSelected(node: BookmarkNode) {
|
||||||
snackbar.setText(resources.getString(R.string.bookmark_cannot_edit_root))
|
showSnackbar(resources.getString(R.string.bookmark_cannot_edit_root))
|
||||||
snackbar.show()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun handleCopyUrl(item: BookmarkNode) {
|
override fun handleCopyUrl(item: BookmarkNode) {
|
||||||
val urlClipData = ClipData.newPlainText(item.url, item.url)
|
val urlClipData = ClipData.newPlainText(item.url, item.url)
|
||||||
context.getSystemService<ClipboardManager>()?.primaryClip = urlClipData
|
context.getSystemService<ClipboardManager>()?.primaryClip = urlClipData
|
||||||
snackbar.setText(resources.getString(R.string.url_copied))
|
showSnackbar(resources.getString(R.string.url_copied))
|
||||||
snackbar.show()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun handleBookmarkSharing(item: BookmarkNode) {
|
override fun handleBookmarkSharing(item: BookmarkNode) {
|
||||||
|
|
|
@ -83,11 +83,7 @@ class BookmarkFragment : LibraryPageFragment<BookmarkNode>(), UserInteractionHan
|
||||||
bookmarksController = DefaultBookmarkController(
|
bookmarksController = DefaultBookmarkController(
|
||||||
context = context!!,
|
context = context!!,
|
||||||
navController = findNavController(),
|
navController = findNavController(),
|
||||||
snackbar = FenixSnackbar.make(
|
showSnackbar = ::showSnackBarWithText,
|
||||||
view = view,
|
|
||||||
duration = FenixSnackbar.LENGTH_LONG,
|
|
||||||
isDisplayedWithBrowserToolbar = false
|
|
||||||
),
|
|
||||||
deleteBookmarkNodes = ::deleteMulti,
|
deleteBookmarkNodes = ::deleteMulti,
|
||||||
invokePendingDeletion = ::invokePendingDeletion
|
invokePendingDeletion = ::invokePendingDeletion
|
||||||
),
|
),
|
||||||
|
@ -107,6 +103,16 @@ class BookmarkFragment : LibraryPageFragment<BookmarkNode>(), UserInteractionHan
|
||||||
return view
|
return view
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun showSnackBarWithText(text: String) {
|
||||||
|
view?.let {
|
||||||
|
FenixSnackbar.make(
|
||||||
|
view = it,
|
||||||
|
duration = FenixSnackbar.LENGTH_LONG,
|
||||||
|
isDisplayedWithBrowserToolbar = false
|
||||||
|
).setText(text).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ExperimentalCoroutinesApi
|
@ExperimentalCoroutinesApi
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
|
@ -29,7 +29,6 @@ import org.mozilla.fenix.BrowserDirection
|
||||||
import org.mozilla.fenix.HomeActivity
|
import org.mozilla.fenix.HomeActivity
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
|
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
|
||||||
import org.mozilla.fenix.components.FenixSnackbar
|
|
||||||
import org.mozilla.fenix.components.Services
|
import org.mozilla.fenix.components.Services
|
||||||
import org.mozilla.fenix.components.metrics.Event
|
import org.mozilla.fenix.components.metrics.Event
|
||||||
import org.mozilla.fenix.ext.components
|
import org.mozilla.fenix.ext.components
|
||||||
|
@ -41,7 +40,7 @@ class BookmarkControllerTest {
|
||||||
|
|
||||||
private val context: Context = mockk(relaxed = true)
|
private val context: Context = mockk(relaxed = true)
|
||||||
private val navController: NavController = 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<BookmarkNode>, Event) -> Unit = mockk(relaxed = true)
|
private val deleteBookmarkNodes: (Set<BookmarkNode>, Event) -> Unit = mockk(relaxed = true)
|
||||||
private val invokePendingDeletion: () -> Unit = mockk(relaxed = true)
|
private val invokePendingDeletion: () -> Unit = mockk(relaxed = true)
|
||||||
|
|
||||||
|
@ -91,7 +90,7 @@ class BookmarkControllerTest {
|
||||||
controller = DefaultBookmarkController(
|
controller = DefaultBookmarkController(
|
||||||
context = homeActivity,
|
context = homeActivity,
|
||||||
navController = navController,
|
navController = navController,
|
||||||
snackbar = snackbar,
|
showSnackbar = showSnackbar,
|
||||||
deleteBookmarkNodes = deleteBookmarkNodes,
|
deleteBookmarkNodes = deleteBookmarkNodes,
|
||||||
invokePendingDeletion = invokePendingDeletion
|
invokePendingDeletion = invokePendingDeletion
|
||||||
)
|
)
|
||||||
|
@ -166,8 +165,7 @@ class BookmarkControllerTest {
|
||||||
controller.handleBookmarkSelected(root)
|
controller.handleBookmarkSelected(root)
|
||||||
|
|
||||||
verify {
|
verify {
|
||||||
snackbar.setText(errorMessage)
|
showSnackbar(errorMessage)
|
||||||
snackbar.show()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,8 +180,7 @@ class BookmarkControllerTest {
|
||||||
|
|
||||||
verifyOrder {
|
verifyOrder {
|
||||||
ClipData.newPlainText(item.url, item.url)
|
ClipData.newPlainText(item.url, item.url)
|
||||||
snackbar.setText(urlCopiedMessage)
|
showSnackbar(urlCopiedMessage)
|
||||||
snackbar.show()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue