diff --git a/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteAndQuit.kt b/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteAndQuit.kt
index 8550cd650e..e5fe0ac42d 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteAndQuit.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteAndQuit.kt
@@ -24,6 +24,7 @@ fun deleteAndQuit(activity: Activity, coroutineScope: CoroutineScope, snackbar:
val settings = activity.settings()
val controller = DefaultDeleteBrowsingDataController(
activity.components.useCases.tabsUseCases.removeAllTabs,
+ activity.components.useCases.downloadUseCases.removeAllDownloads,
activity.components.core.historyStorage,
activity.components.core.permissionStorage,
activity.components.core.store,
@@ -61,5 +62,6 @@ private suspend fun DeleteBrowsingDataController.deleteType(type: DeleteBrowsing
DeleteBrowsingDataOnQuitType.PERMISSIONS -> withContext(IO) {
deleteSitePermissions()
}
+ DeleteBrowsingDataOnQuitType.DOWNLOADS -> deleteDownloads()
}
}
diff --git a/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteBrowsingDataController.kt b/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteBrowsingDataController.kt
index 9f17a34540..6d28fe7d31 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteBrowsingDataController.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteBrowsingDataController.kt
@@ -12,6 +12,7 @@ import mozilla.components.browser.state.action.RecentlyClosedAction
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.concept.engine.Engine
import mozilla.components.concept.storage.HistoryStorage
+import mozilla.components.feature.downloads.DownloadsUseCases
import mozilla.components.feature.tabs.TabsUseCases
import org.mozilla.fenix.components.PermissionStorage
import kotlin.coroutines.CoroutineContext
@@ -22,10 +23,12 @@ interface DeleteBrowsingDataController {
suspend fun deleteCookies()
suspend fun deleteCachedFiles()
suspend fun deleteSitePermissions()
+ suspend fun deleteDownloads()
}
class DefaultDeleteBrowsingDataController(
private val removeAllTabs: TabsUseCases.RemoveAllTabsUseCase,
+ private val removeAllDownloads: DownloadsUseCases.RemoveAllDownloadsUseCase,
private val historyStorage: HistoryStorage,
private val permissionStorage: PermissionStorage,
private val store: BrowserStore,
@@ -77,4 +80,10 @@ class DefaultDeleteBrowsingDataController(
}
permissionStorage.deleteAllSitePermissions()
}
+
+ override suspend fun deleteDownloads() {
+ withContext(coroutineContext) {
+ removeAllDownloads.invoke()
+ }
+ }
}
diff --git a/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteBrowsingDataFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteBrowsingDataFragment.kt
index 95732ce217..4bb7dcd1c0 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteBrowsingDataFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteBrowsingDataFragment.kt
@@ -33,7 +33,7 @@ import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.ext.showToolbar
import org.mozilla.fenix.utils.Settings
-@SuppressWarnings("TooManyFunctions")
+@SuppressWarnings("TooManyFunctions", "LargeClass")
class DeleteBrowsingDataFragment : Fragment(R.layout.fragment_delete_browsing_data) {
private lateinit var controller: DeleteBrowsingDataController
@@ -42,9 +42,11 @@ class DeleteBrowsingDataFragment : Fragment(R.layout.fragment_delete_browsing_da
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
-
+ val tabsUseCases = requireComponents.useCases.tabsUseCases
+ val downloadUseCases = requireComponents.useCases.downloadUseCases
controller = DefaultDeleteBrowsingDataController(
- requireComponents.useCases.tabsUseCases.removeAllTabs,
+ tabsUseCases.removeAllTabs,
+ downloadUseCases.removeAllDownloads,
requireComponents.core.historyStorage,
requireComponents.core.permissionStorage,
requireComponents.core.store,
@@ -67,6 +69,7 @@ class DeleteBrowsingDataFragment : Fragment(R.layout.fragment_delete_browsing_da
R.id.cookies_item -> settings.deleteCookies
R.id.cached_files_item -> settings.deleteCache
R.id.site_permissions_item -> settings.deleteSitePermissions
+ R.id.downloads_item -> settings.deleteDownloads
else -> true
}
}
@@ -84,6 +87,7 @@ class DeleteBrowsingDataFragment : Fragment(R.layout.fragment_delete_browsing_da
R.id.cookies_item -> settings.deleteCookies = it.isChecked
R.id.cached_files_item -> settings.deleteCache = it.isChecked
R.id.site_permissions_item -> settings.deleteSitePermissions = it.isChecked
+ R.id.downloads_item -> settings.deleteDownloads = it.isChecked
else -> return
}
}
@@ -151,6 +155,7 @@ class DeleteBrowsingDataFragment : Fragment(R.layout.fragment_delete_browsing_da
COOKIES_INDEX -> controller.deleteCookies()
CACHED_INDEX -> controller.deleteCachedFiles()
PERMS_INDEX -> controller.deleteSitePermissions()
+ DOWNLOADS_INDEX -> controller.deleteDownloads()
}
}
}
@@ -262,7 +267,8 @@ class DeleteBrowsingDataFragment : Fragment(R.layout.fragment_delete_browsing_da
fragmentView.browsing_data_item,
fragmentView.cookies_item,
fragmentView.cached_files_item,
- fragmentView.site_permissions_item
+ fragmentView.site_permissions_item,
+ fragmentView.downloads_item
)
}
@@ -275,5 +281,6 @@ class DeleteBrowsingDataFragment : Fragment(R.layout.fragment_delete_browsing_da
private const val COOKIES_INDEX = 2
private const val CACHED_INDEX = 3
private const val PERMS_INDEX = 4
+ private const val DOWNLOADS_INDEX = 5
}
}
diff --git a/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteBrowsingDataOnQuitType.kt b/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteBrowsingDataOnQuitType.kt
index 794d16a9d1..a88c4f2bb1 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteBrowsingDataOnQuitType.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/deletebrowsingdata/DeleteBrowsingDataOnQuitType.kt
@@ -14,7 +14,8 @@ enum class DeleteBrowsingDataOnQuitType(@StringRes private val prefKey: Int) {
HISTORY(R.string.pref_key_delete_browsing_history_on_quit),
COOKIES(R.string.pref_key_delete_cookies_on_quit),
CACHE(R.string.pref_key_delete_caches_on_quit),
- PERMISSIONS(R.string.pref_key_delete_permissions_on_quit);
+ PERMISSIONS(R.string.pref_key_delete_permissions_on_quit),
+ DOWNLOADS(R.string.pref_key_delete_downloads_on_quit);
fun getPreferenceKey(context: Context) = context.getPreferenceKey(prefKey)
}
diff --git a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt
index be2614ae97..e12cc12f79 100644
--- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt
+++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt
@@ -532,6 +532,11 @@ class Settings(private val appContext: Context) : PreferencesHolder {
default = true
)
+ var deleteDownloads by booleanPreference(
+ appContext.getPreferenceKey(R.string.pref_key_delete_downloads_now),
+ default = true
+ )
+
var shouldUseBottomToolbar by booleanPreference(
appContext.getPreferenceKey(R.string.pref_key_toolbar_bottom),
// Default accessibility users to top toolbar
diff --git a/app/src/main/res/layout/fragment_delete_browsing_data.xml b/app/src/main/res/layout/fragment_delete_browsing_data.xml
index 5c5dd8b075..4908f171f9 100644
--- a/app/src/main/res/layout/fragment_delete_browsing_data.xml
+++ b/app/src/main/res/layout/fragment_delete_browsing_data.xml
@@ -76,6 +76,15 @@
android:focusable="true"
android:visibility="gone"
app:deleteBrowsingDataItemTitle="@string/preferences_delete_browsing_data_site_permissions" />
+
pref_key_delete_cookies_on_quit
pref_key_delete_caches_on_quit
pref_key_delete_permissions_on_quit
+ pref_key_delete_downloads_on_quit
pref_key_delete_open_tabs_now
pref_key_delete_browsing_history_now
pref_key_delete_cookies_now
pref_key_delete_caches_now
pref_key_delete_permissions_now
+ pref_key_delete_downloads_now
pref_key_delete_browsing_data_on_quit_categories
pref_key_last_known_mode_private
pref_key_addons
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 12d39ab6ed..515b2d760a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1066,6 +1066,8 @@
Frees up storage space
Site permissions
+
+ Downloads
Delete browsing data
diff --git a/app/src/main/res/xml/delete_browsing_data_quit_preferences.xml b/app/src/main/res/xml/delete_browsing_data_quit_preferences.xml
index 6980610102..e125809d3c 100644
--- a/app/src/main/res/xml/delete_browsing_data_quit_preferences.xml
+++ b/app/src/main/res/xml/delete_browsing_data_quit_preferences.xml
@@ -34,8 +34,13 @@
android:summary="@string/preferences_delete_browsing_data_cached_files_subtitle"
android:title="@string/preferences_delete_browsing_data_cached_files" />
+
+
+ android:title="@string/preferences_delete_browsing_data_downloads" />
diff --git a/app/src/test/java/org/mozilla/fenix/settings/deletebrowsingdata/DefaultDeleteBrowsingDataControllerTest.kt b/app/src/test/java/org/mozilla/fenix/settings/deletebrowsingdata/DefaultDeleteBrowsingDataControllerTest.kt
index 9d3d6fc784..328f5ffb33 100644
--- a/app/src/test/java/org/mozilla/fenix/settings/deletebrowsingdata/DefaultDeleteBrowsingDataControllerTest.kt
+++ b/app/src/test/java/org/mozilla/fenix/settings/deletebrowsingdata/DefaultDeleteBrowsingDataControllerTest.kt
@@ -18,6 +18,7 @@ import mozilla.components.browser.state.action.RecentlyClosedAction
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.concept.engine.Engine
import mozilla.components.concept.storage.HistoryStorage
+import mozilla.components.feature.downloads.DownloadsUseCases
import mozilla.components.feature.tabs.TabsUseCases
import mozilla.components.support.test.rule.MainCoroutineRule
import org.junit.After
@@ -35,6 +36,7 @@ class DefaultDeleteBrowsingDataControllerTest {
val coroutinesTestRule = MainCoroutineRule(testDispatcher)
private var removeAllTabs: TabsUseCases.RemoveAllTabsUseCase = mockk(relaxed = true)
+ private var removeAllDownloads: DownloadsUseCases.RemoveAllDownloadsUseCase = mockk(relaxed = true)
private var historyStorage: HistoryStorage = mockk(relaxed = true)
private var permissionStorage: PermissionStorage = mockk(relaxed = true)
private var store: BrowserStore = mockk(relaxed = true)
@@ -46,6 +48,7 @@ class DefaultDeleteBrowsingDataControllerTest {
fun setup() {
controller = DefaultDeleteBrowsingDataController(
removeAllTabs = removeAllTabs,
+ removeAllDownloads = removeAllDownloads,
historyStorage = historyStorage,
store = store,
permissionStorage = permissionStorage,
@@ -117,4 +120,14 @@ class DefaultDeleteBrowsingDataControllerTest {
permissionStorage.deleteAllSitePermissions()
}
}
+
+ @Test
+ fun deleteDownloads() = runBlockingTest {
+
+ controller.deleteDownloads()
+
+ verify {
+ removeAllDownloads.invoke()
+ }
+ }
}