Clean up settings fragments
parent
43354489a1
commit
b85673acac
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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))
|
||||||
|
}
|
|
@ -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.
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue