1
0
Fork 0

Clean up settings fragments

master
Tiger Oakes 2019-12-07 20:25:32 -08:00 committed by Jeff Boek
parent 43354489a1
commit b85673acac
7 changed files with 145 additions and 273 deletions

View File

@ -4,7 +4,6 @@
package org.mozilla.fenix.settings package org.mozilla.fenix.settings
import android.content.SharedPreferences
import android.os.Bundle import android.os.Bundle
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SwitchPreference import androidx.preference.SwitchPreference
@ -20,23 +19,18 @@ import org.mozilla.fenix.ext.showToolbar
*/ */
class DataChoicesFragment : PreferenceFragmentCompat() { class DataChoicesFragment : PreferenceFragmentCompat() {
private val preferenceChangeListener =
SharedPreferences.OnSharedPreferenceChangeListener { sharedPreferences, key ->
when (key) {
getPreferenceKey(R.string.pref_key_telemetry) -> {
if (sharedPreferences.getBoolean(key, requireContext().settings().isTelemetryEnabled)) {
context?.components?.analytics?.metrics?.start()
} else {
context?.components?.analytics?.metrics?.stop()
}
}
}
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
context?.let {
preferenceManager.sharedPreferences.registerOnSharedPreferenceChangeListener(preferenceChangeListener) val context = requireContext()
preferenceManager.sharedPreferences.registerOnSharedPreferenceChangeListener(this) { sharedPreferences, key ->
if (key == getPreferenceKey(R.string.pref_key_telemetry)) {
if (sharedPreferences.getBoolean(key, context.settings().isTelemetryEnabled)) {
context.components.analytics.metrics.start()
} else {
context.components.analytics.metrics.stop()
}
}
} }
} }
@ -45,13 +39,6 @@ class DataChoicesFragment : PreferenceFragmentCompat() {
showToolbar(getString(R.string.preferences_data_collection)) showToolbar(getString(R.string.preferences_data_collection))
} }
override fun onDestroy() {
context?.let {
preferenceManager.sharedPreferences.unregisterOnSharedPreferenceChangeListener(preferenceChangeListener)
}
super.onDestroy()
}
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.data_choices_preferences, rootKey) setPreferencesFromResource(R.xml.data_choices_preferences, rootKey)

View File

@ -5,7 +5,6 @@
package org.mozilla.fenix.settings package org.mozilla.fenix.settings
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences
import android.os.Build import android.os.Build
import android.os.Build.VERSION.SDK_INT import android.os.Build.VERSION.SDK_INT
import android.os.Bundle import android.os.Bundle
@ -17,7 +16,6 @@ import mozilla.components.support.utils.Browsers
import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.getPreferenceKey import org.mozilla.fenix.ext.getPreferenceKey
import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.ext.showToolbar import org.mozilla.fenix.ext.showToolbar
@ -27,30 +25,8 @@ import org.mozilla.fenix.ext.showToolbar
*/ */
class DefaultBrowserSettingsFragment : PreferenceFragmentCompat() { class DefaultBrowserSettingsFragment : PreferenceFragmentCompat() {
private val preferenceChangeListener =
SharedPreferences.OnSharedPreferenceChangeListener { sharedPreferences, key ->
when (key) {
getPreferenceKey(R.string.pref_key_telemetry) -> {
if (sharedPreferences.getBoolean(
key,
requireContext().settings().isTelemetryEnabled
)
) {
context?.components?.analytics?.metrics?.start()
} else {
context?.components?.analytics?.metrics?.stop()
}
}
}
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
context?.let {
preferenceManager.sharedPreferences.registerOnSharedPreferenceChangeListener(
preferenceChangeListener
)
}
val makeDefaultBrowserKey = getPreferenceKey(R.string.pref_key_make_default_browser) val makeDefaultBrowserKey = getPreferenceKey(R.string.pref_key_make_default_browser)
val preferenceMakeDefaultBrowser = findPreference<Preference>(makeDefaultBrowserKey) val preferenceMakeDefaultBrowser = findPreference<Preference>(makeDefaultBrowserKey)
@ -66,15 +42,6 @@ class DefaultBrowserSettingsFragment : PreferenceFragmentCompat() {
updatePreferences() updatePreferences()
} }
override fun onDestroy() {
context?.let {
preferenceManager.sharedPreferences.unregisterOnSharedPreferenceChangeListener(
preferenceChangeListener
)
}
super.onDestroy()
}
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.default_browser_preferences, rootKey) setPreferencesFromResource(R.xml.default_browser_preferences, rootKey)
updatePreferences() updatePreferences()
@ -94,9 +61,7 @@ class DefaultBrowserSettingsFragment : PreferenceFragmentCompat() {
private fun getClickListenerForMakeDefaultBrowser(): Preference.OnPreferenceClickListener { private fun getClickListenerForMakeDefaultBrowser(): Preference.OnPreferenceClickListener {
return if (SDK_INT >= Build.VERSION_CODES.N) { return if (SDK_INT >= Build.VERSION_CODES.N) {
Preference.OnPreferenceClickListener { Preference.OnPreferenceClickListener {
val intent = Intent( val intent = Intent(ACTION_MANAGE_DEFAULT_APPS_SETTINGS)
ACTION_MANAGE_DEFAULT_APPS_SETTINGS
)
startActivity(intent) startActivity(intent)
true true
} }
@ -104,7 +69,7 @@ class DefaultBrowserSettingsFragment : PreferenceFragmentCompat() {
Preference.OnPreferenceClickListener { Preference.OnPreferenceClickListener {
(activity as HomeActivity).openToBrowserAndLoad( (activity as HomeActivity).openToBrowserAndLoad(
searchTermOrURL = SupportUtils.getSumoURLForTopic( searchTermOrURL = SupportUtils.getSumoURLForTopic(
context!!, requireContext(),
SupportUtils.SumoTopic.SET_AS_DEFAULT_BROWSER SupportUtils.SumoTopic.SET_AS_DEFAULT_BROWSER
), ),
newTab = true, newTab = true,

View File

@ -0,0 +1,39 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* 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/. */
package org.mozilla.fenix.settings
import android.content.SharedPreferences
import androidx.lifecycle.Lifecycle.Event.ON_CREATE
import androidx.lifecycle.Lifecycle.Event.ON_DESTROY
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.OnLifecycleEvent
class OnSharedPreferenceChangeListener(
private val sharedPreferences: SharedPreferences,
private val listener: (SharedPreferences, String) -> Unit
) : SharedPreferences.OnSharedPreferenceChangeListener, LifecycleObserver {
@OnLifecycleEvent(ON_CREATE)
fun onCreate() {
sharedPreferences.registerOnSharedPreferenceChangeListener(this)
}
@OnLifecycleEvent(ON_DESTROY)
fun onDestroy() {
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
}
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) {
listener(sharedPreferences, key)
}
}
fun SharedPreferences.registerOnSharedPreferenceChangeListener(
owner: LifecycleOwner,
listener: (SharedPreferences, String) -> Unit
) {
owner.lifecycle.addObserver(OnSharedPreferenceChangeListener(this, listener))
}

View File

@ -7,12 +7,11 @@ package org.mozilla.fenix.settings
import android.content.ActivityNotFoundException import android.content.ActivityNotFoundException
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavDirections import androidx.navigation.NavDirections
import androidx.navigation.Navigation import androidx.navigation.findNavController
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.Preference.OnPreferenceClickListener import androidx.preference.Preference.OnPreferenceClickListener
@ -65,30 +64,32 @@ import org.mozilla.fenix.settings.account.AccountAuthErrorPreference
import org.mozilla.fenix.settings.account.AccountPreference import org.mozilla.fenix.settings.account.AccountPreference
import org.mozilla.fenix.utils.ItsNotBrokenSnack import org.mozilla.fenix.utils.ItsNotBrokenSnack
@SuppressWarnings("TooManyFunctions", "LargeClass") @Suppress("LargeClass")
class SettingsFragment : PreferenceFragmentCompat(), AccountObserver { class SettingsFragment : PreferenceFragmentCompat() {
private val preferenceChangeListener =
SharedPreferences.OnSharedPreferenceChangeListener { sharedPreferences, key -> private val accountObserver = object : AccountObserver {
try { private fun updateAccountUi(profile: Profile? = null) {
context?.let { val context = context ?: return
it.components.analytics.metrics.track( lifecycleScope.launch {
Event.PreferenceToggled updateAccountUIState(
(key, sharedPreferences.getBoolean(key, false), it) context = context,
) profile = profile ?: context.components.backgroundServices.accountManager.accountProfile()
} )
} catch (e: IllegalArgumentException) {
// The event is not tracked
} catch (e: ClassCastException) {
// The setting is not a boolean, not tracked
} }
} }
override fun onAuthenticated(account: OAuthAccount, authType: AuthType) = updateAccountUi()
override fun onLoggedOut() = updateAccountUi()
override fun onProfileUpdated(profile: Profile) = updateAccountUi(profile)
override fun onAuthenticationProblems() = updateAccountUi()
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
// Observe account changes to keep the UI up-to-date. // Observe account changes to keep the UI up-to-date.
requireComponents.backgroundServices.accountManager.register( requireComponents.backgroundServices.accountManager.register(
this, accountObserver,
owner = this, owner = this,
autoPause = true autoPause = true
) )
@ -102,9 +103,20 @@ class SettingsFragment : PreferenceFragmentCompat(), AccountObserver {
requireComponents.backgroundServices.accountManager.accountProfile() requireComponents.backgroundServices.accountManager.accountProfile()
) )
preferenceManager.sharedPreferences.registerOnSharedPreferenceChangeListener( preferenceManager.sharedPreferences
preferenceChangeListener .registerOnSharedPreferenceChangeListener(this) { sharedPreferences, key ->
) try {
context?.let { context ->
context.components.analytics.metrics.track(
Event.PreferenceToggled(key, sharedPreferences.getBoolean(key, false), context)
)
}
} catch (e: IllegalArgumentException) {
// The event is not tracked
} catch (e: ClassCastException) {
// The setting is not a boolean, not tracked
}
}
} }
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
@ -178,33 +190,35 @@ class SettingsFragment : PreferenceFragmentCompat(), AccountObserver {
@Suppress("ComplexMethod", "LongMethod") @Suppress("ComplexMethod", "LongMethod")
override fun onPreferenceTreeClick(preference: Preference): Boolean { override fun onPreferenceTreeClick(preference: Preference): Boolean {
when (preference.key) { val directions: NavDirections? = when (preference.key) {
resources.getString(pref_key_search_settings) -> { resources.getString(pref_key_search_settings) -> {
navigateToSearchEngineSettings() SettingsFragmentDirections.actionSettingsFragmentToSearchEngineFragment()
} }
resources.getString(pref_key_tracking_protection_settings) -> { resources.getString(pref_key_tracking_protection_settings) -> {
requireContext().metrics.track(Event.TrackingProtectionSettings) requireContext().metrics.track(Event.TrackingProtectionSettings)
navigateToTrackingProtectionSettings() SettingsFragmentDirections.actionSettingsFragmentToTrackingProtectionFragment()
} }
resources.getString(pref_key_site_permissions) -> { resources.getString(pref_key_site_permissions) -> {
navigateToSitePermissions() SettingsFragmentDirections.actionSettingsFragmentToSitePermissionsFragment()
} }
resources.getString(pref_key_add_private_browsing_shortcut) -> { resources.getString(pref_key_add_private_browsing_shortcut) -> {
requireContext().metrics.track(Event.PrivateBrowsingCreateShortcut) requireContext().metrics.track(Event.PrivateBrowsingCreateShortcut)
PrivateShortcutCreateManager.createPrivateShortcut(requireContext()) PrivateShortcutCreateManager.createPrivateShortcut(requireContext())
null
} }
resources.getString(pref_key_accessibility) -> { resources.getString(pref_key_accessibility) -> {
navigateToAccessibility() SettingsFragmentDirections.actionSettingsFragmentToAccessibilityFragment()
} }
resources.getString(pref_key_language) -> { resources.getString(pref_key_language) -> {
// TODO #220 // TODO #220
ItsNotBrokenSnack(context!!).showSnackbar(issueNumber = "220") ItsNotBrokenSnack(requireContext()).showSnackbar(issueNumber = "220")
null
} }
resources.getString(pref_key_make_default_browser) -> { resources.getString(pref_key_make_default_browser) -> {
navigateToDefaultBrowserSettingsFragment() SettingsFragmentDirections.actionSettingsFragmentToDefaultBrowserSettingsFragment()
} }
resources.getString(pref_key_data_choices) -> { resources.getString(pref_key_data_choices) -> {
navigateToDataChoices() SettingsFragmentDirections.actionSettingsFragmentToDataChoicesFragment()
} }
resources.getString(pref_key_help) -> { resources.getString(pref_key_help) -> {
(activity as HomeActivity).openToBrowserAndLoad( (activity as HomeActivity).openToBrowserAndLoad(
@ -215,6 +229,7 @@ class SettingsFragment : PreferenceFragmentCompat(), AccountObserver {
newTab = true, newTab = true,
from = BrowserDirection.FromSettings from = BrowserDirection.FromSettings
) )
null
} }
resources.getString(pref_key_rate) -> { resources.getString(pref_key_rate) -> {
try { try {
@ -228,60 +243,55 @@ class SettingsFragment : PreferenceFragmentCompat(), AccountObserver {
from = BrowserDirection.FromSettings from = BrowserDirection.FromSettings
) )
} }
null
} }
resources.getString(pref_key_passwords) -> { resources.getString(pref_key_passwords) -> {
navigateToLoginsSettingsFragment() SettingsFragmentDirections.actionSettingsFragmentToLoginsFragment()
} }
resources.getString(pref_key_about) -> { resources.getString(pref_key_about) -> {
navigateToAbout() SettingsFragmentDirections.actionSettingsFragmentToAboutFragment()
} }
resources.getString(pref_key_account) -> { resources.getString(pref_key_account) -> {
navigateToAccountSettings() SettingsFragmentDirections.actionSettingsFragmentToAccountSettingsFragment()
} }
resources.getString(pref_key_account_auth_error) -> { resources.getString(pref_key_account_auth_error) -> {
navigateToAccountProblem() SettingsFragmentDirections.actionSettingsFragmentToAccountProblemFragment()
} }
resources.getString(pref_key_delete_browsing_data) -> { resources.getString(pref_key_delete_browsing_data) -> {
navigateToDeleteBrowsingData() SettingsFragmentDirections.actionSettingsFragmentToDeleteBrowsingDataFragment()
} }
resources.getString(pref_key_delete_browsing_data_on_quit_preference) -> { resources.getString(pref_key_delete_browsing_data_on_quit_preference) -> {
navigateToDeleteBrowsingDataOnQuit() SettingsFragmentDirections.actionSettingsFragmentToDeleteBrowsingDataOnQuitFragment()
} }
resources.getString(pref_key_theme) -> { resources.getString(pref_key_theme) -> {
navigateToThemeSettings() SettingsFragmentDirections.actionSettingsFragmentToThemeFragment()
} }
resources.getString(pref_key_toolbar) -> { resources.getString(pref_key_toolbar) -> {
navigateToToolbarSettings() SettingsFragmentDirections.actionSettingsFragmentToToolbarSettingsFragment()
} }
resources.getString(pref_key_privacy_link) -> { resources.getString(pref_key_privacy_link) -> {
requireContext().let { context -> val intent = SupportUtils.createCustomTabIntent(
val intent = SupportUtils.createCustomTabIntent( requireContext(),
context, SupportUtils.getPrivacyNoticeUrl()
SupportUtils.getPrivacyNoticeUrl() )
) startActivity(intent)
startActivity(intent) null
}
} }
resources.getString(pref_key_your_rights) -> { resources.getString(pref_key_your_rights) -> {
requireContext().let { context -> val context = requireContext()
val intent = SupportUtils.createCustomTabIntent( val intent = SupportUtils.createCustomTabIntent(
context, context,
SupportUtils.getSumoURLForTopic(context, SupportUtils.SumoTopic.YOUR_RIGHTS) SupportUtils.getSumoURLForTopic(context, SupportUtils.SumoTopic.YOUR_RIGHTS)
) )
startActivity(intent) startActivity(intent)
} null
} }
else -> null
} }
directions?.let { navigateFromSettings(directions) }
return super.onPreferenceTreeClick(preference) return super.onPreferenceTreeClick(preference)
} }
override fun onDestroy() {
super.onDestroy()
preferenceManager.sharedPreferences.unregisterOnSharedPreferenceChangeListener(
preferenceChangeListener
)
}
private fun getClickListenerForSignIn(): OnPreferenceClickListener { private fun getClickListenerForSignIn(): OnPreferenceClickListener {
return OnPreferenceClickListener { return OnPreferenceClickListener {
context!!.components.services.launchPairingSignIn(context!!, findNavController()) context!!.components.services.launchPairingSignIn(context!!, findNavController())
@ -313,132 +323,13 @@ class SettingsFragment : PreferenceFragmentCompat(), AccountObserver {
} }
private fun navigateFromSettings(directions: NavDirections) { private fun navigateFromSettings(directions: NavDirections) {
view?.let { view?.findNavController()?.let { navController ->
val navController = Navigation.findNavController(it)
if (navController.currentDestination?.id == R.id.settingsFragment) { if (navController.currentDestination?.id == R.id.settingsFragment) {
navController.navigate(directions) navController.navigate(directions)
} }
} }
} }
private fun navigateToLoginsSettingsFragment() {
val directions = SettingsFragmentDirections.actionSettingsFragmentToLoginsFragment()
navigateFromSettings(directions)
}
private fun navigateToSearchEngineSettings() {
val directions = SettingsFragmentDirections.actionSettingsFragmentToSearchEngineFragment()
navigateFromSettings(directions)
}
private fun navigateToTrackingProtectionSettings() {
val directions =
SettingsFragmentDirections.actionSettingsFragmentToTrackingProtectionFragment()
navigateFromSettings(directions)
}
private fun navigateToThemeSettings() {
val directions = SettingsFragmentDirections.actionSettingsFragmentToThemeFragment()
navigateFromSettings(directions)
}
private fun navigateToToolbarSettings() {
val directions =
SettingsFragmentDirections.actionSettingsFragmentToToolbarSettingsFragment()
navigateFromSettings(directions)
}
private fun navigateToSitePermissions() {
val directions =
SettingsFragmentDirections.actionSettingsFragmentToSitePermissionsFragment()
navigateFromSettings(directions)
}
private fun navigateToAccessibility() {
val directions = SettingsFragmentDirections.actionSettingsFragmentToAccessibilityFragment()
navigateFromSettings(directions)
}
private fun navigateToDefaultBrowserSettingsFragment() {
val directions =
SettingsFragmentDirections.actionSettingsFragmentToDefaultBrowserSettingsFragment()
navigateFromSettings(directions)
}
private fun navigateToDataChoices() {
val directions = SettingsFragmentDirections.actionSettingsFragmentToDataChoicesFragment()
navigateFromSettings(directions)
}
private fun navigateToAbout() {
val directions = SettingsFragmentDirections.actionSettingsFragmentToAboutFragment()
navigateFromSettings(directions)
}
private fun navigateToAccountProblem() {
val directions = SettingsFragmentDirections.actionSettingsFragmentToAccountProblemFragment()
navigateFromSettings(directions)
}
private fun navigateToAccountSettings() {
val directions =
SettingsFragmentDirections.actionSettingsFragmentToAccountSettingsFragment()
navigateFromSettings(directions)
}
private fun navigateToDeleteBrowsingData() {
val directions =
SettingsFragmentDirections.actionSettingsFragmentToDeleteBrowsingDataFragment()
navigateFromSettings(directions)
}
private fun navigateToDeleteBrowsingDataOnQuit() {
val directions =
SettingsFragmentDirections.actionSettingsFragmentToDeleteBrowsingDataOnQuitFragment()
navigateFromSettings(directions)
}
override fun onAuthenticated(account: OAuthAccount, authType: AuthType) {
lifecycleScope.launch {
context?.let {
updateAccountUIState(
it,
it.components.backgroundServices.accountManager.accountProfile()
)
}
}
}
override fun onLoggedOut() {
lifecycleScope.launch {
context?.let {
updateAccountUIState(
it,
it.components.backgroundServices.accountManager.accountProfile()
)
}
}
}
override fun onProfileUpdated(profile: Profile) {
lifecycleScope.launch {
context?.let {
updateAccountUIState(it, profile)
}
}
}
override fun onAuthenticationProblems() {
lifecycleScope.launch {
context?.let {
updateAccountUIState(
it,
it.components.backgroundServices.accountManager.accountProfile()
)
}
}
}
/** /**
* Updates the UI to reflect current account state. * Updates the UI to reflect current account state.
* Possible conditions are logged-in without problems, logged-out, and logged-in but needs to re-authenticate. * Possible conditions are logged-in without problems, logged-out, and logged-in but needs to re-authenticate.

View File

@ -5,16 +5,17 @@
package org.mozilla.fenix.settings package org.mozilla.fenix.settings
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
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.ext.components import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.getPreferenceKey import org.mozilla.fenix.ext.getPreferenceKey
import org.mozilla.fenix.ext.showToolbar
/**
* Settings to adjust the position of the browser toolbar.
*/
class ToolbarSettingsFragment : PreferenceFragmentCompat() { class ToolbarSettingsFragment : PreferenceFragmentCompat() {
private lateinit var topPreference: RadioButtonPreference
private lateinit var bottomPreference: RadioButtonPreference
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.toolbar_preferences, rootKey) setPreferencesFromResource(R.xml.toolbar_preferences, rootKey)
@ -22,16 +23,14 @@ class ToolbarSettingsFragment : PreferenceFragmentCompat() {
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
(activity as AppCompatActivity).title = getString(R.string.preferences_toolbar) showToolbar(getString(R.string.preferences_toolbar))
(activity as AppCompatActivity).supportActionBar?.show()
setupClickListeners() setupPreferences()
setupRadioGroups()
} }
private fun setupClickListeners() { private fun setupPreferences() {
val keyToolbarTop = getPreferenceKey(R.string.pref_key_toolbar_top) val keyToolbarTop = getPreferenceKey(R.string.pref_key_toolbar_top)
topPreference = requireNotNull(findPreference(keyToolbarTop)) val topPreference = requireNotNull(findPreference<RadioButtonPreference>(keyToolbarTop))
topPreference.onClickListener { topPreference.onClickListener {
requireContext().components.analytics.metrics.track(Event.ToolbarPositionChanged( requireContext().components.analytics.metrics.track(Event.ToolbarPositionChanged(
Event.ToolbarPositionChanged.Position.TOP Event.ToolbarPositionChanged.Position.TOP
@ -39,15 +38,13 @@ class ToolbarSettingsFragment : PreferenceFragmentCompat() {
} }
val keyToolbarBottom = getPreferenceKey(R.string.pref_key_toolbar_bottom) val keyToolbarBottom = getPreferenceKey(R.string.pref_key_toolbar_bottom)
bottomPreference = requireNotNull(findPreference(keyToolbarBottom)) val bottomPreference = requireNotNull(findPreference<RadioButtonPreference>(keyToolbarBottom))
bottomPreference.onClickListener { bottomPreference.onClickListener {
requireContext().components.analytics.metrics.track(Event.ToolbarPositionChanged( requireContext().components.analytics.metrics.track(Event.ToolbarPositionChanged(
Event.ToolbarPositionChanged.Position.BOTTOM Event.ToolbarPositionChanged.Position.BOTTOM
)) ))
} }
}
private fun setupRadioGroups() {
topPreference.addToRadioGroup(bottomPreference) topPreference.addToRadioGroup(bottomPreference)
bottomPreference.addToRadioGroup(topPreference) bottomPreference.addToRadioGroup(topPreference)
} }

View File

@ -6,15 +6,13 @@ package org.mozilla.fenix.settings.search
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.Menu import android.view.Menu
import android.view.MenuInflater import android.view.MenuInflater
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import kotlinx.android.synthetic.main.custom_search_engine.* import kotlinx.android.synthetic.main.custom_search_engine.*
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.Dispatchers.Main
@ -26,12 +24,13 @@ import org.mozilla.fenix.components.FenixSnackbar
import org.mozilla.fenix.components.searchengine.CustomSearchEngineStore import org.mozilla.fenix.components.searchengine.CustomSearchEngineStore
import org.mozilla.fenix.ext.increaseTapArea import org.mozilla.fenix.ext.increaseTapArea
import org.mozilla.fenix.ext.requireComponents import org.mozilla.fenix.ext.requireComponents
import org.mozilla.fenix.ext.showToolbar
import org.mozilla.fenix.settings.SupportUtils import org.mozilla.fenix.settings.SupportUtils
import java.util.Locale import java.util.Locale
class EditCustomSearchEngineFragment : Fragment(R.layout.fragment_add_search_engine) { class EditCustomSearchEngineFragment : Fragment(R.layout.fragment_add_search_engine) {
private val engineIdentifier: String by lazy { private val engineIdentifier: String by lazy {
navArgs<EditCustomSearchEngineFragmentArgs>().value.searchEngineIdentifier EditCustomSearchEngineFragmentArgs.fromBundle(requireArguments()).searchEngineIdentifier
} }
private lateinit var searchEngine: SearchEngine private lateinit var searchEngine: SearchEngine
@ -68,8 +67,7 @@ class EditCustomSearchEngineFragment : Fragment(R.layout.fragment_add_search_eng
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
(activity as AppCompatActivity).title = getString(R.string.search_engine_edit_custom_search_engine_title) showToolbar(getString(R.string.search_engine_edit_custom_search_engine_title))
(activity as AppCompatActivity).supportActionBar?.show()
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {

View File

@ -8,12 +8,13 @@ import android.content.DialogInterface
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.Navigation import androidx.navigation.findNavController
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import mozilla.components.feature.sitepermissions.SitePermissions import mozilla.components.feature.sitepermissions.SitePermissions
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
@ -47,28 +48,22 @@ class SitePermissionsDetailsExceptionsFragment : PreferenceFragmentCompat() {
val context = requireContext() val context = requireContext()
sitePermissions = sitePermissions =
requireNotNull(context.components.core.permissionStorage.findSitePermissionsBy(sitePermissions.origin)) requireNotNull(context.components.core.permissionStorage.findSitePermissionsBy(sitePermissions.origin))
launch(Main) { withContext(Main) {
bindCategoryPhoneFeatures() bindCategoryPhoneFeatures()
} }
} }
} }
private fun bindCategoryPhoneFeatures() { private fun bindCategoryPhoneFeatures() {
val context = requireContext() initPhoneFeature(CAMERA)
initPhoneFeature(LOCATION)
val cameraAction = CAMERA.getActionLabel(context, sitePermissions) initPhoneFeature(MICROPHONE)
val locationAction = LOCATION.getActionLabel(context, sitePermissions) initPhoneFeature(NOTIFICATION)
val microphoneAction = MICROPHONE.getActionLabel(context, sitePermissions)
val notificationAction = NOTIFICATION.getActionLabel(context, sitePermissions)
initPhoneFeature(CAMERA, cameraAction)
initPhoneFeature(LOCATION, locationAction)
initPhoneFeature(MICROPHONE, microphoneAction)
initPhoneFeature(NOTIFICATION, notificationAction)
bindClearPermissionsButton() bindClearPermissionsButton()
} }
private fun initPhoneFeature(phoneFeature: PhoneFeature, summary: String) { private fun initPhoneFeature(phoneFeature: PhoneFeature) {
val summary = phoneFeature.getActionLabel(requireContext(), sitePermissions)
val keyPreference = phoneFeature.getPreferenceKey(requireContext()) val keyPreference = phoneFeature.getPreferenceKey(requireContext())
val cameraPhoneFeatures: Preference = requireNotNull(findPreference(keyPreference)) val cameraPhoneFeatures: Preference = requireNotNull(findPreference(keyPreference))
cameraPhoneFeatures.summary = summary cameraPhoneFeatures.summary = summary
@ -103,8 +98,8 @@ class SitePermissionsDetailsExceptionsFragment : PreferenceFragmentCompat() {
private fun clearSitePermissions() { private fun clearSitePermissions() {
lifecycleScope.launch(IO) { lifecycleScope.launch(IO) {
requireContext().components.core.permissionStorage.deleteSitePermissions(sitePermissions) requireContext().components.core.permissionStorage.deleteSitePermissions(sitePermissions)
launch(Main) { withContext(Main) {
Navigation.findNavController(requireNotNull(view)).popBackStack() requireView().findNavController().popBackStack()
} }
} }
} }
@ -115,6 +110,6 @@ class SitePermissionsDetailsExceptionsFragment : PreferenceFragmentCompat() {
phoneFeatureId = phoneFeature.id, phoneFeatureId = phoneFeature.id,
sitePermissions = sitePermissions sitePermissions = sitePermissions
) )
Navigation.findNavController(view!!).navigate(directions) requireView().findNavController().navigate(directions)
} }
} }