From de521192e0aff96d7bd471e09fc4f0b19945b687 Mon Sep 17 00:00:00 2001 From: Arturo Mejia Date: Mon, 5 Oct 2020 16:55:39 -0400 Subject: [PATCH] Add support for local storage permission --- .../org/mozilla/fenix/settings/Extensions.kt | 2 + .../mozilla/fenix/settings/PhoneFeature.kt | 5 +- .../quicksettings/WebsitePermissionsView.kt | 3 +- ...itePermissionsDetailsExceptionsFragment.kt | 6 +- .../java/org/mozilla/fenix/utils/Settings.kt | 3 +- app/src/main/res/drawable/ic_storage.xml | 13 ++++ .../res/layout/quicksettings_permissions.xml | 66 +++++++++++++------ app/src/main/res/values/preference_keys.xml | 1 + app/src/main/res/values/strings.xml | 2 + ...issions_details_exceptions_preferences.xml | 6 ++ .../res/xml/site_permissions_preferences.xml | 7 ++ 11 files changed, 87 insertions(+), 27 deletions(-) create mode 100644 app/src/main/res/drawable/ic_storage.xml diff --git a/app/src/main/java/org/mozilla/fenix/settings/Extensions.kt b/app/src/main/java/org/mozilla/fenix/settings/Extensions.kt index 24b6670e8..b26446185 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/Extensions.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/Extensions.kt @@ -25,6 +25,7 @@ fun SitePermissions.get(field: PhoneFeature) = when (field) { PhoneFeature.NOTIFICATION -> notification PhoneFeature.AUTOPLAY_AUDIBLE -> autoplayAudible PhoneFeature.AUTOPLAY_INAUDIBLE -> autoplayInaudible + PhoneFeature.PERSISTENT_STORAGE -> localStorage } fun SitePermissions.update(field: PhoneFeature, value: SitePermissions.Status) = when (field) { @@ -34,6 +35,7 @@ fun SitePermissions.update(field: PhoneFeature, value: SitePermissions.Status) = PhoneFeature.NOTIFICATION -> copy(notification = value) PhoneFeature.AUTOPLAY_AUDIBLE -> copy(autoplayAudible = value) PhoneFeature.AUTOPLAY_INAUDIBLE -> copy(autoplayInaudible = value) + PhoneFeature.PERSISTENT_STORAGE -> copy(localStorage = value) } /** diff --git a/app/src/main/java/org/mozilla/fenix/settings/PhoneFeature.kt b/app/src/main/java/org/mozilla/fenix/settings/PhoneFeature.kt index 6031fc151..31ca24ecb 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/PhoneFeature.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/PhoneFeature.kt @@ -30,7 +30,8 @@ enum class PhoneFeature(val androidPermissionsList: Array) : Parcelable MICROPHONE(arrayOf(RECORD_AUDIO)), NOTIFICATION(emptyArray()), AUTOPLAY_AUDIBLE(emptyArray()), - AUTOPLAY_INAUDIBLE(emptyArray()); + AUTOPLAY_INAUDIBLE(emptyArray()), + PERSISTENT_STORAGE(emptyArray()); fun isAndroidPermissionGranted(context: Context): Boolean { return context.isPermissionGranted(androidPermissionsList.asIterable()) @@ -78,6 +79,7 @@ enum class PhoneFeature(val androidPermissionsList: Array) : Parcelable LOCATION -> context.getString(R.string.preference_phone_feature_location) MICROPHONE -> context.getString(R.string.preference_phone_feature_microphone) NOTIFICATION -> context.getString(R.string.preference_phone_feature_notification) + PERSISTENT_STORAGE -> context.getString(R.string.preference_phone_feature_persistent_storage) AUTOPLAY_AUDIBLE, AUTOPLAY_INAUDIBLE -> context.getString(R.string.preference_browser_feature_autoplay) } } @@ -95,6 +97,7 @@ enum class PhoneFeature(val androidPermissionsList: Array) : Parcelable NOTIFICATION -> R.string.pref_key_phone_feature_notification AUTOPLAY_AUDIBLE -> R.string.pref_key_browser_feature_autoplay_audible AUTOPLAY_INAUDIBLE -> R.string.pref_key_browser_feature_autoplay_inaudible + PERSISTENT_STORAGE -> R.string.pref_key_browser_feature_persistent_storage } } diff --git a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsitePermissionsView.kt b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsitePermissionsView.kt index 15a254de2..912ccb273 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsitePermissionsView.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsitePermissionsView.kt @@ -56,7 +56,8 @@ class WebsitePermissionsView( PhoneFeature.CAMERA to PermissionViewHolder(view.cameraLabel, view.cameraStatus), PhoneFeature.LOCATION to PermissionViewHolder(view.locationLabel, view.locationStatus), PhoneFeature.MICROPHONE to PermissionViewHolder(view.microphoneLabel, view.microphoneStatus), - PhoneFeature.NOTIFICATION to PermissionViewHolder(view.notificationLabel, view.notificationStatus) + PhoneFeature.NOTIFICATION to PermissionViewHolder(view.notificationLabel, view.notificationStatus), + PhoneFeature.PERSISTENT_STORAGE to PermissionViewHolder(view.persistentStorageLabel, view.persistentStorageStatus) )) /** diff --git a/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsDetailsExceptionsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsDetailsExceptionsFragment.kt index 8e68407b2..013224ec4 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsDetailsExceptionsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsDetailsExceptionsFragment.kt @@ -21,10 +21,7 @@ import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.requireComponents import org.mozilla.fenix.ext.showToolbar import org.mozilla.fenix.settings.PhoneFeature -import org.mozilla.fenix.settings.PhoneFeature.CAMERA -import org.mozilla.fenix.settings.PhoneFeature.LOCATION -import org.mozilla.fenix.settings.PhoneFeature.MICROPHONE -import org.mozilla.fenix.settings.PhoneFeature.NOTIFICATION +import org.mozilla.fenix.settings.PhoneFeature.* import org.mozilla.fenix.settings.requirePreference class SitePermissionsDetailsExceptionsFragment : PreferenceFragmentCompat() { @@ -57,6 +54,7 @@ class SitePermissionsDetailsExceptionsFragment : PreferenceFragmentCompat() { initPhoneFeature(LOCATION) initPhoneFeature(MICROPHONE) initPhoneFeature(NOTIFICATION) + initPhoneFeature(PERSISTENT_STORAGE) bindClearPermissionsButton() } diff --git a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt index 2f2267786..c2e5ce617 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -774,7 +774,8 @@ class Settings(private val appContext: Context) : PreferencesHolder { location = getSitePermissionsPhoneFeatureAction(PhoneFeature.LOCATION), camera = getSitePermissionsPhoneFeatureAction(PhoneFeature.CAMERA), autoplayAudible = getSitePermissionsPhoneFeatureAutoplayAction(PhoneFeature.AUTOPLAY_AUDIBLE), - autoplayInaudible = getSitePermissionsPhoneFeatureAutoplayAction(PhoneFeature.AUTOPLAY_INAUDIBLE) + autoplayInaudible = getSitePermissionsPhoneFeatureAutoplayAction(PhoneFeature.AUTOPLAY_INAUDIBLE), + persistentStorage = getSitePermissionsPhoneFeatureAction(PhoneFeature.PERSISTENT_STORAGE) ) } diff --git a/app/src/main/res/drawable/ic_storage.xml b/app/src/main/res/drawable/ic_storage.xml new file mode 100644 index 000000000..1934381e9 --- /dev/null +++ b/app/src/main/res/drawable/ic_storage.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/layout/quicksettings_permissions.xml b/app/src/main/res/layout/quicksettings_permissions.xml index 066c561ff..1acf68362 100644 --- a/app/src/main/res/layout/quicksettings_permissions.xml +++ b/app/src/main/res/layout/quicksettings_permissions.xml @@ -12,6 +12,19 @@ android:layout_height="wrap_content" android:layout_marginBottom="8dp"> + + @@ -50,15 +63,15 @@ tools:visibility="visible" /> @@ -75,15 +88,15 @@ tools:visibility="visible" /> @@ -93,22 +106,35 @@ android:layout_width="wrap_content" android:layout_height="@dimen/quicksettings_item_height" android:visibility="gone" - app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintBottom_toTopOf="@id/persistentStorageStatus" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/locationLabel" tools:text="@string/preference_option_phone_feature_blocked" tools:visibility="visible" /> + + + diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index e6bc0618a..0f680e5b5 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -110,6 +110,7 @@ pref_key_custom_settings pref_key_browser_feature_autoplay pref_key_browser_feature_autoplay_inaudible + pref_key_browser_feature_persistent_storage pref_key_phone_feature_camera pref_key_phone_feature_location pref_key_phone_feature_microphone diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a10bfe6e7..4d867d3cf 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -792,6 +792,8 @@ Location Notification + + Persistent Storage Ask to allow diff --git a/app/src/main/res/xml/site_permissions_details_exceptions_preferences.xml b/app/src/main/res/xml/site_permissions_details_exceptions_preferences.xml index 7d76b2cb8..ee2767fd5 100644 --- a/app/src/main/res/xml/site_permissions_details_exceptions_preferences.xml +++ b/app/src/main/res/xml/site_permissions_details_exceptions_preferences.xml @@ -28,6 +28,12 @@ android:title="@string/preference_phone_feature_notification" android:summary="@string/preference_option_phone_feature_ask_to_allow"/> + + diff --git a/app/src/main/res/xml/site_permissions_preferences.xml b/app/src/main/res/xml/site_permissions_preferences.xml index d91fb3bd7..85e822944 100644 --- a/app/src/main/res/xml/site_permissions_preferences.xml +++ b/app/src/main/res/xml/site_permissions_preferences.xml @@ -36,6 +36,13 @@ android:summary="@string/preference_option_phone_feature_ask_to_allow" app:allowDividerBelow="true"/> + +