Merge "Add appops policy tags to dumpsys appops output" into tm-dev

This commit is contained in:
Manjeet Rulhania
2022-03-02 18:26:54 +00:00
committed by Android (Google) Code Review
2 changed files with 42 additions and 2 deletions

View File

@@ -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;
@@ -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();
@@ -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

View File

@@ -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;
@@ -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);