Loading services/core/java/com/android/server/om/OverlayManagerService.java +21 −14 Original line number Diff line number Diff line Loading @@ -694,11 +694,17 @@ public final class OverlayManagerService extends SystemService { private final class OverlayChangeListener implements OverlayManagerServiceImpl.OverlayChangeListener { @Override public void onOverlaysChanged(@NonNull final String targetPackageName, final int userId) { public void onChanged(@NonNull final String targetPackageName, final int userId, boolean targetChanged, boolean overlayChanged) { schedulePersistSettings(); FgThread.getHandler().post(() -> { // Update the targets' overlays if a change to the target or an overlay occurs if (targetChanged || overlayChanged) { updateAssets(userId, targetPackageName); } // Create the broadcast if the overlay changes if (overlayChanged) { final Intent intent = new Intent(Intent.ACTION_OVERLAY_CHANGED, Uri.fromParts("package", targetPackageName, null)); intent.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); Loading @@ -709,11 +715,12 @@ public final class OverlayManagerService extends SystemService { try { ActivityManager.getService().broadcastIntent(null, intent, null, null, 0, null, null, null, android.app.AppOpsManager.OP_NONE, null, false, false, userId); null, null, null, android.app.AppOpsManager.OP_NONE, null, false, false, userId); } catch (RemoteException e) { // Intentionally left empty. } } }); } } Loading services/core/java/com/android/server/om/OverlayManagerServiceImpl.java +37 −33 Original line number Diff line number Diff line Loading @@ -207,9 +207,7 @@ final class OverlayManagerServiceImpl { Slog.d(TAG, "onTargetPackageAdded packageName=" + packageName + " userId=" + userId); } if (updateAllOverlaysForTarget(packageName, userId, 0)) { mListener.onOverlaysChanged(packageName, userId); } updateAllOverlaysForTarget(packageName, userId, 0); } void onTargetPackageChanged(@NonNull final String packageName, final int userId) { Loading @@ -217,9 +215,7 @@ final class OverlayManagerServiceImpl { Slog.d(TAG, "onTargetPackageChanged packageName=" + packageName + " userId=" + userId); } if (updateAllOverlaysForTarget(packageName, userId, 0)) { mListener.onOverlaysChanged(packageName, userId); } updateAllOverlaysForTarget(packageName, userId, 0); } void onTargetPackageUpgrading(@NonNull final String packageName, final int userId) { Loading @@ -228,9 +224,7 @@ final class OverlayManagerServiceImpl { + userId); } if (updateAllOverlaysForTarget(packageName, userId, FLAG_TARGET_IS_UPGRADING)) { mListener.onOverlaysChanged(packageName, userId); } updateAllOverlaysForTarget(packageName, userId, FLAG_TARGET_IS_UPGRADING); } void onTargetPackageUpgraded(@NonNull final String packageName, final int userId) { Loading @@ -238,9 +232,7 @@ final class OverlayManagerServiceImpl { Slog.d(TAG, "onTargetPackageUpgraded packageName=" + packageName + " userId=" + userId); } if (updateAllOverlaysForTarget(packageName, userId, 0)) { mListener.onOverlaysChanged(packageName, userId); } updateAllOverlaysForTarget(packageName, userId, 0); } void onTargetPackageRemoved(@NonNull final String packageName, final int userId) { Loading @@ -248,17 +240,17 @@ final class OverlayManagerServiceImpl { Slog.d(TAG, "onTargetPackageRemoved packageName=" + packageName + " userId=" + userId); } if (updateAllOverlaysForTarget(packageName, userId, 0)) { mListener.onOverlaysChanged(packageName, userId); } updateAllOverlaysForTarget(packageName, userId, 0); } /** * Returns true if the settings were modified for this target. * Calls OverlayChangeListener#onChanged if the settings for the overlay target were modified, * and calls OverlayChangeListener#onTargetChanged to signal a change in the target package that * requires updating target overlays. */ private boolean updateAllOverlaysForTarget(@NonNull final String targetPackageName, private void updateAllOverlaysForTarget(@NonNull final String targetPackageName, final int userId, final int flags) { boolean modified = false; boolean overlayModified = false; final List<OverlayInfo> ois = mSettings.getOverlaysForTarget(targetPackageName, userId); final int N = ois.size(); for (int i = 0; i < N; i++) { Loading @@ -266,18 +258,19 @@ final class OverlayManagerServiceImpl { final PackageInfo overlayPackage = mPackageManager.getPackageInfo(oi.packageName, userId); if (overlayPackage == null) { modified |= mSettings.remove(oi.packageName, oi.userId); overlayModified |= mSettings.remove(oi.packageName, oi.userId); removeIdmapIfPossible(oi); } else { try { modified |= updateState(targetPackageName, oi.packageName, userId, flags); overlayModified |= updateState(targetPackageName, oi.packageName, userId, flags); } catch (OverlayManagerSettings.BadKeyException e) { Slog.e(TAG, "failed to update settings", e); modified |= mSettings.remove(oi.packageName, userId); overlayModified |= mSettings.remove(oi.packageName, userId); } } } return modified; mListener.onChanged(targetPackageName, userId, /* targetChanged */ true, overlayModified); } void onOverlayPackageAdded(@NonNull final String packageName, final int userId) { Loading @@ -298,7 +291,8 @@ final class OverlayManagerServiceImpl { overlayPackage.overlayCategory); try { if (updateState(overlayPackage.overlayTarget, packageName, userId, 0)) { mListener.onOverlaysChanged(overlayPackage.overlayTarget, userId); mListener.onChanged(overlayPackage.overlayTarget, userId, /* targetChanged */ false, /* overlayChanged */ true); } } catch (OverlayManagerSettings.BadKeyException e) { Slog.e(TAG, "failed to update settings", e); Loading @@ -314,7 +308,8 @@ final class OverlayManagerServiceImpl { try { final OverlayInfo oi = mSettings.getOverlayInfo(packageName, userId); if (updateState(oi.targetPackageName, packageName, userId, 0)) { mListener.onOverlaysChanged(oi.targetPackageName, userId); mListener.onChanged(oi.targetPackageName, userId, /* targetChanged */ false, /* overlayChanged */ true); } } catch (OverlayManagerSettings.BadKeyException e) { Slog.e(TAG, "failed to update settings", e); Loading @@ -331,7 +326,8 @@ final class OverlayManagerServiceImpl { final OverlayInfo oi = mSettings.getOverlayInfo(packageName, userId); if (updateState(oi.targetPackageName, packageName, userId, FLAG_OVERLAY_IS_UPGRADING)) { removeIdmapIfPossible(oi); mListener.onOverlaysChanged(oi.targetPackageName, userId); mListener.onChanged(oi.targetPackageName, userId, /* targetChanged */ false, /* overlayChanged */ true); } } catch (OverlayManagerSettings.BadKeyException e) { Slog.e(TAG, "failed to update settings", e); Loading Loading @@ -365,7 +361,8 @@ final class OverlayManagerServiceImpl { } if (updateState(pkg.overlayTarget, packageName, userId, 0)) { mListener.onOverlaysChanged(pkg.overlayTarget, userId); mListener.onChanged(pkg.overlayTarget, userId, /* targetChanged */ false, /* overlayChanged */ true); } } catch (OverlayManagerSettings.BadKeyException e) { Slog.e(TAG, "failed to update settings", e); Loading @@ -379,7 +376,8 @@ final class OverlayManagerServiceImpl { removeIdmapIfPossible(overlayInfo); if (overlayInfo.isEnabled()) { // Only trigger updates if the overlay was enabled. mListener.onOverlaysChanged(overlayInfo.targetPackageName, userId); mListener.onChanged(overlayInfo.targetPackageName, userId, /* targetChanged */ false, /* overlayChanged */ true); } } } catch (OverlayManagerSettings.BadKeyException e) { Loading Loading @@ -427,7 +425,8 @@ final class OverlayManagerServiceImpl { modified |= updateState(oi.targetPackageName, oi.packageName, userId, 0); if (modified) { mListener.onOverlaysChanged(oi.targetPackageName, userId); mListener.onChanged(oi.targetPackageName, userId, /* targetChanged */ false, /* overlayChanged */ true); } return true; } catch (OverlayManagerSettings.BadKeyException e) { Loading Loading @@ -486,7 +485,8 @@ final class OverlayManagerServiceImpl { modified |= updateState(targetPackageName, packageName, userId, 0); if (modified) { mListener.onOverlaysChanged(targetPackageName, userId); mListener.onChanged(targetPackageName, userId, /* targetChanged */ false, /* overlayChanged */ true); } return true; } catch (OverlayManagerSettings.BadKeyException e) { Loading Loading @@ -519,7 +519,8 @@ final class OverlayManagerServiceImpl { } if (mSettings.setPriority(packageName, newParentPackageName, userId)) { mListener.onOverlaysChanged(overlayPackage.overlayTarget, userId); mListener.onChanged(overlayPackage.overlayTarget, userId, /* targetChanged */ false, /* overlayChanged */ true); } return true; } Loading @@ -539,7 +540,8 @@ final class OverlayManagerServiceImpl { } if (mSettings.setHighestPriority(packageName, userId)) { mListener.onOverlaysChanged(overlayPackage.overlayTarget, userId); mListener.onChanged(overlayPackage.overlayTarget, userId, /* targetChanged */ false, /* overlayChanged */ true); } return true; } Loading @@ -559,7 +561,8 @@ final class OverlayManagerServiceImpl { } if (mSettings.setLowestPriority(packageName, userId)) { mListener.onOverlaysChanged(overlayPackage.overlayTarget, userId); mListener.onChanged(overlayPackage.overlayTarget, userId, /* targetChanged */ false, /* overlayChanged */ true); } return true; } Loading Loading @@ -690,7 +693,8 @@ final class OverlayManagerServiceImpl { } interface OverlayChangeListener { void onOverlaysChanged(@NonNull String targetPackage, int userId); void onChanged(@NonNull String targetPackage, int userId, boolean targetChanged, boolean overlayChanged); } interface PackageManagerHelper { Loading Loading
services/core/java/com/android/server/om/OverlayManagerService.java +21 −14 Original line number Diff line number Diff line Loading @@ -694,11 +694,17 @@ public final class OverlayManagerService extends SystemService { private final class OverlayChangeListener implements OverlayManagerServiceImpl.OverlayChangeListener { @Override public void onOverlaysChanged(@NonNull final String targetPackageName, final int userId) { public void onChanged(@NonNull final String targetPackageName, final int userId, boolean targetChanged, boolean overlayChanged) { schedulePersistSettings(); FgThread.getHandler().post(() -> { // Update the targets' overlays if a change to the target or an overlay occurs if (targetChanged || overlayChanged) { updateAssets(userId, targetPackageName); } // Create the broadcast if the overlay changes if (overlayChanged) { final Intent intent = new Intent(Intent.ACTION_OVERLAY_CHANGED, Uri.fromParts("package", targetPackageName, null)); intent.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); Loading @@ -709,11 +715,12 @@ public final class OverlayManagerService extends SystemService { try { ActivityManager.getService().broadcastIntent(null, intent, null, null, 0, null, null, null, android.app.AppOpsManager.OP_NONE, null, false, false, userId); null, null, null, android.app.AppOpsManager.OP_NONE, null, false, false, userId); } catch (RemoteException e) { // Intentionally left empty. } } }); } } Loading
services/core/java/com/android/server/om/OverlayManagerServiceImpl.java +37 −33 Original line number Diff line number Diff line Loading @@ -207,9 +207,7 @@ final class OverlayManagerServiceImpl { Slog.d(TAG, "onTargetPackageAdded packageName=" + packageName + " userId=" + userId); } if (updateAllOverlaysForTarget(packageName, userId, 0)) { mListener.onOverlaysChanged(packageName, userId); } updateAllOverlaysForTarget(packageName, userId, 0); } void onTargetPackageChanged(@NonNull final String packageName, final int userId) { Loading @@ -217,9 +215,7 @@ final class OverlayManagerServiceImpl { Slog.d(TAG, "onTargetPackageChanged packageName=" + packageName + " userId=" + userId); } if (updateAllOverlaysForTarget(packageName, userId, 0)) { mListener.onOverlaysChanged(packageName, userId); } updateAllOverlaysForTarget(packageName, userId, 0); } void onTargetPackageUpgrading(@NonNull final String packageName, final int userId) { Loading @@ -228,9 +224,7 @@ final class OverlayManagerServiceImpl { + userId); } if (updateAllOverlaysForTarget(packageName, userId, FLAG_TARGET_IS_UPGRADING)) { mListener.onOverlaysChanged(packageName, userId); } updateAllOverlaysForTarget(packageName, userId, FLAG_TARGET_IS_UPGRADING); } void onTargetPackageUpgraded(@NonNull final String packageName, final int userId) { Loading @@ -238,9 +232,7 @@ final class OverlayManagerServiceImpl { Slog.d(TAG, "onTargetPackageUpgraded packageName=" + packageName + " userId=" + userId); } if (updateAllOverlaysForTarget(packageName, userId, 0)) { mListener.onOverlaysChanged(packageName, userId); } updateAllOverlaysForTarget(packageName, userId, 0); } void onTargetPackageRemoved(@NonNull final String packageName, final int userId) { Loading @@ -248,17 +240,17 @@ final class OverlayManagerServiceImpl { Slog.d(TAG, "onTargetPackageRemoved packageName=" + packageName + " userId=" + userId); } if (updateAllOverlaysForTarget(packageName, userId, 0)) { mListener.onOverlaysChanged(packageName, userId); } updateAllOverlaysForTarget(packageName, userId, 0); } /** * Returns true if the settings were modified for this target. * Calls OverlayChangeListener#onChanged if the settings for the overlay target were modified, * and calls OverlayChangeListener#onTargetChanged to signal a change in the target package that * requires updating target overlays. */ private boolean updateAllOverlaysForTarget(@NonNull final String targetPackageName, private void updateAllOverlaysForTarget(@NonNull final String targetPackageName, final int userId, final int flags) { boolean modified = false; boolean overlayModified = false; final List<OverlayInfo> ois = mSettings.getOverlaysForTarget(targetPackageName, userId); final int N = ois.size(); for (int i = 0; i < N; i++) { Loading @@ -266,18 +258,19 @@ final class OverlayManagerServiceImpl { final PackageInfo overlayPackage = mPackageManager.getPackageInfo(oi.packageName, userId); if (overlayPackage == null) { modified |= mSettings.remove(oi.packageName, oi.userId); overlayModified |= mSettings.remove(oi.packageName, oi.userId); removeIdmapIfPossible(oi); } else { try { modified |= updateState(targetPackageName, oi.packageName, userId, flags); overlayModified |= updateState(targetPackageName, oi.packageName, userId, flags); } catch (OverlayManagerSettings.BadKeyException e) { Slog.e(TAG, "failed to update settings", e); modified |= mSettings.remove(oi.packageName, userId); overlayModified |= mSettings.remove(oi.packageName, userId); } } } return modified; mListener.onChanged(targetPackageName, userId, /* targetChanged */ true, overlayModified); } void onOverlayPackageAdded(@NonNull final String packageName, final int userId) { Loading @@ -298,7 +291,8 @@ final class OverlayManagerServiceImpl { overlayPackage.overlayCategory); try { if (updateState(overlayPackage.overlayTarget, packageName, userId, 0)) { mListener.onOverlaysChanged(overlayPackage.overlayTarget, userId); mListener.onChanged(overlayPackage.overlayTarget, userId, /* targetChanged */ false, /* overlayChanged */ true); } } catch (OverlayManagerSettings.BadKeyException e) { Slog.e(TAG, "failed to update settings", e); Loading @@ -314,7 +308,8 @@ final class OverlayManagerServiceImpl { try { final OverlayInfo oi = mSettings.getOverlayInfo(packageName, userId); if (updateState(oi.targetPackageName, packageName, userId, 0)) { mListener.onOverlaysChanged(oi.targetPackageName, userId); mListener.onChanged(oi.targetPackageName, userId, /* targetChanged */ false, /* overlayChanged */ true); } } catch (OverlayManagerSettings.BadKeyException e) { Slog.e(TAG, "failed to update settings", e); Loading @@ -331,7 +326,8 @@ final class OverlayManagerServiceImpl { final OverlayInfo oi = mSettings.getOverlayInfo(packageName, userId); if (updateState(oi.targetPackageName, packageName, userId, FLAG_OVERLAY_IS_UPGRADING)) { removeIdmapIfPossible(oi); mListener.onOverlaysChanged(oi.targetPackageName, userId); mListener.onChanged(oi.targetPackageName, userId, /* targetChanged */ false, /* overlayChanged */ true); } } catch (OverlayManagerSettings.BadKeyException e) { Slog.e(TAG, "failed to update settings", e); Loading Loading @@ -365,7 +361,8 @@ final class OverlayManagerServiceImpl { } if (updateState(pkg.overlayTarget, packageName, userId, 0)) { mListener.onOverlaysChanged(pkg.overlayTarget, userId); mListener.onChanged(pkg.overlayTarget, userId, /* targetChanged */ false, /* overlayChanged */ true); } } catch (OverlayManagerSettings.BadKeyException e) { Slog.e(TAG, "failed to update settings", e); Loading @@ -379,7 +376,8 @@ final class OverlayManagerServiceImpl { removeIdmapIfPossible(overlayInfo); if (overlayInfo.isEnabled()) { // Only trigger updates if the overlay was enabled. mListener.onOverlaysChanged(overlayInfo.targetPackageName, userId); mListener.onChanged(overlayInfo.targetPackageName, userId, /* targetChanged */ false, /* overlayChanged */ true); } } } catch (OverlayManagerSettings.BadKeyException e) { Loading Loading @@ -427,7 +425,8 @@ final class OverlayManagerServiceImpl { modified |= updateState(oi.targetPackageName, oi.packageName, userId, 0); if (modified) { mListener.onOverlaysChanged(oi.targetPackageName, userId); mListener.onChanged(oi.targetPackageName, userId, /* targetChanged */ false, /* overlayChanged */ true); } return true; } catch (OverlayManagerSettings.BadKeyException e) { Loading Loading @@ -486,7 +485,8 @@ final class OverlayManagerServiceImpl { modified |= updateState(targetPackageName, packageName, userId, 0); if (modified) { mListener.onOverlaysChanged(targetPackageName, userId); mListener.onChanged(targetPackageName, userId, /* targetChanged */ false, /* overlayChanged */ true); } return true; } catch (OverlayManagerSettings.BadKeyException e) { Loading Loading @@ -519,7 +519,8 @@ final class OverlayManagerServiceImpl { } if (mSettings.setPriority(packageName, newParentPackageName, userId)) { mListener.onOverlaysChanged(overlayPackage.overlayTarget, userId); mListener.onChanged(overlayPackage.overlayTarget, userId, /* targetChanged */ false, /* overlayChanged */ true); } return true; } Loading @@ -539,7 +540,8 @@ final class OverlayManagerServiceImpl { } if (mSettings.setHighestPriority(packageName, userId)) { mListener.onOverlaysChanged(overlayPackage.overlayTarget, userId); mListener.onChanged(overlayPackage.overlayTarget, userId, /* targetChanged */ false, /* overlayChanged */ true); } return true; } Loading @@ -559,7 +561,8 @@ final class OverlayManagerServiceImpl { } if (mSettings.setLowestPriority(packageName, userId)) { mListener.onOverlaysChanged(overlayPackage.overlayTarget, userId); mListener.onChanged(overlayPackage.overlayTarget, userId, /* targetChanged */ false, /* overlayChanged */ true); } return true; } Loading Loading @@ -690,7 +693,8 @@ final class OverlayManagerServiceImpl { } interface OverlayChangeListener { void onOverlaysChanged(@NonNull String targetPackage, int userId); void onChanged(@NonNull String targetPackage, int userId, boolean targetChanged, boolean overlayChanged); } interface PackageManagerHelper { Loading