Add skeleton AppOpsCheckingServiceCompatImpl

This class will hold the majority of the appops compatibility layer for
the Unified Permission Subsystem.

Bug: 256730492
Test: presubmit
Change-Id: I5dc068bfd7c08966669e0f2089c67293872a7548
This commit is contained in:
Jay Thomas Sullivan
2022-12-02 17:22:35 -08:00
parent 5b0c1a3589
commit ce8d99fb60
4 changed files with 158 additions and 12 deletions

View File

@@ -218,7 +218,7 @@ public class AppOpsCheckingServiceImpl implements AppOpsCheckingServiceInterface
}
@Override
public boolean arePackageModesDefault(String packageMode, @UserIdInt int userId) {
public boolean arePackageModesDefault(@NonNull String packageMode, @UserIdInt int userId) {
synchronized (mLock) {
ArrayMap<String, SparseIntArray> packageModes = mUserPackageModes.get(userId, null);
if (packageModes == null) {
@@ -490,15 +490,16 @@ public class AppOpsCheckingServiceImpl implements AppOpsCheckingServiceInterface
}
@Override
public SparseBooleanArray evalForegroundUidOps(int uid, SparseBooleanArray foregroundOps) {
public SparseBooleanArray evalForegroundUidOps(int uid,
@Nullable SparseBooleanArray foregroundOps) {
synchronized (mLock) {
return evalForegroundOps(mUidModes.get(uid), foregroundOps);
}
}
@Override
public SparseBooleanArray evalForegroundPackageOps(String packageName,
SparseBooleanArray foregroundOps, @UserIdInt int userId) {
public SparseBooleanArray evalForegroundPackageOps(@NonNull String packageName,
@Nullable SparseBooleanArray foregroundOps, @UserIdInt int userId) {
synchronized (mLock) {
ArrayMap<String, SparseIntArray> packageModes = mUserPackageModes.get(userId, null);
return evalForegroundOps(packageModes == null ? null : packageModes.get(packageName),
@@ -537,8 +538,8 @@ public class AppOpsCheckingServiceImpl implements AppOpsCheckingServiceInterface
}
@Override
public boolean dumpListeners(int dumpOp, int dumpUid, String dumpPackage,
PrintWriter printWriter) {
public boolean dumpListeners(int dumpOp, int dumpUid, @Nullable String dumpPackage,
@NonNull PrintWriter printWriter) {
boolean needSep = false;
if (mOpModeWatchers.size() > 0) {
boolean printedHeader = false;

View File

@@ -103,7 +103,7 @@ public interface AppOpsCheckingServiceInterface {
* @param packageName package name.
* @param userId user id associated with the package.
*/
boolean arePackageModesDefault(String packageName, @UserIdInt int userId);
boolean arePackageModesDefault(@NonNull String packageName, @UserIdInt int userId);
/**
* Stop tracking app-op modes for all uid and packages.
@@ -184,7 +184,7 @@ public interface AppOpsCheckingServiceInterface {
* @param foregroundOps boolean array where app-ops that have MODE_FOREGROUND are marked true.
* @return foregroundOps.
*/
SparseBooleanArray evalForegroundUidOps(int uid, SparseBooleanArray foregroundOps);
SparseBooleanArray evalForegroundUidOps(int uid, @Nullable SparseBooleanArray foregroundOps);
/**
* Go over the list of app-ops for the package name and mark app-ops with MODE_FOREGROUND in
@@ -194,8 +194,8 @@ public interface AppOpsCheckingServiceInterface {
* @param userId user id associated with the package.
* @return foregroundOps.
*/
SparseBooleanArray evalForegroundPackageOps(String packageName,
SparseBooleanArray foregroundOps, @UserIdInt int userId);
SparseBooleanArray evalForegroundPackageOps(@NonNull String packageName,
@Nullable SparseBooleanArray foregroundOps, @UserIdInt int userId);
/**
* Dump op mode and package mode listeners and their details.
@@ -205,5 +205,6 @@ public interface AppOpsCheckingServiceInterface {
* @param dumpPackage if not null and if dumpOp is -1, dumps watchers for the package name.
* @param printWriter writer to dump to.
*/
boolean dumpListeners(int dumpOp, int dumpUid, String dumpPackage, PrintWriter printWriter);
boolean dumpListeners(int dumpOp, int dumpUid, @Nullable String dumpPackage,
@NonNull PrintWriter printWriter);
}

View File

@@ -22,7 +22,7 @@ import android.os.RemoteException;
* Listener for mode changes, encapsulates methods that should be triggered in the event of a mode
* change.
*/
abstract class OnOpModeChangedListener {
public abstract class OnOpModeChangedListener {
// Constant meaning that any UID should be matched when dispatching callbacks
private static final int UID_ANY = -2;

View File

@@ -0,0 +1,144 @@
/*
* 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.permission.access.appop
import android.util.ArraySet
import android.util.SparseBooleanArray
import android.util.SparseIntArray
import com.android.server.appop.AppOpsCheckingServiceInterface
import com.android.server.appop.OnOpModeChangedListener
import com.android.server.permission.access.AccessCheckingService
import java.io.PrintWriter
class AppOpsCheckingServiceCompatImpl(
private val accessCheckingService: AccessCheckingService
) : AppOpsCheckingServiceInterface {
override fun getNonDefaultUidModes(uid: Int): SparseIntArray {
TODO("Not yet implemented")
}
override fun getUidMode(uid: Int, op: Int): Int {
TODO("Not yet implemented")
}
override fun setUidMode(uid: Int, op: Int, mode: Int): Boolean {
TODO("Not yet implemented")
}
override fun getPackageMode(packageName: String, op: Int, userId: Int): Int {
TODO("Not yet implemented")
}
override fun setPackageMode(packageName: String, op: Int, mode: Int, userId: Int) {
TODO("Not yet implemented")
}
override fun removePackage(packageName: String, userId: Int): Boolean {
TODO("Not yet implemented")
}
override fun removeUid(uid: Int) {
TODO("Not yet implemented")
}
override fun areUidModesDefault(uid: Int): Boolean {
TODO("Not yet implemented")
}
override fun arePackageModesDefault(packageName: String, userId: Int): Boolean {
TODO("Not yet implemented")
}
override fun clearAllModes() {
TODO("Not yet implemented")
}
override fun startWatchingOpModeChanged(changedListener: OnOpModeChangedListener, op: Int) {
TODO("Not yet implemented")
}
override fun startWatchingPackageModeChanged(
changedListener: OnOpModeChangedListener,
packageName: String
) {
TODO("Not yet implemented")
}
override fun removeListener(changedListener: OnOpModeChangedListener) {
TODO("Not yet implemented")
}
override fun getOpModeChangedListeners(op: Int): ArraySet<OnOpModeChangedListener> {
TODO("Not yet implemented")
}
override fun getPackageModeChangedListeners(
packageName: String
): ArraySet<OnOpModeChangedListener> {
TODO("Not yet implemented")
}
override fun notifyWatchersOfChange(op: Int, uid: Int) {
TODO("Not yet implemented")
}
override fun notifyOpChanged(
changedListener: OnOpModeChangedListener,
op: Int,
uid: Int,
packageName: String?
) {
TODO("Not yet implemented")
}
override fun notifyOpChangedForAllPkgsInUid(
op: Int,
uid: Int,
onlyForeground: Boolean,
callbackToIgnore: OnOpModeChangedListener?
) {
TODO("Not yet implemented")
}
override fun evalForegroundUidOps(
uid: Int,
foregroundOps: SparseBooleanArray?
): SparseBooleanArray {
TODO("Not yet implemented")
}
override fun evalForegroundPackageOps(
packageName: String,
foregroundOps: SparseBooleanArray?,
userId: Int
): SparseBooleanArray {
TODO("Not yet implemented")
}
override fun dumpListeners(
dumpOp: Int,
dumpUid: Int,
dumpPackage: String?,
printWriter: PrintWriter
): Boolean {
TODO("Not yet implemented")
}
companion object {
private val LOG_TAG = AppOpsCheckingServiceCompatImpl::class.java.simpleName
}
}