Loading services/core/java/com/android/server/appop/AppOpsService.java +14 −2 Original line number Diff line number Diff line Loading @@ -178,6 +178,7 @@ import com.android.server.SystemServiceManager; import com.android.server.pm.PackageList; import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.pkg.component.ParsedAttribution; import com.android.server.policy.AppOpsPolicy; import dalvik.annotation.optimization.NeverCompile; Loading Loading @@ -6231,8 +6232,8 @@ public class AppOpsService extends IAppOpsService.Stub { } } if (mAudioRestrictionManager.hasActiveRestrictions() && dumpOp < 0 && dumpPackage != null && dumpMode < 0 && !dumpWatchers && !dumpWatchers) { needSep = mAudioRestrictionManager.dump(pw) | needSep ; && dumpPackage != null && dumpMode < 0 && !dumpWatchers) { needSep = mAudioRestrictionManager.dump(pw) || needSep; } if (needSep) { pw.println(); Loading Loading @@ -6508,6 +6509,17 @@ public class AppOpsService extends IAppOpsService.Stub { ipw.decreaseIndent(); } } if (!dumpHistory && !dumpWatchers) { pw.println(); if (mCheckOpsDelegateDispatcher.mPolicy != null && mCheckOpsDelegateDispatcher.mPolicy instanceof AppOpsPolicy) { AppOpsPolicy policy = (AppOpsPolicy) mCheckOpsDelegateDispatcher.mPolicy; policy.dumpTags(pw); } else { pw.println(" AppOps policy not set."); } } } // Must not hold the appops lock Loading services/core/java/com/android/server/policy/AppOpsPolicy.java +28 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ import com.android.internal.util.function.TriFunction; import com.android.internal.util.function.UndecFunction; import com.android.server.LocalServices; import java.io.PrintWriter; import java.util.Arrays; import java.util.List; import java.util.Map; Loading Loading @@ -283,6 +284,33 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat attributionSource, skipProxyOperation); } /** * Write location and activity recognition tags to console. * See also {@code adb shell dumpsys appops}. */ public void dumpTags(PrintWriter writer) { if (!mLocationTags.isEmpty()) { writer.println(" AppOps policy location tags:"); writeTags(mLocationTags, writer); writer.println(); } if (!mActivityRecognitionTags.isEmpty()) { writer.println(" AppOps policy activity recognition tags:"); writeTags(mActivityRecognitionTags, writer); writer.println(); } } private void writeTags(Map<Integer, PackageTagsList> tags, PrintWriter writer) { int counter = 0; for (Map.Entry<Integer, PackageTagsList> tagEntry : tags.entrySet()) { writer.print(" #"); writer.print(counter++); writer.print(": "); writer.print(tagEntry.getKey().toString()); writer.print("="); tagEntry.getValue().dump(writer); } } private int resolveDatasourceOp(int code, int uid, @NonNull String packageName, @Nullable String attributionTag) { code = resolveRecordAudioOp(code, uid); Loading Loading
services/core/java/com/android/server/appop/AppOpsService.java +14 −2 Original line number Diff line number Diff line Loading @@ -178,6 +178,7 @@ import com.android.server.SystemServiceManager; import com.android.server.pm.PackageList; import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.pkg.component.ParsedAttribution; import com.android.server.policy.AppOpsPolicy; import dalvik.annotation.optimization.NeverCompile; Loading Loading @@ -6231,8 +6232,8 @@ public class AppOpsService extends IAppOpsService.Stub { } } if (mAudioRestrictionManager.hasActiveRestrictions() && dumpOp < 0 && dumpPackage != null && dumpMode < 0 && !dumpWatchers && !dumpWatchers) { needSep = mAudioRestrictionManager.dump(pw) | needSep ; && dumpPackage != null && dumpMode < 0 && !dumpWatchers) { needSep = mAudioRestrictionManager.dump(pw) || needSep; } if (needSep) { pw.println(); Loading Loading @@ -6508,6 +6509,17 @@ public class AppOpsService extends IAppOpsService.Stub { ipw.decreaseIndent(); } } if (!dumpHistory && !dumpWatchers) { pw.println(); if (mCheckOpsDelegateDispatcher.mPolicy != null && mCheckOpsDelegateDispatcher.mPolicy instanceof AppOpsPolicy) { AppOpsPolicy policy = (AppOpsPolicy) mCheckOpsDelegateDispatcher.mPolicy; policy.dumpTags(pw); } else { pw.println(" AppOps policy not set."); } } } // Must not hold the appops lock Loading
services/core/java/com/android/server/policy/AppOpsPolicy.java +28 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ import com.android.internal.util.function.TriFunction; import com.android.internal.util.function.UndecFunction; import com.android.server.LocalServices; import java.io.PrintWriter; import java.util.Arrays; import java.util.List; import java.util.Map; Loading Loading @@ -283,6 +284,33 @@ public final class AppOpsPolicy implements AppOpsManagerInternal.CheckOpsDelegat attributionSource, skipProxyOperation); } /** * Write location and activity recognition tags to console. * See also {@code adb shell dumpsys appops}. */ public void dumpTags(PrintWriter writer) { if (!mLocationTags.isEmpty()) { writer.println(" AppOps policy location tags:"); writeTags(mLocationTags, writer); writer.println(); } if (!mActivityRecognitionTags.isEmpty()) { writer.println(" AppOps policy activity recognition tags:"); writeTags(mActivityRecognitionTags, writer); writer.println(); } } private void writeTags(Map<Integer, PackageTagsList> tags, PrintWriter writer) { int counter = 0; for (Map.Entry<Integer, PackageTagsList> tagEntry : tags.entrySet()) { writer.print(" #"); writer.print(counter++); writer.print(": "); writer.print(tagEntry.getKey().toString()); writer.print("="); tagEntry.getValue().dump(writer); } } private int resolveDatasourceOp(int code, int uid, @NonNull String packageName, @Nullable String attributionTag) { code = resolveRecordAudioOp(code, uid); Loading