tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit c23d6ad2374cc078e1b4e6d07bd4369babde7f3b
parent 68e6ac1494fc82ddec5d460db2e37fcd6428f9a0
Author: Matthew Finkel <sysrqb@torproject.org>
Date:   Sun, 26 Jul 2020 18:24:39 +0000

TB 34403 [android]: Disable Normal mode by default.

Originally, fenix#34403.

Diffstat:
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/BookmarksScreen.kt | 16+++++++++-------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/browsingmode/BrowsingModeManager.kt | 4++++
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/search/ApplicationSearchMiddleware.kt | 7++++---
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt | 2+-
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/HttpsOnlyFragment.kt | 3+++
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt | 12+++++++++---
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/TabsSettingsFragment.kt | 8++++++++
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/search/SearchEngineFragment.kt | 4++++
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayBanner.kt | 33+++++++++++++++++++--------------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt | 13+++++++++----
Mmobile/android/fenix/app/src/main/res/values/preference_keys.xml | 1+
Mmobile/android/fenix/app/src/main/res/xml/preferences.xml | 1+
Mmobile/android/fenix/app/src/main/res/xml/private_browsing_preferences.xml | 1+
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/utils/SettingsTest.kt | 6+++---
14 files changed, 76 insertions(+), 35 deletions(-)

diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/BookmarksScreen.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/BookmarksScreen.kt @@ -92,6 +92,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.core.graphics.toColorInt +import androidx.compose.ui.platform.LocalContext import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost @@ -138,6 +139,7 @@ import org.mozilla.fenix.compose.Favicon import org.mozilla.fenix.compose.list.IconListItem import org.mozilla.fenix.compose.list.SelectableFaviconListItem import org.mozilla.fenix.compose.list.SelectableIconListItem +import org.mozilla.fenix.ext.settings import org.mozilla.fenix.search.SearchFragmentAction.SuggestionClicked import org.mozilla.fenix.search.SearchFragmentAction.SuggestionSelected import org.mozilla.fenix.search.SearchFragmentState @@ -1409,7 +1411,7 @@ private fun BookmarkListOverflowMenu( onDismissRequest: () -> Unit, store: BookmarksStore, ) { - val menuItems = listOf( + val menuItems = listOfNotNull( MenuItem.TextItem( text = Text.Resource(R.string.bookmark_menu_select_all_bookmarks), onClick = { store.dispatch(BookmarksListMenuAction.SelectAll) }, @@ -1417,7 +1419,7 @@ private fun BookmarkListOverflowMenu( MenuItem.TextItem( text = Text.Resource(R.string.bookmark_menu_open_in_new_tab_button), onClick = { store.dispatch(BookmarksListMenuAction.MultiSelect.OpenInNormalTabsClicked) }, - ), + ).takeIf { !LocalContext.current.settings().shouldDisableNormalMode }, MenuItem.TextItem( text = Text.Resource(R.string.bookmark_menu_open_in_private_tab_button), onClick = { store.dispatch(BookmarksListMenuAction.MultiSelect.OpenInPrivateTabsClicked) }, @@ -1445,7 +1447,7 @@ private fun FolderListOverflowMenu( onDismissRequest: () -> Unit, store: BookmarksStore, ) { - val menuItems = listOf( + val menuItems = listOfNotNull( MenuItem.TextItem( text = Text.Resource(R.string.bookmark_menu_select_all_bookmarks), onClick = { store.dispatch(BookmarksListMenuAction.SelectAll) }, @@ -1478,7 +1480,7 @@ private fun BookmarkListItemMenu( bookmark: BookmarkItem.Bookmark, store: BookmarksStore, ) { - val menuItems = listOf( + val menuItems = listOfNotNull( MenuItem.TextItem( text = Text.Resource(R.string.bookmark_menu_edit_button), onClick = { store.dispatch(BookmarksListMenuAction.Bookmark.EditClicked(bookmark)) }, @@ -1494,7 +1496,7 @@ private fun BookmarkListItemMenu( MenuItem.TextItem( text = Text.Resource(R.string.bookmark_menu_open_in_new_tab_button), onClick = { store.dispatch(BookmarksListMenuAction.Bookmark.OpenInNormalTabClicked(bookmark)) }, - ), + ).takeIf { !LocalContext.current.settings().shouldDisableNormalMode }, MenuItem.TextItem( text = Text.Resource(R.string.bookmark_menu_open_in_private_tab_button), onClick = { store.dispatch(BookmarksListMenuAction.Bookmark.OpenInPrivateTabClicked(bookmark)) }, @@ -1519,7 +1521,7 @@ private fun BookmarkListFolderMenu( folder: BookmarkItem.Folder, store: BookmarksStore, ) { - val menuItems = listOf( + val menuItems = listOfNotNull( MenuItem.TextItem( text = Text.Resource(R.string.bookmark_menu_edit_button), onClick = { store.dispatch(BookmarksListMenuAction.Folder.EditClicked(folder)) }, @@ -1527,7 +1529,7 @@ private fun BookmarkListFolderMenu( MenuItem.TextItem( text = Text.Resource(R.string.bookmark_menu_open_all_in_tabs_button), onClick = { store.dispatch(BookmarksListMenuAction.Folder.OpenAllInNormalTabClicked(folder)) }, - ), + ).takeIf { !LocalContext.current.settings().shouldDisableNormalMode }, MenuItem.TextItem( text = Text.Resource(R.string.bookmark_menu_open_all_in_private_tabs_button), onClick = { store.dispatch(BookmarksListMenuAction.Folder.OpenAllInPrivateTabClicked(folder)) }, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/browsingmode/BrowsingModeManager.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/browsingmode/BrowsingModeManager.kt @@ -74,6 +74,10 @@ class DefaultBrowsingModeManager( * Returns the [BrowsingMode] set by the [intent] or the last known [BrowsingMode]. */ private fun getModeFromIntentOrLastKnown(intent: Intent?): BrowsingMode { + if (settings.shouldDisableNormalMode) { + return BrowsingMode.Private + } + intent?.toSafeIntent()?.let { if (it.hasExtra(PRIVATE_BROWSING_MODE)) { val startPrivateMode = it.getBooleanExtra(PRIVATE_BROWSING_MODE, false) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/search/ApplicationSearchMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/search/ApplicationSearchMiddleware.kt @@ -18,6 +18,7 @@ import mozilla.components.browser.state.state.BrowserState import mozilla.components.feature.search.ext.createApplicationSearchEngine import mozilla.components.lib.state.Middleware import mozilla.components.lib.state.Store +import org.mozilla.fenix.ext.settings import org.mozilla.fenix.R const val HISTORY_SEARCH_ENGINE_ID = "history_search_engine_id" @@ -33,7 +34,7 @@ const val TABS_SEARCH_ENGINE_ID = "tabs_search_engine_id" * @param scope [CoroutineScope] used to launch coroutines. */ class ApplicationSearchMiddleware( - context: Context, + private val context: Context, private val stringProvider: (Int) -> String = { context.getString(it) }, private val bitmapProvider: (Int) -> Bitmap = { getDrawable(context, it)?.toBitmap()!! }, private val scope: CoroutineScope = CoroutineScope(Dispatchers.IO), @@ -53,7 +54,7 @@ class ApplicationSearchMiddleware( private fun loadSearchEngines( store: Store<BrowserState, BrowserAction>, ) = scope.launch { - val searchEngines = listOf( + val searchEngines = listOfNotNull( createApplicationSearchEngine( id = BOOKMARKS_SEARCH_ENGINE_ID, name = stringProvider(R.string.library_bookmarks), @@ -71,7 +72,7 @@ class ApplicationSearchMiddleware( name = stringProvider(R.string.library_history), url = "", icon = bitmapProvider(R.drawable.ic_history_search), - ), + ).takeIf { !context.settings().shouldDisableNormalMode }, ) store.dispatch(SearchAction.ApplicationSearchEnginesLoaded(searchEngines)) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt @@ -435,7 +435,7 @@ open class DefaultToolbarMenu( newTabItem, BrowserMenuDivider(), bookmarksItem, - historyItem, + if (context.settings().shouldDisableNormalMode) null else historyItem, downloadsItem, passwordsItem, extensionsItem, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/HttpsOnlyFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/HttpsOnlyFragment.kt @@ -15,6 +15,7 @@ import android.view.ViewGroup import androidx.core.text.HtmlCompat import androidx.core.text.getSpans import androidx.core.view.children +import androidx.core.view.isGone import androidx.fragment.app.Fragment import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.HomeActivity @@ -60,6 +61,8 @@ class HttpsOnlyFragment : Fragment() { updateEngineHttpsOnlyMode() } + binding.httpsOnlyModes.isGone = requireContext().settings().shouldDisableNormalMode + return binding.root } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt @@ -288,10 +288,16 @@ class SettingsFragment : PreferenceFragmentCompat() { } else { getString(R.string.delete_browsing_data_quit_off) } + // Hide "Delete browsing data on quit" when in Private Browsing-only mode + deleteBrowsingDataPreference.isVisible = + !deleteBrowsingDataPreference.context.settings().shouldDisableNormalMode - val tabSettingsPreference = - requirePreference<Preference>(R.string.pref_key_tabs) - tabSettingsPreference.summary = settings.getTabTimeoutString() + + if (!settings.shouldDisableNormalMode) { + val tabSettingsPreference = + requirePreference<Preference>(R.string.pref_key_tabs) + tabSettingsPreference.summary = context?.settings()?.getTabTimeoutString() + } // val autofillPreference = requirePreference<Preference>(R.string.pref_key_credit_cards) // autofillPreference.title = if (settings.addressFeature) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/TabsSettingsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/TabsSettingsFragment.kt @@ -34,6 +34,14 @@ class TabsSettingsFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.tabs_preferences, rootKey) + + findPreference<RadioButtonPreference>(getString(R.string.pref_key_close_tabs_manually))?.parent?.apply { + isVisible = !context.settings().shouldDisableNormalMode + } + + findPreference<PreferenceCategory>(getString(R.string.pref_key_inactive_tabs_category))?.apply { + isVisible = !context.settings().shouldDisableNormalMode + } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/search/SearchEngineFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/search/SearchEngineFragment.kt @@ -38,6 +38,10 @@ class SearchEngineFragment : PreferenceFragmentCompat() { rootKey, ) + findPreference<CheckBoxPreference>(getString(R.string.pref_key_show_search_suggestions_in_private))?.apply { + isVisible = !context.settings().shouldDisableNormalMode + } + view?.hideKeyboard() } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayBanner.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayBanner.kt @@ -32,6 +32,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.painterResource @@ -47,6 +48,7 @@ import mozilla.components.ui.tabcounter.TabCounter import org.mozilla.fenix.R import org.mozilla.fenix.compose.Banner import org.mozilla.fenix.compose.BottomSheetHandle +import org.mozilla.fenix.ext.settings import org.mozilla.fenix.tabstray.ext.getMenuItems import org.mozilla.fenix.theme.FirefoxTheme import kotlin.math.max @@ -264,6 +266,7 @@ private fun TabPageBanner( counts: TabPageBannerCounts, callbacks: TabPageBannerCallbacks, ) { + val shouldDisableNormalMode = LocalContext.current.settings().shouldDisableNormalMode val selectedColor = FirefoxTheme.colors.iconActive val inactiveColor = FirefoxTheme.colors.iconPrimaryInactive var showMenu by remember { mutableStateOf(false) } @@ -287,7 +290,7 @@ private fun TabPageBanner( horizontalArrangement = Arrangement.spacedBy(16.dp), ) { TabRow( - selectedTabIndex = Page.pageToPosition(page = config.selectedPage, enhancementsEnabled = false), + selectedTabIndex = if (shouldDisableNormalMode) 0 else Page.pageToPosition(page = config.selectedPage, enhancementsEnabled = false), modifier = Modifier .fillMaxWidth(MAX_WIDTH_TAB_ROW_PERCENT) .fillMaxHeight(), @@ -295,19 +298,21 @@ private fun TabPageBanner( contentColor = selectedColor, divider = {}, ) { - Tab( - selected = config.selectedPage == Page.NormalTabs, - onClick = { callbacks.onTabPageIndicatorClicked(Page.NormalTabs) }, - modifier = Modifier - .fillMaxHeight() - .testTag(TabsTrayTestTag.NORMAL_TABS_PAGE_BUTTON), - selectedContentColor = selectedColor, - unselectedContentColor = inactiveColor, - ) { - TabCounter( - tabCount = counts.normalTabCount, - contentColor = LocalContentColor.current, - ) + if (!shouldDisableNormalMode) { + Tab( + selected = config.selectedPage == Page.NormalTabs, + onClick = { callbacks.onTabPageIndicatorClicked(Page.NormalTabs) }, + modifier = Modifier + .fillMaxHeight() + .testTag(TabsTrayTestTag.NORMAL_TABS_PAGE_BUTTON), + selectedContentColor = selectedColor, + unselectedContentColor = inactiveColor, + ) { + TabCounter( + tabCount = counts.normalTabCount, + contentColor = LocalContentColor.current, + ) + } } Tab( diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -485,7 +485,7 @@ class Settings( var openLinksInAPrivateTab by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_open_links_in_a_private_tab), - default = false, + default = true, ) val shouldSecureModeBeOverridden @@ -753,9 +753,14 @@ class Settings( default = 1f, ) + val shouldDisableNormalMode by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_disable_normal_mode), + true + ) + val shouldShowHistorySuggestions by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_search_browsing_history), - default = true, + default = !shouldDisableNormalMode, ) val shouldShowBookmarkSuggestions by booleanPreference( @@ -1307,11 +1312,11 @@ class Settings( return touchExplorationIsEnabled || switchServiceIsEnabled } - var lastKnownMode: BrowsingMode = BrowsingMode.Normal + var lastKnownMode: BrowsingMode = BrowsingMode.Private get() { val lastKnownModeWasPrivate = preferences.getBoolean( appContext.getPreferenceKey(R.string.pref_key_last_known_mode_private), - false, + shouldDisableNormalMode, ) return if (lastKnownModeWasPrivate) { diff --git a/mobile/android/fenix/app/src/main/res/values/preference_keys.xml b/mobile/android/fenix/app/src/main/res/values/preference_keys.xml @@ -37,6 +37,7 @@ <string name="pref_key_delete_permissions_now" translatable="false">pref_key_delete_permissions_now</string> <string name="pref_key_delete_downloads_now" translatable="false">pref_key_delete_downloads_now</string> <string name="pref_key_delete_browsing_data_on_quit_categories" translatable="false">pref_key_delete_browsing_data_on_quit_categories</string> + <string name="pref_key_disable_normal_mode" translatable="false">pref_key_disable_normal_mode</string> <string name="pref_key_last_known_mode_private" translatable="false">pref_key_last_known_mode_private</string> <string name="pref_key_addons" translatable="false">pref_key_addons</string> <string name="pref_key_install_local_addon" translatable="false">pref_key_install_local_addon</string> diff --git a/mobile/android/fenix/app/src/main/res/xml/preferences.xml b/mobile/android/fenix/app/src/main/res/xml/preferences.xml @@ -97,6 +97,7 @@ <androidx.preference.Preference android:key="@string/pref_key_private_browsing" app:iconSpaceReserved="false" + app:isPreferenceVisible="false" android:title="@string/preferences_private_browsing_options" /> <androidx.preference.Preference diff --git a/mobile/android/fenix/app/src/main/res/xml/private_browsing_preferences.xml b/mobile/android/fenix/app/src/main/res/xml/private_browsing_preferences.xml @@ -5,6 +5,7 @@ <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <Preference + android:defaultValue="false" android:key="@string/pref_key_add_private_browsing_shortcut" android:title="@string/preferences_add_private_browsing_shortcut" /> <SwitchPreference diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/utils/SettingsTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/utils/SettingsTest.kt @@ -64,13 +64,13 @@ class SettingsTest { fun launchLinksInPrivateTab() { // When just created // Then - assertFalse(settings.openLinksInAPrivateTab) + assertTrue(settings.openLinksInAPrivateTab) // When - settings.openLinksInAPrivateTab = true + settings.openLinksInAPrivateTab = false // Then - assertTrue(settings.openLinksInAPrivateTab) + assertFalse(settings.openLinksInAPrivateTab) } @Test