diff --git a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt index 534ee3676e..89a5ebedc2 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -21,10 +21,10 @@ import mozilla.components.browser.state.state.SessionState import mozilla.components.browser.state.state.TabSessionState import mozilla.components.browser.thumbnails.BrowserThumbnails import mozilla.components.browser.toolbar.BrowserToolbar +import mozilla.components.concept.engine.permission.SitePermissions import mozilla.components.feature.app.links.AppLinksUseCases import mozilla.components.feature.contextmenu.ContextMenuCandidate import mozilla.components.feature.readerview.ReaderViewFeature -import mozilla.components.concept.engine.permission.SitePermissions import mozilla.components.feature.tab.collections.TabCollection import mozilla.components.feature.tabs.WindowFeature import mozilla.components.support.base.feature.UserInteractionHandler @@ -207,7 +207,7 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { override fun onStop() { super.onStop() updateLastBrowseActivity() - if (FeatureFlags.historyMetadataFeature) { + if (requireContext().settings().historyMetadataFeature) { updateHistoryMetadata() } pwaOnboardingObserver?.stop() diff --git a/app/src/main/java/org/mozilla/fenix/components/Core.kt b/app/src/main/java/org/mozilla/fenix/components/Core.kt index dd1bfc8d1a..e39c04bad0 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Core.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Core.kt @@ -4,7 +4,6 @@ package org.mozilla.fenix.components -import org.mozilla.fenix.gecko.GeckoProvider import android.content.Context import android.content.res.Configuration import android.os.Build @@ -14,8 +13,8 @@ import mozilla.components.browser.engine.gecko.GeckoEngine import mozilla.components.browser.engine.gecko.fetch.GeckoViewFetchClient import mozilla.components.browser.engine.gecko.permission.GeckoSitePermissionsStorage import mozilla.components.browser.icons.BrowserIcons -import mozilla.components.browser.state.engine.EngineMiddleware import mozilla.components.browser.session.storage.SessionStorage +import mozilla.components.browser.state.engine.EngineMiddleware import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.store.BrowserStore import mozilla.components.browser.storage.sync.PlacesBookmarksStorage @@ -66,13 +65,13 @@ import mozilla.components.support.locale.LocaleManager import org.mozilla.fenix.AppRequestInterceptor import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.Config -import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.components.search.SearchMigration import org.mozilla.fenix.downloads.DownloadService import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.gecko.GeckoProvider import org.mozilla.fenix.historymetadata.DefaultHistoryMetadataService import org.mozilla.fenix.historymetadata.HistoryMetadataMiddleware import org.mozilla.fenix.historymetadata.HistoryMetadataService @@ -85,7 +84,6 @@ import org.mozilla.fenix.telemetry.TelemetryMiddleware import org.mozilla.fenix.utils.Mockable import org.mozilla.fenix.utils.getUndoDelay import org.mozilla.geckoview.GeckoRuntime -import java.lang.IllegalStateException /** * Component group for all core browser functionality. @@ -213,7 +211,7 @@ class Core( LastMediaAccessMiddleware() ) - if (FeatureFlags.historyMetadataFeature) { + if (context.settings().historyMetadataFeature) { middlewareList += HistoryMetadataMiddleware(historyMetadataService) } diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index 0db032a748..4486a76006 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -45,16 +45,8 @@ import androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE import com.google.android.material.appbar.AppBarLayout import com.google.android.material.snackbar.Snackbar import kotlinx.android.synthetic.main.fragment_home.* -import kotlinx.android.synthetic.main.fragment_home.view.bottomBarShadow -import kotlinx.android.synthetic.main.fragment_home.view.bottom_bar -import kotlinx.android.synthetic.main.fragment_home.view.homeAppBar -import kotlinx.android.synthetic.main.fragment_home.view.menuButton -import kotlinx.android.synthetic.main.fragment_home.view.sessionControlRecyclerView -import kotlinx.android.synthetic.main.fragment_home.view.tab_button -import kotlinx.android.synthetic.main.fragment_home.view.toolbar -import kotlinx.android.synthetic.main.fragment_home.view.toolbarLayout -import kotlinx.android.synthetic.main.fragment_home.view.toolbar_wrapper -import kotlinx.android.synthetic.main.no_collections_message.view.add_tabs_to_collections_button +import kotlinx.android.synthetic.main.fragment_home.view.* +import kotlinx.android.synthetic.main.no_collections_message.view.* import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -117,9 +109,9 @@ import org.mozilla.fenix.historymetadata.controller.DefaultHistoryMetadataContro import org.mozilla.fenix.home.mozonline.showPrivacyPopWindow import org.mozilla.fenix.home.recentbookmarks.RecentBookmarksFeature import org.mozilla.fenix.home.recentbookmarks.controller.DefaultRecentBookmarksController +import org.mozilla.fenix.home.recenttabs.RecentTabsListFeature import org.mozilla.fenix.home.recenttabs.controller.DefaultRecentTabsController import org.mozilla.fenix.home.sessioncontrol.DefaultSessionControlController -import org.mozilla.fenix.home.recenttabs.RecentTabsListFeature import org.mozilla.fenix.home.sessioncontrol.SessionControlInteractor import org.mozilla.fenix.home.sessioncontrol.SessionControlView import org.mozilla.fenix.home.sessioncontrol.viewholders.CollectionViewHolder @@ -283,7 +275,7 @@ class HomeFragment : Fragment() { ) } - if (FeatureFlags.historyMetadataFeature) { + if (requireContext().settings().historyMetadataFeature) { historyMetadataFeature.set( feature = HistoryMetadataFeature( homeStore = homeFragmentStore, diff --git a/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarView.kt b/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarView.kt index e3aea4fa4e..386819ed21 100644 --- a/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarView.kt +++ b/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarView.kt @@ -26,11 +26,11 @@ import mozilla.components.feature.syncedtabs.DeviceIndicators import mozilla.components.feature.syncedtabs.SyncedTabsStorageSuggestionProvider import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.support.ktx.android.content.getColorFromAttr -import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.browser.browsingmode.BrowsingMode import org.mozilla.fenix.ext.components +import org.mozilla.fenix.ext.settings import org.mozilla.fenix.search.SearchEngineSource import org.mozilla.fenix.search.SearchFragmentState @@ -250,7 +250,7 @@ class AwesomeBarView( val providersToAdd = mutableSetOf() if (state.showHistorySuggestions) { - if (FeatureFlags.historyMetadataFeature) { + if (activity.settings().historyMetadataFeature) { providersToAdd.add(historyMetadataProvider) } else { providersToAdd.add(historyStorageProvider) @@ -284,7 +284,7 @@ class AwesomeBarView( providersToRemove.add(shortcutsEnginePickerProvider) if (!state.showHistorySuggestions) { - if (FeatureFlags.historyMetadataFeature) { + if (activity.settings().historyMetadataFeature) { providersToRemove.add(historyMetadataProvider) } else { providersToRemove.add(historyStorageProvider) diff --git a/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt index e4903f27c4..5a989d71a9 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt @@ -5,6 +5,9 @@ package org.mozilla.fenix.settings import android.os.Bundle +import android.os.Handler +import android.os.Looper +import android.widget.Toast import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import androidx.preference.SwitchPreference @@ -13,6 +16,7 @@ import org.mozilla.fenix.R import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.showToolbar +import kotlin.system.exitProcess class SecretSettingsFragment : PreferenceFragmentCompat() { @@ -30,6 +34,31 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { onPreferenceChangeListener = SharedPreferenceUpdater() } + requirePreference(R.string.pref_key_history_metadata_feature).apply { + isVisible = true + isChecked = context.settings().historyMetadataFeature + onPreferenceChangeListener = object : SharedPreferenceUpdater() { + override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { + val result = super.onPreferenceChange(preference, newValue) + + Toast.makeText( + context, + getString(R.string.toast_history_metadata_feature_done), + Toast.LENGTH_LONG + ).show() + + Handler(Looper.getMainLooper()).postDelayed( + { + exitProcess(0) + }, + EXIT_DELAY + ) + + return result + } + } + } + requirePreference(R.string.pref_key_allow_third_party_root_certs).apply { isVisible = true isChecked = context.settings().allowThirdPartyRootCerts @@ -48,4 +77,8 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { onPreferenceChangeListener = SharedPreferenceUpdater() } } + + companion object { + private const val EXIT_DELAY = 3000L + } } 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 8d6c746883..f0da0bad7c 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -1139,6 +1139,17 @@ class Settings(private val appContext: Context) : PreferencesHolder { featureFlag = FeatureFlags.addressesFeature ) + var isHistoryMetadataEnabled by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_history_metadata_feature), + default = false + ) + + var historyMetadataFeature by featureFlagPreference( + appContext.getPreferenceKey(R.string.pref_key_history_metadata_feature), + default = FeatureFlags.historyMetadataFeature, + featureFlag = FeatureFlags.historyMetadataFeature || isHistoryMetadataEnabled + ) + /** * Storing desktop item checkbox value in the home screen menu. * If set to true, next opened tab from home screen will be opened in desktop mode. diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index dfdf49f03b..b3fe9a513c 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -285,4 +285,5 @@ pref_key_show_address_feature pref_key_nimbus_experiments pref_key_nimbus_use_preview + pref_key_history_metadata_feature diff --git a/app/src/main/res/values/static_strings.xml b/app/src/main/res/values/static_strings.xml index 9ff79b2b89..cfce0e3b43 100644 --- a/app/src/main/res/values/static_strings.xml +++ b/app/src/main/res/values/static_strings.xml @@ -37,6 +37,10 @@ Secret Debug Info Enable Address Autofill + + Enable History Metadata + + History Metadata feature modified. Quitting the application to apply changes… Use third party CA certificates diff --git a/app/src/main/res/xml/secret_settings_preferences.xml b/app/src/main/res/xml/secret_settings_preferences.xml index d9a23a5658..e45009d1c8 100644 --- a/app/src/main/res/xml/secret_settings_preferences.xml +++ b/app/src/main/res/xml/secret_settings_preferences.xml @@ -9,6 +9,11 @@ android:key="@string/pref_key_show_address_feature" android:title="@string/preferences_debug_settings_enable_address_feature" app:iconSpaceReserved="false" /> +