Closes #15443: Use fragment's lifecycleScope for AlertDialog actions

pull/200/head^2
Grisha Kruglov 4 years ago committed by ekager
parent ced92d69d1
commit 51dab196c4

@ -622,7 +622,8 @@ class HomeFragment : Fragment() {
dialog.cancel()
}
setPositiveButton(R.string.tab_collection_dialog_positive) { dialog: DialogInterface, _ ->
viewLifecycleOwner.lifecycleScope.launch(IO) {
// Use fragment's lifecycle; the view may be gone by the time dialog is interacted with.
lifecycleScope.launch(IO) {
context.components.core.tabCollectionStorage.removeCollection(tabCollection)
context.components.analytics.metrics.track(Event.CollectionRemoved)
}.invokeOnCompletion {

@ -365,7 +365,8 @@ class BookmarkFragment : LibraryPageFragment<BookmarkNode>(), UserInteractionHan
pendingBookmarkDeletionJob = getDeleteOperation(Event.RemoveBookmarkFolder)
dialog.dismiss()
val snackbarMessage = getRemoveBookmarksSnackBarMessage(selected, containsFolders = true)
viewLifecycleOwner.lifecycleScope.allowUndo(
// Use fragment's lifecycle; the view may be gone by the time dialog is interacted with.
lifecycleScope.allowUndo(
requireView(),
snackbarMessage,
getString(R.string.bookmark_undo_deletion),

@ -182,7 +182,8 @@ class EditBookmarkFragment : Fragment(R.layout.fragment_edit_bookmark) {
dialog.cancel()
}
setPositiveButton(R.string.tab_collection_dialog_positive) { dialog: DialogInterface, _ ->
viewLifecycleOwner.lifecycleScope.launch(IO) {
// Use fragment's lifecycle; the view may be gone by the time dialog is interacted with.
lifecycleScope.launch(IO) {
requireComponents.core.bookmarksStorage.deleteNode(args.guidToEdit)
requireComponents.analytics.metrics.track(Event.RemoveBookmark)

@ -267,7 +267,8 @@ class HistoryFragment : LibraryPageFragment<HistoryItem>(), UserInteractionHandl
}
setPositiveButton(R.string.delete_browsing_data_prompt_allow) { dialog: DialogInterface, _ ->
historyStore.dispatch(HistoryFragmentAction.EnterDeletionMode)
viewLifecycleOwner.lifecycleScope.launch(IO) {
// Use fragment's lifecycle; the view may be gone by the time dialog is interacted with.
lifecycleScope.launch(IO) {
requireComponents.analytics.metrics.track(Event.HistoryAllItemsRemoved)
requireComponents.core.store.dispatch(RecentlyClosedAction.RemoveAllClosedTabAction)
requireComponents.core.historyStorage.deleteEverything()

@ -233,7 +233,8 @@ class AccountSettingsFragment : PreferenceFragmentCompat() {
setNegativeButton(getString(R.string.logins_warning_dialog_later)) { _: DialogInterface, _ ->
SyncEnginesStorage(context).setStatus(SyncEngine.Passwords, newValue)
viewLifecycleOwner.lifecycleScope.launch {
// Use fragment's lifecycle; the view may be gone by the time dialog is interacted with.
lifecycleScope.launch {
context.components.backgroundServices.accountManager.syncNow(SyncReason.EngineChange)
}
}

@ -142,7 +142,7 @@ class DeleteBrowsingDataFragment : Fragment(R.layout.fragment_delete_browsing_da
private fun deleteSelected() {
startDeletion()
viewLifecycleOwner.lifecycleScope.launch(IO) {
lifecycleScope.launch(IO) {
getCheckboxes().mapIndexed { i, v ->
if (v.isChecked) {
when (i) {

@ -30,7 +30,7 @@ import org.mozilla.fenix.settings.logins.mapToSavedLogin
*/
open class SavedLoginsStorageController(
private val passwordsStorage: SyncableLoginsStorage,
private val viewLifecycleScope: CoroutineScope,
private val lifecycleScope: CoroutineScope,
private val navController: NavController,
private val loginsFragmentStore: LoginsFragmentStore,
private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO
@ -40,7 +40,7 @@ open class SavedLoginsStorageController(
fun delete(loginId: String) {
var deleteLoginJob: Deferred<Boolean>? = null
val deleteJob = viewLifecycleScope.launch(ioDispatcher) {
val deleteJob = lifecycleScope.launch(ioDispatcher) {
deleteLoginJob = async {
passwordsStorage.delete(loginId)
}
@ -58,7 +58,7 @@ open class SavedLoginsStorageController(
fun save(loginId: String, usernameText: String, passwordText: String) {
var saveLoginJob: Deferred<Unit>? = null
viewLifecycleScope.launch(ioDispatcher) {
lifecycleScope.launch(ioDispatcher) {
saveLoginJob = async {
// must retrieve from storage to get the httpsRealm and formActionOrigin
val oldLogin = passwordsStorage.get(loginId)
@ -124,7 +124,7 @@ open class SavedLoginsStorageController(
fun findPotentialDuplicates(loginId: String) {
var deferredLogin: Deferred<List<Login>>? = null
val fetchLoginJob = viewLifecycleScope.launch(ioDispatcher) {
val fetchLoginJob = lifecycleScope.launch(ioDispatcher) {
deferredLogin = async {
val login = getLogin(loginId)
passwordsStorage.getPotentialDupesIgnoringUsername(login!!)
@ -150,7 +150,7 @@ open class SavedLoginsStorageController(
fun fetchLoginDetails(loginId: String) {
var deferredLogin: Deferred<List<Login>>? = null
val fetchLoginJob = viewLifecycleScope.launch(ioDispatcher) {
val fetchLoginJob = lifecycleScope.launch(ioDispatcher) {
deferredLogin = async {
passwordsStorage.list()
}
@ -178,7 +178,7 @@ open class SavedLoginsStorageController(
fun handleLoadAndMapLogins() {
var deferredLogins: Deferred<List<Login>>? = null
val fetchLoginsJob = viewLifecycleScope.launch(ioDispatcher) {
val fetchLoginsJob = lifecycleScope.launch(ioDispatcher) {
deferredLogins = async {
passwordsStorage.list()
}

@ -76,7 +76,7 @@ class EditLoginFragment : Fragment(R.layout.fragment_edit_login) {
interactor = EditLoginInteractor(
SavedLoginsStorageController(
passwordsStorage = requireContext().components.core.passwordsStorage,
viewLifecycleScope = viewLifecycleOwner.lifecycleScope,
lifecycleScope = lifecycleScope,
navController = findNavController(),
loginsFragmentStore = loginsFragmentStore
)

@ -86,7 +86,7 @@ class LoginDetailFragment : Fragment(R.layout.fragment_login_detail) {
interactor = LoginDetailInteractor(
SavedLoginsStorageController(
passwordsStorage = requireContext().components.core.passwordsStorage,
viewLifecycleScope = viewLifecycleOwner.lifecycleScope,
lifecycleScope = lifecycleScope,
navController = findNavController(),
loginsFragmentStore = savedLoginsStore
)

@ -92,7 +92,7 @@ class SavedLoginsFragment : Fragment() {
savedLoginsStorageController =
SavedLoginsStorageController(
passwordsStorage = requireContext().components.core.passwordsStorage,
viewLifecycleScope = viewLifecycleOwner.lifecycleScope,
lifecycleScope = viewLifecycleOwner.lifecycleScope,
navController = findNavController(),
loginsFragmentStore = savedLoginsStore
)

@ -92,7 +92,8 @@ class SitePermissionsDetailsExceptionsFragment : PreferenceFragmentCompat() {
}
private fun clearSitePermissions() {
viewLifecycleOwner.lifecycleScope.launch(IO) {
// Use fragment's lifecycle; the view may be gone by the time dialog is interacted with.
lifecycleScope.launch(IO) {
requireContext().components.core.permissionStorage.deleteSitePermissions(sitePermissions)
withContext(Main) {
requireView().findNavController().popBackStack()

@ -417,7 +417,7 @@ class TabTrayDialogFragment : AppCompatDialogFragment(), UserInteractionHandler
AlertDialog.Builder(it).setTitle(R.string.tab_tray_add_new_collection)
.setView(customLayout).setPositiveButton(android.R.string.ok) { dialog, _ ->
viewLifecycleOwner.lifecycleScope.launch(Dispatchers.IO) {
lifecycleScope.launch(Dispatchers.IO) {
tabCollectionStorage.createCollection(
collectionNameEditText.text.toString(),
sessionList

@ -54,7 +54,7 @@ class SavedLoginsStorageControllerTest {
controller = SavedLoginsStorageController(
passwordsStorage = passwordsStorage,
viewLifecycleScope = scope,
lifecycleScope = scope,
navController = navController,
loginsFragmentStore = loginsFragmentStore,
ioDispatcher = ioDispatcher

Loading…
Cancel
Save