diff options
author | 2024-12-20 11:13:50 +0800 | |
---|---|---|
committer | 2024-12-20 13:39:09 +0800 | |
commit | 02a3ca083b67f13f21fed57ea0de7135d3496599 (patch) | |
tree | 1a2550249e7d9053ce86387b739ad96f1203962f | |
parent | c3de397d79c602660411fdb8963746b06cc094bf (diff) |
[Catalyst] Use Permissions for getRead/WritePermissions
Bug: 374115149
Flag: EXEMPT library
Test: manual
Change-Id: I705b0f3e59880ed06e67f2fad0cac2d796b4d4df
7 files changed, 27 insertions, 30 deletions
diff --git a/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/SettingsGlobalStore.kt b/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/SettingsGlobalStore.kt index 8335ee43df26..614bcb221780 100644 --- a/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/SettingsGlobalStore.kt +++ b/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/SettingsGlobalStore.kt @@ -85,9 +85,9 @@ class SettingsGlobalStore private constructor(contentResolver: ContentResolver) } /** Returns the required permissions to read [Global] settings. */ - fun getReadPermissions() = arrayOf<String>() + fun getReadPermissions() = Permissions.EMPTY /** Returns the required permissions to write [Global] settings. */ - fun getWritePermissions() = arrayOf(Manifest.permission.WRITE_SECURE_SETTINGS) + fun getWritePermissions() = Permissions.allOf(Manifest.permission.WRITE_SECURE_SETTINGS) } } diff --git a/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/SettingsSecureStore.kt b/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/SettingsSecureStore.kt index c117b926d1eb..2621de1fbcb8 100644 --- a/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/SettingsSecureStore.kt +++ b/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/SettingsSecureStore.kt @@ -85,9 +85,9 @@ class SettingsSecureStore private constructor(contentResolver: ContentResolver) } /** Returns the required permissions to read [Secure] settings. */ - fun getReadPermissions() = arrayOf<String>() + fun getReadPermissions() = Permissions.EMPTY /** Returns the required permissions to write [Secure] settings. */ - fun getWritePermissions() = arrayOf(Manifest.permission.WRITE_SECURE_SETTINGS) + fun getWritePermissions() = Permissions.allOf(Manifest.permission.WRITE_SECURE_SETTINGS) } } diff --git a/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/SettingsSystemStore.kt b/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/SettingsSystemStore.kt index f5a2f940bc03..740ac39ec2e9 100644 --- a/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/SettingsSystemStore.kt +++ b/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/SettingsSystemStore.kt @@ -85,9 +85,9 @@ class SettingsSystemStore private constructor(contentResolver: ContentResolver) } /** Returns the required permissions to read [System] settings. */ - fun getReadPermissions() = arrayOf<String>() + fun getReadPermissions() = Permissions.EMPTY /** Returns the required permissions to write [System] settings. */ - fun getWritePermissions() = arrayOf(Manifest.permission.WRITE_SETTINGS) + fun getWritePermissions() = Permissions.allOf(Manifest.permission.WRITE_SETTINGS) } } diff --git a/packages/SettingsLib/Graph/graph.proto b/packages/SettingsLib/Graph/graph.proto index 4fe35d8b6712..33a7df4c6ba8 100644 --- a/packages/SettingsLib/Graph/graph.proto +++ b/packages/SettingsLib/Graph/graph.proto @@ -82,9 +82,9 @@ message PreferenceProto { // Indicate how sensitive of the preference. optional int32 sensitivity_level = 16; // The required permissions to read preference value. - repeated string read_permissions = 17; + optional PermissionsProto read_permissions = 17; // The required permissions to write preference value. - repeated string write_permissions = 18; + optional PermissionsProto write_permissions = 18; // Target of an Intent message ActionTarget { 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 91dec03bf2af..2cf32decd5e2 100644 --- a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt +++ b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt @@ -22,7 +22,6 @@ import android.annotation.SuppressLint import android.content.Context import android.content.Intent import android.content.pm.PackageManager -import android.content.pm.PackageManager.PERMISSION_GRANTED import android.content.res.Configuration import android.os.Build import android.os.Bundle @@ -393,10 +392,12 @@ fun PreferenceMetadata.toProto( if (persistent) { if (metadata is PersistentPreference<*>) { sensitivityLevel = metadata.sensitivityLevel - val readPermissions = metadata.getReadPermissions(context) - readPermissions.forEach { addReadPermissions(it) } - val writePermissions = metadata.getWritePermissions(context) - writePermissions.forEach { addWritePermissions(it) } + metadata.getReadPermissions(context)?.let { + if (it.size > 0) readPermissions = it.toProto() + } + metadata.getWritePermissions(context)?.let { + if (it.size > 0) writePermissions = it.toProto() + } } if ( flags.includeValue() && @@ -439,14 +440,12 @@ fun <T> PersistentPreference<T>.evalReadPermit( context: Context, callingPid: Int, callingUid: Int, -): Int { - for (permission in getReadPermissions(context)) { - if (context.checkPermission(permission, callingPid, callingUid) != PERMISSION_GRANTED) { - return ReadWritePermit.REQUIRE_APP_PERMISSION - } +): Int = + when { + getReadPermissions(context)?.check(context, callingPid, callingUid) == false -> + ReadWritePermit.REQUIRE_APP_PERMISSION + else -> getReadPermit(context, callingPid, callingUid) } - return getReadPermit(context, callingPid, callingUid) -} private fun PreferenceMetadata.getTitleTextProto(context: Context, isRoot: Boolean): TextProto? { if (isRoot && this is PreferenceScreenMetadata) { 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 83c430488317..bef4bb297654 100644 --- a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt +++ b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt @@ -18,7 +18,6 @@ package com.android.settingslib.graph import android.app.Application import android.content.Context -import android.content.pm.PackageManager.PERMISSION_GRANTED import android.os.Bundle import androidx.annotation.IntDef import com.android.settingslib.graph.proto.PreferenceValueProto @@ -185,14 +184,12 @@ fun <T> PersistentPreference<T>.evalWritePermit( value: T?, callingPid: Int, callingUid: Int, -): Int { - for (permission in getWritePermissions(context)) { - if (context.checkPermission(permission, callingPid, callingUid) != PERMISSION_GRANTED) { - return ReadWritePermit.REQUIRE_APP_PERMISSION - } +): Int = + when { + getWritePermissions(context)?.check(context, callingPid, callingUid) == false -> + ReadWritePermit.REQUIRE_APP_PERMISSION + else -> getWritePermit(context, value, callingPid, callingUid) } - return 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 3dd6c47833fd..e5bf41f87999 100644 --- a/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PersistentPreference.kt +++ b/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PersistentPreference.kt @@ -20,6 +20,7 @@ import android.content.Context import androidx.annotation.ArrayRes import androidx.annotation.IntDef import com.android.settingslib.datastore.KeyValueStore +import com.android.settingslib.datastore.Permissions /** Permit of read and write request. */ @IntDef( @@ -69,7 +70,7 @@ interface PersistentPreference<T> { PreferenceScreenRegistry.getKeyValueStore(context, this as PreferenceMetadata)!! /** Returns the required permissions to read preference value. */ - fun getReadPermissions(context: Context): Array<String> = arrayOf() + fun getReadPermissions(context: Context): Permissions? = null /** * Returns if the external application (identified by [callingPid] and [callingUid]) is @@ -88,7 +89,7 @@ interface PersistentPreference<T> { ) /** Returns the required permissions to write preference value. */ - fun getWritePermissions(context: Context): Array<String> = arrayOf() + fun getWritePermissions(context: Context): Permissions? = null /** * Returns if the external application (identified by [callingPid] and [callingUid]) is |