From 34c0a17b4d2fbed0fbb39513297eb941d4a1bdc1 Mon Sep 17 00:00:00 2001 From: Mugurell Date: Tue, 14 Dec 2021 19:25:31 +0200 Subject: [PATCH] For #22852 - Add a new "Storage access" permission --- .../org/mozilla/fenix/settings/Extensions.kt | 2 ++ .../mozilla/fenix/settings/PhoneFeature.kt | 6 +++- .../quicksettings/WebsitePermissionsView.kt | 5 ++++ ...itePermissionsDetailsExceptionsFragment.kt | 2 ++ .../java/org/mozilla/fenix/utils/Settings.kt | 2 ++ app/src/main/res/drawable/ic_cookies.xml | 7 +++++ .../main/res/drawable/ic_cookies_disabled.xml | 15 ++++++++++ .../main/res/drawable/ic_cookies_enabled.xml | 15 ++++++++++ .../res/layout/quicksettings_permissions.xml | 30 +++++++++++++++++-- app/src/main/res/values/preference_keys.xml | 1 + app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/values/styles.xml | 1 + ...issions_details_exceptions_preferences.xml | 6 ++++ .../res/xml/site_permissions_preferences.xml | 7 +++++ .../quicksettings/AutoplayValueTest.kt | 6 +++- .../QuickSettingsFragmentReducerTest.kt | 1 + .../QuickSettingsFragmentStoreTest.kt | 5 +++- ...anageExceptionsPhoneFeatureFragmentTest.kt | 9 +++++- .../org/mozilla/fenix/utils/SettingsTest.kt | 19 +++++++++++- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 20 files changed, 135 insertions(+), 8 deletions(-) create mode 100644 app/src/main/res/drawable/ic_cookies.xml create mode 100644 app/src/main/res/drawable/ic_cookies_disabled.xml create mode 100644 app/src/main/res/drawable/ic_cookies_enabled.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 bae8d6a1e..4bdcad56b 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/Extensions.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/Extensions.kt @@ -32,6 +32,7 @@ fun SitePermissions.get(field: PhoneFeature) = when (field) { PhoneFeature.AUTOPLAY_INAUDIBLE -> autoplayInaudible.toStatus() PhoneFeature.PERSISTENT_STORAGE -> localStorage PhoneFeature.MEDIA_KEY_SYSTEM_ACCESS -> mediaKeySystemAccess + PhoneFeature.CROSS_ORIGIN_STORAGE_ACCESS -> crossOriginStorageAccess } fun SitePermissions.update(field: PhoneFeature, value: SitePermissions.Status) = when (field) { @@ -47,6 +48,7 @@ fun SitePermissions.update(field: PhoneFeature, value: SitePermissions.Status) = PhoneFeature.AUTOPLAY_INAUDIBLE -> copy(autoplayInaudible = value.toAutoplayStatus()) PhoneFeature.PERSISTENT_STORAGE -> copy(localStorage = value) PhoneFeature.MEDIA_KEY_SYSTEM_ACCESS -> copy(mediaKeySystemAccess = value) + PhoneFeature.CROSS_ORIGIN_STORAGE_ACCESS -> copy(crossOriginStorageAccess = 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 c9b56ade3..e9c0ea8d6 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/PhoneFeature.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/PhoneFeature.kt @@ -33,7 +33,8 @@ enum class PhoneFeature(val androidPermissionsList: Array) : Parcelable AUTOPLAY_AUDIBLE(emptyArray()), AUTOPLAY_INAUDIBLE(emptyArray()), PERSISTENT_STORAGE(emptyArray()), - MEDIA_KEY_SYSTEM_ACCESS(emptyArray()); + MEDIA_KEY_SYSTEM_ACCESS(emptyArray()), + CROSS_ORIGIN_STORAGE_ACCESS(emptyArray()); fun isAndroidPermissionGranted(context: Context): Boolean { return context.isPermissionGranted(androidPermissionsList.asIterable()) @@ -82,6 +83,8 @@ enum class PhoneFeature(val androidPermissionsList: Array) : Parcelable 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) + CROSS_ORIGIN_STORAGE_ACCESS -> + context.getString(R.string.preference_phone_feature_cross_origin_storage_access) MEDIA_KEY_SYSTEM_ACCESS -> context.getString(R.string.preference_phone_feature_media_key_system_access) AUTOPLAY, AUTOPLAY_AUDIBLE, AUTOPLAY_INAUDIBLE -> context.getString(R.string.preference_browser_feature_autoplay) @@ -103,6 +106,7 @@ enum class PhoneFeature(val androidPermissionsList: Array) : Parcelable AUTOPLAY_AUDIBLE -> R.string.pref_key_browser_feature_autoplay_audible_v2 AUTOPLAY_INAUDIBLE -> R.string.pref_key_browser_feature_autoplay_inaudible_v2 PERSISTENT_STORAGE -> R.string.pref_key_browser_feature_persistent_storage + CROSS_ORIGIN_STORAGE_ACCESS -> R.string.pref_key_browser_feature_cross_origin_storage_access MEDIA_KEY_SYSTEM_ACCESS -> R.string.pref_key_browser_feature_media_key_system_access } } 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 c49eace32..00009c036 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 @@ -24,6 +24,7 @@ import org.mozilla.fenix.settings.PhoneFeature.LOCATION import org.mozilla.fenix.settings.PhoneFeature.NOTIFICATION import org.mozilla.fenix.settings.PhoneFeature.PERSISTENT_STORAGE import org.mozilla.fenix.settings.PhoneFeature.MEDIA_KEY_SYSTEM_ACCESS +import org.mozilla.fenix.settings.PhoneFeature.CROSS_ORIGIN_STORAGE_ACCESS import org.mozilla.fenix.settings.quicksettings.WebsitePermissionsView.PermissionViewHolder.SpinnerPermission import org.mozilla.fenix.settings.quicksettings.WebsitePermissionsView.PermissionViewHolder.ToggleablePermission import java.util.EnumMap @@ -89,6 +90,10 @@ class WebsitePermissionsView( binding.persistentStorageLabel, binding.persistentStorageStatus ), + CROSS_ORIGIN_STORAGE_ACCESS to ToggleablePermission( + binding.crossOriginStorageAccessLabel, + binding.crossOriginStorageAccessStatus + ), MEDIA_KEY_SYSTEM_ACCESS to ToggleablePermission( binding.mediaKeySystemAccessLabel, binding.mediaKeySystemAccessStatus 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 9ee515216..ca9b2d57c 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 @@ -32,6 +32,7 @@ import org.mozilla.fenix.settings.PhoneFeature.NOTIFICATION import org.mozilla.fenix.settings.PhoneFeature.PERSISTENT_STORAGE import org.mozilla.fenix.settings.PhoneFeature.MEDIA_KEY_SYSTEM_ACCESS import org.mozilla.fenix.settings.PhoneFeature.AUTOPLAY +import org.mozilla.fenix.settings.PhoneFeature.CROSS_ORIGIN_STORAGE_ACCESS import org.mozilla.fenix.settings.quicksettings.AutoplayValue import org.mozilla.fenix.settings.requirePreference import org.mozilla.fenix.utils.Settings @@ -70,6 +71,7 @@ class SitePermissionsDetailsExceptionsFragment : PreferenceFragmentCompat() { initPhoneFeature(MICROPHONE) initPhoneFeature(NOTIFICATION) initPhoneFeature(PERSISTENT_STORAGE) + initPhoneFeature(CROSS_ORIGIN_STORAGE_ACCESS) initPhoneFeature(MEDIA_KEY_SYSTEM_ACCESS) initAutoplayFeature() 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 a2cb60fb7..757889b8e 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -940,6 +940,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { default = AutoplayAction.ALLOWED ), persistentStorage = getSitePermissionsPhoneFeatureAction(PhoneFeature.PERSISTENT_STORAGE), + crossOriginStorageAccess = getSitePermissionsPhoneFeatureAction(PhoneFeature.CROSS_ORIGIN_STORAGE_ACCESS), mediaKeySystemAccess = getSitePermissionsPhoneFeatureAction(PhoneFeature.MEDIA_KEY_SYSTEM_ACCESS) ) } @@ -953,6 +954,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { PhoneFeature.AUTOPLAY_AUDIBLE, PhoneFeature.AUTOPLAY_INAUDIBLE, PhoneFeature.PERSISTENT_STORAGE, + PhoneFeature.CROSS_ORIGIN_STORAGE_ACCESS, PhoneFeature.MEDIA_KEY_SYSTEM_ACCESS ).map { it.getPreferenceKey(appContext) } diff --git a/app/src/main/res/drawable/ic_cookies.xml b/app/src/main/res/drawable/ic_cookies.xml new file mode 100644 index 000000000..3423d5453 --- /dev/null +++ b/app/src/main/res/drawable/ic_cookies.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_cookies_disabled.xml b/app/src/main/res/drawable/ic_cookies_disabled.xml new file mode 100644 index 000000000..168157b4f --- /dev/null +++ b/app/src/main/res/drawable/ic_cookies_disabled.xml @@ -0,0 +1,15 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_cookies_enabled.xml b/app/src/main/res/drawable/ic_cookies_enabled.xml new file mode 100644 index 000000000..739438476 --- /dev/null +++ b/app/src/main/res/drawable/ic_cookies_enabled.xml @@ -0,0 +1,15 @@ + + + + + + diff --git a/app/src/main/res/layout/quicksettings_permissions.xml b/app/src/main/res/layout/quicksettings_permissions.xml index 1fdcac2f3..2b11f4951 100644 --- a/app/src/main/res/layout/quicksettings_permissions.xml +++ b/app/src/main/res/layout/quicksettings_permissions.xml @@ -124,7 +124,7 @@ app:drawableStartCompat="@drawable/ic_storage" android:text="@string/preference_phone_feature_persistent_storage" android:visibility="gone" - app:layout_constraintBottom_toTopOf="@id/mediaKeySystemAccessLabel" + app:layout_constraintBottom_toTopOf="@id/crossOriginStorageAccessLabel" app:layout_constraintEnd_toStartOf="@id/persistentStorageStatus" app:layout_constraintStart_toStartOf="parent" android:textColor="?primaryText" @@ -136,12 +136,38 @@ android:layout_width="wrap_content" android:layout_height="@dimen/quicksettings_item_height" android:visibility="gone" - app:layout_constraintBottom_toTopOf="@id/mediaKeySystemAccessStatus" + app:layout_constraintBottom_toTopOf="@id/crossOriginStorageAccessStatus" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/persistentStorageLabel" tools:text="@string/preference_option_phone_feature_blocked" tools:visibility="visible" /> + + + + pref_key_browser_feature_autoplay_v2 pref_key_browser_feature_autoplay_inaudible_v2 pref_key_browser_feature_persistent_storage + pref_key_browser_feature_cross_origin_storage_access pref_key_browser_feature_media_key_system_access pref_key_phone_feature_camera pref_key_phone_feature_location diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 26050ca9b..8232fe87b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -993,6 +993,8 @@ Notification Persistent Storage + + Cross-site cookies DRM-controlled content diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 54edab80a..5158fe7ad 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -22,6 +22,7 @@ false false @style/BottomSheet + @color/fx_mobile_text_color_action @color/destructive_normal_theme 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 69b25a706..6bb8cfbbe 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 @@ -34,6 +34,12 @@ android:title="@string/preference_phone_feature_persistent_storage" android:summary="@string/preference_option_phone_feature_ask_to_allow"/> + + + +