Loading core/java/android/content/pm/ApplicationInfo.java +18 −0 Original line number Diff line number Diff line Loading @@ -1100,6 +1100,18 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { */ public String appComponentFactory; /** * Resource id of {@link com.android.internal.R.styleable.AndroidManifestProvider_icon} * @hide */ public int iconRes; /** * Resource id of {@link com.android.internal.R.styleable.AndroidManifestProvider_roundIcon} * @hide */ public int roundIconRes; /** * The category of this app. Categories are used to cluster multiple apps * together into meaningful groups, such as when summarizing battery, Loading Loading @@ -1579,6 +1591,8 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { classLoaderName = orig.classLoaderName; splitClassLoaderNames = orig.splitClassLoaderNames; appComponentFactory = orig.appComponentFactory; iconRes = orig.iconRes; roundIconRes = orig.roundIconRes; compileSdkVersion = orig.compileSdkVersion; compileSdkVersionCodename = orig.compileSdkVersionCodename; mHiddenApiPolicy = orig.mHiddenApiPolicy; Loading Loading @@ -1658,6 +1672,8 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { dest.writeInt(compileSdkVersion); dest.writeString(compileSdkVersionCodename); dest.writeString(appComponentFactory); dest.writeInt(iconRes); dest.writeInt(roundIconRes); dest.writeInt(mHiddenApiPolicy); dest.writeInt(hiddenUntilInstalled ? 1 : 0); dest.writeString(zygotePreloadName); Loading Loading @@ -1732,6 +1748,8 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { compileSdkVersion = source.readInt(); compileSdkVersionCodename = source.readString(); appComponentFactory = source.readString(); iconRes = source.readInt(); roundIconRes = source.readInt(); mHiddenApiPolicy = source.readInt(); hiddenUntilInstalled = source.readInt() != 0; zygotePreloadName = source.readString(); Loading core/java/android/content/pm/PackageParser.java +47 −6 Original line number Diff line number Diff line Loading @@ -49,6 +49,8 @@ import android.annotation.StringRes; import android.annotation.TestApi; import android.annotation.UnsupportedAppUsage; import android.app.ActivityTaskManager; import android.app.ActivityThread; import android.app.ResourcesManager; import android.content.ComponentName; import android.content.Intent; import android.content.IntentFilter; Loading @@ -69,6 +71,7 @@ import android.os.FileUtils; import android.os.Parcel; import android.os.Parcelable; import android.os.PatternMatcher; import android.os.RemoteException; import android.os.SystemClock; import android.os.SystemProperties; import android.os.Trace; Loading @@ -92,6 +95,7 @@ import android.util.Slog; import android.util.SparseArray; import android.util.TypedValue; import android.util.apk.ApkSignatureVerifier; import android.view.Display; import android.view.Gravity; import com.android.internal.R; Loading Loading @@ -320,6 +324,8 @@ public class PackageParser { private int mParseError = PackageManager.INSTALL_SUCCEEDED; private static boolean sCompatibilityModeEnabled = true; private static boolean sUseRoundIcon = false; private static final int PARSE_DEFAULT_INSTALL_LOCATION = PackageInfo.INSTALL_LOCATION_UNSPECIFIED; private static final int PARSE_DEFAULT_TARGET_SANDBOX = 1; Loading Loading @@ -3437,6 +3443,11 @@ public class PackageParser { TypedArray sa = res.obtainAttributes(parser, com.android.internal.R.styleable.AndroidManifestApplication); ai.iconRes = sa.getResourceId( com.android.internal.R.styleable.AndroidManifestApplication_icon, 0); ai.roundIconRes = sa.getResourceId( com.android.internal.R.styleable.AndroidManifestApplication_roundIcon, 0); if (!parsePackageItemInfo(owner, ai, outError, "<application>", sa, false /*nameRequired*/, com.android.internal.R.styleable.AndroidManifestApplication_name, Loading Loading @@ -4240,9 +4251,7 @@ public class PackageParser { } } final boolean useRoundIcon = Resources.getSystem().getBoolean(com.android.internal.R.bool.config_useRoundIcon); int roundIconVal = useRoundIcon ? sa.getResourceId(roundIconRes, 0) : 0; int roundIconVal = sUseRoundIcon ? sa.getResourceId(roundIconRes, 0) : 0; if (roundIconVal != 0) { outInfo.icon = roundIconVal; outInfo.nonLocalizedLabel = null; Loading Loading @@ -5750,9 +5759,7 @@ public class PackageParser { outInfo.nonLocalizedLabel = v.coerceToString(); } final boolean useRoundIcon = Resources.getSystem().getBoolean(com.android.internal.R.bool.config_useRoundIcon); int roundIconVal = useRoundIcon ? sa.getResourceId( int roundIconVal = sUseRoundIcon ? sa.getResourceId( com.android.internal.R.styleable.AndroidManifestIntentFilter_roundIcon, 0) : 0; if (roundIconVal != 0) { outInfo.icon = roundIconVal; Loading Loading @@ -7744,6 +7751,7 @@ public class PackageParser { } ai.seInfoUser = SELinuxUtil.assignSeinfoUser(state); ai.resourceDirs = state.overlayPaths; ai.icon = (sUseRoundIcon && ai.roundIconRes != 0) ? ai.roundIconRes : ai.iconRes; } @UnsupportedAppUsage Loading Loading @@ -8349,6 +8357,39 @@ public class PackageParser { sCompatibilityModeEnabled = compatibilityModeEnabled; } /** * @hide */ public static void readConfigUseRoundIcon(Resources r) { if (r != null) { sUseRoundIcon = r.getBoolean(com.android.internal.R.bool.config_useRoundIcon); return; } ApplicationInfo androidAppInfo; try { androidAppInfo = ActivityThread.getPackageManager().getApplicationInfo( "android", 0 /* flags */, UserHandle.myUserId()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } Resources systemResources = Resources.getSystem(); // Create in-flight as this overlayable resource is only used when config changes Resources overlayableRes = ResourcesManager.getInstance().getResources(null, null, null, androidAppInfo.resourceDirs, androidAppInfo.sharedLibraryFiles, Display.DEFAULT_DISPLAY, null, systemResources.getCompatibilityInfo(), systemResources.getClassLoader()); sUseRoundIcon = overlayableRes.getBoolean(com.android.internal.R.bool.config_useRoundIcon); } public static class PackageParserException extends Exception { public final int error; Loading services/core/java/com/android/server/am/ActivityManagerService.java +4 −1 Original line number Diff line number Diff line Loading @@ -213,6 +213,7 @@ import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManagerInternal; import android.content.pm.PackageManagerInternal.CheckPermissionDelegate; import android.content.pm.PackageParser; import android.content.pm.ParceledListSlice; import android.content.pm.PathPermission; import android.content.pm.PermissionInfo; Loading Loading @@ -18474,7 +18475,9 @@ public class ActivityManagerService extends IActivityManager.Stub void updateApplicationInfoLocked(@NonNull List<String> packagesToUpdate, int userId) { final boolean updateFrameworkRes = packagesToUpdate.contains("android"); if (updateFrameworkRes) { PackageParser.readConfigUseRoundIcon(null); } mProcessList.updateApplicationInfoLocked(packagesToUpdate, userId, updateFrameworkRes); if (updateFrameworkRes) { services/core/java/com/android/server/pm/PackageManagerService.java +3 −0 Original line number Diff line number Diff line Loading @@ -3236,6 +3236,8 @@ public class PackageManagerService extends IPackageManager.Stub // once we have a booted system. mInstaller.setWarnIfHeld(mPackages); PackageParser.readConfigUseRoundIcon(mContext.getResources()); mServiceStartWithDelay = SystemClock.uptimeMillis() + (60 * 1000L); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); Loading Loading @@ -20907,6 +20909,7 @@ public class PackageManagerService extends IPackageManager.Stub mContext.getContentResolver(), android.provider.Settings.Global.COMPATIBILITY_MODE, 1) == 1; PackageParser.setCompatibilityModeEnabled(compatibilityModeEnabled); if (DEBUG_SETTINGS) { Log.d(TAG, "compatibility mode:" + compatibilityModeEnabled); } Loading
core/java/android/content/pm/ApplicationInfo.java +18 −0 Original line number Diff line number Diff line Loading @@ -1100,6 +1100,18 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { */ public String appComponentFactory; /** * Resource id of {@link com.android.internal.R.styleable.AndroidManifestProvider_icon} * @hide */ public int iconRes; /** * Resource id of {@link com.android.internal.R.styleable.AndroidManifestProvider_roundIcon} * @hide */ public int roundIconRes; /** * The category of this app. Categories are used to cluster multiple apps * together into meaningful groups, such as when summarizing battery, Loading Loading @@ -1579,6 +1591,8 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { classLoaderName = orig.classLoaderName; splitClassLoaderNames = orig.splitClassLoaderNames; appComponentFactory = orig.appComponentFactory; iconRes = orig.iconRes; roundIconRes = orig.roundIconRes; compileSdkVersion = orig.compileSdkVersion; compileSdkVersionCodename = orig.compileSdkVersionCodename; mHiddenApiPolicy = orig.mHiddenApiPolicy; Loading Loading @@ -1658,6 +1672,8 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { dest.writeInt(compileSdkVersion); dest.writeString(compileSdkVersionCodename); dest.writeString(appComponentFactory); dest.writeInt(iconRes); dest.writeInt(roundIconRes); dest.writeInt(mHiddenApiPolicy); dest.writeInt(hiddenUntilInstalled ? 1 : 0); dest.writeString(zygotePreloadName); Loading Loading @@ -1732,6 +1748,8 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { compileSdkVersion = source.readInt(); compileSdkVersionCodename = source.readString(); appComponentFactory = source.readString(); iconRes = source.readInt(); roundIconRes = source.readInt(); mHiddenApiPolicy = source.readInt(); hiddenUntilInstalled = source.readInt() != 0; zygotePreloadName = source.readString(); Loading
core/java/android/content/pm/PackageParser.java +47 −6 Original line number Diff line number Diff line Loading @@ -49,6 +49,8 @@ import android.annotation.StringRes; import android.annotation.TestApi; import android.annotation.UnsupportedAppUsage; import android.app.ActivityTaskManager; import android.app.ActivityThread; import android.app.ResourcesManager; import android.content.ComponentName; import android.content.Intent; import android.content.IntentFilter; Loading @@ -69,6 +71,7 @@ import android.os.FileUtils; import android.os.Parcel; import android.os.Parcelable; import android.os.PatternMatcher; import android.os.RemoteException; import android.os.SystemClock; import android.os.SystemProperties; import android.os.Trace; Loading @@ -92,6 +95,7 @@ import android.util.Slog; import android.util.SparseArray; import android.util.TypedValue; import android.util.apk.ApkSignatureVerifier; import android.view.Display; import android.view.Gravity; import com.android.internal.R; Loading Loading @@ -320,6 +324,8 @@ public class PackageParser { private int mParseError = PackageManager.INSTALL_SUCCEEDED; private static boolean sCompatibilityModeEnabled = true; private static boolean sUseRoundIcon = false; private static final int PARSE_DEFAULT_INSTALL_LOCATION = PackageInfo.INSTALL_LOCATION_UNSPECIFIED; private static final int PARSE_DEFAULT_TARGET_SANDBOX = 1; Loading Loading @@ -3437,6 +3443,11 @@ public class PackageParser { TypedArray sa = res.obtainAttributes(parser, com.android.internal.R.styleable.AndroidManifestApplication); ai.iconRes = sa.getResourceId( com.android.internal.R.styleable.AndroidManifestApplication_icon, 0); ai.roundIconRes = sa.getResourceId( com.android.internal.R.styleable.AndroidManifestApplication_roundIcon, 0); if (!parsePackageItemInfo(owner, ai, outError, "<application>", sa, false /*nameRequired*/, com.android.internal.R.styleable.AndroidManifestApplication_name, Loading Loading @@ -4240,9 +4251,7 @@ public class PackageParser { } } final boolean useRoundIcon = Resources.getSystem().getBoolean(com.android.internal.R.bool.config_useRoundIcon); int roundIconVal = useRoundIcon ? sa.getResourceId(roundIconRes, 0) : 0; int roundIconVal = sUseRoundIcon ? sa.getResourceId(roundIconRes, 0) : 0; if (roundIconVal != 0) { outInfo.icon = roundIconVal; outInfo.nonLocalizedLabel = null; Loading Loading @@ -5750,9 +5759,7 @@ public class PackageParser { outInfo.nonLocalizedLabel = v.coerceToString(); } final boolean useRoundIcon = Resources.getSystem().getBoolean(com.android.internal.R.bool.config_useRoundIcon); int roundIconVal = useRoundIcon ? sa.getResourceId( int roundIconVal = sUseRoundIcon ? sa.getResourceId( com.android.internal.R.styleable.AndroidManifestIntentFilter_roundIcon, 0) : 0; if (roundIconVal != 0) { outInfo.icon = roundIconVal; Loading Loading @@ -7744,6 +7751,7 @@ public class PackageParser { } ai.seInfoUser = SELinuxUtil.assignSeinfoUser(state); ai.resourceDirs = state.overlayPaths; ai.icon = (sUseRoundIcon && ai.roundIconRes != 0) ? ai.roundIconRes : ai.iconRes; } @UnsupportedAppUsage Loading Loading @@ -8349,6 +8357,39 @@ public class PackageParser { sCompatibilityModeEnabled = compatibilityModeEnabled; } /** * @hide */ public static void readConfigUseRoundIcon(Resources r) { if (r != null) { sUseRoundIcon = r.getBoolean(com.android.internal.R.bool.config_useRoundIcon); return; } ApplicationInfo androidAppInfo; try { androidAppInfo = ActivityThread.getPackageManager().getApplicationInfo( "android", 0 /* flags */, UserHandle.myUserId()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } Resources systemResources = Resources.getSystem(); // Create in-flight as this overlayable resource is only used when config changes Resources overlayableRes = ResourcesManager.getInstance().getResources(null, null, null, androidAppInfo.resourceDirs, androidAppInfo.sharedLibraryFiles, Display.DEFAULT_DISPLAY, null, systemResources.getCompatibilityInfo(), systemResources.getClassLoader()); sUseRoundIcon = overlayableRes.getBoolean(com.android.internal.R.bool.config_useRoundIcon); } public static class PackageParserException extends Exception { public final int error; Loading
services/core/java/com/android/server/am/ActivityManagerService.java +4 −1 Original line number Diff line number Diff line Loading @@ -213,6 +213,7 @@ import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManagerInternal; import android.content.pm.PackageManagerInternal.CheckPermissionDelegate; import android.content.pm.PackageParser; import android.content.pm.ParceledListSlice; import android.content.pm.PathPermission; import android.content.pm.PermissionInfo; Loading Loading @@ -18474,7 +18475,9 @@ public class ActivityManagerService extends IActivityManager.Stub void updateApplicationInfoLocked(@NonNull List<String> packagesToUpdate, int userId) { final boolean updateFrameworkRes = packagesToUpdate.contains("android"); if (updateFrameworkRes) { PackageParser.readConfigUseRoundIcon(null); } mProcessList.updateApplicationInfoLocked(packagesToUpdate, userId, updateFrameworkRes); if (updateFrameworkRes) {
services/core/java/com/android/server/pm/PackageManagerService.java +3 −0 Original line number Diff line number Diff line Loading @@ -3236,6 +3236,8 @@ public class PackageManagerService extends IPackageManager.Stub // once we have a booted system. mInstaller.setWarnIfHeld(mPackages); PackageParser.readConfigUseRoundIcon(mContext.getResources()); mServiceStartWithDelay = SystemClock.uptimeMillis() + (60 * 1000L); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); Loading Loading @@ -20907,6 +20909,7 @@ public class PackageManagerService extends IPackageManager.Stub mContext.getContentResolver(), android.provider.Settings.Global.COMPATIBILITY_MODE, 1) == 1; PackageParser.setCompatibilityModeEnabled(compatibilityModeEnabled); if (DEBUG_SETTINGS) { Log.d(TAG, "compatibility mode:" + compatibilityModeEnabled); }