From f92485d1e862c8194619ca7ac21b6f3e8a18d283 Mon Sep 17 00:00:00 2001 From: Jonathan Almeida Date: Tue, 18 Aug 2020 01:45:48 -0400 Subject: [PATCH] For #12287: Add feature flag for Synced Tabs in tabs tray --- .../java/org/mozilla/fenix/FeatureFlags.kt | 11 +++----- .../fenix/components/BackgroundServices.kt | 11 ++------ .../components/toolbar/DefaultToolbarMenu.kt | 5 ++-- .../java/org/mozilla/fenix/home/HomeMenu.kt | 3 +-- .../fenix/settings/SecretSettingsFragment.kt | 6 +++++ .../account/AccountSettingsFragment.kt | 4 +-- .../mozilla/fenix/sync/SyncedTabsFragment.kt | 6 +++++ .../mozilla/fenix/sync/SyncedTabsLayout.kt | 4 +++ .../org/mozilla/fenix/tabtray/TabTrayView.kt | 26 ++++++++++--------- .../java/org/mozilla/fenix/utils/Settings.kt | 6 +++++ app/src/main/res/values/preference_keys.xml | 2 ++ app/src/main/res/values/static_strings.xml | 2 ++ .../res/xml/account_settings_preferences.xml | 1 - .../res/xml/secret_settings_preferences.xml | 5 ++++ 14 files changed, 56 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt index 1a3d4d01d..352f44a44 100644 --- a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt +++ b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt @@ -20,14 +20,11 @@ object FeatureFlags { const val loginsEdit = true /** - * Enable tab sync feature + * Shows Synced Tabs in the tabs tray. + * + * Tracking issue: https://github.com/mozilla-mobile/fenix/issues/13892 */ - const val syncedTabs = true - - /** - * Enables new tab tray pref - */ - val tabTray = Config.channel.isNightlyOrDebug + val syncedTabsInTabsTray = Config.channel.isNightlyOrDebug /** * Enables viewing tab history diff --git a/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt b/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt index f4b5a7710..44f4131fe 100644 --- a/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt +++ b/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt @@ -32,7 +32,6 @@ import mozilla.components.service.fxa.sync.GlobalSyncableStoreProvider import mozilla.components.service.sync.logins.SyncableLoginsStorage import mozilla.components.support.utils.RunWhenReadyQueue import org.mozilla.fenix.Config -import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.R import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.MetricController @@ -85,11 +84,8 @@ class BackgroundServices( ) @VisibleForTesting - val supportedEngines = if (FeatureFlags.syncedTabs) { + val supportedEngines = setOf(SyncEngine.History, SyncEngine.Bookmarks, SyncEngine.Passwords, SyncEngine.Tabs) - } else { - setOf(SyncEngine.History, SyncEngine.Bookmarks, SyncEngine.Passwords) - } private val syncConfig = SyncConfig(supportedEngines, syncPeriodInMinutes = 240L) // four hours init { @@ -98,10 +94,7 @@ class BackgroundServices( GlobalSyncableStoreProvider.configureStore(SyncEngine.History to historyStorage) GlobalSyncableStoreProvider.configureStore(SyncEngine.Bookmarks to bookmarkStorage) GlobalSyncableStoreProvider.configureStore(SyncEngine.Passwords to passwordsStorage) - - if (FeatureFlags.syncedTabs) { - GlobalSyncableStoreProvider.configureStore(SyncEngine.Tabs to remoteTabsStorage) - } + GlobalSyncableStoreProvider.configureStore(SyncEngine.Tabs to remoteTabsStorage) } private val telemetryAccountObserver = TelemetryAccountObserver( diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt index 2ee5693fe..4ae5b3f59 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt @@ -24,7 +24,6 @@ import mozilla.components.browser.state.selector.findTab import mozilla.components.browser.state.store.BrowserStore import mozilla.components.concept.storage.BookmarksStorage 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 @@ -177,12 +176,14 @@ class DefaultToolbarMenu( ?.browsingModeManager?.mode == BrowsingMode.Normal val shouldDeleteDataOnQuit = context.components.settings .shouldDeleteBrowsingDataOnQuit + val syncedTabsInTabsTray = context.components.settings + .syncedTabsInTabsTray val menuItems = listOfNotNull( if (FeatureFlags.viewDownloads) downloadsItem else null, historyItem, bookmarksItem, - if (FeatureFlags.syncedTabs) syncedTabs else null, + if (syncedTabsInTabsTray) null else syncedTabs, settings, if (shouldDeleteDataOnQuit) deleteDataOnQuit else null, BrowserMenuDivider(), diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeMenu.kt b/app/src/main/java/org/mozilla/fenix/home/HomeMenu.kt index a90dc3b50..8036399ea 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeMenu.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeMenu.kt @@ -21,7 +21,6 @@ import mozilla.components.concept.sync.AccountObserver import mozilla.components.concept.sync.AuthType import mozilla.components.concept.sync.OAuthAccount import mozilla.components.support.ktx.android.content.getColorFromAttr -import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.R import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings @@ -167,7 +166,7 @@ class HomeMenu( if (settings.shouldDeleteBrowsingDataOnQuit) quitItem else null, settingsItem, BrowserMenuDivider(), - if (FeatureFlags.syncedTabs) syncedTabsItem else null, + if (settings.syncedTabsInTabsTray) null else syncedTabsItem, bookmarksItem, historyItem, if (FeatureFlags.viewDownloads) downloadsItem else null, 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 c3e663104..7040af768 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt @@ -36,5 +36,11 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { isChecked = context.settings().waitToShowPageUntilFirstPaint onPreferenceChangeListener = SharedPreferenceUpdater() } + + requirePreference(R.string.pref_key_synced_tabs_tabs_tray).apply { + isVisible = FeatureFlags.syncedTabsInTabsTray + isChecked = context.settings().syncedTabsInTabsTray + onPreferenceChangeListener = SharedPreferenceUpdater() + } } } diff --git a/app/src/main/java/org/mozilla/fenix/settings/account/AccountSettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/account/AccountSettingsFragment.kt index 0eab4909c..732f89671 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/account/AccountSettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/account/AccountSettingsFragment.kt @@ -36,7 +36,6 @@ import mozilla.components.service.fxa.sync.SyncStatusObserver import mozilla.components.service.fxa.sync.getLastSynced import mozilla.components.support.ktx.android.content.getColorFromAttr import mozilla.components.support.ktx.android.util.dpToPx -import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.R import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.components.StoreProvider @@ -271,9 +270,8 @@ class AccountSettingsFragment : PreferenceFragmentCompat() { isChecked = syncEnginesStatus.getOrElse(SyncEngine.Passwords) { true } } requirePreference(R.string.pref_key_sync_tabs).apply { - isVisible = FeatureFlags.syncedTabs isEnabled = syncEnginesStatus.containsKey(SyncEngine.Tabs) - isChecked = syncEnginesStatus.getOrElse(SyncEngine.Tabs) { FeatureFlags.syncedTabs } + isChecked = syncEnginesStatus.getOrElse(SyncEngine.Tabs) { true } } } diff --git a/app/src/main/java/org/mozilla/fenix/sync/SyncedTabsFragment.kt b/app/src/main/java/org/mozilla/fenix/sync/SyncedTabsFragment.kt index 4059d5159..cd67fe06b 100644 --- a/app/src/main/java/org/mozilla/fenix/sync/SyncedTabsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/sync/SyncedTabsFragment.kt @@ -13,6 +13,7 @@ import mozilla.components.browser.storage.sync.Tab import mozilla.components.feature.syncedtabs.SyncedTabsFeature import mozilla.components.support.base.feature.ViewBoundFeatureWrapper import org.mozilla.fenix.BrowserDirection +import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.ext.components @@ -22,6 +23,11 @@ import org.mozilla.fenix.library.LibraryPageFragment class SyncedTabsFragment : LibraryPageFragment() { private val syncedTabsFeature = ViewBoundFeatureWrapper() + init { + // Sanity-check: Remove this class when the feature flag is always enabled. + FeatureFlags.syncedTabsInTabsTray + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, diff --git a/app/src/main/java/org/mozilla/fenix/sync/SyncedTabsLayout.kt b/app/src/main/java/org/mozilla/fenix/sync/SyncedTabsLayout.kt index 1d160cfe5..2d3b5c0a4 100644 --- a/app/src/main/java/org/mozilla/fenix/sync/SyncedTabsLayout.kt +++ b/app/src/main/java/org/mozilla/fenix/sync/SyncedTabsLayout.kt @@ -19,6 +19,7 @@ import kotlinx.coroutines.launch import mozilla.components.browser.storage.sync.SyncedDeviceTabs import mozilla.components.browser.storage.sync.Tab import mozilla.components.feature.syncedtabs.view.SyncedTabsView +import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.R import org.mozilla.fenix.sync.ext.toAdapterItem import org.mozilla.fenix.sync.ext.toStringRes @@ -42,6 +43,9 @@ class SyncedTabsLayout @JvmOverloads constructor( synced_tabs_list.adapter = adapter synced_tabs_pull_to_refresh.setOnRefreshListener { listener?.onRefresh() } + + // Sanity-check: Remove this class when the feature flag is always enabled. + FeatureFlags.syncedTabsInTabsTray } override fun onError(error: SyncedTabsView.ErrorType) { diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt index 977cee49a..07426f456 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt @@ -145,18 +145,20 @@ class TabTrayView( setTopOffset(startingInLandscape) - syncedTabsFeature.set( - feature = SyncedTabsFeature( - context = container.context, - storage = components.backgroundServices.syncedTabsStorage, - accountManager = components.backgroundServices.accountManager, - view = syncedTabsController, - lifecycleOwner = lifecycleOwner, - onTabClicked = ::handleTabClicked - ), - owner = lifecycleOwner, - view = view - ) + if (view.context.settings().syncedTabsInTabsTray) { + syncedTabsFeature.set( + feature = SyncedTabsFeature( + context = container.context, + storage = components.backgroundServices.syncedTabsStorage, + accountManager = components.backgroundServices.accountManager, + view = syncedTabsController, + lifecycleOwner = lifecycleOwner, + onTabClicked = ::handleTabClicked + ), + owner = lifecycleOwner, + view = view + ) + } val concatAdapter = ConcatAdapter(tabsAdapter) view.tabsTray.apply { 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 6c703a9c2..885720d07 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -109,6 +109,12 @@ class Settings(private val appContext: Context) : PreferencesHolder { featureFlag = FeatureFlags.waitUntilPaintToDraw ) + var syncedTabsInTabsTray by featureFlagPreference( + appContext.getPreferenceKey(R.string.pref_key_synced_tabs_tabs_tray), + default = false, + featureFlag = FeatureFlags.syncedTabsInTabsTray + ) + var forceEnableZoom by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_accessibility_force_enable_zoom), default = false diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index 57402d075..6b0042d96 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -179,6 +179,8 @@ pref_key_wait_first_paint + pref_key_synced_tabs_tabs_tray + pref_key_debug_settings pref_key_open_tabs_count diff --git a/app/src/main/res/values/static_strings.xml b/app/src/main/res/values/static_strings.xml index e51388ca3..4a76e78b4 100644 --- a/app/src/main/res/values/static_strings.xml +++ b/app/src/main/res/values/static_strings.xml @@ -36,6 +36,8 @@ Use New Search Experience Wait Until First Paint To Show Page Content + + Show Synced Tabs in the tabs tray link diff --git a/app/src/main/res/xml/account_settings_preferences.xml b/app/src/main/res/xml/account_settings_preferences.xml index bdf69b790..0e409fbc4 100644 --- a/app/src/main/res/xml/account_settings_preferences.xml +++ b/app/src/main/res/xml/account_settings_preferences.xml @@ -43,7 +43,6 @@ diff --git a/app/src/main/res/xml/secret_settings_preferences.xml b/app/src/main/res/xml/secret_settings_preferences.xml index e8e2f95d9..794994749 100644 --- a/app/src/main/res/xml/secret_settings_preferences.xml +++ b/app/src/main/res/xml/secret_settings_preferences.xml @@ -14,4 +14,9 @@ android:key="@string/pref_key_wait_first_paint" android:title="@string/preferences_debug_settings_wait_first_paint" app:iconSpaceReserved="false" /> +