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

Commit 637a57d6 authored by Nate Myren's avatar Nate Myren Committed by Android (Google) Code Review
Browse files

Merge "Add xml pregrants for appfunction access" into main

parents 3ee84533 5186dea4
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -57,4 +57,7 @@ public interface AppFunctionAccessServiceInterface {
    /** @see AppFunctionManager#getValidTargets(String) () */
    @NonNull
    List<String> getValidTargets(int userId);

    /** Should be called whenever a user starts */
    void onUserStarting(int userId);
}
+5 −0
Original line number Diff line number Diff line
@@ -96,4 +96,9 @@ public class AppFunctionManagerService extends SystemService {
    public void onUserStopping(@NonNull TargetUser user) {
        mServiceImpl.onUserStopping(user);
    }

    @Override
    public void onUserStarting(@NonNull TargetUser user) {
        mServiceImpl.onUserStarting(user);
    }
}
+5 −0
Original line number Diff line number Diff line
@@ -259,6 +259,11 @@ public class AppFunctionManagerServiceImpl extends IAppFunctionManager.Stub {
        }
    }

    /** Called when a the user is starting. */
    public void onUserStarting(@NonNull TargetUser user) {
        mAppFunctionAccessService.onUserStarting(user.getUserIdentifier());
    }

    /** Called when the user is stopping. */
    public void onUserStopping(@NonNull TargetUser user) {
        Objects.requireNonNull(user);
+22 −0
Original line number Diff line number Diff line
@@ -345,6 +345,7 @@ private constructor(
                            TAG_PACKAGE_VERSIONS -> parsePackageVersions(state, userId)
                            TAG_DEFAULT_PERMISSION_GRANT ->
                                parseDefaultPermissionGrant(state, userId)
                            TAG_APP_FUNCTION_PREGRANT -> parseAppFunctionPregrant(state, userId)
                            else -> {
                                forEachSchemePolicy { with(it) { parseUserState(state, userId) } }
                            }
@@ -396,12 +397,24 @@ private constructor(
        userState.setDefaultPermissionGrantFingerprint(fingerprint)
    }

    private fun BinaryXmlPullParser.parseAppFunctionPregrant(
        state: MutableAccessState,
        userId: Int,
    ) {
        val userState = state.mutateUserState(userId, WriteMode.NONE)!!
        val fingerprint = getAttributeValueOrThrow(ATTR_FINGERPRINT).intern()
        userState.appFunctionAccessPregrantFingerprint = fingerprint
    }

    fun BinaryXmlSerializer.serializeUserState(state: AccessState, userId: Int) {
        tag(TAG_ACCESS) {
            serializePackageVersions(state.userStates[userId]!!.packageVersions)
            serializeDefaultPermissionGrantFingerprint(
                state.userStates[userId]!!.defaultPermissionGrantFingerprint
            )
            serializeAppFunctionAccessPregrantFingerprint(
                state.userStates[userId]!!.appFunctionAccessPregrantFingerprint
            )
            forEachSchemePolicy { with(it) { serializeUserState(state, userId) } }
        }
    }
@@ -427,6 +440,14 @@ private constructor(
        }
    }

    private fun BinaryXmlSerializer.serializeAppFunctionAccessPregrantFingerprint(
        fingerprint: String?
    ) {
        if (fingerprint != null) {
            tag(TAG_APP_FUNCTION_PREGRANT) { attributeInterned(ATTR_FINGERPRINT, fingerprint) }
        }
    }

    private fun getSchemePolicy(subject: AccessUri, `object`: AccessUri): SchemePolicy =
        getSchemePolicy(subject.scheme, `object`.scheme)

@@ -443,6 +464,7 @@ private constructor(

        private const val TAG_ACCESS = "access"
        private const val TAG_DEFAULT_PERMISSION_GRANT = "default-permission-grant"
        private const val TAG_APP_FUNCTION_PREGRANT = "app-function-pregrant"
        private const val TAG_PACKAGE_VERSIONS = "package-versions"
        private const val TAG_PACKAGE = "package"

+7 −0
Original line number Diff line number Diff line
@@ -408,6 +408,7 @@ sealed class UserState(
    internal val packageAppOpModesReference: PackageAppOpModesReference,
    internal val appIdAppFunctionAccessFlagsReference: AppIdAppFunctionAccessFlagsReference,
    defaultPermissionGrantFingerprint: String?,
    appFunctionAccessPregrantFingerprint: String?,
    writeMode: Int,
) : WritableState, Immutable<MutableUserState> {
    val packageVersions: IndexedMap<String, Int>
@@ -431,6 +432,8 @@ sealed class UserState(
    var defaultPermissionGrantFingerprint: String? = defaultPermissionGrantFingerprint
        protected set

    var appFunctionAccessPregrantFingerprint: String? = appFunctionAccessPregrantFingerprint

    override var writeMode: Int = writeMode
        protected set

@@ -446,6 +449,7 @@ private constructor(
    packageAppOpModesReference: PackageAppOpModesReference,
    appIdAppFunctionAccessFlagsReference: AppIdAppFunctionAccessFlagsReference,
    defaultPermissionGrantFingerprint: String?,
    appFunctionAccessPregrantFingerprint: String?,
    writeMode: Int,
) :
    UserState(
@@ -456,6 +460,7 @@ private constructor(
        packageAppOpModesReference,
        appIdAppFunctionAccessFlagsReference,
        defaultPermissionGrantFingerprint,
        appFunctionAccessPregrantFingerprint,
        writeMode,
    ),
    MutableWritableState {
@@ -468,6 +473,7 @@ private constructor(
            PackageAppOpModesReference(MutablePackageAppOpModes()),
            AppIdAppFunctionAccessFlagsReference(MutableAppIdAppFunctionAccessFlags()),
            null,
            null,
            WriteMode.NONE,
        )

@@ -481,6 +487,7 @@ private constructor(
        userState.packageAppOpModesReference.toImmutable(),
        userState.appIdAppFunctionAccessFlagsReference.toImmutable(),
        userState.defaultPermissionGrantFingerprint,
        userState.appFunctionAccessPregrantFingerprint,
        WriteMode.NONE,
    )

Loading