Move settings in components (#12675)

releases/v80.0.0
Tiger Oakes 4 years ago committed by GitHub
parent c3041bcb64
commit c08d375c18
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -46,7 +46,7 @@ class StrictEnhancedTrackingProtectionTest {
start() start()
} }
InstrumentationRegistry.getInstrumentation().context.settings().setStrictETP() activityTestRule.activity.settings().setStrictETP()
// Reset on-boarding notification for each test // Reset on-boarding notification for each test
TestHelper.setPreference( TestHelper.setPreference(

@ -10,7 +10,7 @@ import mozilla.components.concept.storage.LoginsStorage
import mozilla.components.lib.crash.handler.CrashHandlerService import mozilla.components.lib.crash.handler.CrashHandlerService
import mozilla.components.service.sync.logins.GeckoLoginStorageDelegate import mozilla.components.service.sync.logins.GeckoLoginStorageDelegate
import org.mozilla.fenix.Config import org.mozilla.fenix.Config
import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.ext.components
import org.mozilla.geckoview.GeckoRuntime import org.mozilla.geckoview.GeckoRuntime
import org.mozilla.geckoview.GeckoRuntimeSettings import org.mozilla.geckoview.GeckoRuntimeSettings
@ -48,9 +48,10 @@ object GeckoProvider {
.debugLogging(Config.channel.isDebug) .debugLogging(Config.channel.isDebug)
.build() .build()
if (!Settings.getInstance(context).shouldUseAutoSize) { val settings = context.components.settings
if (!settings.shouldUseAutoSize) {
runtimeSettings.automaticFontSizeAdjustment = false runtimeSettings.automaticFontSizeAdjustment = false
val fontSize = Settings.getInstance(context).fontSizeFactor val fontSize = settings.fontSizeFactor
runtimeSettings.fontSizeFactor = fontSize runtimeSettings.fontSizeFactor = fontSize
} }

@ -10,7 +10,7 @@ import mozilla.components.concept.storage.LoginsStorage
import mozilla.components.lib.crash.handler.CrashHandlerService import mozilla.components.lib.crash.handler.CrashHandlerService
import mozilla.components.service.sync.logins.GeckoLoginStorageDelegate import mozilla.components.service.sync.logins.GeckoLoginStorageDelegate
import org.mozilla.fenix.Config import org.mozilla.fenix.Config
import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.ext.components
import org.mozilla.geckoview.GeckoRuntime import org.mozilla.geckoview.GeckoRuntime
import org.mozilla.geckoview.GeckoRuntimeSettings import org.mozilla.geckoview.GeckoRuntimeSettings
@ -48,9 +48,10 @@ object GeckoProvider {
.aboutConfigEnabled(true) .aboutConfigEnabled(true)
.build() .build()
if (!Settings.getInstance(context).shouldUseAutoSize) { val settings = context.components.settings
if (!settings.shouldUseAutoSize) {
runtimeSettings.automaticFontSizeAdjustment = false runtimeSettings.automaticFontSizeAdjustment = false
val fontSize = Settings.getInstance(context).fontSizeFactor val fontSize = settings.fontSizeFactor
runtimeSettings.fontSizeFactor = fontSize runtimeSettings.fontSizeFactor = fontSize
} }

@ -47,7 +47,6 @@ import org.mozilla.fenix.push.WebPushEngineIntegration
import org.mozilla.fenix.session.PerformanceActivityLifecycleCallbacks import org.mozilla.fenix.session.PerformanceActivityLifecycleCallbacks
import org.mozilla.fenix.session.VisibilityLifecycleCallback import org.mozilla.fenix.session.VisibilityLifecycleCallback
import org.mozilla.fenix.utils.BrowsersCache import org.mozilla.fenix.utils.BrowsersCache
import org.mozilla.fenix.utils.Settings
/** /**
*The main application class for Fenix. Records data to measure initialization performance. *The main application class for Fenix. Records data to measure initialization performance.
@ -355,8 +354,7 @@ open class FenixApplication : LocaleAwareApplication() {
_, engineSession, url -> _, engineSession, url ->
val shouldCreatePrivateSession = val shouldCreatePrivateSession =
components.core.sessionManager.selectedSession?.private components.core.sessionManager.selectedSession?.private
?: Settings.instance?.openLinksInAPrivateTab ?: components.settings.openLinksInAPrivateTab
?: false
val session = Session(url, shouldCreatePrivateSession) val session = Session(url, shouldCreatePrivateSession)
components.core.sessionManager.add(session, true, engineSession) components.core.sessionManager.add(session, true, engineSession)

@ -26,7 +26,6 @@ import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.NavigationUI import androidx.navigation.ui.NavigationUI
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.gms.tasks.Tasks.call
import kotlinx.android.synthetic.main.activity_home.* import kotlinx.android.synthetic.main.activity_home.*
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -65,7 +64,6 @@ import org.mozilla.fenix.browser.browsingmode.BrowsingModeManager
import org.mozilla.fenix.browser.browsingmode.DefaultBrowsingModeManager import org.mozilla.fenix.browser.browsingmode.DefaultBrowsingModeManager
import org.mozilla.fenix.components.metrics.BreadcrumbsRecorder import org.mozilla.fenix.components.metrics.BreadcrumbsRecorder
import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.trackingprotectionexceptions.TrackingProtectionExceptionsFragmentDirections
import org.mozilla.fenix.ext.alreadyOnDestination import org.mozilla.fenix.ext.alreadyOnDestination
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.nav import org.mozilla.fenix.ext.nav
@ -87,8 +85,8 @@ import org.mozilla.fenix.session.NotificationSessionObserver
import org.mozilla.fenix.settings.SettingsFragmentDirections import org.mozilla.fenix.settings.SettingsFragmentDirections
import org.mozilla.fenix.settings.TrackingProtectionFragmentDirections import org.mozilla.fenix.settings.TrackingProtectionFragmentDirections
import org.mozilla.fenix.settings.about.AboutFragmentDirections import org.mozilla.fenix.settings.about.AboutFragmentDirections
import org.mozilla.fenix.settings.logins.fragment.SavedLoginsAuthFragmentDirections
import org.mozilla.fenix.settings.logins.fragment.LoginDetailFragmentDirections import org.mozilla.fenix.settings.logins.fragment.LoginDetailFragmentDirections
import org.mozilla.fenix.settings.logins.fragment.SavedLoginsAuthFragmentDirections
import org.mozilla.fenix.settings.search.AddSearchEngineFragmentDirections import org.mozilla.fenix.settings.search.AddSearchEngineFragmentDirections
import org.mozilla.fenix.settings.search.EditCustomSearchEngineFragmentDirections import org.mozilla.fenix.settings.search.EditCustomSearchEngineFragmentDirections
import org.mozilla.fenix.share.AddNewDeviceFragmentDirections import org.mozilla.fenix.share.AddNewDeviceFragmentDirections
@ -97,6 +95,7 @@ import org.mozilla.fenix.tabtray.FenixTabsAdapter
import org.mozilla.fenix.tabtray.TabTrayDialogFragment import org.mozilla.fenix.tabtray.TabTrayDialogFragment
import org.mozilla.fenix.theme.DefaultThemeManager import org.mozilla.fenix.theme.DefaultThemeManager
import org.mozilla.fenix.theme.ThemeManager import org.mozilla.fenix.theme.ThemeManager
import org.mozilla.fenix.trackingprotectionexceptions.TrackingProtectionExceptionsFragmentDirections
import org.mozilla.fenix.utils.BrowsersCache import org.mozilla.fenix.utils.BrowsersCache
import org.mozilla.fenix.utils.RunWhenReadyQueue import org.mozilla.fenix.utils.RunWhenReadyQueue
@ -575,7 +574,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
} }
protected open fun createBrowsingModeManager(initialMode: BrowsingMode): BrowsingModeManager { protected open fun createBrowsingModeManager(initialMode: BrowsingMode): BrowsingModeManager {
return DefaultBrowsingModeManager(initialMode) { newMode -> return DefaultBrowsingModeManager(initialMode, components.settings) { newMode ->
themeManager.currentTheme = newMode themeManager.currentTheme = newMode
} }
} }

@ -25,7 +25,6 @@ import mozilla.components.feature.addons.ui.translatedName
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.showToolbar import org.mozilla.fenix.ext.showToolbar
import org.mozilla.fenix.utils.Settings
/** /**
* An activity to show the details of a installed add-on. * An activity to show the details of a installed add-on.
@ -191,8 +190,7 @@ class InstalledAddonDetailsFragment : Fragment() {
val components = it.context.components val components = it.context.components
val shouldCreatePrivateSession = val shouldCreatePrivateSession =
components.core.store.state.selectedTab?.content?.private components.core.store.state.selectedTab?.content?.private
?: Settings.instance?.openLinksInAPrivateTab ?: components.settings.openLinksInAPrivateTab
?: false
if (shouldCreatePrivateSession) { if (shouldCreatePrivateSession) {
components.useCases.tabsUseCases.addPrivateTab(settingUrl) components.useCases.tabsUseCases.addPrivateTab(settingUrl)

@ -36,6 +36,7 @@ interface BrowsingModeManager {
*/ */
class DefaultBrowsingModeManager( class DefaultBrowsingModeManager(
private var _mode: BrowsingMode, private var _mode: BrowsingMode,
private val settings: Settings,
private val modeDidChange: (BrowsingMode) -> Unit private val modeDidChange: (BrowsingMode) -> Unit
) : BrowsingModeManager { ) : BrowsingModeManager {
@ -44,6 +45,6 @@ class DefaultBrowsingModeManager(
set(value) { set(value) {
_mode = value _mode = value
modeDidChange(value) modeDidChange(value)
Settings.instance?.lastKnownMode = value settings.lastKnownMode = value
} }
} }

@ -40,6 +40,7 @@ import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.sync.SyncedTabsIntegration import org.mozilla.fenix.sync.SyncedTabsIntegration
import org.mozilla.fenix.utils.Mockable import org.mozilla.fenix.utils.Mockable
import org.mozilla.fenix.utils.RunWhenReadyQueue import org.mozilla.fenix.utils.RunWhenReadyQueue
import org.mozilla.fenix.utils.Settings
/** /**
* Component group for background services. These are the components that need to be accessed from within a * Component group for background services. These are the components that need to be accessed from within a
@ -103,7 +104,7 @@ class BackgroundServices(
} }
private val telemetryAccountObserver = TelemetryAccountObserver( private val telemetryAccountObserver = TelemetryAccountObserver(
context, context.settings(),
context.components.analytics.metrics context.components.analytics.metrics
) )
@ -178,8 +179,8 @@ class BackgroundServices(
} }
@VisibleForTesting(otherwise = PRIVATE) @VisibleForTesting(otherwise = PRIVATE)
class TelemetryAccountObserver( internal class TelemetryAccountObserver(
private val context: Context, private val settings: Settings,
private val metricController: MetricController private val metricController: MetricController
) : AccountObserver { ) : AccountObserver {
override fun onAuthenticated(account: OAuthAccount, authType: AuthType) { override fun onAuthenticated(account: OAuthAccount, authType: AuthType) {
@ -211,12 +212,12 @@ class TelemetryAccountObserver(
metricController.track(Event.SyncAuthOtherExternal) metricController.track(Event.SyncAuthOtherExternal)
} }
// Used by Leanplum as a context variable. // Used by Leanplum as a context variable.
context.settings().fxaSignedIn = true settings.fxaSignedIn = true
} }
override fun onLoggedOut() { override fun onLoggedOut() {
metricController.track(Event.SyncAuthSignOut) metricController.track(Event.SyncAuthSignOut)
// Used by Leanplum as a context variable. // Used by Leanplum as a context variable.
context.settings().fxaSignedIn = false settings.fxaSignedIn = false
} }
} }

@ -20,6 +20,7 @@ import org.mozilla.fenix.BuildConfig
import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.utils.ClipboardHandler import org.mozilla.fenix.utils.ClipboardHandler
import org.mozilla.fenix.utils.Mockable import org.mozilla.fenix.utils.Mockable
import org.mozilla.fenix.utils.Settings
import org.mozilla.fenix.wifi.WifiConnectionMonitor import org.mozilla.fenix.wifi.WifiConnectionMonitor
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
@ -107,4 +108,6 @@ class Components(private val context: Context) {
val performance by lazy { PerformanceComponent() } val performance by lazy { PerformanceComponent() }
val push by lazy { Push(context, analytics.crashReporter) } val push by lazy { Push(context, analytics.crashReporter) }
val wifiConnectionMonitor by lazy { WifiConnectionMonitor(context.getSystemService()!!) } val wifiConnectionMonitor by lazy { WifiConnectionMonitor(context.getSystemService()!!) }
val settings by lazy { Settings(context) }
} }

@ -24,15 +24,14 @@ import mozilla.components.browser.state.selector.findTab
import mozilla.components.browser.state.store.BrowserStore import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.concept.storage.BookmarksStorage import mozilla.components.concept.storage.BookmarksStorage
import mozilla.components.support.ktx.android.content.getColorFromAttr import mozilla.components.support.ktx.android.content.getColorFromAttr
import org.mozilla.fenix.R
import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.FeatureFlags
import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.browser.browsingmode.BrowsingMode import org.mozilla.fenix.browser.browsingmode.BrowsingMode
import org.mozilla.fenix.ext.asActivity import org.mozilla.fenix.ext.asActivity
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.theme.ThemeManager import org.mozilla.fenix.theme.ThemeManager
import org.mozilla.fenix.utils.Settings
/** /**
* Builds the toolbar object used with the 3-dot menu in the browser fragment. * Builds the toolbar object used with the 3-dot menu in the browser fragment.
@ -160,7 +159,7 @@ class DefaultToolbarMenu(
// Predicates that are called once, during screen init // Predicates that are called once, during screen init
val shouldShowSaveToCollection = (context.asActivity() as? HomeActivity) val shouldShowSaveToCollection = (context.asActivity() as? HomeActivity)
?.browsingModeManager?.mode == BrowsingMode.Normal ?.browsingModeManager?.mode == BrowsingMode.Normal
val shouldDeleteDataOnQuit = Settings.getInstance(context) val shouldDeleteDataOnQuit = context.components.settings
.shouldDeleteBrowsingDataOnQuit .shouldDeleteBrowsingDataOnQuit
val menuItems = listOfNotNull( val menuItems = listOfNotNull(

@ -12,13 +12,10 @@ import android.view.ViewGroup
import androidx.annotation.StringRes import androidx.annotation.StringRes
import mozilla.components.browser.search.SearchEngineManager import mozilla.components.browser.search.SearchEngineManager
import mozilla.components.support.locale.LocaleManager import mozilla.components.support.locale.LocaleManager
import org.mozilla.fenix.BuildConfig
import org.mozilla.fenix.Config
import org.mozilla.fenix.FenixApplication import org.mozilla.fenix.FenixApplication
import org.mozilla.fenix.components.Components import org.mozilla.fenix.components.Components
import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.components.metrics.MetricController
import org.mozilla.fenix.settings.advanced.getSelectedLocale import org.mozilla.fenix.settings.advanced.getSelectedLocale
import org.mozilla.fenix.utils.Settings
import java.lang.String.format import java.lang.String.format
import java.util.Locale import java.util.Locale
@ -60,8 +57,7 @@ fun Context.getPreferenceKey(@StringRes resourceId: Int): String =
fun Context.getRootView(): View? = fun Context.getRootView(): View? =
asActivity()?.window?.decorView?.findViewById<View>(android.R.id.content) as? ViewGroup asActivity()?.window?.decorView?.findViewById<View>(android.R.id.content) as? ViewGroup
fun Context.settings(isCrashReportEnabledInBuild: Boolean = BuildConfig.CRASH_REPORTING && Config.channel.isReleased) = fun Context.settings() = components.settings
Settings.getInstance(this, isCrashReportEnabledInBuild)
/** /**
* Used to catch IllegalArgumentException that is thrown when * Used to catch IllegalArgumentException that is thrown when

@ -26,7 +26,6 @@ import org.mozilla.fenix.R
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.theme.ThemeManager import org.mozilla.fenix.theme.ThemeManager
import org.mozilla.fenix.utils.Settings
import org.mozilla.fenix.whatsnew.WhatsNew import org.mozilla.fenix.whatsnew.WhatsNew
class HomeMenu( class HomeMenu(
@ -153,40 +152,29 @@ class HomeMenu(
null null
} }
val settings = context.components.settings
val menuItems = listOfNotNull(
if (settings.shouldDeleteBrowsingDataOnQuit) quitItem else null,
settingsItem,
BrowserMenuDivider(),
if (FeatureFlags.syncedTabs) syncedTabsItem else null,
bookmarksItem,
historyItem,
BrowserMenuDivider(),
addons,
BrowserMenuDivider(),
whatsNewItem,
helpItem,
accountAuthItem
).also { items ->
items.getHighlight()?.let { onHighlightPresent(it) }
}
if (shouldUseBottomToolbar) { if (shouldUseBottomToolbar) {
listOfNotNull( menuItems.reversed()
accountAuthItem,
helpItem,
whatsNewItem,
BrowserMenuDivider(),
addons,
BrowserMenuDivider(),
historyItem,
bookmarksItem,
if (FeatureFlags.syncedTabs) syncedTabsItem else null,
BrowserMenuDivider(),
settingsItem,
if (Settings.getInstance(context).shouldDeleteBrowsingDataOnQuit) quitItem else null
).also { items ->
items.getHighlight()?.let { onHighlightPresent(it) }
}
} else { } else {
listOfNotNull( menuItems
if (Settings.getInstance(context).shouldDeleteBrowsingDataOnQuit) quitItem else null,
settingsItem,
BrowserMenuDivider(),
if (FeatureFlags.syncedTabs) syncedTabsItem else null,
bookmarksItem,
historyItem,
BrowserMenuDivider(),
addons,
BrowserMenuDivider(),
whatsNewItem,
helpItem,
accountAuthItem
).also { items ->
items.getHighlight()?.let { onHighlightPresent(it) }
}
} }
} }

@ -12,12 +12,13 @@ import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.metrics.Event.OnboardingToolbarPosition.Position import org.mozilla.fenix.components.metrics.Event.OnboardingToolbarPosition.Position
import org.mozilla.fenix.ext.asActivity import org.mozilla.fenix.ext.asActivity
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.onboarding.OnboardingRadioButton import org.mozilla.fenix.onboarding.OnboardingRadioButton
import org.mozilla.fenix.utils.view.addToRadioGroup import org.mozilla.fenix.utils.view.addToRadioGroup
class OnboardingToolbarPositionPickerViewHolder(view: View) : RecyclerView.ViewHolder(view) { class OnboardingToolbarPositionPickerViewHolder(view: View) : RecyclerView.ViewHolder(view) {
private val metrics = view.context.components.analytics.metrics
init { init {
val radioTopToolbar = view.toolbar_top_radio_button val radioTopToolbar = view.toolbar_top_radio_button
val radioBottomToolbar = view.toolbar_bottom_radio_button val radioBottomToolbar = view.toolbar_bottom_radio_button
@ -27,7 +28,8 @@ class OnboardingToolbarPositionPickerViewHolder(view: View) : RecyclerView.ViewH
radioTopToolbar.addIllustration(view.toolbar_top_image) radioTopToolbar.addIllustration(view.toolbar_top_image)
radioBottomToolbar.addIllustration(view.toolbar_bottom_image) radioBottomToolbar.addIllustration(view.toolbar_bottom_image)
radio = if (view.context.settings().shouldUseBottomToolbar) { val settings = view.context.components.settings
radio = if (settings.shouldUseBottomToolbar) {
radioBottomToolbar radioBottomToolbar
} else { } else {
radioTopToolbar radioTopToolbar
@ -35,28 +37,24 @@ class OnboardingToolbarPositionPickerViewHolder(view: View) : RecyclerView.ViewH
radio.updateRadioValue(true) radio.updateRadioValue(true)
radioBottomToolbar.onClickListener { radioBottomToolbar.onClickListener {
itemView.context.components.analytics.metrics metrics.track(Event.OnboardingToolbarPosition(Position.BOTTOM))
.track(Event.OnboardingToolbarPosition(Position.BOTTOM))
itemView.context.asActivity()?.recreate() itemView.context.asActivity()?.recreate()
} }
view.toolbar_bottom_image.setOnClickListener { view.toolbar_bottom_image.setOnClickListener {
itemView.context.components.analytics.metrics metrics.track(Event.OnboardingToolbarPosition(Position.BOTTOM))
.track(Event.OnboardingToolbarPosition(Position.BOTTOM))
radioBottomToolbar.performClick() radioBottomToolbar.performClick()
} }
radioTopToolbar.onClickListener { radioTopToolbar.onClickListener {
itemView.context.components.analytics.metrics metrics.track(Event.OnboardingToolbarPosition(Position.TOP))
.track(Event.OnboardingToolbarPosition(Position.TOP))
itemView.context.asActivity()?.recreate() itemView.context.asActivity()?.recreate()
} }
view.toolbar_top_image.setOnClickListener { view.toolbar_top_image.setOnClickListener {
itemView.context.components.analytics.metrics metrics.track(Event.OnboardingToolbarPosition(Position.TOP))
.track(Event.OnboardingToolbarPosition(Position.TOP))
radioTopToolbar.performClick() radioTopToolbar.performClick()
} }
} }

@ -8,8 +8,8 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.IntentFilter import android.content.IntentFilter
import android.os.BatteryManager import android.os.BatteryManager
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.onboarding.FenixOnboarding import org.mozilla.fenix.onboarding.FenixOnboarding
import org.mozilla.fenix.utils.Settings
import android.provider.Settings as AndroidSettings import android.provider.Settings as AndroidSettings
/** /**
@ -67,13 +67,13 @@ object Performance {
* Disables the tracking protection popup. However, TP is still on. * Disables the tracking protection popup. However, TP is still on.
*/ */
private fun disableTrackingProtectionPopups(context: Context) { private fun disableTrackingProtectionPopups(context: Context) {
Settings.getInstance(context).isOverrideTPPopupsForPerformanceTest = true context.components.settings.isOverrideTPPopupsForPerformanceTest = true
} }
/** /**
* Disables the first time PWA popup. * Disables the first time PWA popup.
*/ */
private fun disableFirstTimePWAPopup(context: Context) { private fun disableFirstTimePWAPopup(context: Context) {
Settings.getInstance(context).userKnowsAboutPwas = true context.components.settings.userKnowsAboutPwas = true
} }
} }

@ -37,7 +37,6 @@ import org.mozilla.fenix.IntentReceiverActivity
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
import org.mozilla.fenix.settings.PhoneFeature import org.mozilla.fenix.settings.PhoneFeature
import org.mozilla.fenix.utils.Settings
import com.google.android.material.R as MaterialR import com.google.android.material.R as MaterialR
/** /**
@ -62,6 +61,7 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() {
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View { ): View {
val context = requireContext() val context = requireContext()
val components = context.components
val rootView = inflateRootView(container) val rootView = inflateRootView(container)
quickSettingsStore = QuickSettingsFragmentStore.createStore( quickSettingsStore = QuickSettingsFragmentStore.createStore(
@ -70,7 +70,7 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() {
websiteTitle = args.title, websiteTitle = args.title,
isSecured = args.isSecured, isSecured = args.isSecured,
permissions = args.sitePermissions, permissions = args.sitePermissions,
settings = Settings.getInstance(context), settings = components.settings,
certificateName = args.certificateName certificateName = args.certificateName
) )
@ -79,12 +79,12 @@ class QuickSettingsSheetDialogFragment : AppCompatDialogFragment() {
quickSettingsStore = quickSettingsStore, quickSettingsStore = quickSettingsStore,
ioScope = viewLifecycleOwner.lifecycleScope + Dispatchers.IO, ioScope = viewLifecycleOwner.lifecycleScope + Dispatchers.IO,
navController = findNavController(), navController = findNavController(),
session = context.components.core.sessionManager.findSessionById(args.sessionId), session = components.core.sessionManager.findSessionById(args.sessionId),
sitePermissions = args.sitePermissions, sitePermissions = args.sitePermissions,
settings = Settings.getInstance(context), settings = components.settings,
permissionStorage = context.components.core.permissionStorage, permissionStorage = components.core.permissionStorage,
reload = context.components.useCases.sessionUseCases.reload, reload = components.useCases.sessionUseCases.reload,
addNewTab = context.components.useCases.tabsUseCases.addTab, addNewTab = components.useCases.tabsUseCases.addTab,
requestRuntimePermissions = { permissions -> requestRuntimePermissions = { permissions ->
requestPermissions(permissions, REQUEST_CODE_QUICK_SETTINGS_PERMISSIONS) requestPermissions(permissions, REQUEST_CODE_QUICK_SETTINGS_PERMISSIONS)
tryToRequestPermissions = true tryToRequestPermissions = true

@ -22,7 +22,6 @@ import mozilla.components.browser.session.Session
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.components.metrics.MetricController
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.increaseTapArea import org.mozilla.fenix.ext.increaseTapArea
import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.utils.Settings
@ -56,7 +55,7 @@ class TrackingProtectionOverlay(
override fun onTouchEvent(event: MotionEvent): Boolean { override fun onTouchEvent(event: MotionEvent): Boolean {
if (event.action == MotionEvent.ACTION_DOWN) { if (event.action == MotionEvent.ACTION_DOWN) {
context.components.analytics.metrics.track(Event.ContextualHintETPOutsideTap) metrics.track(Event.ContextualHintETPOutsideTap)
} }
return super.onTouchEvent(event) return super.onTouchEvent(event)
} }

@ -33,9 +33,9 @@ import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.getPreferenceKey import org.mozilla.fenix.ext.getPreferenceKey
import org.mozilla.fenix.settings.PhoneFeature import org.mozilla.fenix.settings.PhoneFeature
import org.mozilla.fenix.settings.deletebrowsingdata.DeleteBrowsingDataOnQuitType import org.mozilla.fenix.settings.deletebrowsingdata.DeleteBrowsingDataOnQuitType
import org.mozilla.fenix.settings.logins.fragment.SavedLoginsFragment
import org.mozilla.fenix.settings.logins.SavedLoginsSortingStrategyMenu import org.mozilla.fenix.settings.logins.SavedLoginsSortingStrategyMenu
import org.mozilla.fenix.settings.logins.SortingStrategy import org.mozilla.fenix.settings.logins.SortingStrategy
import org.mozilla.fenix.settings.logins.fragment.SavedLoginsFragment
import org.mozilla.fenix.settings.registerOnSharedPreferenceChangeListener import org.mozilla.fenix.settings.registerOnSharedPreferenceChangeListener
import java.security.InvalidParameterException import java.security.InvalidParameterException
@ -43,12 +43,11 @@ private const val AUTOPLAY_USER_SETTING = "AUTOPLAY_USER_SETTING"
/** /**
* A simple wrapper for SharedPreferences that makes reading preference a little bit easier. * A simple wrapper for SharedPreferences that makes reading preference a little bit easier.
* @param appContext Reference to application context.
*/ */
@Suppress("LargeClass", "TooManyFunctions") @Suppress("LargeClass", "TooManyFunctions")
class Settings private constructor( class Settings(private val appContext: Context) : PreferencesHolder {
context: Context,
private val isCrashReportEnabledInBuild: Boolean
) : PreferencesHolder {
companion object { companion object {
const val showLoginsSecureWarningSyncMaxCount = 1 const val showLoginsSecureWarningSyncMaxCount = 1
const val showLoginsSecureWarningMaxCount = 1 const val showLoginsSecureWarningMaxCount = 1
@ -88,24 +87,11 @@ class Settings private constructor(
ASK_TO_ALLOW_INT -> AutoplayAction.BLOCKED ASK_TO_ALLOW_INT -> AutoplayAction.BLOCKED
else -> throw InvalidParameterException("$this is not a valid SitePermissionsRules.AutoplayAction") else -> throw InvalidParameterException("$this is not a valid SitePermissionsRules.AutoplayAction")
} }
@VisibleForTesting
internal var instance: Settings? = null
@JvmStatic
@Synchronized
fun getInstance(
context: Context,
isCrashReportEnabledInBuild: Boolean = BuildConfig.CRASH_REPORTING && Config.channel.isReleased
): Settings {
if (instance == null) {
instance = Settings(context.applicationContext, isCrashReportEnabledInBuild)
}
return instance ?: throw AssertionError("Instance cleared")
}
} }
private val appContext = context.applicationContext @VisibleForTesting
internal val isCrashReportEnabledInBuild: Boolean =
BuildConfig.CRASH_REPORTING && Config.channel.isReleased
override val preferences: SharedPreferences = override val preferences: SharedPreferences =
appContext.getSharedPreferences(FENIX_PREFERENCES, MODE_PRIVATE) appContext.getSharedPreferences(FENIX_PREFERENCES, MODE_PRIVATE)
@ -372,7 +358,7 @@ class Settings private constructor(
appContext.getPreferenceKey(R.string.pref_key_tracking_protection_standard_option), appContext.getPreferenceKey(R.string.pref_key_tracking_protection_standard_option),
false false
).apply() ).apply()
appContext?.components?.let { appContext.components.let {
val policy = it.core.trackingProtectionPolicyFactory val policy = it.core.trackingProtectionPolicyFactory
.createTrackingProtectionPolicy() .createTrackingProtectionPolicy()
it.useCases.settingsUseCases.updateTrackingProtection.invoke(policy) it.useCases.settingsUseCases.updateTrackingProtection.invoke(policy)

@ -6,6 +6,8 @@ package org.mozilla.fenix
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import io.mockk.every
import io.mockk.spyk
import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.robolectric.testContext
import mozilla.components.support.utils.toSafeIntent import mozilla.components.support.utils.toSafeIntent
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
@ -13,6 +15,7 @@ import org.junit.Assert.assertFalse
import org.junit.Assert.assertNotEquals import org.junit.Assert.assertNotEquals
import org.junit.Assert.assertNull import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mozilla.fenix.HomeActivity.Companion.PRIVATE_BROWSING_MODE import org.mozilla.fenix.HomeActivity.Companion.PRIVATE_BROWSING_MODE
@ -24,10 +27,17 @@ import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
@RunWith(FenixRobolectricTestRunner::class) @RunWith(FenixRobolectricTestRunner::class)
class HomeActivityTest { class HomeActivityTest {
private lateinit var activity: HomeActivity
@Before
fun setup() {
activity = spyk(HomeActivity())
every { activity.applicationContext } returns testContext
}
@Test @Test
fun getIntentSource() { fun getIntentSource() {
val activity = HomeActivity()
val launcherIntent = Intent(Intent.ACTION_MAIN).apply { val launcherIntent = Intent(Intent.ACTION_MAIN).apply {
addCategory(Intent.CATEGORY_LAUNCHER) addCategory(Intent.CATEGORY_LAUNCHER)
}.toSafeIntent() }.toSafeIntent()
@ -42,8 +52,6 @@ class HomeActivityTest {
@Test @Test
fun `getModeFromIntentOrLastKnown returns mode from settings when intent does not set`() { fun `getModeFromIntentOrLastKnown returns mode from settings when intent does not set`() {
val activity = HomeActivity()
testContext.settings().lastKnownMode = BrowsingMode.Private testContext.settings().lastKnownMode = BrowsingMode.Private
assertEquals(testContext.settings().lastKnownMode, activity.getModeFromIntentOrLastKnown(null)) assertEquals(testContext.settings().lastKnownMode, activity.getModeFromIntentOrLastKnown(null))
@ -51,8 +59,6 @@ class HomeActivityTest {
@Test @Test
fun `getModeFromIntentOrLastKnown returns mode from intent when set`() { fun `getModeFromIntentOrLastKnown returns mode from intent when set`() {
val activity = HomeActivity()
testContext.settings().lastKnownMode = BrowsingMode.Normal testContext.settings().lastKnownMode = BrowsingMode.Normal
val intent = Intent() val intent = Intent()
@ -64,21 +70,16 @@ class HomeActivityTest {
@Test @Test
fun `isActivityColdStarted returns true for null savedInstanceState and not launched from history`() { fun `isActivityColdStarted returns true for null savedInstanceState and not launched from history`() {
val activity = HomeActivity()
assertTrue(activity.isActivityColdStarted(Intent(), null)) assertTrue(activity.isActivityColdStarted(Intent(), null))
} }
@Test @Test
fun `isActivityColdStarted returns false for valid savedInstanceState and not launched from history`() { fun `isActivityColdStarted returns false for valid savedInstanceState and not launched from history`() {
val activity = HomeActivity()
assertFalse(activity.isActivityColdStarted(Intent(), Bundle())) assertFalse(activity.isActivityColdStarted(Intent(), Bundle()))
} }
@Test @Test
fun `isActivityColdStarted returns false for null savedInstanceState and launched from history`() { fun `isActivityColdStarted returns false for null savedInstanceState and launched from history`() {
val activity = HomeActivity()
val startingIntent = Intent().apply { val startingIntent = Intent().apply {
flags = flags or Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY flags = flags or Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
} }
@ -88,7 +89,6 @@ class HomeActivityTest {
@Test @Test
fun `isActivityColdStarted returns false for null savedInstanceState and not launched from history`() { fun `isActivityColdStarted returns false for null savedInstanceState and not launched from history`() {
val activity = HomeActivity()
val startingIntent = Intent().apply { val startingIntent = Intent().apply {
flags = flags or Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY flags = flags or Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
} }

@ -5,14 +5,19 @@
package org.mozilla.fenix.browser.browsingmode package org.mozilla.fenix.browser.browsingmode
import io.mockk.MockKAnnotations import io.mockk.MockKAnnotations
import io.mockk.Runs
import io.mockk.every
import io.mockk.impl.annotations.MockK import io.mockk.impl.annotations.MockK
import io.mockk.just
import io.mockk.verify import io.mockk.verify
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.mozilla.fenix.utils.Settings
class DefaultBrowsingModeManagerTest { class DefaultBrowsingModeManagerTest {
@MockK lateinit var settings: Settings
@MockK(relaxed = true) lateinit var callback: (BrowsingMode) -> Unit @MockK(relaxed = true) lateinit var callback: (BrowsingMode) -> Unit
lateinit var manager: BrowsingModeManager lateinit var manager: BrowsingModeManager
@ -21,7 +26,9 @@ class DefaultBrowsingModeManagerTest {
@Before @Before
fun before() { fun before() {
MockKAnnotations.init(this) MockKAnnotations.init(this)
manager = DefaultBrowsingModeManager(initMode, callback)
manager = DefaultBrowsingModeManager(initMode, settings, callback)
every { settings.lastKnownMode = any() } just Runs
} }
@Test @Test
@ -46,8 +53,10 @@ class DefaultBrowsingModeManagerTest {
manager.mode = BrowsingMode.Private manager.mode = BrowsingMode.Private
assertEquals(BrowsingMode.Private, manager.mode) assertEquals(BrowsingMode.Private, manager.mode)
verify { settings.lastKnownMode = BrowsingMode.Private }
manager.mode = BrowsingMode.Normal manager.mode = BrowsingMode.Normal
assertEquals(BrowsingMode.Normal, manager.mode) assertEquals(BrowsingMode.Normal, manager.mode)
verify { settings.lastKnownMode = BrowsingMode.Normal }
} }
} }

@ -4,43 +4,43 @@
package org.mozilla.fenix.components package org.mozilla.fenix.components
import android.content.Context import io.mockk.MockKAnnotations
import io.mockk.Runs import io.mockk.Runs
import io.mockk.every import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.just import io.mockk.just
import io.mockk.mockk import io.mockk.mockk
import io.mockk.verify import io.mockk.verify
import mozilla.components.concept.sync.AccountObserver import mozilla.components.concept.sync.AccountObserver
import mozilla.components.concept.sync.AuthType import mozilla.components.concept.sync.AuthType
import mozilla.components.concept.sync.OAuthAccount import mozilla.components.concept.sync.OAuthAccount
import mozilla.components.service.fxa.DeviceConfig
import mozilla.components.service.fxa.ServerConfig
import mozilla.components.service.fxa.SyncConfig
import mozilla.components.service.fxa.manager.FxaAccountManager
import mozilla.components.support.base.observer.ObserverRegistry import mozilla.components.support.base.observer.ObserverRegistry
import org.junit.Before
import org.junit.Test import org.junit.Test
import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.components.metrics.MetricController
import org.mozilla.fenix.utils.Settings
class BackgroundServicesTest { class BackgroundServicesTest {
class TestableBackgroundServices(
val context: Context @MockK private lateinit var metrics: MetricController
) : BackgroundServices(context, mockk(), mockk(), mockk(), mockk(), mockk(), mockk()) { @MockK private lateinit var settings: Settings
override fun makeAccountManager(
context: Context, private lateinit var observer: TelemetryAccountObserver
serverConfig: ServerConfig, private lateinit var registry: ObserverRegistry<AccountObserver>
deviceConfig: DeviceConfig,
syncConfig: SyncConfig? @Before
) = mockk<FxaAccountManager>(relaxed = true) fun setup() {
MockKAnnotations.init(this)
every { metrics.track(any()) } just Runs
every { settings.fxaSignedIn = any() } just Runs
observer = TelemetryAccountObserver(mockk(relaxed = true), metrics)
registry = ObserverRegistry<AccountObserver>().apply { register(observer) }
} }
@Test @Test
fun `telemetry account observer`() { fun `telemetry account observer`() {
val metrics = mockk<MetricController>()
every { metrics.track(any()) } just Runs
val observer = TelemetryAccountObserver(mockk(relaxed = true), metrics)
val registry = ObserverRegistry<AccountObserver>()
registry.register(observer)
val account = mockk<OAuthAccount>() val account = mockk<OAuthAccount>()
// Sign-in // Sign-in

@ -7,6 +7,7 @@ package org.mozilla.fenix.components
import android.content.Context import android.content.Context
import io.mockk.mockk import io.mockk.mockk
import org.mozilla.fenix.utils.ClipboardHandler import org.mozilla.fenix.utils.ClipboardHandler
import org.mozilla.fenix.utils.Settings
class TestComponents(private val context: Context) : Components(context) { class TestComponents(private val context: Context) : Components(context) {
override val backgroundServices by lazy { override val backgroundServices by lazy {
@ -29,4 +30,6 @@ class TestComponents(private val context: Context) : Components(context) {
override val analytics by lazy { Analytics(context) } override val analytics by lazy { Analytics(context) }
override val clipboardHandler by lazy { ClipboardHandler(context) } override val clipboardHandler by lazy { ClipboardHandler(context) }
override val settings by lazy { mockk<Settings>(relaxed = true) }
} }

@ -543,7 +543,10 @@ class DefaultBrowserToolbarControllerTest {
@Test @Test
fun handleToolbarNewTabPress() = runBlockingTest { fun handleToolbarNewTabPress() = runBlockingTest {
val browsingModeManager: BrowsingModeManager = DefaultBrowsingModeManager(BrowsingMode.Private) {} val browsingModeManager: BrowsingModeManager = DefaultBrowsingModeManager(
BrowsingMode.Private,
mockk(relaxed = true)
) {}
val item = TabCounterMenuItem.NewTab(false) val item = TabCounterMenuItem.NewTab(false)
every { activity.browsingModeManager } returns browsingModeManager every { activity.browsingModeManager } returns browsingModeManager
@ -556,7 +559,10 @@ class DefaultBrowserToolbarControllerTest {
@Test @Test
fun handleToolbarNewPrivateTabPress() = runBlockingTest { fun handleToolbarNewPrivateTabPress() = runBlockingTest {
val browsingModeManager: BrowsingModeManager = DefaultBrowsingModeManager(BrowsingMode.Normal) {} val browsingModeManager: BrowsingModeManager = DefaultBrowsingModeManager(
BrowsingMode.Normal,
mockk(relaxed = true)
) {}
val item = TabCounterMenuItem.NewTab(true) val item = TabCounterMenuItem.NewTab(true)
every { activity.browsingModeManager } returns browsingModeManager every { activity.browsingModeManager } returns browsingModeManager

@ -7,15 +7,14 @@ package org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import io.mockk.every import io.mockk.every
import io.mockk.mockk
import kotlinx.android.synthetic.main.onboarding_toolbar_position_picker.view.* import kotlinx.android.synthetic.main.onboarding_toolbar_position_picker.view.*
import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.robolectric.testContext
import org.junit.After
import org.junit.Assert.assertFalse import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue import org.junit.Assert.assertTrue
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.utils.Settings
@ -27,16 +26,10 @@ class OnboardingToolbarPositionPickerViewHolderTest {
@Before @Before
fun setup() { fun setup() {
val components = testContext.components
view = LayoutInflater.from(testContext) view = LayoutInflater.from(testContext)
.inflate(OnboardingToolbarPositionPickerViewHolder.LAYOUT_ID, null) .inflate(OnboardingToolbarPositionPickerViewHolder.LAYOUT_ID, null)
settings = mockk(relaxed = true) settings = components.settings
Settings.instance = settings
}
@After
fun teardown() {
Settings.instance = null
} }
@Test @Test

@ -35,7 +35,6 @@ import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
import org.mozilla.fenix.settings.SupportUtils import org.mozilla.fenix.settings.SupportUtils
import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.utils.Settings
import org.mozilla.fenix.whatsnew.clear
@ExperimentalCoroutinesApi @ExperimentalCoroutinesApi
@RunWith(FenixRobolectricTestRunner::class) @RunWith(FenixRobolectricTestRunner::class)
@ -48,10 +47,10 @@ class DefaultSearchControllerTest {
private val searchEngine: SearchEngine = mockk(relaxed = true) private val searchEngine: SearchEngine = mockk(relaxed = true)
private val metrics: MetricController = mockk(relaxed = true) private val metrics: MetricController = mockk(relaxed = true)
private val sessionManager: SessionManager = mockk(relaxed = true) private val sessionManager: SessionManager = mockk(relaxed = true)
private val settings: Settings = mockk(relaxed = true)
private val clearToolbarFocus: (() -> Unit) = mockk(relaxed = true) private val clearToolbarFocus: (() -> Unit) = mockk(relaxed = true)
private lateinit var controller: DefaultSearchController private lateinit var controller: DefaultSearchController
private lateinit var settings: Settings
@Before @Before
fun setUp() { fun setUp() {
@ -60,6 +59,7 @@ class DefaultSearchControllerTest {
every { store.state.searchEngineSource.searchEngine } returns searchEngine every { store.state.searchEngineSource.searchEngine } returns searchEngine
every { activity.metrics } returns metrics every { activity.metrics } returns metrics
every { activity.components.core.sessionManager } returns sessionManager every { activity.components.core.sessionManager } returns sessionManager
every { activity.components.settings } returns settings
controller = DefaultSearchController( controller = DefaultSearchController(
activity = activity, activity = activity,
@ -67,8 +67,6 @@ class DefaultSearchControllerTest {
navController = navController, navController = navController,
clearToolbarFocus = clearToolbarFocus clearToolbarFocus = clearToolbarFocus
) )
settings = testContext.settings().apply { testContext.settings().clear() }
} }
@Test @Test
@ -154,10 +152,7 @@ class DefaultSearchControllerTest {
@Test @Test
fun `show search shortcuts when setting enabled AND query empty`() { fun `show search shortcuts when setting enabled AND query empty`() {
val text = "" val text = ""
testContext.settings().preferences every { settings.shouldShowSearchShortcuts } returns true
.edit()
.putBoolean(testContext.getString(R.string.pref_key_show_search_shortcuts), true)
.apply()
controller.handleTextChanged(text) controller.handleTextChanged(text)
@ -168,10 +163,7 @@ class DefaultSearchControllerTest {
fun `show search shortcuts when setting enabled AND query equals url`() { fun `show search shortcuts when setting enabled AND query equals url`() {
val text = "mozilla.org" val text = "mozilla.org"
every { store.state.url } returns "mozilla.org" every { store.state.url } returns "mozilla.org"
testContext.settings().preferences every { settings.shouldShowSearchShortcuts } returns true
.edit()
.putBoolean(testContext.getString(R.string.pref_key_show_search_shortcuts), true)
.apply()
controller.handleTextChanged(text) controller.handleTextChanged(text)
@ -189,10 +181,7 @@ class DefaultSearchControllerTest {
@Test @Test
fun `do not show search shortcuts when setting disabled AND query empty AND url not matching query`() { fun `do not show search shortcuts when setting disabled AND query empty AND url not matching query`() {
testContext.settings().preferences every { settings.shouldShowSearchShortcuts } returns false
.edit()
.putBoolean(testContext.getString(R.string.pref_key_show_search_shortcuts), false)
.apply()
assertFalse(testContext.settings().shouldShowSearchShortcuts) assertFalse(testContext.settings().shouldShowSearchShortcuts)
@ -205,10 +194,7 @@ class DefaultSearchControllerTest {
@Test @Test
fun `do not show search shortcuts when setting disabled AND query non-empty`() { fun `do not show search shortcuts when setting disabled AND query non-empty`() {
testContext.settings().preferences every { settings.shouldShowSearchShortcuts } returns false
.edit()
.putBoolean(testContext.getString(R.string.pref_key_show_search_shortcuts), false)
.apply()
assertFalse(testContext.settings().shouldShowSearchShortcuts) assertFalse(testContext.settings().shouldShowSearchShortcuts)

@ -16,7 +16,6 @@ import kotlinx.coroutines.test.runBlockingTest
import mozilla.components.browser.storage.sync.PlacesHistoryStorage import mozilla.components.browser.storage.sync.PlacesHistoryStorage
import mozilla.components.concept.engine.Engine import mozilla.components.concept.engine.Engine
import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.feature.tabs.TabsUseCases
import mozilla.components.support.test.robolectric.testContext
import mozilla.components.support.test.rule.MainCoroutineRule import mozilla.components.support.test.rule.MainCoroutineRule
import org.junit.Before import org.junit.Before
import org.junit.Ignore import org.junit.Ignore
@ -26,7 +25,6 @@ import org.junit.runner.RunWith
import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.components.FenixSnackbar
import org.mozilla.fenix.components.PermissionStorage import org.mozilla.fenix.components.PermissionStorage
import org.mozilla.fenix.ext.clearAndCommit
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.utils.Settings
@ -38,8 +36,8 @@ class DeleteAndQuitTest {
@get:Rule @get:Rule
val coroutinesTestRule = MainCoroutineRule(TestCoroutineDispatcher()) val coroutinesTestRule = MainCoroutineRule(TestCoroutineDispatcher())
private var activity: HomeActivity = mockk(relaxed = true) private val activity: HomeActivity = mockk(relaxed = true)
lateinit var settings: Settings private val settings: Settings = mockk(relaxed = true)
private val tabUseCases: TabsUseCases = mockk(relaxed = true) private val tabUseCases: TabsUseCases = mockk(relaxed = true)
private val historyStorage: PlacesHistoryStorage = mockk(relaxed = true) private val historyStorage: PlacesHistoryStorage = mockk(relaxed = true)
private val permissionStorage: PermissionStorage = mockk(relaxed = true) private val permissionStorage: PermissionStorage = mockk(relaxed = true)
@ -49,25 +47,18 @@ class DeleteAndQuitTest {
@Before @Before
fun setUp() { fun setUp() {
settings = Settings.getInstance(testContext).apply {
clear()
}
every { activity.components.core.historyStorage } returns historyStorage every { activity.components.core.historyStorage } returns historyStorage
every { activity.components.core.permissionStorage } returns permissionStorage every { activity.components.core.permissionStorage } returns permissionStorage
every { activity.components.useCases.tabsUseCases } returns tabUseCases every { activity.components.useCases.tabsUseCases } returns tabUseCases
every { tabUseCases.removeAllTabs } returns removeAllTabsUseCases every { tabUseCases.removeAllTabs } returns removeAllTabsUseCases
every { activity.components.core.engine } returns engine every { activity.components.core.engine } returns engine
} every { activity.components.settings } returns settings
private fun Settings.clear() {
preferences.clearAndCommit()
} }
@Test @Test
fun `delete only tabs and quit`() = runBlockingTest { fun `delete only tabs and quit`() = runBlockingTest {
// When // When
settings.setDeleteDataOnQuit(DeleteBrowsingDataOnQuitType.TABS, true) every { settings.getDeleteDataOnQuit(DeleteBrowsingDataOnQuitType.TABS) } returns true
deleteAndQuit(activity, this, snackbar) deleteAndQuit(activity, this, snackbar)
@ -97,7 +88,7 @@ class DeleteAndQuitTest {
fun `delete everything and quit`() = runBlockingTest { fun `delete everything and quit`() = runBlockingTest {
// When // When
DeleteBrowsingDataOnQuitType.values().forEach { DeleteBrowsingDataOnQuitType.values().forEach {
settings.setDeleteDataOnQuit(it, true) every { settings.getDeleteDataOnQuit(it) } returns true
} }
deleteAndQuit(activity, this, snackbar) deleteAndQuit(activity, this, snackbar)

@ -4,7 +4,6 @@
package org.mozilla.fenix.utils package org.mozilla.fenix.utils
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
import mozilla.components.feature.sitepermissions.SitePermissionsRules import mozilla.components.feature.sitepermissions.SitePermissionsRules
import mozilla.components.feature.sitepermissions.SitePermissionsRules.Action.ALLOWED import mozilla.components.feature.sitepermissions.SitePermissionsRules.Action.ALLOWED
import mozilla.components.feature.sitepermissions.SitePermissionsRules.Action.ASK_TO_ALLOW import mozilla.components.feature.sitepermissions.SitePermissionsRules.Action.ASK_TO_ALLOW
@ -17,8 +16,7 @@ import org.junit.Assert.assertTrue
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mozilla.fenix.ext.clearAndCommit import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.settings.PhoneFeature import org.mozilla.fenix.settings.PhoneFeature
import org.mozilla.fenix.settings.deletebrowsingdata.DeleteBrowsingDataOnQuitType import org.mozilla.fenix.settings.deletebrowsingdata.DeleteBrowsingDataOnQuitType
@ -27,9 +25,18 @@ class SettingsTest {
lateinit var settings: Settings lateinit var settings: Settings
private val defaultPermissions = SitePermissionsRules(
camera = ASK_TO_ALLOW,
location = ASK_TO_ALLOW,
microphone = ASK_TO_ALLOW,
notification = ASK_TO_ALLOW,
autoplayAudible = AutoplayAction.BLOCKED,
autoplayInaudible = AutoplayAction.BLOCKED
)
@Before @Before
fun setUp() { fun setUp() {
settings = testContext.settings().apply(Settings::clear) settings = Settings(testContext)
} }
@Test @Test
@ -103,28 +110,6 @@ class SettingsTest {
assertEquals("Mozilla", settings.defaultSearchEngineName) assertEquals("Mozilla", settings.defaultSearchEngineName)
} }
@Test
fun isCrashReportingEnabled_enabledInBuild() {
// When
clearExistingInstance()
val settings = testContext.settings(true)
.apply(Settings::clear)
// Then
assertTrue(settings.isCrashReportingEnabled)
}
@Test
fun isCrashReportingEnabled_disabledInBuild() {
// When
clearExistingInstance()
val settings = testContext.settings(false)
.apply(Settings::clear)
// Then
assertFalse(settings.isCrashReportingEnabled)
}
@Test @Test
fun isRemoteDebuggingEnabled() { fun isRemoteDebuggingEnabled() {
// When just created // When just created
@ -451,7 +436,7 @@ class SettingsTest {
// When just created // When just created
// Then // Then
assertEquals( assertEquals(
defaultPermissions(), defaultPermissions,
settings.getSitePermissionsCustomSettingsRules() settings.getSitePermissionsCustomSettingsRules()
) )
} }
@ -463,7 +448,7 @@ class SettingsTest {
// Then // Then
assertEquals( assertEquals(
defaultPermissions().copy(camera = BLOCKED), defaultPermissions.copy(camera = BLOCKED),
settings.getSitePermissionsCustomSettingsRules() settings.getSitePermissionsCustomSettingsRules()
) )
} }
@ -475,7 +460,7 @@ class SettingsTest {
// Then // Then
assertEquals( assertEquals(
defaultPermissions().copy(notification = BLOCKED), defaultPermissions.copy(notification = BLOCKED),
settings.getSitePermissionsCustomSettingsRules() settings.getSitePermissionsCustomSettingsRules()
) )
} }
@ -487,7 +472,7 @@ class SettingsTest {
// Then // Then
assertEquals( assertEquals(
defaultPermissions().copy(location = BLOCKED), defaultPermissions.copy(location = BLOCKED),
settings.getSitePermissionsCustomSettingsRules() settings.getSitePermissionsCustomSettingsRules()
) )
} }
@ -499,7 +484,7 @@ class SettingsTest {
// Then // Then
assertEquals( assertEquals(
defaultPermissions().copy(microphone = BLOCKED), defaultPermissions.copy(microphone = BLOCKED),
settings.getSitePermissionsCustomSettingsRules() settings.getSitePermissionsCustomSettingsRules()
) )
} }
@ -509,7 +494,7 @@ class SettingsTest {
settings.setSitePermissionsPhoneFeatureAction(PhoneFeature.AUTOPLAY_AUDIBLE, ALLOWED) settings.setSitePermissionsPhoneFeatureAction(PhoneFeature.AUTOPLAY_AUDIBLE, ALLOWED)
assertEquals( assertEquals(
defaultPermissions().copy(autoplayAudible = ALLOWED), defaultPermissions.copy(autoplayAudible = ALLOWED),
settings.getSitePermissionsCustomSettingsRules() settings.getSitePermissionsCustomSettingsRules()
) )
} }
@ -519,25 +504,8 @@ class SettingsTest {
settings.setSitePermissionsPhoneFeatureAction(PhoneFeature.AUTOPLAY_INAUDIBLE, ALLOWED) settings.setSitePermissionsPhoneFeatureAction(PhoneFeature.AUTOPLAY_INAUDIBLE, ALLOWED)
assertEquals( assertEquals(
defaultPermissions().copy(autoplayInaudible = ALLOWED), defaultPermissions.copy(autoplayInaudible = ALLOWED),
settings.getSitePermissionsCustomSettingsRules() settings.getSitePermissionsCustomSettingsRules()
) )
} }
} }
private fun clearExistingInstance() {
Settings.instance = null
}
private fun Settings.clear() {
preferences.clearAndCommit()
}
private fun defaultPermissions() = SitePermissionsRules(
camera = ASK_TO_ALLOW,
location = ASK_TO_ALLOW,
microphone = ASK_TO_ALLOW,
notification = ASK_TO_ALLOW,
autoplayAudible = AutoplayAction.BLOCKED,
autoplayInaudible = AutoplayAction.BLOCKED
)

@ -4,25 +4,24 @@
package org.mozilla.fenix.whatsnew package org.mozilla.fenix.whatsnew
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import androidx.preference.PreferenceManager
import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.robolectric.testContext
import org.junit.Assert import org.junit.Assert
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mozilla.fenix.ext.clearAndCommit import org.mozilla.fenix.ext.clearAndCommit
import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
@RunWith(FenixRobolectricTestRunner::class) @RunWith(FenixRobolectricTestRunner::class)
class WhatsNewStorageTest { class WhatsNewStorageTest {
private lateinit var storage: SharedPreferenceWhatsNewStorage private lateinit var storage: SharedPreferenceWhatsNewStorage
private lateinit var settings: Settings
@Before @Before
fun setUp() { fun setUp() {
storage = SharedPreferenceWhatsNewStorage(testContext) storage = SharedPreferenceWhatsNewStorage(testContext)
settings = Settings.getInstance(testContext) PreferenceManager.getDefaultSharedPreferences(testContext).clearAndCommit()
.apply(Settings::clear)
} }
@Test @Test
@ -57,7 +56,3 @@ class WhatsNewStorageTest {
const val DAY_IN_MILLIS = 3600 * 1000 * 24 const val DAY_IN_MILLIS = 3600 * 1000 * 24
} }
} }
fun Settings.clear() {
preferences.clearAndCommit()
}

@ -4,24 +4,24 @@ package org.mozilla.fenix.whatsnew
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import androidx.preference.PreferenceManager
import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.robolectric.testContext
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.clearAndCommit
import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
@RunWith(FenixRobolectricTestRunner::class) @RunWith(FenixRobolectricTestRunner::class)
class WhatsNewTest { class WhatsNewTest {
private lateinit var storage: SharedPreferenceWhatsNewStorage private lateinit var storage: SharedPreferenceWhatsNewStorage
private lateinit var settings: Settings
@Before @Before
fun setup() { fun setup() {
storage = SharedPreferenceWhatsNewStorage(testContext) storage = SharedPreferenceWhatsNewStorage(testContext)
settings = testContext.settings().apply(Settings::clear) PreferenceManager.getDefaultSharedPreferences(testContext).clearAndCommit()
WhatsNew.wasUpdatedRecently = null WhatsNew.wasUpdatedRecently = null
} }

Loading…
Cancel
Save