Closes #1075: Added custom settings UI under site permissions.
parent
80f386c411
commit
a0cfedeeca
|
@ -19,6 +19,8 @@ class RadioButtonPreference : Preference {
|
||||||
private lateinit var summaryView: TextView
|
private lateinit var summaryView: TextView
|
||||||
private lateinit var radioButton: RadioButton
|
private lateinit var radioButton: RadioButton
|
||||||
|
|
||||||
|
private var clickListener: (() -> Unit)? = null
|
||||||
|
|
||||||
init {
|
init {
|
||||||
layoutResource = R.layout.preference_widget_radiobutton
|
layoutResource = R.layout.preference_widget_radiobutton
|
||||||
}
|
}
|
||||||
|
@ -35,6 +37,10 @@ class RadioButtonPreference : Preference {
|
||||||
radioGroups.add(radioPreference)
|
radioGroups.add(radioPreference)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun onClickListener(listener: (() -> Unit)) {
|
||||||
|
clickListener = listener
|
||||||
|
}
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: PreferenceViewHolder) {
|
override fun onBindViewHolder(holder: PreferenceViewHolder) {
|
||||||
super.onBindViewHolder(holder)
|
super.onBindViewHolder(holder)
|
||||||
|
|
||||||
|
@ -48,6 +54,7 @@ class RadioButtonPreference : Preference {
|
||||||
updateRadioValue(true)
|
updateRadioValue(true)
|
||||||
|
|
||||||
toggleRadioGroups()
|
toggleRadioGroups()
|
||||||
|
clickListener?.invoke()
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,11 +6,17 @@ package org.mozilla.fenix.settings
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.preference.Preference
|
||||||
import androidx.preference.PreferenceFragmentCompat
|
import androidx.preference.PreferenceFragmentCompat
|
||||||
|
import org.jetbrains.anko.support.v4.defaultSharedPreferences
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
|
|
||||||
class SitePermissionsFragment : PreferenceFragmentCompat() {
|
class SitePermissionsFragment : PreferenceFragmentCompat() {
|
||||||
|
|
||||||
|
private lateinit var categoryPhoneFeatures: Preference
|
||||||
|
private lateinit var radioRecommendSettings: RadioButtonPreference
|
||||||
|
private lateinit var radioCustomSettings: RadioButtonPreference
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
(activity as AppCompatActivity).title = getString(R.string.preferences_site_permissions)
|
(activity as AppCompatActivity).title = getString(R.string.preferences_site_permissions)
|
||||||
|
@ -21,18 +27,57 @@ class SitePermissionsFragment : PreferenceFragmentCompat() {
|
||||||
setPreferencesFromResource(R.xml.site_permissions_preferences, rootKey)
|
setPreferencesFromResource(R.xml.site_permissions_preferences, rootKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupPreferences() {
|
|
||||||
val keyRecommendSettings = getString(R.string.pref_key_recommended_settings)
|
|
||||||
val keyCustomSettings = getString(R.string.pref_key_custom_settings)
|
|
||||||
val radioRecommendSettings: RadioButtonPreference = requireNotNull(findPreference(keyRecommendSettings))
|
|
||||||
val radioCustomSettings: RadioButtonPreference = requireNotNull(findPreference(keyCustomSettings))
|
|
||||||
|
|
||||||
radioRecommendSettings.addToRadioGroup(radioCustomSettings)
|
|
||||||
radioCustomSettings.addToRadioGroup(radioRecommendSettings)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
setupPreferences()
|
setupPreferences()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun setupPreferences() {
|
||||||
|
|
||||||
|
bindRadioRecommendedSettings()
|
||||||
|
|
||||||
|
bindRadioCustomSettings()
|
||||||
|
|
||||||
|
bindCategoryPhoneFeatures()
|
||||||
|
|
||||||
|
setupRadioGroups()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupRadioGroups() {
|
||||||
|
radioRecommendSettings.addToRadioGroup(radioCustomSettings)
|
||||||
|
radioCustomSettings.addToRadioGroup(radioRecommendSettings)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun bindRadioCustomSettings() {
|
||||||
|
val keyCustomSettings = getString(R.string.pref_key_custom_settings)
|
||||||
|
radioCustomSettings = requireNotNull(findPreference(keyCustomSettings))
|
||||||
|
|
||||||
|
radioCustomSettings.onClickListener {
|
||||||
|
toggleCategoryPhoneFeatureVisibility()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun bindRadioRecommendedSettings() {
|
||||||
|
val keyRecommendSettings = getString(R.string.pref_key_recommended_settings)
|
||||||
|
radioRecommendSettings = requireNotNull(findPreference(keyRecommendSettings))
|
||||||
|
|
||||||
|
radioRecommendSettings.onClickListener {
|
||||||
|
toggleCategoryPhoneFeatureVisibility()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun bindCategoryPhoneFeatures() {
|
||||||
|
val keyCategoryPhoneFeatures = getString(R.string.pref_key_category_phone_feature)
|
||||||
|
|
||||||
|
categoryPhoneFeatures = requireNotNull(findPreference(keyCategoryPhoneFeatures))
|
||||||
|
|
||||||
|
val isCategoryActivate = defaultSharedPreferences.getBoolean(radioCustomSettings.key, false)
|
||||||
|
if (isCategoryActivate) {
|
||||||
|
categoryPhoneFeatures.isVisible = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun toggleCategoryPhoneFeatureVisibility() {
|
||||||
|
categoryPhoneFeatures.isVisible = !categoryPhoneFeatures.isVisible
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- 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/. -->
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24.0"
|
||||||
|
android:viewportHeight="24.0">
|
||||||
|
<path
|
||||||
|
android:fillColor="?attr/iconColor"
|
||||||
|
android:pathData="M17,10.5V7c0,-0.55 -0.45,-1 -1,-1H4c-0.55,0 -1,0.45 -1,1v10c0,0.55 0.45,1 1,1h12c0.55,0 1,-0.45 1,-1v-3.5l4,4v-11l-4,4z"/>
|
||||||
|
</vector>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- 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/. -->
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24.0"
|
||||||
|
android:viewportHeight="24.0">
|
||||||
|
<path
|
||||||
|
android:fillColor="?attr/iconColor"
|
||||||
|
android:pathData="M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13c0,-3.87 -3.13,-7 -7,-7zM12,11.5c-1.38,0 -2.5,-1.12 -2.5,-2.5s1.12,-2.5 2.5,-2.5 2.5,1.12 2.5,2.5 -1.12,2.5 -2.5,2.5z"/>
|
||||||
|
</vector>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- 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/. -->
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
<path
|
||||||
|
android:pathData="M17,11v-1c0,-0.552 0.448,-1 1,-1s1,0.448 1,1v1c0,3.526 -2.608,6.444 -6,6.93L13,21c0,0.552 -0.448,1 -1,1s-1,-0.448 -1,-1v-3.07c-3.392,-0.486 -6,-3.404 -6,-6.93v-1c0,-0.552 0.448,-1 1,-1s1,0.448 1,1v1c0,2.761 2.239,5 5,5s5,-2.239 5,-5zM12,2c1.657,0 3,1.343 3,3v6c0,1.657 -1.343,3 -3,3s-3,-1.343 -3,-3L9,5c0,-1.657 1.343,-3 3,-3z"
|
||||||
|
android:fillColor="?attr/iconColor"/>
|
||||||
|
</vector>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- 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/. -->
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24.0"
|
||||||
|
android:viewportHeight="24.0">
|
||||||
|
<path
|
||||||
|
android:fillColor="?attr/iconColor"
|
||||||
|
android:pathData="M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z"/>
|
||||||
|
</vector>
|
|
@ -43,5 +43,10 @@
|
||||||
<string name="pref_key_show_site_exceptions" translatable="false">pref_key_show_site_exceptions</string>
|
<string name="pref_key_show_site_exceptions" translatable="false">pref_key_show_site_exceptions</string>
|
||||||
<string name="pref_key_recommended_settings" translatable="false">pref_key_recommended_settings</string>
|
<string name="pref_key_recommended_settings" translatable="false">pref_key_recommended_settings</string>
|
||||||
<string name="pref_key_custom_settings" translatable="false">pref_key_custom_settings</string>
|
<string name="pref_key_custom_settings" translatable="false">pref_key_custom_settings</string>
|
||||||
|
<string name="pref_key_phone_feature_camera" translatable="false">pref_key_phone_feature_camera</string>
|
||||||
|
<string name="pref_key_phone_feature_location" translatable="false">pref_key_phone_feature_location</string>
|
||||||
|
<string name="pref_key_phone_feature_microphone" translatable="false">pref_key_phone_feature_microphone</string>
|
||||||
|
<string name="pref_key_phone_feature_notification" translatable="false">pref_key_phone_feature_notification</string>
|
||||||
|
<string name="pref_key_category_phone_feature" translatable="false">pref_key_category_phone_feature</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -137,6 +137,18 @@
|
||||||
<string name="preference_recommended_settings_summary"><b>Blocked</b>\n Ads, autoplay sound and video (block playing media with sound), cookies (block third-party trackers cookies), trackers (allow some trackers), pop-up, website redirects. \n\n <b>Ask to allow</b> \n Camera, location, microphone and notification. \n\n <b>Allowed</b> \n DRM audio and video, JavaScript, cache and site data, images.</string>
|
<string name="preference_recommended_settings_summary"><b>Blocked</b>\n Ads, autoplay sound and video (block playing media with sound), cookies (block third-party trackers cookies), trackers (allow some trackers), pop-up, website redirects. \n\n <b>Ask to allow</b> \n Camera, location, microphone and notification. \n\n <b>Allowed</b> \n DRM audio and video, JavaScript, cache and site data, images.</string>
|
||||||
<!-- Preference for applying custom rules to all sites -->
|
<!-- Preference for applying custom rules to all sites -->
|
||||||
<string name="preference_custom_settings">Use custom settings</string>
|
<string name="preference_custom_settings">Use custom settings</string>
|
||||||
|
<!-- Preference category for feature phone permissions likes Camera,Microphone, Location ... etc -->
|
||||||
|
<string name="preference_category_phone_feature">Phone Feature</string>
|
||||||
|
<!-- Preference for altering the camera access for all websites -->
|
||||||
|
<string name="preference_phone_feature_camera">Camera</string>
|
||||||
|
<!-- Preference for altering the microphone access for all websites -->
|
||||||
|
<string name="preference_phone_feature_microphone">Microphone</string>
|
||||||
|
<!-- Preference for altering the location access for all websites -->
|
||||||
|
<string name="preference_phone_feature_location">Location</string>
|
||||||
|
<!-- Preference for altering the notification access for all websites -->
|
||||||
|
<string name="preference_phone_feature_notification">Notification</string>
|
||||||
|
<!-- Preference option for altering the notification access for all websites -->
|
||||||
|
<string name="preference_option_phone_feature_ask_to_allow">Ask to allow</string>
|
||||||
|
|
||||||
<!-- Account Preferences -->
|
<!-- Account Preferences -->
|
||||||
<!-- Preference for triggering sync -->
|
<!-- Preference for triggering sync -->
|
||||||
|
|
|
@ -28,4 +28,36 @@
|
||||||
android:title="@string/preference_custom_settings"
|
android:title="@string/preference_custom_settings"
|
||||||
android:defaultValue="false"/>
|
android:defaultValue="false"/>
|
||||||
|
|
||||||
|
<androidx.preference.PreferenceCategory
|
||||||
|
android:key="@string/pref_key_category_phone_feature"
|
||||||
|
android:title="@string/preference_category_phone_feature"
|
||||||
|
app:iconSpaceReserved="false"
|
||||||
|
app:isPreferenceVisible="false">
|
||||||
|
|
||||||
|
<androidx.preference.Preference
|
||||||
|
android:icon="@drawable/ic_camera"
|
||||||
|
android:key="@string/pref_key_phone_feature_camera"
|
||||||
|
android:title="@string/preference_phone_feature_camera"
|
||||||
|
android:summary="@string/preference_option_phone_feature_ask_to_allow"/>
|
||||||
|
|
||||||
|
<androidx.preference.Preference
|
||||||
|
android:icon="@drawable/ic_location"
|
||||||
|
android:key="@string/pref_key_phone_feature_location"
|
||||||
|
android:title="@string/preference_phone_feature_location"
|
||||||
|
android:summary="@string/preference_option_phone_feature_ask_to_allow"/>
|
||||||
|
|
||||||
|
<androidx.preference.Preference
|
||||||
|
android:icon="@drawable/ic_microphone"
|
||||||
|
android:key="@string/pref_key_phone_feature_microphone"
|
||||||
|
android:title="@string/preference_phone_feature_microphone"
|
||||||
|
android:summary="@string/preference_option_phone_feature_ask_to_allow"/>
|
||||||
|
|
||||||
|
<androidx.preference.Preference
|
||||||
|
android:icon="@drawable/ic_notification"
|
||||||
|
android:key="@string/pref_key_phone_feature_microphone"
|
||||||
|
android:title="@string/preference_phone_feature_microphone"
|
||||||
|
android:summary="@string/preference_option_phone_feature_ask_to_allow"/>
|
||||||
|
|
||||||
|
</androidx.preference.PreferenceCategory>
|
||||||
|
|
||||||
</androidx.preference.PreferenceScreen>
|
</androidx.preference.PreferenceScreen>
|
Loading…
Reference in New Issue