For #225 - Properly delete collections

nightly-build-test
Jeff Boek 5 years ago
parent 51451ff002
commit 0cbaeaffdc

@ -6,7 +6,6 @@ package org.mozilla.fenix.settings
import android.content.DialogInterface import android.content.DialogInterface
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.view.ContextThemeWrapper import android.view.ContextThemeWrapper
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
@ -14,6 +13,7 @@ import android.view.ViewGroup
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import kotlinx.android.synthetic.main.fragment_delete_browsing_data.* import kotlinx.android.synthetic.main.fragment_delete_browsing_data.*
import kotlinx.android.synthetic.main.fragment_delete_browsing_data.view.* import kotlinx.android.synthetic.main.fragment_delete_browsing_data.view.*
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
@ -22,16 +22,20 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.async import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import mozilla.components.browser.session.Session import mozilla.components.browser.session.Session
import mozilla.components.browser.session.SessionManager import mozilla.components.browser.session.SessionManager
import mozilla.components.concept.engine.Engine import mozilla.components.concept.engine.Engine
import mozilla.components.feature.tab.collections.TabCollection
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.ext.requireComponents import org.mozilla.fenix.ext.requireComponents
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
@SuppressWarnings("TooManyFunctions")
class DeleteBrowsingDataFragment : Fragment(), CoroutineScope { class DeleteBrowsingDataFragment : Fragment(), CoroutineScope {
private lateinit var sessionObserver: SessionManager.Observer private lateinit var sessionObserver: SessionManager.Observer
private var tabCollections: List<TabCollection> = listOf()
private lateinit var job: Job private lateinit var job: Job
override val coroutineContext: CoroutineContext override val coroutineContext: CoroutineContext
@ -72,6 +76,11 @@ class DeleteBrowsingDataFragment : Fragment(), CoroutineScope {
} }
requireComponents.core.sessionManager.register(sessionObserver, owner = this) requireComponents.core.sessionManager.register(sessionObserver, owner = this)
requireComponents.core.tabCollectionStorage.apply {
getCollections().observe(this@DeleteBrowsingDataFragment, Observer {
this@DeleteBrowsingDataFragment.tabCollections = it
})
}
view?.open_tabs_item?.onCheckListener = { _ -> updateDeleteButton() } view?.open_tabs_item?.onCheckListener = { _ -> updateDeleteButton() }
view?.browsing_data_item?.onCheckListener = { _ -> updateDeleteButton() } view?.browsing_data_item?.onCheckListener = { _ -> updateDeleteButton() }
@ -124,15 +133,15 @@ class DeleteBrowsingDataFragment : Fragment(), CoroutineScope {
} }
private fun deleteSelected() { private fun deleteSelected() {
val open_tabs = view!!.open_tabs_item!!.isChecked val openTabs = view!!.open_tabs_item!!.isChecked
val browsing_data = view!!.browsing_data_item!!.isChecked val browsingData = view!!.browsing_data_item!!.isChecked
val collections = view!!.collections_item!!.isChecked val collections = view!!.collections_item!!.isChecked
startDeletion() startDeletion()
launch(Dispatchers.IO) { launch(Dispatchers.IO) {
var jobs = mutableListOf<Deferred<Unit>>() var jobs = mutableListOf<Deferred<Unit>>()
if (open_tabs) jobs.add(deleteTabsAsync()) if (openTabs) jobs.add(deleteTabsAsync())
if (browsing_data) jobs.add(deleteBrowsingDataAsync()) if (browsingData) jobs.add(deleteBrowsingDataAsync())
if (collections) jobs.add(deleteCollectionsAsync()) if (collections) jobs.add(deleteCollectionsAsync())
jobs.awaitAll() jobs.awaitAll()
@ -141,21 +150,20 @@ class DeleteBrowsingDataFragment : Fragment(), CoroutineScope {
finishDeletion() finishDeletion()
} }
} }
} }
fun startDeletion() { fun startDeletion() {
progress_bar.visibility = View.VISIBLE progress_bar.visibility = View.VISIBLE
delete_browsing_data_wrapper.isEnabled = false delete_browsing_data_wrapper.isEnabled = false
delete_browsing_data_wrapper.isClickable = false delete_browsing_data_wrapper.isClickable = false
delete_browsing_data_wrapper.alpha = 0.6f delete_browsing_data_wrapper.alpha = DISABLED_ALPHA
} }
fun finishDeletion() { fun finishDeletion() {
progress_bar.visibility = View.GONE progress_bar.visibility = View.GONE
delete_browsing_data_wrapper.isEnabled = true delete_browsing_data_wrapper.isEnabled = true
delete_browsing_data_wrapper.isClickable = true delete_browsing_data_wrapper.isClickable = true
delete_browsing_data_wrapper.alpha = 1f delete_browsing_data_wrapper.alpha = ENABLED_ALPHA
updateTabCount() updateTabCount()
updateHistoryCount() updateHistoryCount()
@ -163,13 +171,13 @@ class DeleteBrowsingDataFragment : Fragment(), CoroutineScope {
} }
private fun updateDeleteButton() { private fun updateDeleteButton() {
val open_tabs = view!!.open_tabs_item!!.isChecked val openTabs = view!!.open_tabs_item!!.isChecked
val browsing_data = view!!.browsing_data_item!!.isChecked val browsingData = view!!.browsing_data_item!!.isChecked
val collections = view!!.collections_item!!.isChecked val collections = view!!.collections_item!!.isChecked
val enabled = open_tabs || browsing_data || collections val enabled = openTabs || browsingData || collections
view?.delete_data?.isEnabled = enabled view?.delete_data?.isEnabled = enabled
view?.delete_data?.alpha = if (enabled) 1f else 0.6f view?.delete_data?.alpha = if (enabled) ENABLED_ALPHA else DISABLED_ALPHA
} }
private fun updateTabCount() { private fun updateTabCount() {
@ -221,9 +229,16 @@ class DeleteBrowsingDataFragment : Fragment(), CoroutineScope {
} }
private fun deleteCollectionsAsync() = async(Dispatchers.IO) { private fun deleteCollectionsAsync() = async(Dispatchers.IO) {
val count = requireComponents.core.tabCollectionStorage.getTabCollectionsCount() while (requireComponents.core.tabCollectionStorage.getTabCollectionsCount() != tabCollections.size) {
val data = requireComponents.core.tabCollectionStorage.getCollections(count).value?.forEach { delay(DELAY_IN_MILLIS)
requireComponents.core.tabCollectionStorage.removeCollection(it)
} }
tabCollections.forEach { requireComponents.core.tabCollectionStorage.removeCollection(it) }
}
companion object {
private const val ENABLED_ALPHA = 1f
private const val DISABLED_ALPHA = 0.6f
private const val DELAY_IN_MILLIS = 500L
} }
} }

@ -60,7 +60,6 @@ class DeleteBrowsingDataItem @JvmOverloads constructor(
R.string.browser_menu_your_library R.string.browser_menu_your_library
) )
icon.background = resources.getDrawable(iconId, context.theme) icon.background = resources.getDrawable(iconId, context.theme)
title.text = resources.getString(titleId) title.text = resources.getString(titleId)
subtitle.text = resources.getString(subtitleId) subtitle.text = resources.getString(subtitleId)

Loading…
Cancel
Save