Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6f953d37 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[Catalyst] Refine write permit code" into main

parents 6d2023df 9610d9de
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -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
+2 −11
Original line number Diff line number Diff line
@@ -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)
    evalWritePermit(context, callingPid, callingUid)
        ?: getWritePermit(context, value, callingPid, callingUid)
    }

/** Message codec for [PreferenceSetterRequest]. */
object PreferenceSetterRequestCodec : MessageCodec<PreferenceSetterRequest> {
+4 −2
Original line number Diff line number Diff line
@@ -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