Loading core/java/android/app/LoadedApk.java +1 −1 Original line number Diff line number Diff line Loading @@ -286,7 +286,7 @@ public final class LoadedApk { final String apkName = path.substring(path.lastIndexOf(File.separator)); boolean match = false; for (String oldPath : oldPaths) { final String oldApkName = oldPath.substring(path.lastIndexOf(File.separator)); final String oldApkName = oldPath.substring(oldPath.lastIndexOf(File.separator)); if (apkName.equals(oldApkName)) { match = true; break; Loading packages/SettingsLib/src/com/android/settingslib/applications/InterestingConfigChanges.java +2 −1 Original line number Diff line number Diff line Loading @@ -31,7 +31,8 @@ public class InterestingConfigChanges { public InterestingConfigChanges(int extraFlags) { mFlags = extraFlags | ActivityInfo.CONFIG_LOCALE | ActivityInfo.CONFIG_UI_MODE | ActivityInfo.CONFIG_SCREEN_LAYOUT; | ActivityInfo.CONFIG_UI_MODE | ActivityInfo.CONFIG_SCREEN_LAYOUT | ActivityInfo.CONFIG_ASSETS_PATHS; } public boolean applyNewConfig(Resources res) { Loading services/core/java/com/android/server/om/OverlayManagerService.java +29 −1 Original line number Diff line number Diff line Loading @@ -44,8 +44,11 @@ import android.os.IBinder; import android.os.RemoteException; import android.os.ResultReceiver; import android.os.ShellCallback; import android.os.SystemProperties; import android.os.UserHandle; import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; import android.util.AtomicFile; import android.util.Slog; import android.util.SparseArray; Loading @@ -70,6 +73,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; /** Loading Loading @@ -193,6 +197,14 @@ public final class OverlayManagerService extends SystemService { static final String PERMISSION_DENIED = "Operation not permitted for user shell"; /** * The system property that specifies the default overlays to apply. * This is a semicolon separated list of package names. * * Ex: com.android.vendor.overlay_one;com.android.vendor.overlay_two */ private static final String DEFAULT_OVERLAYS_PROP = "ro.boot.vendor.overlay.theme"; private final Object mLock = new Object(); private final AtomicFile mSettingsFile; Loading @@ -216,7 +228,8 @@ public final class OverlayManagerService extends SystemService { mUserManager = UserManagerService.getInstance(); IdmapManager im = new IdmapManager(installer); mSettings = new OverlayManagerSettings(); mImpl = new OverlayManagerServiceImpl(mPackageManager, im, mSettings); mImpl = new OverlayManagerServiceImpl(mPackageManager, im, mSettings, getDefaultOverlayPackages()); final IntentFilter packageFilter = new IntentFilter(); packageFilter.addAction(ACTION_PACKAGE_ADDED); Loading Loading @@ -257,6 +270,21 @@ public final class OverlayManagerService extends SystemService { updateAssets(newUserId, targets); } private static Set<String> getDefaultOverlayPackages() { final String str = SystemProperties.get(DEFAULT_OVERLAYS_PROP); if (TextUtils.isEmpty(str)) { return Collections.emptySet(); } final ArraySet<String> defaultPackages = new ArraySet<>(); for (String packageName : str.split(";")) { if (!TextUtils.isEmpty(packageName)) { defaultPackages.add(packageName); } } return defaultPackages; } private final class PackageReceiver extends BroadcastReceiver { @Override public void onReceive(@NonNull final Context context, @NonNull final Intent intent) { Loading services/core/java/com/android/server/om/OverlayManagerServiceImpl.java +20 −6 Original line number Diff line number Diff line Loading @@ -27,8 +27,8 @@ import static com.android.server.om.OverlayManagerService.TAG; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.om.OverlayInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Slog; Loading @@ -53,13 +53,16 @@ final class OverlayManagerServiceImpl { private final PackageManagerHelper mPackageManager; private final IdmapManager mIdmapManager; private final OverlayManagerSettings mSettings; private final Set<String> mDefaultOverlays; OverlayManagerServiceImpl(@NonNull final PackageManagerHelper packageManager, @NonNull final IdmapManager idmapManager, @NonNull final OverlayManagerSettings settings) { @NonNull final OverlayManagerSettings settings, @NonNull final Set<String> defaultOverlays) { mPackageManager = packageManager; mIdmapManager = idmapManager; mSettings = settings; mDefaultOverlays = defaultOverlays; } /* Loading Loading @@ -92,12 +95,22 @@ final class OverlayManagerServiceImpl { final PackageInfo overlayPackage = overlayPackages.get(i); final OverlayInfo oi = storedOverlayInfos.get(overlayPackage.packageName); if (oi == null || !oi.targetPackageName.equals(overlayPackage.overlayTarget)) { if (oi != null) { packagesToUpdateAssets.add(oi.targetPackageName); } // Update the overlay if it didn't exist or had the wrong target package. mSettings.init(overlayPackage.packageName, newUserId, overlayPackage.overlayTarget, overlayPackage.applicationInfo.getBaseCodePath()); if (oi == null) { // This overlay does not exist in our settings. if (mDefaultOverlays.contains(overlayPackage.packageName)) { // Enable this overlay by default. mSettings.setEnabled(overlayPackage.packageName, newUserId, true); } } else { // The targetPackageName we have stored doesn't match the overlay's target. // Queue the old target for an update as well. packagesToUpdateAssets.add(oi.targetPackageName); } } try { Loading Loading @@ -132,7 +145,7 @@ final class OverlayManagerServiceImpl { } } return new ArrayList<String>(packagesToUpdateAssets); return new ArrayList<>(packagesToUpdateAssets); } void onUserRemoved(final int userId) { Loading Loading @@ -303,6 +316,7 @@ final class OverlayManagerServiceImpl { void onDump(@NonNull final PrintWriter pw) { mSettings.dump(pw); pw.println("Default overlays: " + TextUtils.join(";", mDefaultOverlays)); } List<String> getEnabledOverlayPackageNames(@NonNull final String targetPackageName, Loading services/core/java/com/android/server/om/OverlayManagerSettings.java +0 −1 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import java.util.Map; /** * Data structure representing the current state of all overlay packages in the Loading Loading
core/java/android/app/LoadedApk.java +1 −1 Original line number Diff line number Diff line Loading @@ -286,7 +286,7 @@ public final class LoadedApk { final String apkName = path.substring(path.lastIndexOf(File.separator)); boolean match = false; for (String oldPath : oldPaths) { final String oldApkName = oldPath.substring(path.lastIndexOf(File.separator)); final String oldApkName = oldPath.substring(oldPath.lastIndexOf(File.separator)); if (apkName.equals(oldApkName)) { match = true; break; Loading
packages/SettingsLib/src/com/android/settingslib/applications/InterestingConfigChanges.java +2 −1 Original line number Diff line number Diff line Loading @@ -31,7 +31,8 @@ public class InterestingConfigChanges { public InterestingConfigChanges(int extraFlags) { mFlags = extraFlags | ActivityInfo.CONFIG_LOCALE | ActivityInfo.CONFIG_UI_MODE | ActivityInfo.CONFIG_SCREEN_LAYOUT; | ActivityInfo.CONFIG_UI_MODE | ActivityInfo.CONFIG_SCREEN_LAYOUT | ActivityInfo.CONFIG_ASSETS_PATHS; } public boolean applyNewConfig(Resources res) { Loading
services/core/java/com/android/server/om/OverlayManagerService.java +29 −1 Original line number Diff line number Diff line Loading @@ -44,8 +44,11 @@ import android.os.IBinder; import android.os.RemoteException; import android.os.ResultReceiver; import android.os.ShellCallback; import android.os.SystemProperties; import android.os.UserHandle; import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; import android.util.AtomicFile; import android.util.Slog; import android.util.SparseArray; Loading @@ -70,6 +73,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; /** Loading Loading @@ -193,6 +197,14 @@ public final class OverlayManagerService extends SystemService { static final String PERMISSION_DENIED = "Operation not permitted for user shell"; /** * The system property that specifies the default overlays to apply. * This is a semicolon separated list of package names. * * Ex: com.android.vendor.overlay_one;com.android.vendor.overlay_two */ private static final String DEFAULT_OVERLAYS_PROP = "ro.boot.vendor.overlay.theme"; private final Object mLock = new Object(); private final AtomicFile mSettingsFile; Loading @@ -216,7 +228,8 @@ public final class OverlayManagerService extends SystemService { mUserManager = UserManagerService.getInstance(); IdmapManager im = new IdmapManager(installer); mSettings = new OverlayManagerSettings(); mImpl = new OverlayManagerServiceImpl(mPackageManager, im, mSettings); mImpl = new OverlayManagerServiceImpl(mPackageManager, im, mSettings, getDefaultOverlayPackages()); final IntentFilter packageFilter = new IntentFilter(); packageFilter.addAction(ACTION_PACKAGE_ADDED); Loading Loading @@ -257,6 +270,21 @@ public final class OverlayManagerService extends SystemService { updateAssets(newUserId, targets); } private static Set<String> getDefaultOverlayPackages() { final String str = SystemProperties.get(DEFAULT_OVERLAYS_PROP); if (TextUtils.isEmpty(str)) { return Collections.emptySet(); } final ArraySet<String> defaultPackages = new ArraySet<>(); for (String packageName : str.split(";")) { if (!TextUtils.isEmpty(packageName)) { defaultPackages.add(packageName); } } return defaultPackages; } private final class PackageReceiver extends BroadcastReceiver { @Override public void onReceive(@NonNull final Context context, @NonNull final Intent intent) { Loading
services/core/java/com/android/server/om/OverlayManagerServiceImpl.java +20 −6 Original line number Diff line number Diff line Loading @@ -27,8 +27,8 @@ import static com.android.server.om.OverlayManagerService.TAG; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.om.OverlayInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Slog; Loading @@ -53,13 +53,16 @@ final class OverlayManagerServiceImpl { private final PackageManagerHelper mPackageManager; private final IdmapManager mIdmapManager; private final OverlayManagerSettings mSettings; private final Set<String> mDefaultOverlays; OverlayManagerServiceImpl(@NonNull final PackageManagerHelper packageManager, @NonNull final IdmapManager idmapManager, @NonNull final OverlayManagerSettings settings) { @NonNull final OverlayManagerSettings settings, @NonNull final Set<String> defaultOverlays) { mPackageManager = packageManager; mIdmapManager = idmapManager; mSettings = settings; mDefaultOverlays = defaultOverlays; } /* Loading Loading @@ -92,12 +95,22 @@ final class OverlayManagerServiceImpl { final PackageInfo overlayPackage = overlayPackages.get(i); final OverlayInfo oi = storedOverlayInfos.get(overlayPackage.packageName); if (oi == null || !oi.targetPackageName.equals(overlayPackage.overlayTarget)) { if (oi != null) { packagesToUpdateAssets.add(oi.targetPackageName); } // Update the overlay if it didn't exist or had the wrong target package. mSettings.init(overlayPackage.packageName, newUserId, overlayPackage.overlayTarget, overlayPackage.applicationInfo.getBaseCodePath()); if (oi == null) { // This overlay does not exist in our settings. if (mDefaultOverlays.contains(overlayPackage.packageName)) { // Enable this overlay by default. mSettings.setEnabled(overlayPackage.packageName, newUserId, true); } } else { // The targetPackageName we have stored doesn't match the overlay's target. // Queue the old target for an update as well. packagesToUpdateAssets.add(oi.targetPackageName); } } try { Loading Loading @@ -132,7 +145,7 @@ final class OverlayManagerServiceImpl { } } return new ArrayList<String>(packagesToUpdateAssets); return new ArrayList<>(packagesToUpdateAssets); } void onUserRemoved(final int userId) { Loading Loading @@ -303,6 +316,7 @@ final class OverlayManagerServiceImpl { void onDump(@NonNull final PrintWriter pw) { mSettings.dump(pw); pw.println("Default overlays: " + TextUtils.join(";", mDefaultOverlays)); } List<String> getEnabledOverlayPackageNames(@NonNull final String targetPackageName, Loading
services/core/java/com/android/server/om/OverlayManagerSettings.java +0 −1 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import java.util.Map; /** * Data structure representing the current state of all overlay packages in the Loading