am d364859c: Merge "Add version identifier to app ops." into jb-mr2-dev
* commit 'd364859ce657c6b096cadc703485ccef7979c582': Add version identifier to app ops.
This commit is contained in:
@@ -63,6 +63,8 @@ public class AppOpsService extends IAppOpsService.Stub {
|
|||||||
// Write at most every 30 minutes.
|
// Write at most every 30 minutes.
|
||||||
static final long WRITE_DELAY = DEBUG ? 1000 : 30*60*1000;
|
static final long WRITE_DELAY = DEBUG ? 1000 : 30*60*1000;
|
||||||
|
|
||||||
|
static final int CURRENT_VERSION = 1;
|
||||||
|
|
||||||
Context mContext;
|
Context mContext;
|
||||||
final AtomicFile mFile;
|
final AtomicFile mFile;
|
||||||
final Handler mHandler;
|
final Handler mHandler;
|
||||||
@@ -631,6 +633,9 @@ public class AppOpsService extends IAppOpsService.Stub {
|
|||||||
throw new IllegalStateException("no start tag found");
|
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();
|
int outerDepth = parser.getDepth();
|
||||||
while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
|
while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
|
||||||
&& (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
|
&& (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
|
||||||
@@ -640,7 +645,7 @@ public class AppOpsService extends IAppOpsService.Stub {
|
|||||||
|
|
||||||
String tagName = parser.getName();
|
String tagName = parser.getName();
|
||||||
if (tagName.equals("pkg")) {
|
if (tagName.equals("pkg")) {
|
||||||
readPackage(parser);
|
readPackage(parser, vers);
|
||||||
} else {
|
} else {
|
||||||
Slog.w(TAG, "Unknown element under <app-ops>: "
|
Slog.w(TAG, "Unknown element under <app-ops>: "
|
||||||
+ parser.getName());
|
+ parser.getName());
|
||||||
@@ -673,7 +678,7 @@ public class AppOpsService extends IAppOpsService.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void readPackage(XmlPullParser parser) throws NumberFormatException,
|
void readPackage(XmlPullParser parser, int vers) throws NumberFormatException,
|
||||||
XmlPullParserException, IOException {
|
XmlPullParserException, IOException {
|
||||||
String pkgName = parser.getAttributeValue(null, "n");
|
String pkgName = parser.getAttributeValue(null, "n");
|
||||||
int outerDepth = parser.getDepth();
|
int outerDepth = parser.getDepth();
|
||||||
@@ -686,7 +691,7 @@ public class AppOpsService extends IAppOpsService.Stub {
|
|||||||
|
|
||||||
String tagName = parser.getName();
|
String tagName = parser.getName();
|
||||||
if (tagName.equals("uid")) {
|
if (tagName.equals("uid")) {
|
||||||
readUid(parser, pkgName);
|
readUid(parser, vers, pkgName);
|
||||||
} else {
|
} else {
|
||||||
Slog.w(TAG, "Unknown element under <pkg>: "
|
Slog.w(TAG, "Unknown element under <pkg>: "
|
||||||
+ parser.getName());
|
+ parser.getName());
|
||||||
@@ -695,7 +700,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 {
|
XmlPullParserException, IOException {
|
||||||
int uid = Integer.parseInt(parser.getAttributeValue(null, "n"));
|
int uid = Integer.parseInt(parser.getAttributeValue(null, "n"));
|
||||||
int outerDepth = parser.getDepth();
|
int outerDepth = parser.getDepth();
|
||||||
@@ -711,8 +716,13 @@ public class AppOpsService extends IAppOpsService.Stub {
|
|||||||
Op op = new Op(Integer.parseInt(parser.getAttributeValue(null, "n")));
|
Op op = new Op(Integer.parseInt(parser.getAttributeValue(null, "n")));
|
||||||
String mode = parser.getAttributeValue(null, "m");
|
String mode = parser.getAttributeValue(null, "m");
|
||||||
if (mode != null) {
|
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);
|
op.mode = Integer.parseInt(mode);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
String time = parser.getAttributeValue(null, "t");
|
String time = parser.getAttributeValue(null, "t");
|
||||||
if (time != null) {
|
if (time != null) {
|
||||||
op.time = Long.parseLong(time);
|
op.time = Long.parseLong(time);
|
||||||
@@ -761,6 +771,7 @@ public class AppOpsService extends IAppOpsService.Stub {
|
|||||||
out.setOutput(stream, "utf-8");
|
out.setOutput(stream, "utf-8");
|
||||||
out.startDocument(null, true);
|
out.startDocument(null, true);
|
||||||
out.startTag(null, "app-ops");
|
out.startTag(null, "app-ops");
|
||||||
|
out.attribute(null, "vers", Integer.toString(CURRENT_VERSION));
|
||||||
|
|
||||||
if (allOps != null) {
|
if (allOps != null) {
|
||||||
String lastPkg = null;
|
String lastPkg = null;
|
||||||
|
|||||||
Reference in New Issue
Block a user