diff --git a/app/src/main/java/org/mozilla/fenix/settings/AccessibilityFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/AccessibilityFragment.kt new file mode 100644 index 000000000..46721e1f6 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/settings/AccessibilityFragment.kt @@ -0,0 +1,23 @@ +/* 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.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.preference.PreferenceFragmentCompat +import org.mozilla.fenix.R + +class AccessibilityFragment : PreferenceFragmentCompat() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + (activity as AppCompatActivity).title = getString(R.string.preferences_accessibility) + (activity as AppCompatActivity).supportActionBar?.show() + } + + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + setPreferencesFromResource(R.xml.accessibility_preferences, rootKey) + } +} diff --git a/app/src/main/java/org/mozilla/fenix/settings/DataChoicesFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/DataChoicesFragment.kt new file mode 100644 index 000000000..c61f99f81 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/settings/DataChoicesFragment.kt @@ -0,0 +1,23 @@ +/* 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.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.preference.PreferenceFragmentCompat +import org.mozilla.fenix.R + +class DataChoicesFragment : PreferenceFragmentCompat() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + (activity as AppCompatActivity).title = getString(R.string.preferences_data_choices) + (activity as AppCompatActivity).supportActionBar?.show() + } + + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + setPreferencesFromResource(R.xml.data_choices_preferences, rootKey) + } +} diff --git a/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt index cc9097679..9a8cfcbac 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt @@ -20,17 +20,26 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Job import kotlinx.coroutines.launch +import kotlin.coroutines.CoroutineContext +import java.io.File import mozilla.components.support.ktx.android.graphics.toDataUri import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.FenixApplication -import org.mozilla.fenix.R -import org.mozilla.fenix.R.string.pref_key_leakcanary -import org.mozilla.fenix.R.string.pref_key_make_default_browser import org.mozilla.fenix.ext.getPreferenceKey import org.mozilla.fenix.ext.requireComponents -import java.io.File -import kotlin.coroutines.CoroutineContext +import org.mozilla.fenix.R +import org.mozilla.fenix.R.string.pref_key_leakcanary +import org.mozilla.fenix.R.string.pref_key_feedback +import org.mozilla.fenix.R.string.pref_key_help +import org.mozilla.fenix.R.string.pref_key_make_default_browser +import org.mozilla.fenix.R.string.pref_key_rate +import org.mozilla.fenix.R.string.pref_key_site_permissions +import org.mozilla.fenix.R.string.pref_key_accessibility +import org.mozilla.fenix.R.string.pref_key_language +import org.mozilla.fenix.R.string.pref_key_data_choices +import org.mozilla.fenix.R.string.pref_key_about +@Suppress("TooManyFunctions") class SettingsFragment : PreferenceFragmentCompat(), CoroutineScope { private lateinit var job: Job @@ -54,21 +63,34 @@ class SettingsFragment : PreferenceFragmentCompat(), CoroutineScope { setupPreferences() } + @Suppress("ComplexMethod") override fun onPreferenceTreeClick(preference: Preference): Boolean { when (preference.key) { - resources.getString(R.string.pref_key_help) -> { + resources.getString(pref_key_site_permissions) -> { + navigateToSitePermissions() + } + resources.getString(pref_key_accessibility) -> { + navigateToAccessibility() + } + resources.getString(pref_key_language) -> { + // TODO open language switcher + } + resources.getString(pref_key_data_choices) -> { + navigateToDataChoices() + } + resources.getString(pref_key_help) -> { requireComponents.useCases.tabsUseCases.addTab .invoke(SupportUtils.getSumoURLForTopic(context!!, SupportUtils.SumoTopic.HELP)) navigateToSettingsArticle() } - resources.getString(R.string.pref_key_rate) -> { + resources.getString(pref_key_rate) -> { startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(SupportUtils.RATE_APP_URL))) } - resources.getString(R.string.pref_key_feedback) -> { + resources.getString(pref_key_feedback) -> { requireComponents.useCases.tabsUseCases.addTab.invoke(SupportUtils.FEEDBACK_URL) navigateToSettingsArticle() } - resources.getString(R.string.pref_key_about) -> { + resources.getString(pref_key_about) -> { requireComponents.useCases.tabsUseCases.addTab.invoke(aboutURL, true) navigateToSettingsArticle() } @@ -144,11 +166,26 @@ class SettingsFragment : PreferenceFragmentCompat(), CoroutineScope { } } + private fun navigateToSitePermissions() { + val directions = SettingsFragmentDirections.actionSettingsFragmentToSitePermissionsFragment() + Navigation.findNavController(view!!).navigate(directions) + } + + private fun navigateToAccessibility() { + val directions = SettingsFragmentDirections.actionSettingsFragmentToAccessibilityFragment() + Navigation.findNavController(view!!).navigate(directions) + } + + private fun navigateToDataChoices() { + val directions = SettingsFragmentDirections.actionSettingsFragmentToDataChoicesFragment() + Navigation.findNavController(view!!).navigate(directions) + } + private fun navigateToSettingsArticle() { - requireComponents.useCases.tabsUseCases.addTab.invoke(aboutURL, true) + val newSession = requireComponents.core.sessionManager.selectedSession?.id view?.let { Navigation.findNavController(it) - .navigate(SettingsFragmentDirections.actionGlobalBrowser(null)) + .navigate(SettingsFragmentDirections.actionGlobalBrowser(newSession)) } } diff --git a/app/src/main/java/org/mozilla/fenix/settings/SitePermissionsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/SitePermissionsFragment.kt new file mode 100644 index 000000000..138b90ba5 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/settings/SitePermissionsFragment.kt @@ -0,0 +1,23 @@ +/* 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.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.preference.PreferenceFragmentCompat +import org.mozilla.fenix.R + +class SitePermissionsFragment : PreferenceFragmentCompat() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + (activity as AppCompatActivity).title = getString(R.string.preferences_site_permissions) + (activity as AppCompatActivity).supportActionBar?.show() + } + + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + setPreferencesFromResource(R.xml.site_permissions_preferences, rootKey) + } +} diff --git a/app/src/main/res/drawable-xxxhdpi/ic_logo_wordmark.png b/app/src/main/res/drawable-xxxhdpi/ic_logo_wordmark.png deleted file mode 100644 index 45ec21118..000000000 Binary files a/app/src/main/res/drawable-xxxhdpi/ic_logo_wordmark.png and /dev/null differ diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index 9d6b657e2..45ffdd959 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -87,5 +87,23 @@ + android:label="@string/settings_title" > + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/raw/about.html b/app/src/main/res/raw/about.html index 248ea30b7..32651a201 100644 --- a/app/src/main/res/raw/about.html +++ b/app/src/main/res/raw/about.html @@ -41,8 +41,7 @@ img#wordmark { - +

diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index 6f4a5b053..941e060c9 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -19,4 +19,12 @@ pref_key_private_mode pref_key_theme pref_key_leakcanary + + + pref_key_telemetry + pref_key_crash_reporter + pref_key_mozilla_location_service + pref_key_fenix_health_report + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5a59b7e28..4569a2c14 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -109,6 +109,16 @@ Leak Canary + + + Telemetry + + Crash reporter + + Mozilla location service + + Fenix health report + Sessions diff --git a/app/src/main/res/xml/accessibility_preferences.xml b/app/src/main/res/xml/accessibility_preferences.xml new file mode 100644 index 000000000..fab8cd571 --- /dev/null +++ b/app/src/main/res/xml/accessibility_preferences.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/data_choices_preferences.xml b/app/src/main/res/xml/data_choices_preferences.xml new file mode 100644 index 000000000..6ba69b4f3 --- /dev/null +++ b/app/src/main/res/xml/data_choices_preferences.xml @@ -0,0 +1,19 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/site_permissions_preferences.xml b/app/src/main/res/xml/site_permissions_preferences.xml new file mode 100644 index 000000000..fab8cd571 --- /dev/null +++ b/app/src/main/res/xml/site_permissions_preferences.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file