summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jacky Wang <jiannan@google.com> 2024-12-20 11:13:50 +0800
committer Jacky Wang <jiannan@google.com> 2024-12-20 13:39:09 +0800
commit02a3ca083b67f13f21fed57ea0de7135d3496599 (patch)
tree1a2550249e7d9053ce86387b739ad96f1203962f
parentc3de397d79c602660411fdb8963746b06cc094bf (diff)
[Catalyst] Use Permissions for getRead/WritePermissions
Bug: 374115149 Flag: EXEMPT library Test: manual Change-Id: I705b0f3e59880ed06e67f2fad0cac2d796b4d4df
-rw-r--r--packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/SettingsGlobalStore.kt4
-rw-r--r--packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/SettingsSecureStore.kt4
-rw-r--r--packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/SettingsSystemStore.kt4
-rw-r--r--packages/SettingsLib/Graph/graph.proto4
-rw-r--r--packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt23
-rw-r--r--packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt13
-rw-r--r--packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PersistentPreference.kt5
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