From f4b0864e06cdce07a6f147f06646a40a0997dd7c Mon Sep 17 00:00:00 2001 From: Arturo Mejia Date: Thu, 21 Mar 2019 14:04:24 -0400 Subject: [PATCH] Closes #1074: Added recommended settings UI under site permissions. --- .../fenix/settings/RadioButtonPreference.kt | 88 +++++++++++++++++++ .../fenix/settings/SitePermissionsFragment.kt | 15 ++++ app/src/main/res/drawable/ic_energy.xml | 13 +++ app/src/main/res/drawable/ic_internet.xml | 13 +++ .../layout/preference_widget_radiobutton.xml | 59 +++++++++++++ app/src/main/res/values/dimens.xml | 4 + app/src/main/res/values/preference_keys.xml | 6 ++ app/src/main/res/values/strings.xml | 14 +++ .../res/xml/site_permissions_preferences.xml | 28 +++++- 9 files changed, 238 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/org/mozilla/fenix/settings/RadioButtonPreference.kt create mode 100644 app/src/main/res/drawable/ic_energy.xml create mode 100644 app/src/main/res/drawable/ic_internet.xml create mode 100644 app/src/main/res/layout/preference_widget_radiobutton.xml diff --git a/app/src/main/java/org/mozilla/fenix/settings/RadioButtonPreference.kt b/app/src/main/java/org/mozilla/fenix/settings/RadioButtonPreference.kt new file mode 100644 index 000000000..42982a37a --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/settings/RadioButtonPreference.kt @@ -0,0 +1,88 @@ +/* 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.view.View +import androidx.preference.PreferenceViewHolder +import android.widget.TextView +import android.content.Context +import android.text.TextUtils +import android.util.AttributeSet +import android.widget.RadioButton +import androidx.preference.Preference +import org.mozilla.fenix.R + +class RadioButtonPreference : Preference { + private val radioGroups = mutableListOf() + private lateinit var summaryView: TextView + private lateinit var radioButton: RadioButton + + init { + layoutResource = R.layout.preference_widget_radiobutton + } + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super( + context, + attrs, + defStyleAttr + ) + + fun addToRadioGroup(radioPreference: RadioButtonPreference) { + radioGroups.add(radioPreference) + } + + override fun onBindViewHolder(holder: PreferenceViewHolder) { + super.onBindViewHolder(holder) + + bindRadioButton(holder) + + bindTitle(holder) + + bindSummaryView(holder) + + setOnPreferenceClickListener { + updateRadioValue(true) + + toggleRadioGroups() + true + } + } + + private fun updateRadioValue(isChecked: Boolean) { + persistBoolean(isChecked) + radioButton.isChecked = isChecked + } + + private fun bindRadioButton(holder: PreferenceViewHolder) { + radioButton = holder.findViewById(R.id.radio_button) as RadioButton + radioButton.isChecked = getPersistedBoolean(false) + } + + private fun toggleRadioGroups() { + if (radioButton.isChecked) { + radioGroups.forEach { it.updateRadioValue(false) } + } + } + + private fun bindTitle(holder: PreferenceViewHolder) { + val titleView = holder.findViewById(R.id.title) as TextView + + if (!TextUtils.isEmpty(title)) { + titleView.text = title + } + } + + private fun bindSummaryView(holder: PreferenceViewHolder) { + summaryView = holder.findViewById(R.id.widget_summary) as TextView + if (!TextUtils.isEmpty(summary)) { + summaryView.text = summary + summaryView.visibility = View.VISIBLE + } else { + summaryView.visibility = View.GONE + } + } +} diff --git a/app/src/main/java/org/mozilla/fenix/settings/SitePermissionsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/SitePermissionsFragment.kt index 138b90ba5..28d58e973 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/SitePermissionsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/SitePermissionsFragment.kt @@ -20,4 +20,19 @@ class SitePermissionsFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { 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() { + super.onResume() + setupPreferences() + } } diff --git a/app/src/main/res/drawable/ic_energy.xml b/app/src/main/res/drawable/ic_energy.xml new file mode 100644 index 000000000..3069ecfc8 --- /dev/null +++ b/app/src/main/res/drawable/ic_energy.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_internet.xml b/app/src/main/res/drawable/ic_internet.xml new file mode 100644 index 000000000..b0c06c0be --- /dev/null +++ b/app/src/main/res/drawable/ic_internet.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/app/src/main/res/layout/preference_widget_radiobutton.xml b/app/src/main/res/layout/preference_widget_radiobutton.xml new file mode 100644 index 000000000..5ca88a7d3 --- /dev/null +++ b/app/src/main/res/layout/preference_widget_radiobutton.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 188cde6c0..132915b25 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -22,4 +22,8 @@ 32dp 16dp 12dp + 48dp + 16dp + 16dp + 12dp \ No newline at end of file diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index f1ca42d3b..45e2f5018 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -37,4 +37,10 @@ pref_key_show_search_suggestions pref_key_bounce_quick_action + + pref_key_optimize + pref_key_show_site_exceptions + pref_key_recommended_settings + pref_key_custom_settings + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 18ea1895c..5992e1f47 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -120,6 +120,20 @@ Account Settings + + + Optimize + + Lower image quality, throttle streaming bandwidth, and platform-level optimizations + + Exceptions + + Use recommended settings + + Blocked\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 Ask to allow \n Camera, location, microphone and notification. \n\n Allowed \n DRM audio and video, JavaScript, cache and site data, images. + + Use custom settings + Sync now diff --git a/app/src/main/res/xml/site_permissions_preferences.xml b/app/src/main/res/xml/site_permissions_preferences.xml index fab8cd571..6ecc38e90 100644 --- a/app/src/main/res/xml/site_permissions_preferences.xml +++ b/app/src/main/res/xml/site_permissions_preferences.xml @@ -2,6 +2,30 @@ + - - \ No newline at end of file + + + + + + + + + \ No newline at end of file