Merge "[STOPSHIP] PackageManager: Add package setting flag for N upgrade" into nyc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
7d47079acf
@@ -2225,9 +2225,10 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
// When upgrading form pre-N, we need to handle package extraction like first boot,
|
||||
// When upgrading from pre-N, we need to handle package extraction like first boot,
|
||||
// as there is no profiling data available.
|
||||
mIsPreNUpgrade = ver.sdkVersion <= Build.VERSION_CODES.M;
|
||||
mIsPreNUpgrade = !mSettings.isNWorkDone();
|
||||
mSettings.setNWorkDone();
|
||||
|
||||
// Collect vendor overlay packages.
|
||||
// (Do this before scanning any apps.)
|
||||
|
||||
@@ -190,6 +190,7 @@ final class Settings {
|
||||
"all-intent-filter-verifications";
|
||||
private static final String TAG_DEFAULT_BROWSER = "default-browser";
|
||||
private static final String TAG_VERSION = "version";
|
||||
private static final String TAG_N_WORK = "n-work";
|
||||
|
||||
private static final String ATTR_NAME = "name";
|
||||
private static final String ATTR_USER = "user";
|
||||
@@ -214,6 +215,7 @@ final class Settings {
|
||||
private static final String ATTR_VOLUME_UUID = "volumeUuid";
|
||||
private static final String ATTR_SDK_VERSION = "sdkVersion";
|
||||
private static final String ATTR_DATABASE_VERSION = "databaseVersion";
|
||||
private static final String ATTR_DONE = "done";
|
||||
|
||||
// Bookkeeping for restored permission grants
|
||||
private static final String TAG_RESTORED_RUNTIME_PERMISSIONS = "restored-perms";
|
||||
@@ -386,6 +388,17 @@ final class Settings {
|
||||
|
||||
public final KeySetManagerService mKeySetManagerService = new KeySetManagerService(mPackages);
|
||||
|
||||
/**
|
||||
* Used to track whether N+ work has been done. This is similar to the file-system level
|
||||
* and denotes that first-boot or upgrade-to-N work has been done.
|
||||
*
|
||||
* Note: the flag has been added to a) allow tracking while an API level check is impossible
|
||||
* and b) to merge upgrade as well as first boot (because the flag is false, by default).
|
||||
*
|
||||
* STOPSHIP: b/27872764
|
||||
*/
|
||||
private boolean mIsNWorkDone = false;
|
||||
|
||||
Settings(Object lock) {
|
||||
this(Environment.getDataDirectory(), lock);
|
||||
}
|
||||
@@ -2327,6 +2340,10 @@ final class Settings {
|
||||
|
||||
mKeySetManagerService.writeKeySetManagerServiceLPr(serializer);
|
||||
|
||||
serializer.startTag(null, TAG_N_WORK);
|
||||
serializer.attribute(null, ATTR_DONE, Boolean.toString(mIsNWorkDone));
|
||||
serializer.endTag(null, TAG_N_WORK);
|
||||
|
||||
serializer.endTag(null, "packages");
|
||||
|
||||
serializer.endDocument();
|
||||
@@ -2860,7 +2877,8 @@ final class Settings {
|
||||
ver.sdkVersion = XmlUtils.readIntAttribute(parser, ATTR_SDK_VERSION);
|
||||
ver.databaseVersion = XmlUtils.readIntAttribute(parser, ATTR_SDK_VERSION);
|
||||
ver.fingerprint = XmlUtils.readStringAttribute(parser, ATTR_FINGERPRINT);
|
||||
|
||||
} else if (TAG_N_WORK.equals(tagName)) {
|
||||
mIsNWorkDone = XmlUtils.readBooleanAttribute(parser, ATTR_DONE, false);
|
||||
} else {
|
||||
Slog.w(PackageManagerService.TAG, "Unknown element under <packages>: "
|
||||
+ parser.getName());
|
||||
@@ -4140,6 +4158,14 @@ final class Settings {
|
||||
return res;
|
||||
}
|
||||
|
||||
public boolean isNWorkDone() {
|
||||
return mIsNWorkDone;
|
||||
}
|
||||
|
||||
void setNWorkDone() {
|
||||
mIsNWorkDone = true;
|
||||
}
|
||||
|
||||
static void printFlags(PrintWriter pw, int val, Object[] spec) {
|
||||
pw.print("[ ");
|
||||
for (int i=0; i<spec.length; i+=2) {
|
||||
|
||||
Reference in New Issue
Block a user