Revert "Revert "Add testing shims to allow switching of app ops/..."

Revert submission 22262229-revert-21960657-TEBKYKOPLW

Reason for revert: Fixed parent CL

Reverted changes: /q/submissionid:22262229-revert-21960657-TEBKYKOPLW

Change-Id: I8421ad0e2daef59f81ea5b07e068dee954bd2670
This commit is contained in:
Evan Severson
2023-03-27 21:48:56 +00:00
parent 9453b603dd
commit 445cac77cb
3 changed files with 931 additions and 0 deletions

View File

@@ -0,0 +1,291 @@
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.server.appop;
import android.util.ArraySet;
import android.util.SparseBooleanArray;
import android.util.SparseIntArray;
import java.io.PrintWriter;
import java.util.Objects;
/**
* A testing shim, which supports running two variants of an AppOpsServiceInterface at once,
* and checking the results of both.
*/
public class AppOpsServiceTestingShim implements AppOpsCheckingServiceInterface {
private AppOpsCheckingServiceInterface mOldImplementation;
private AppOpsCheckingServiceInterface mNewImplementation;
public AppOpsServiceTestingShim(AppOpsCheckingServiceInterface oldValImpl,
AppOpsCheckingServiceInterface newImpl) {
mOldImplementation = oldValImpl;
mNewImplementation = newImpl;
}
private void signalImplDifference(String message) {
//TODO b/252886104 implement
}
@Override
public void writeState() {
mOldImplementation.writeState();
mNewImplementation.writeState();
}
@Override
public void readState() {
mOldImplementation.readState();
mNewImplementation.readState();
}
@Override
public void shutdown() {
mOldImplementation.shutdown();
mNewImplementation.shutdown();
}
@Override
public void systemReady() {
mOldImplementation.systemReady();
mNewImplementation.systemReady();
}
@Override
public SparseIntArray getNonDefaultUidModes(int uid) {
SparseIntArray oldVal = mOldImplementation.getNonDefaultUidModes(uid);
SparseIntArray newVal = mNewImplementation.getNonDefaultUidModes(uid);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getNonDefaultUidModes");
}
return newVal;
}
@Override
public SparseIntArray getNonDefaultPackageModes(String packageName, int userId) {
SparseIntArray oldVal = mOldImplementation.getNonDefaultPackageModes(packageName, userId);
SparseIntArray newVal = mNewImplementation.getNonDefaultPackageModes(packageName, userId);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getNonDefaultPackageModes");
}
return newVal;
}
@Override
public int getUidMode(int uid, int op) {
int oldVal = mOldImplementation.getUidMode(uid, op);
int newVal = mNewImplementation.getUidMode(uid, op);
if (oldVal != newVal) {
signalImplDifference("getUidMode");
}
return newVal;
}
@Override
public boolean setUidMode(int uid, int op, int mode) {
boolean oldVal = mOldImplementation.setUidMode(uid, op, mode);
boolean newVal = mNewImplementation.setUidMode(uid, op, mode);
if (oldVal != newVal) {
signalImplDifference("setUidMode");
}
return newVal;
}
@Override
public int getPackageMode(String packageName, int op, int userId) {
int oldVal = mOldImplementation.getPackageMode(packageName, op, userId);
int newVal = mNewImplementation.getPackageMode(packageName, op, userId);
if (oldVal != newVal) {
signalImplDifference("getPackageMode");
}
return newVal;
}
@Override
public void setPackageMode(String packageName, int op, int mode, int userId) {
mOldImplementation.setPackageMode(packageName, op, mode, userId);
mNewImplementation.setPackageMode(packageName, op, mode, userId);
}
@Override
public boolean removePackage(String packageName, int userId) {
boolean oldVal = mOldImplementation.removePackage(packageName, userId);
boolean newVal = mNewImplementation.removePackage(packageName, userId);
if (oldVal != newVal) {
signalImplDifference("removePackage");
}
return newVal;
}
@Override
public void removeUid(int uid) {
mOldImplementation.removeUid(uid);
mNewImplementation.removeUid(uid);
}
@Override
public boolean areUidModesDefault(int uid) {
boolean oldVal = mOldImplementation.areUidModesDefault(uid);
boolean newVal = mNewImplementation.areUidModesDefault(uid);
if (oldVal != newVal) {
signalImplDifference("areUidModesDefault");
}
return newVal;
}
@Override
public boolean arePackageModesDefault(String packageName, int userId) {
boolean oldVal = mOldImplementation.arePackageModesDefault(packageName, userId);
boolean newVal = mNewImplementation.arePackageModesDefault(packageName, userId);
if (oldVal != newVal) {
signalImplDifference("arePackageModesDefault");
}
return newVal;
}
@Override
public void clearAllModes() {
mOldImplementation.clearAllModes();
mNewImplementation.clearAllModes();
}
@Override
public void startWatchingOpModeChanged(OnOpModeChangedListener changedListener, int op) {
mOldImplementation.startWatchingOpModeChanged(changedListener, op);
mNewImplementation.startWatchingOpModeChanged(changedListener, op);
}
@Override
public void startWatchingPackageModeChanged(OnOpModeChangedListener changedListener,
String packageName) {
mOldImplementation.startWatchingPackageModeChanged(changedListener, packageName);
mNewImplementation.startWatchingPackageModeChanged(changedListener, packageName);
}
@Override
public void removeListener(OnOpModeChangedListener changedListener) {
mOldImplementation.removeListener(changedListener);
mNewImplementation.removeListener(changedListener);
}
@Override
public ArraySet<OnOpModeChangedListener> getOpModeChangedListeners(int op) {
ArraySet<OnOpModeChangedListener> oldVal = mOldImplementation.getOpModeChangedListeners(op);
ArraySet<OnOpModeChangedListener> newVal = mNewImplementation.getOpModeChangedListeners(op);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getOpModeChangedListeners");
}
return newVal;
}
@Override
public ArraySet<OnOpModeChangedListener> getPackageModeChangedListeners(String packageName) {
ArraySet<OnOpModeChangedListener> oldVal = mOldImplementation
.getPackageModeChangedListeners(packageName);
ArraySet<OnOpModeChangedListener> newVal = mNewImplementation
.getPackageModeChangedListeners(packageName);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getPackageModeChangedListeners");
}
return newVal;
}
@Override
public void notifyWatchersOfChange(int op, int uid) {
mOldImplementation.notifyWatchersOfChange(op, uid);
mNewImplementation.notifyWatchersOfChange(op, uid);
}
@Override
public void notifyOpChanged(OnOpModeChangedListener changedListener, int op, int uid,
String packageName) {
mOldImplementation.notifyOpChanged(changedListener, op, uid, packageName);
mNewImplementation.notifyOpChanged(changedListener, op, uid, packageName);
}
@Override
public void notifyOpChangedForAllPkgsInUid(int op, int uid, boolean onlyForeground,
OnOpModeChangedListener callbackToIgnore) {
mOldImplementation
.notifyOpChangedForAllPkgsInUid(op, uid, onlyForeground, callbackToIgnore);
mNewImplementation
.notifyOpChangedForAllPkgsInUid(op, uid, onlyForeground, callbackToIgnore);
}
@Override
public SparseBooleanArray evalForegroundUidOps(int uid, SparseBooleanArray foregroundOps) {
SparseBooleanArray oldVal = mOldImplementation.evalForegroundUidOps(uid, foregroundOps);
SparseBooleanArray newVal = mNewImplementation.evalForegroundUidOps(uid, foregroundOps);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("evalForegroundUidOps");
}
return newVal;
}
@Override
public SparseBooleanArray evalForegroundPackageOps(String packageName,
SparseBooleanArray foregroundOps, int userId) {
SparseBooleanArray oldVal = mOldImplementation
.evalForegroundPackageOps(packageName, foregroundOps, userId);
SparseBooleanArray newVal = mNewImplementation
.evalForegroundPackageOps(packageName, foregroundOps, userId);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("evalForegroundPackageOps");
}
return newVal;
}
@Override
public boolean dumpListeners(int dumpOp, int dumpUid, String dumpPackage,
PrintWriter printWriter) {
boolean oldVal = mOldImplementation
.dumpListeners(dumpOp, dumpUid, dumpPackage, printWriter);
boolean newVal = mNewImplementation
.dumpListeners(dumpOp, dumpUid, dumpPackage, printWriter);
if (oldVal != newVal) {
signalImplDifference("dumpListeners");
}
return newVal;
}
}

View File

@@ -0,0 +1,75 @@
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.server.pm.permission;
import static android.provider.DeviceConfig.NAMESPACE_PRIVACY;
import android.content.Context;
import android.provider.DeviceConfig;
import com.android.server.appop.AppOpsCheckingServiceInterface;
import com.android.server.appop.AppOpsServiceTestingShim;
import java.util.function.Supplier;
/**
* A factory which will select one or both implementations of a PermissionManagerServiceInterface or
* AppOpsCheckingServiceInterface, based upon either a DeviceConfig value, or a hard coded config.
*/
public class AccessTestingShimFactory {
private static final int RUN_OLD_SUBSYSTEM = 0;
private static final int RUN_NEW_SUBSYSTEM = 1;
private static final int RUN_BOTH_SUBSYSTEMS = 2;
public static final String DEVICE_CONFIG_SETTING = "selected_access_subsystem";
/**
* Get the PermissionManagerServiceInterface, based upon the current config state.
*/
public static PermissionManagerServiceInterface getPms(Context context,
Supplier<PermissionManagerServiceInterface> oldImpl,
Supplier<PermissionManagerServiceInterface> newImpl) {
int selectedSystem = DeviceConfig.getInt(NAMESPACE_PRIVACY,
DEVICE_CONFIG_SETTING, RUN_OLD_SUBSYSTEM);
switch (selectedSystem) {
case RUN_BOTH_SUBSYSTEMS:
return new PermissionManagerServiceTestingShim(oldImpl.get(), newImpl.get());
case RUN_NEW_SUBSYSTEM:
return newImpl.get();
default:
return oldImpl.get();
}
}
/**
* Get the AppOpsCheckingServiceInterface, based upon the current config state.
*/
public static AppOpsCheckingServiceInterface getAos(Context context,
Supplier<AppOpsCheckingServiceInterface> oldImpl,
Supplier<AppOpsCheckingServiceInterface> newImpl) {
int selectedSystem = DeviceConfig.getInt(NAMESPACE_PRIVACY,
DEVICE_CONFIG_SETTING, RUN_OLD_SUBSYSTEM);
switch (selectedSystem) {
case RUN_BOTH_SUBSYSTEMS:
return new AppOpsServiceTestingShim(oldImpl.get(), newImpl.get());
case RUN_NEW_SUBSYSTEM:
return newImpl.get();
default:
return oldImpl.get();
}
}
}

View File

@@ -0,0 +1,565 @@
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.server.pm.permission;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.UserIdInt;
import android.content.pm.PermissionGroupInfo;
import android.content.pm.PermissionInfo;
import android.content.pm.permission.SplitPermissionInfoParcelable;
import android.permission.IOnPermissionsChangeListener;
import com.android.server.pm.pkg.AndroidPackage;
import com.android.server.pm.pkg.PackageState;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
/**
* A testing shim, which supports running two variants of a PermissionManagerServiceInterface at
* once, and checking the results of both.
*/
public class PermissionManagerServiceTestingShim implements PermissionManagerServiceInterface {
private PermissionManagerServiceInterface mOldImplementation;
private PermissionManagerServiceInterface mNewImplementation;
public PermissionManagerServiceTestingShim(PermissionManagerServiceInterface oldImpl,
PermissionManagerServiceInterface newImpl) {
mOldImplementation = oldImpl;
mNewImplementation = newImpl;
}
private void signalImplDifference(String message) {
//TODO b/252886104 implement
}
@Nullable
@Override
public byte[] backupRuntimePermissions(int userId) {
byte[] oldVal = mOldImplementation.backupRuntimePermissions(userId);
byte[] newVal = mNewImplementation.backupRuntimePermissions(userId);
if (!Arrays.equals(oldVal, newVal)) {
signalImplDifference("backupRuntimePermissions");
}
return newVal;
}
@Override
public void restoreRuntimePermissions(@NonNull byte[] backup, int userId) {
mOldImplementation.backupRuntimePermissions(userId);
mNewImplementation.backupRuntimePermissions(userId);
}
@Override
public void restoreDelayedRuntimePermissions(@NonNull String packageName, int userId) {
mOldImplementation.restoreDelayedRuntimePermissions(packageName, userId);
mNewImplementation.restoreDelayedRuntimePermissions(packageName, userId);
}
@Override
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
mOldImplementation.dump(fd, pw, args);
mNewImplementation.dump(fd, pw, args);
}
@Override
public List<PermissionGroupInfo> getAllPermissionGroups(int flags) {
List<PermissionGroupInfo> oldVal = mOldImplementation.getAllPermissionGroups(flags);
List<PermissionGroupInfo> newVal = mNewImplementation.getAllPermissionGroups(flags);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getAllPermissionGroups");
}
return newVal;
}
@Override
public PermissionGroupInfo getPermissionGroupInfo(String groupName, int flags) {
PermissionGroupInfo oldVal = mOldImplementation.getPermissionGroupInfo(groupName, flags);
PermissionGroupInfo newVal = mNewImplementation.getPermissionGroupInfo(groupName, flags);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getPermissionGroupInfo");
}
return newVal;
}
@Override
public PermissionInfo getPermissionInfo(@NonNull String permName, int flags,
@NonNull String opPackageName) {
PermissionInfo oldVal = mOldImplementation.getPermissionInfo(permName, flags,
opPackageName);
PermissionInfo newVal = mNewImplementation.getPermissionInfo(permName, flags,
opPackageName);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getPermissionInfo");
}
return newVal;
}
@Override
public List<PermissionInfo> queryPermissionsByGroup(String groupName, int flags) {
List<PermissionInfo> oldVal = mOldImplementation.queryPermissionsByGroup(groupName,
flags);
List<PermissionInfo> newVal = mNewImplementation.queryPermissionsByGroup(groupName, flags);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("queryPermissionsByGroup");
}
return newVal;
}
@Override
public boolean addPermission(PermissionInfo info, boolean async) {
boolean oldVal = mOldImplementation.addPermission(info, async);
boolean newVal = mNewImplementation.addPermission(info, async);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("addPermission");
}
return newVal;
}
@Override
public void removePermission(String permName) {
mOldImplementation.removePermission(permName);
mNewImplementation.removePermission(permName);
}
@Override
public int getPermissionFlags(String packageName, String permName, int userId) {
int oldVal = mOldImplementation.getPermissionFlags(packageName, permName, userId);
int newVal = mNewImplementation.getPermissionFlags(packageName, permName, userId);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getPermissionFlags");
}
return newVal;
}
@Override
public void updatePermissionFlags(String packageName, String permName, int flagMask,
int flagValues, boolean checkAdjustPolicyFlagPermission, int userId) {
mOldImplementation.updatePermissionFlags(packageName, permName, flagMask, flagValues,
checkAdjustPolicyFlagPermission, userId);
mNewImplementation.updatePermissionFlags(packageName, permName, flagMask, flagValues,
checkAdjustPolicyFlagPermission, userId);
}
@Override
public void updatePermissionFlagsForAllApps(int flagMask, int flagValues, int userId) {
mOldImplementation.updatePermissionFlagsForAllApps(flagMask, flagValues, userId);
mNewImplementation.updatePermissionFlagsForAllApps(flagMask, flagValues, userId);
}
@Override
public void addOnPermissionsChangeListener(IOnPermissionsChangeListener listener) {
mOldImplementation.addOnPermissionsChangeListener(listener);
mNewImplementation.addOnPermissionsChangeListener(listener);
}
@Override
public void removeOnPermissionsChangeListener(IOnPermissionsChangeListener listener) {
mOldImplementation.removeOnPermissionsChangeListener(listener);
mNewImplementation.removeOnPermissionsChangeListener(listener);
}
@Override
public boolean addAllowlistedRestrictedPermission(@NonNull String packageName,
@NonNull String permName, int flags, int userId) {
boolean oldVal = mOldImplementation.addAllowlistedRestrictedPermission(packageName,
permName,
flags, userId);
boolean newVal = mNewImplementation.addAllowlistedRestrictedPermission(packageName,
permName, flags, userId);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("addAllowlistedRestrictedPermission");
}
return newVal;
}
@Override
public List<String> getAllowlistedRestrictedPermissions(@NonNull String packageName, int flags,
int userId) {
List<String> oldVal = mOldImplementation.getAllowlistedRestrictedPermissions(packageName,
flags, userId);
List<String> newVal = mNewImplementation.getAllowlistedRestrictedPermissions(packageName,
flags, userId);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getAllowlistedRestrictedPermissions");
}
return newVal;
}
@Override
public boolean removeAllowlistedRestrictedPermission(@NonNull String packageName,
@NonNull String permName, int flags, int userId) {
boolean oldVal = mOldImplementation.removeAllowlistedRestrictedPermission(packageName,
permName, flags, userId);
boolean newVal = mNewImplementation.removeAllowlistedRestrictedPermission(packageName,
permName, flags, userId);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("removeAllowlistedRestrictedPermission");
}
return newVal;
}
@Override
public void grantRuntimePermission(String packageName, String permName, int userId) {
mOldImplementation.grantRuntimePermission(packageName, permName, userId);
mNewImplementation.grantRuntimePermission(packageName, permName, userId);
}
@Override
public void revokeRuntimePermission(String packageName, String permName, int userId,
String reason) {
mOldImplementation.grantRuntimePermission(packageName, permName, userId);
mNewImplementation.grantRuntimePermission(packageName, permName, userId);
}
@Override
public void revokePostNotificationPermissionWithoutKillForTest(String packageName, int userId) {
mOldImplementation.revokePostNotificationPermissionWithoutKillForTest(packageName,
userId);
mNewImplementation.revokePostNotificationPermissionWithoutKillForTest(packageName, userId);
}
@Override
public boolean shouldShowRequestPermissionRationale(String packageName, String permName,
int userId) {
boolean oldVal = mOldImplementation
.shouldShowRequestPermissionRationale(packageName, permName, userId);
boolean newVal = mNewImplementation
.shouldShowRequestPermissionRationale(packageName, permName, userId);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("shouldShowRequestPermissionRationale");
}
return newVal;
}
@Override
public boolean isPermissionRevokedByPolicy(String packageName, String permName, int userId) {
boolean oldVal = mOldImplementation
.isPermissionRevokedByPolicy(packageName, permName, userId);
boolean newVal = mNewImplementation.isPermissionRevokedByPolicy(packageName, permName,
userId);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("isPermissionRevokedByPolicy");
}
return newVal;
}
@Override
public List<SplitPermissionInfoParcelable> getSplitPermissions() {
List<SplitPermissionInfoParcelable> oldVal = mOldImplementation.getSplitPermissions();
List<SplitPermissionInfoParcelable> newVal = mNewImplementation.getSplitPermissions();
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getSplitPermissions");
}
return newVal;
}
@Override
public int checkPermission(String pkgName, String permName, int userId) {
int oldVal = mOldImplementation.checkPermission(pkgName, permName, userId);
int newVal = mNewImplementation.checkPermission(pkgName, permName, userId);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("checkPermission");
}
return newVal;
}
@Override
public int checkUidPermission(int uid, String permName) {
int oldVal = mOldImplementation.checkUidPermission(uid, permName);
int newVal = mNewImplementation.checkUidPermission(uid, permName);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("checkUidPermission");
}
return newVal;
}
@Override
public void addOnRuntimePermissionStateChangedListener(@NonNull
PermissionManagerServiceInternal.OnRuntimePermissionStateChangedListener listener) {
mOldImplementation.addOnRuntimePermissionStateChangedListener(listener);
mNewImplementation.addOnRuntimePermissionStateChangedListener(listener);
}
@Override
public void removeOnRuntimePermissionStateChangedListener(@NonNull
PermissionManagerServiceInternal.OnRuntimePermissionStateChangedListener listener) {
mOldImplementation.removeOnRuntimePermissionStateChangedListener(listener);
mNewImplementation.removeOnRuntimePermissionStateChangedListener(listener);
}
@Override
public Map<String, Set<String>> getAllAppOpPermissionPackages() {
Map<String, Set<String>> oldVal = mOldImplementation.getAllAppOpPermissionPackages();
Map<String, Set<String>> newVal = mNewImplementation.getAllAppOpPermissionPackages();
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getAllAppOpPermissionPackages");
}
return newVal;
}
@Override
public boolean isPermissionsReviewRequired(@NonNull String packageName, int userId) {
boolean oldVal = mOldImplementation.isPermissionsReviewRequired(packageName, userId);
boolean newVal = mNewImplementation.isPermissionsReviewRequired(packageName, userId);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("isPermissionsReviewRequired");
}
return newVal;
}
@Override
public void resetRuntimePermissions(@NonNull AndroidPackage pkg, @UserIdInt int userId) {
mOldImplementation.resetRuntimePermissions(pkg, userId);
mNewImplementation.resetRuntimePermissions(pkg, userId);
}
@Override
public void resetRuntimePermissionsForUser(int userId) {
mOldImplementation.resetRuntimePermissionsForUser(userId);
mNewImplementation.resetRuntimePermissionsForUser(userId);
}
@Override
public void readLegacyPermissionStateTEMP() {
mOldImplementation.readLegacyPermissionStateTEMP();
mNewImplementation.readLegacyPermissionStateTEMP();
}
@Override
public void writeLegacyPermissionStateTEMP() {
mOldImplementation.writeLegacyPermissionStateTEMP();
mNewImplementation.writeLegacyPermissionStateTEMP();
}
@Override
public Set<String> getInstalledPermissions(String packageName) {
Set<String> oldVal = mOldImplementation.getInstalledPermissions(packageName);
Set<String> newVal = mNewImplementation.getInstalledPermissions(packageName);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getInstalledPermissions");
}
return newVal;
}
@NonNull
@Override
public Set<String> getGrantedPermissions(@NonNull String packageName, int userId) {
Set<String> oldVal = mOldImplementation.getGrantedPermissions(packageName, userId);
Set<String> newVal = mNewImplementation.getGrantedPermissions(packageName, userId);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getGrantedPermissions");
}
return newVal;
}
@NonNull
@Override
public int[] getPermissionGids(@NonNull String permissionName, int userId) {
int[] oldVal = mOldImplementation.getPermissionGids(permissionName, userId);
int[] newVal = mNewImplementation.getPermissionGids(permissionName, userId);
if (!Arrays.equals(oldVal, newVal)) {
signalImplDifference("getPermissionGids");
}
return newVal;
}
@NonNull
@Override
public String[] getAppOpPermissionPackages(@NonNull String permissionName) {
String[] oldVal = mOldImplementation.getAppOpPermissionPackages(permissionName);
String[] newVal = mNewImplementation.getAppOpPermissionPackages(permissionName);
if (!Arrays.equals(oldVal, newVal)) {
signalImplDifference("getAppOpPermissionPackages");
}
return newVal;
}
@Nullable
@Override
public Permission getPermissionTEMP(@NonNull String permName) {
Permission oldVal = mOldImplementation.getPermissionTEMP(permName);
Permission newVal = mNewImplementation.getPermissionTEMP(permName);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getPermissionTEMP");
}
return newVal;
}
@NonNull
@Override
public List<PermissionInfo> getAllPermissionsWithProtection(int protection) {
List<PermissionInfo> oldVal = mOldImplementation.getAllPermissionsWithProtection(
protection);
List<PermissionInfo> newVal = mNewImplementation.getAllPermissionsWithProtection(
protection);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getAllPermissionsWithProtection");
}
return newVal;
}
@NonNull
@Override
public List<PermissionInfo> getAllPermissionsWithProtectionFlags(int protectionFlags) {
List<PermissionInfo> oldVal = mOldImplementation
.getAllPermissionsWithProtectionFlags(protectionFlags);
List<PermissionInfo> newVal = mNewImplementation.getAllPermissionsWithProtectionFlags(
protectionFlags);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getAllPermissionsWithProtectionFlags");
}
return newVal;
}
@NonNull
@Override
public List<LegacyPermission> getLegacyPermissions() {
List<LegacyPermission> oldVal = mOldImplementation.getLegacyPermissions();
List<LegacyPermission> newVal = mNewImplementation.getLegacyPermissions();
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getLegacyPermissions");
}
return newVal;
}
@NonNull
@Override
public LegacyPermissionState getLegacyPermissionState(int appId) {
LegacyPermissionState oldVal = mOldImplementation.getLegacyPermissionState(appId);
LegacyPermissionState newVal = mNewImplementation.getLegacyPermissionState(appId);
if (!Objects.equals(oldVal, newVal)) {
signalImplDifference("getLegacyPermissionState");
}
return newVal;
}
@Override
public void readLegacyPermissionsTEMP(
@NonNull LegacyPermissionSettings legacyPermissionSettings) {
mOldImplementation.readLegacyPermissionsTEMP(legacyPermissionSettings);
mNewImplementation.readLegacyPermissionsTEMP(legacyPermissionSettings);
}
@Override
public void writeLegacyPermissionsTEMP(
@NonNull LegacyPermissionSettings legacyPermissionSettings) {
mOldImplementation.writeLegacyPermissionsTEMP(legacyPermissionSettings);
mNewImplementation.writeLegacyPermissionsTEMP(legacyPermissionSettings);
}
@Override
public void onSystemReady() {
mOldImplementation.onSystemReady();
mNewImplementation.onSystemReady();
}
@Override
public void onStorageVolumeMounted(@NonNull String volumeUuid, boolean fingerprintChanged) {
mOldImplementation.onStorageVolumeMounted(volumeUuid, fingerprintChanged);
mNewImplementation.onStorageVolumeMounted(volumeUuid, fingerprintChanged);
}
@NonNull
@Override
public int[] getGidsForUid(int uid) {
int[] oldVal = mOldImplementation.getGidsForUid(uid);
int[] newVal = mNewImplementation.getGidsForUid(uid);
if (!Arrays.equals(oldVal, newVal)) {
signalImplDifference("getGidsForUid");
}
return newVal;
}
@Override
public void onUserCreated(int userId) {
mOldImplementation.onUserCreated(userId);
mNewImplementation.onUserCreated(userId);
}
@Override
public void onUserRemoved(int userId) {
mOldImplementation.onUserRemoved(userId);
mNewImplementation.onUserRemoved(userId);
}
@Override
public void onPackageAdded(@NonNull PackageState pkg, boolean isInstantApp,
@Nullable AndroidPackage oldPkg) {
mOldImplementation.onPackageAdded(pkg, isInstantApp, oldPkg);
mNewImplementation.onPackageAdded(pkg, isInstantApp, oldPkg);
}
@Override
public void onPackageInstalled(@NonNull AndroidPackage pkg, int previousAppId,
@NonNull PermissionManagerServiceInternal.PackageInstalledParams params, int userId) {
mOldImplementation.onPackageInstalled(pkg, previousAppId, params, userId);
mNewImplementation.onPackageInstalled(pkg, previousAppId, params, userId);
}
@Override
public void onPackageRemoved(@NonNull AndroidPackage pkg) {
mOldImplementation.onPackageRemoved(pkg);
mNewImplementation.onPackageRemoved(pkg);
}
@Override
public void onPackageUninstalled(@NonNull String packageName, int appId,
@NonNull PackageState packageState, @Nullable AndroidPackage pkg,
@NonNull List<AndroidPackage> sharedUserPkgs, int userId) {
mOldImplementation.onPackageUninstalled(packageName, appId, packageState, pkg,
sharedUserPkgs, userId);
mNewImplementation.onPackageUninstalled(packageName, appId, packageState, pkg,
sharedUserPkgs, userId);
}
}