From 4d34bb8304ae2e85c2b12628c9a6346c6835de5d Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Fri, 7 Aug 2015 18:26:38 -0700 Subject: Fix issue #23037093: "Write system settings" permission value fails... ...to persist after reboot We were writing a corrupt settings file, so would always reset back to the default app ops state after boot...! Also add new appops service commands to manually write and read its settings, since that is very useful for testing. Change-Id: Ia510507764738fd82e45ec0be6db840c6ea30c28 --- .../java/com/android/server/AppOpsService.java | 51 +++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/AppOpsService.java b/services/core/java/com/android/server/AppOpsService.java index 45c020c8cfc2..56ebed63bc89 100644 --- a/services/core/java/com/android/server/AppOpsService.java +++ b/services/core/java/com/android/server/AppOpsService.java @@ -1245,6 +1245,7 @@ public class AppOpsService extends IAppOpsService.Stub { return; } boolean success = false; + mUidStates.clear(); try { XmlPullParser parser = Xml.newPullParser(); parser.setInput(stream, StandardCharsets.UTF_8.name()); @@ -1448,7 +1449,7 @@ public class AppOpsService extends IAppOpsService.Stub { XmlSerializer out = new FastXmlSerializer(); out.setOutput(stream, StandardCharsets.UTF_8.name()); out.startDocument(null, true); - out.startTag(null, "app"); + out.startTag(null, "app-ops"); final int uidStateCount = mUidStates.size(); for (int i = 0; i < uidStateCount; i++) { @@ -1541,6 +1542,17 @@ public class AppOpsService extends IAppOpsService.Stub { } } + private void dumpHelp(PrintWriter pw) { + pw.println("AppOps service (appops) dump options:"); + pw.println(" [-h] [CMD]"); + pw.println(" -h: print this help text."); + pw.println("Commands:"); + pw.println(" write-settings"); + pw.println(" Immediately write pending changes to storage."); + pw.println(" read-settings"); + pw.println(" Read the last written settings, replacing current state in RAM."); + } + @Override protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP) @@ -1551,6 +1563,43 @@ public class AppOpsService extends IAppOpsService.Stub { return; } + if (args != null) { + for (int i=0; i 0 && arg.charAt(0) == '-'){ + pw.println("Unknown option: " + arg); + return; + } else { + pw.println("Unknown command: " + arg); + return; + } + } + } + synchronized (this) { pw.println("Current AppOps Service state:"); final long now = System.currentTimeMillis(); -- cgit v1.2.3-59-g8ed1b