diff options
3 files changed, 23 insertions, 14 deletions
diff --git a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt index 4964bbfefe07..13541b1ebc9a 100644 --- a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt +++ b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt @@ -56,6 +56,8 @@ import com.android.settingslib.metadata.PreferenceScreenRegistry import com.android.settingslib.metadata.PreferenceSummaryProvider import com.android.settingslib.metadata.PreferenceTitleProvider import com.android.settingslib.metadata.ReadWritePermit +import com.android.settingslib.metadata.SensitivityLevel.Companion.HIGH_SENSITIVITY +import com.android.settingslib.metadata.SensitivityLevel.Companion.UNKNOWN_SENSITIVITY import com.android.settingslib.preference.PreferenceScreenFactory import com.android.settingslib.preference.PreferenceScreenProvider import java.util.Locale @@ -421,7 +423,7 @@ fun PreferenceMetadata.toProto( metadata.getWritePermissions(context)?.let { if (it.size > 0) writePermissions = it.toProto() } val readPermit = metadata.evalReadPermit(context, callingPid, callingUid) val writePermit = - metadata.getWritePermit(context, callingPid, callingUid) ?: ReadWritePermit.ALLOW + metadata.evalWritePermit(context, callingPid, callingUid) ?: ReadWritePermit.ALLOW readWritePermit = ReadWritePermit.make(readPermit, writePermit) if ( flags.includeValue() && @@ -472,6 +474,20 @@ fun <T> PersistentPreference<T>.evalReadPermit( else -> getReadPermit(context, callingPid, callingUid) } +/** Evaluates the write permit of a persistent preference. */ +fun <T> PersistentPreference<T>.evalWritePermit( + context: Context, + callingPid: Int, + callingUid: Int, +): Int? = + when { + sensitivityLevel == UNKNOWN_SENSITIVITY || sensitivityLevel == HIGH_SENSITIVITY -> + ReadWritePermit.DISALLOW + getWritePermissions(context)?.check(context, callingPid, callingUid) == false -> + ReadWritePermit.REQUIRE_APP_PERMISSION + else -> getWritePermit(context, callingPid, callingUid) + } + private fun PreferenceMetadata.getTitleTextProto(context: Context, isRoot: Boolean): TextProto? { if (isRoot && this is PreferenceScreenMetadata) { val titleRes = screenTitle diff --git a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt index 35c4fce1c909..72f6934b5f35 100644 --- a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt +++ b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt @@ -36,8 +36,6 @@ import com.android.settingslib.metadata.PreferenceRemoteOpMetricsLogger import com.android.settingslib.metadata.PreferenceRestrictionProvider import com.android.settingslib.metadata.PreferenceScreenRegistry import com.android.settingslib.metadata.ReadWritePermit -import com.android.settingslib.metadata.SensitivityLevel.Companion.HIGH_SENSITIVITY -import com.android.settingslib.metadata.SensitivityLevel.Companion.UNKNOWN_SENSITIVITY /** Request to set preference value. */ class PreferenceSetterRequest( @@ -223,15 +221,8 @@ fun <T> PersistentPreference<T>.evalWritePermit( callingPid: Int, callingUid: Int, ): Int = - when { - sensitivityLevel == UNKNOWN_SENSITIVITY || sensitivityLevel == HIGH_SENSITIVITY -> - ReadWritePermit.DISALLOW - getWritePermissions(context)?.check(context, callingPid, callingUid) == false -> - ReadWritePermit.REQUIRE_APP_PERMISSION - else -> - getWritePermit(context, callingPid, callingUid) - ?: getWritePermit(context, value, callingPid, callingUid) - } + evalWritePermit(context, callingPid, callingUid) + ?: getWritePermit(context, value, callingPid, callingUid) /** Message codec for [PreferenceSetterRequest]. */ object PreferenceSetterRequestCodec : MessageCodec<PreferenceSetterRequest> { diff --git a/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PersistentPreference.kt b/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PersistentPreference.kt index 520425607e1f..c723dce82b5a 100644 --- a/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PersistentPreference.kt +++ b/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PersistentPreference.kt @@ -128,7 +128,8 @@ interface PersistentPreference<T> : PreferenceMetadata { /** * Returns if the external application (identified by [callingPid] and [callingUid]) is - * permitted to write preference value. + * permitted to write preference value. If the write permit depends on certain value, implement + * the overloading [getWritePermit] instead. * * The underlying implementation does NOT need to check common states like isEnabled, * isRestricted, isAvailable or permissions in [getWritePermissions]. The framework will do it @@ -139,7 +140,8 @@ interface PersistentPreference<T> : PreferenceMetadata { /** * Returns if the external application (identified by [callingPid] and [callingUid]) is - * permitted to write preference with given [value]. + * permitted to write preference with given [value]. Note that if the overloading + * [getWritePermit] returns non null value, this method will be ignored! * * The underlying implementation does NOT need to check common states like isEnabled, * isRestricted, isAvailable or permissions in [getWritePermissions]. The framework will do it |