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() + } + } }