From ce8d99fb602bf50467bf608a637263056e72370f Mon Sep 17 00:00:00 2001 From: Jay Thomas Sullivan Date: Fri, 2 Dec 2022 17:22:35 -0800 Subject: [PATCH] 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 --- .../appop/AppOpsCheckingServiceImpl.java | 13 +- .../appop/AppOpsCheckingServiceInterface.java | 11 +- .../server/appop/OnOpModeChangedListener.java | 2 +- .../appop/AppOpsCheckingServiceCompatImpl.kt | 144 ++++++++++++++++++ 4 files changed, 158 insertions(+), 12 deletions(-) create mode 100644 services/permission/java/com/android/server/permission/access/appop/AppOpsCheckingServiceCompatImpl.kt diff --git a/services/core/java/com/android/server/appop/AppOpsCheckingServiceImpl.java b/services/core/java/com/android/server/appop/AppOpsCheckingServiceImpl.java index 8d1da71c95c18..587fb0410bcab 100644 --- a/services/core/java/com/android/server/appop/AppOpsCheckingServiceImpl.java +++ b/services/core/java/com/android/server/appop/AppOpsCheckingServiceImpl.java @@ -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 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 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; diff --git a/services/core/java/com/android/server/appop/AppOpsCheckingServiceInterface.java b/services/core/java/com/android/server/appop/AppOpsCheckingServiceInterface.java index d8d0d48965eac..ef3e3685401f7 100644 --- a/services/core/java/com/android/server/appop/AppOpsCheckingServiceInterface.java +++ b/services/core/java/com/android/server/appop/AppOpsCheckingServiceInterface.java @@ -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); } diff --git a/services/core/java/com/android/server/appop/OnOpModeChangedListener.java b/services/core/java/com/android/server/appop/OnOpModeChangedListener.java index 5ebe8119f0468..1d1a9e71cc3d7 100644 --- a/services/core/java/com/android/server/appop/OnOpModeChangedListener.java +++ b/services/core/java/com/android/server/appop/OnOpModeChangedListener.java @@ -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; diff --git a/services/permission/java/com/android/server/permission/access/appop/AppOpsCheckingServiceCompatImpl.kt b/services/permission/java/com/android/server/permission/access/appop/AppOpsCheckingServiceCompatImpl.kt new file mode 100644 index 0000000000000..a565feb959c2c --- /dev/null +++ b/services/permission/java/com/android/server/permission/access/appop/AppOpsCheckingServiceCompatImpl.kt @@ -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 { + TODO("Not yet implemented") + } + + override fun getPackageModeChangedListeners( + packageName: String + ): ArraySet { + 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 + } +}