Loading services/java/com/android/server/AppOpsService.java +16 −5 Original line number Diff line number Diff line Loading @@ -64,6 +64,8 @@ public class AppOpsService extends IAppOpsService.Stub { // Write at most every 30 minutes. static final long WRITE_DELAY = DEBUG ? 1000 : 30*60*1000; static final int CURRENT_VERSION = 1; Context mContext; final AtomicFile mFile; final Handler mHandler; Loading Loading @@ -704,6 +706,9 @@ public class AppOpsService extends IAppOpsService.Stub { throw new IllegalStateException("no start tag found"); } String versStr = parser.getAttributeValue(null, "vers"); int vers = versStr != null ? Integer.parseInt(versStr) : 0; int outerDepth = parser.getDepth(); while ((type = parser.next()) != XmlPullParser.END_DOCUMENT && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) { Loading @@ -713,7 +718,7 @@ public class AppOpsService extends IAppOpsService.Stub { String tagName = parser.getName(); if (tagName.equals("pkg")) { readPackage(parser); readPackage(parser, vers); } else { Slog.w(TAG, "Unknown element under <app-ops>: " + parser.getName()); Loading Loading @@ -746,7 +751,7 @@ public class AppOpsService extends IAppOpsService.Stub { } } void readPackage(XmlPullParser parser) throws NumberFormatException, void readPackage(XmlPullParser parser, int vers) throws NumberFormatException, XmlPullParserException, IOException { String pkgName = parser.getAttributeValue(null, "n"); int outerDepth = parser.getDepth(); Loading @@ -759,7 +764,7 @@ public class AppOpsService extends IAppOpsService.Stub { String tagName = parser.getName(); if (tagName.equals("uid")) { readUid(parser, pkgName); readUid(parser, vers, pkgName); } else { Slog.w(TAG, "Unknown element under <pkg>: " + parser.getName()); Loading @@ -768,7 +773,7 @@ public class AppOpsService extends IAppOpsService.Stub { } } void readUid(XmlPullParser parser, String pkgName) throws NumberFormatException, void readUid(XmlPullParser parser, int vers, String pkgName) throws NumberFormatException, XmlPullParserException, IOException { int uid = Integer.parseInt(parser.getAttributeValue(null, "n")); int outerDepth = parser.getDepth(); Loading @@ -784,8 +789,13 @@ public class AppOpsService extends IAppOpsService.Stub { Op op = new Op(uid, pkgName, Integer.parseInt(parser.getAttributeValue(null, "n"))); String mode = parser.getAttributeValue(null, "m"); if (mode != null) { if (vers < CURRENT_VERSION && op.op != AppOpsManager.OP_POST_NOTIFICATION) { Slog.w(TAG, "AppOps vers " + vers + ": drop mode from " + pkgName + "/" + uid + " op " + op.op); } else { op.mode = Integer.parseInt(mode); } } String time = parser.getAttributeValue(null, "t"); if (time != null) { op.time = Long.parseLong(time); Loading Loading @@ -834,6 +844,7 @@ public class AppOpsService extends IAppOpsService.Stub { out.setOutput(stream, "utf-8"); out.startDocument(null, true); out.startTag(null, "app-ops"); out.attribute(null, "vers", Integer.toString(CURRENT_VERSION)); if (allOps != null) { String lastPkg = null; Loading Loading
services/java/com/android/server/AppOpsService.java +16 −5 Original line number Diff line number Diff line Loading @@ -64,6 +64,8 @@ public class AppOpsService extends IAppOpsService.Stub { // Write at most every 30 minutes. static final long WRITE_DELAY = DEBUG ? 1000 : 30*60*1000; static final int CURRENT_VERSION = 1; Context mContext; final AtomicFile mFile; final Handler mHandler; Loading Loading @@ -704,6 +706,9 @@ public class AppOpsService extends IAppOpsService.Stub { throw new IllegalStateException("no start tag found"); } String versStr = parser.getAttributeValue(null, "vers"); int vers = versStr != null ? Integer.parseInt(versStr) : 0; int outerDepth = parser.getDepth(); while ((type = parser.next()) != XmlPullParser.END_DOCUMENT && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) { Loading @@ -713,7 +718,7 @@ public class AppOpsService extends IAppOpsService.Stub { String tagName = parser.getName(); if (tagName.equals("pkg")) { readPackage(parser); readPackage(parser, vers); } else { Slog.w(TAG, "Unknown element under <app-ops>: " + parser.getName()); Loading Loading @@ -746,7 +751,7 @@ public class AppOpsService extends IAppOpsService.Stub { } } void readPackage(XmlPullParser parser) throws NumberFormatException, void readPackage(XmlPullParser parser, int vers) throws NumberFormatException, XmlPullParserException, IOException { String pkgName = parser.getAttributeValue(null, "n"); int outerDepth = parser.getDepth(); Loading @@ -759,7 +764,7 @@ public class AppOpsService extends IAppOpsService.Stub { String tagName = parser.getName(); if (tagName.equals("uid")) { readUid(parser, pkgName); readUid(parser, vers, pkgName); } else { Slog.w(TAG, "Unknown element under <pkg>: " + parser.getName()); Loading @@ -768,7 +773,7 @@ public class AppOpsService extends IAppOpsService.Stub { } } void readUid(XmlPullParser parser, String pkgName) throws NumberFormatException, void readUid(XmlPullParser parser, int vers, String pkgName) throws NumberFormatException, XmlPullParserException, IOException { int uid = Integer.parseInt(parser.getAttributeValue(null, "n")); int outerDepth = parser.getDepth(); Loading @@ -784,8 +789,13 @@ public class AppOpsService extends IAppOpsService.Stub { Op op = new Op(uid, pkgName, Integer.parseInt(parser.getAttributeValue(null, "n"))); String mode = parser.getAttributeValue(null, "m"); if (mode != null) { if (vers < CURRENT_VERSION && op.op != AppOpsManager.OP_POST_NOTIFICATION) { Slog.w(TAG, "AppOps vers " + vers + ": drop mode from " + pkgName + "/" + uid + " op " + op.op); } else { op.mode = Integer.parseInt(mode); } } String time = parser.getAttributeValue(null, "t"); if (time != null) { op.time = Long.parseLong(time); Loading Loading @@ -834,6 +844,7 @@ public class AppOpsService extends IAppOpsService.Stub { out.setOutput(stream, "utf-8"); out.startDocument(null, true); out.startTag(null, "app-ops"); out.attribute(null, "vers", Integer.toString(CURRENT_VERSION)); if (allOps != null) { String lastPkg = null; Loading