Loading services/core/java/com/android/server/pm/PackageManagerService.java +3 −2 Original line number Original line Diff line number Diff line Loading @@ -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. // as there is no profiling data available. mIsPreNUpgrade = ver.sdkVersion <= Build.VERSION_CODES.M; mIsPreNUpgrade = !mSettings.isNWorkDone(); mSettings.setNWorkDone(); // Collect vendor overlay packages. // Collect vendor overlay packages. // (Do this before scanning any apps.) // (Do this before scanning any apps.) Loading services/core/java/com/android/server/pm/Settings.java +27 −1 Original line number Original line Diff line number Diff line Loading @@ -190,6 +190,7 @@ final class Settings { "all-intent-filter-verifications"; "all-intent-filter-verifications"; private static final String TAG_DEFAULT_BROWSER = "default-browser"; private static final String TAG_DEFAULT_BROWSER = "default-browser"; private static final String TAG_VERSION = "version"; 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_NAME = "name"; private static final String ATTR_USER = "user"; private static final String ATTR_USER = "user"; Loading @@ -214,6 +215,7 @@ final class Settings { private static final String ATTR_VOLUME_UUID = "volumeUuid"; private static final String ATTR_VOLUME_UUID = "volumeUuid"; private static final String ATTR_SDK_VERSION = "sdkVersion"; private static final String ATTR_SDK_VERSION = "sdkVersion"; private static final String ATTR_DATABASE_VERSION = "databaseVersion"; private static final String ATTR_DATABASE_VERSION = "databaseVersion"; private static final String ATTR_DONE = "done"; // Bookkeeping for restored permission grants // Bookkeeping for restored permission grants private static final String TAG_RESTORED_RUNTIME_PERMISSIONS = "restored-perms"; private static final String TAG_RESTORED_RUNTIME_PERMISSIONS = "restored-perms"; Loading Loading @@ -386,6 +388,17 @@ final class Settings { public final KeySetManagerService mKeySetManagerService = new KeySetManagerService(mPackages); 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) { Settings(Object lock) { this(Environment.getDataDirectory(), lock); this(Environment.getDataDirectory(), lock); } } Loading Loading @@ -2327,6 +2340,10 @@ final class Settings { mKeySetManagerService.writeKeySetManagerServiceLPr(serializer); 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.endTag(null, "packages"); serializer.endDocument(); serializer.endDocument(); Loading Loading @@ -2860,7 +2877,8 @@ final class Settings { ver.sdkVersion = XmlUtils.readIntAttribute(parser, ATTR_SDK_VERSION); ver.sdkVersion = XmlUtils.readIntAttribute(parser, ATTR_SDK_VERSION); ver.databaseVersion = XmlUtils.readIntAttribute(parser, ATTR_SDK_VERSION); ver.databaseVersion = XmlUtils.readIntAttribute(parser, ATTR_SDK_VERSION); ver.fingerprint = XmlUtils.readStringAttribute(parser, ATTR_FINGERPRINT); ver.fingerprint = XmlUtils.readStringAttribute(parser, ATTR_FINGERPRINT); } else if (TAG_N_WORK.equals(tagName)) { mIsNWorkDone = XmlUtils.readBooleanAttribute(parser, ATTR_DONE, false); } else { } else { Slog.w(PackageManagerService.TAG, "Unknown element under <packages>: " Slog.w(PackageManagerService.TAG, "Unknown element under <packages>: " + parser.getName()); + parser.getName()); Loading Loading @@ -4140,6 +4158,14 @@ final class Settings { return res; return res; } } public boolean isNWorkDone() { return mIsNWorkDone; } void setNWorkDone() { mIsNWorkDone = true; } static void printFlags(PrintWriter pw, int val, Object[] spec) { static void printFlags(PrintWriter pw, int val, Object[] spec) { pw.print("[ "); pw.print("[ "); for (int i=0; i<spec.length; i+=2) { for (int i=0; i<spec.length; i+=2) { Loading Loading
services/core/java/com/android/server/pm/PackageManagerService.java +3 −2 Original line number Original line Diff line number Diff line Loading @@ -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. // as there is no profiling data available. mIsPreNUpgrade = ver.sdkVersion <= Build.VERSION_CODES.M; mIsPreNUpgrade = !mSettings.isNWorkDone(); mSettings.setNWorkDone(); // Collect vendor overlay packages. // Collect vendor overlay packages. // (Do this before scanning any apps.) // (Do this before scanning any apps.) Loading
services/core/java/com/android/server/pm/Settings.java +27 −1 Original line number Original line Diff line number Diff line Loading @@ -190,6 +190,7 @@ final class Settings { "all-intent-filter-verifications"; "all-intent-filter-verifications"; private static final String TAG_DEFAULT_BROWSER = "default-browser"; private static final String TAG_DEFAULT_BROWSER = "default-browser"; private static final String TAG_VERSION = "version"; 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_NAME = "name"; private static final String ATTR_USER = "user"; private static final String ATTR_USER = "user"; Loading @@ -214,6 +215,7 @@ final class Settings { private static final String ATTR_VOLUME_UUID = "volumeUuid"; private static final String ATTR_VOLUME_UUID = "volumeUuid"; private static final String ATTR_SDK_VERSION = "sdkVersion"; private static final String ATTR_SDK_VERSION = "sdkVersion"; private static final String ATTR_DATABASE_VERSION = "databaseVersion"; private static final String ATTR_DATABASE_VERSION = "databaseVersion"; private static final String ATTR_DONE = "done"; // Bookkeeping for restored permission grants // Bookkeeping for restored permission grants private static final String TAG_RESTORED_RUNTIME_PERMISSIONS = "restored-perms"; private static final String TAG_RESTORED_RUNTIME_PERMISSIONS = "restored-perms"; Loading Loading @@ -386,6 +388,17 @@ final class Settings { public final KeySetManagerService mKeySetManagerService = new KeySetManagerService(mPackages); 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) { Settings(Object lock) { this(Environment.getDataDirectory(), lock); this(Environment.getDataDirectory(), lock); } } Loading Loading @@ -2327,6 +2340,10 @@ final class Settings { mKeySetManagerService.writeKeySetManagerServiceLPr(serializer); 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.endTag(null, "packages"); serializer.endDocument(); serializer.endDocument(); Loading Loading @@ -2860,7 +2877,8 @@ final class Settings { ver.sdkVersion = XmlUtils.readIntAttribute(parser, ATTR_SDK_VERSION); ver.sdkVersion = XmlUtils.readIntAttribute(parser, ATTR_SDK_VERSION); ver.databaseVersion = XmlUtils.readIntAttribute(parser, ATTR_SDK_VERSION); ver.databaseVersion = XmlUtils.readIntAttribute(parser, ATTR_SDK_VERSION); ver.fingerprint = XmlUtils.readStringAttribute(parser, ATTR_FINGERPRINT); ver.fingerprint = XmlUtils.readStringAttribute(parser, ATTR_FINGERPRINT); } else if (TAG_N_WORK.equals(tagName)) { mIsNWorkDone = XmlUtils.readBooleanAttribute(parser, ATTR_DONE, false); } else { } else { Slog.w(PackageManagerService.TAG, "Unknown element under <packages>: " Slog.w(PackageManagerService.TAG, "Unknown element under <packages>: " + parser.getName()); + parser.getName()); Loading Loading @@ -4140,6 +4158,14 @@ final class Settings { return res; return res; } } public boolean isNWorkDone() { return mIsNWorkDone; } void setNWorkDone() { mIsNWorkDone = true; } static void printFlags(PrintWriter pw, int val, Object[] spec) { static void printFlags(PrintWriter pw, int val, Object[] spec) { pw.print("[ "); pw.print("[ "); for (int i=0; i<spec.length; i+=2) { for (int i=0; i<spec.length; i+=2) { Loading