Loading core/java/android/content/om/IOverlayManager.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -88,6 +88,11 @@ interface IOverlayManager { */ boolean setEnabled(in String packageName, in boolean enable, in int userId); /** * Version of setEnabled that will also disable any other overlays for the target package. */ boolean setEnabledExclusive(in String packageName, in boolean enable, in int userId); /** * Change the priority of the given overlay to be just higher than the * overlay with package name newParentPackageName. Both overlay packages Loading services/core/java/com/android/server/om/OverlayManagerService.java +19 −0 Original line number Diff line number Diff line Loading @@ -503,6 +503,25 @@ public final class OverlayManagerService extends SystemService { } } @Override public boolean setEnabledExclusive(@Nullable final String packageName, final boolean enable, int userId) throws RemoteException { enforceChangeOverlayPackagesPermission("setEnabled"); userId = handleIncomingUser(userId, "setEnabled"); if (packageName == null) { return false; } final long ident = Binder.clearCallingIdentity(); try { synchronized (mLock) { return mImpl.setEnabledExclusive(packageName, enable, userId); } } finally { Binder.restoreCallingIdentity(ident); } } @Override public boolean setPriority(@Nullable final String packageName, @Nullable final String parentPackageName, int userId) throws RemoteException { Loading services/core/java/com/android/server/om/OverlayManagerServiceImpl.java +32 −0 Original line number Diff line number Diff line Loading @@ -301,6 +301,38 @@ final class OverlayManagerServiceImpl { } } boolean setEnabledExclusive(@NonNull final String packageName, final boolean enable, final int userId) { if (DEBUG) { Slog.d(TAG, String.format("setEnabled packageName=%s enable=%s userId=%d", packageName, enable, userId)); } final PackageInfo overlayPackage = mPackageManager.getPackageInfo(packageName, userId); if (overlayPackage == null) { return false; } try { final OverlayInfo oi = mSettings.getOverlayInfo(packageName, userId); List<OverlayInfo> allOverlays = getOverlayInfosForTarget(oi.targetPackageName, userId); // Disable all other overlays. allOverlays.remove(oi); for (int i = 0; i < allOverlays.size(); i++) { mSettings.setEnabled(allOverlays.get(i).packageName, userId, false); } final PackageInfo targetPackage = mPackageManager.getPackageInfo(oi.targetPackageName, userId); mSettings.setEnabled(packageName, userId, enable); updateState(targetPackage, overlayPackage, userId); return true; } catch (OverlayManagerSettings.BadKeyException e) { return false; } } boolean setPriority(@NonNull final String packageName, @NonNull final String newParentPackageName, final int userId) { return mSettings.setPriority(packageName, newParentPackageName, userId); Loading Loading
core/java/android/content/om/IOverlayManager.aidl +5 −0 Original line number Diff line number Diff line Loading @@ -88,6 +88,11 @@ interface IOverlayManager { */ boolean setEnabled(in String packageName, in boolean enable, in int userId); /** * Version of setEnabled that will also disable any other overlays for the target package. */ boolean setEnabledExclusive(in String packageName, in boolean enable, in int userId); /** * Change the priority of the given overlay to be just higher than the * overlay with package name newParentPackageName. Both overlay packages Loading
services/core/java/com/android/server/om/OverlayManagerService.java +19 −0 Original line number Diff line number Diff line Loading @@ -503,6 +503,25 @@ public final class OverlayManagerService extends SystemService { } } @Override public boolean setEnabledExclusive(@Nullable final String packageName, final boolean enable, int userId) throws RemoteException { enforceChangeOverlayPackagesPermission("setEnabled"); userId = handleIncomingUser(userId, "setEnabled"); if (packageName == null) { return false; } final long ident = Binder.clearCallingIdentity(); try { synchronized (mLock) { return mImpl.setEnabledExclusive(packageName, enable, userId); } } finally { Binder.restoreCallingIdentity(ident); } } @Override public boolean setPriority(@Nullable final String packageName, @Nullable final String parentPackageName, int userId) throws RemoteException { Loading
services/core/java/com/android/server/om/OverlayManagerServiceImpl.java +32 −0 Original line number Diff line number Diff line Loading @@ -301,6 +301,38 @@ final class OverlayManagerServiceImpl { } } boolean setEnabledExclusive(@NonNull final String packageName, final boolean enable, final int userId) { if (DEBUG) { Slog.d(TAG, String.format("setEnabled packageName=%s enable=%s userId=%d", packageName, enable, userId)); } final PackageInfo overlayPackage = mPackageManager.getPackageInfo(packageName, userId); if (overlayPackage == null) { return false; } try { final OverlayInfo oi = mSettings.getOverlayInfo(packageName, userId); List<OverlayInfo> allOverlays = getOverlayInfosForTarget(oi.targetPackageName, userId); // Disable all other overlays. allOverlays.remove(oi); for (int i = 0; i < allOverlays.size(); i++) { mSettings.setEnabled(allOverlays.get(i).packageName, userId, false); } final PackageInfo targetPackage = mPackageManager.getPackageInfo(oi.targetPackageName, userId); mSettings.setEnabled(packageName, userId, enable); updateState(targetPackage, overlayPackage, userId); return true; } catch (OverlayManagerSettings.BadKeyException e) { return false; } } boolean setPriority(@NonNull final String packageName, @NonNull final String newParentPackageName, final int userId) { return mSettings.setPriority(packageName, newParentPackageName, userId); Loading