diff options
| author | 2023-07-11 12:08:53 +0000 | |
|---|---|---|
| committer | 2023-07-11 12:08:53 +0000 | |
| commit | 75b7e0a89088fc70d63db36a3d5e1457b5f1899b (patch) | |
| tree | 3cd376cc0907a0c4df251639b8a146a0feef6867 | |
| parent | 65a4216f991f5704868cc1f748ad95f87b3f73cd (diff) | |
| parent | 7283fc8be62c8d20c698319125c61bbbcb3aa037 (diff) | |
Merge "Create static inner class for UiModeManager" into udc-qpr-dev am: 7283fc8be6
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23892146
Change-Id: I068cfb10a4fa5a019bf35323282df7db7ce3e2a4
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -rw-r--r-- | core/java/android/app/UiModeManager.java | 195 |
1 files changed, 109 insertions, 86 deletions
diff --git a/core/java/android/app/UiModeManager.java b/core/java/android/app/UiModeManager.java index d90257a69281..0ccb9cddf58d 100644 --- a/core/java/android/app/UiModeManager.java +++ b/core/java/android/app/UiModeManager.java @@ -315,7 +315,7 @@ public class UiModeManager { @SystemApi public static final int MODE_NIGHT_CUSTOM_TYPE_BEDTIME = 1; - private IUiModeManager mService; + private static Globals sGlobals; /** * Context required for getting the opPackageName of API caller; maybe be {@code null} if the @@ -341,6 +341,60 @@ public class UiModeManager { mOnProjectionStateChangedListenerResourceManager = new OnProjectionStateChangedListenerResourceManager(); + private static class Globals extends IUiModeManagerCallback.Stub { + + private final IUiModeManager mService; + private final Object mGlobalsLock = new Object(); + + private float mContrast = ContrastUtils.CONTRAST_DEFAULT_VALUE; + + /** + * Map that stores user provided {@link ContrastChangeListener} callbacks, + * and the executors on which these callbacks should be called. + */ + private final ArrayMap<ContrastChangeListener, Executor> + mContrastChangeListeners = new ArrayMap<>(); + + Globals(IUiModeManager service) { + mService = service; + try { + mService.addCallback(this); + mContrast = mService.getContrast(); + } catch (RemoteException e) { + Log.e(TAG, "Setup failed: UiModeManagerService is dead", e); + } + } + + private float getContrast() { + synchronized (mGlobalsLock) { + return mContrast; + } + } + + private void addContrastChangeListener(ContrastChangeListener listener, Executor executor) { + synchronized (mGlobalsLock) { + mContrastChangeListeners.put(listener, executor); + } + } + + private void removeContrastChangeListener(ContrastChangeListener listener) { + synchronized (mGlobalsLock) { + mContrastChangeListeners.remove(listener); + } + } + + @Override + public void notifyContrastChanged(float contrast) { + synchronized (mGlobalsLock) { + // if value changed in the settings, update the cached value and notify listeners + if (Math.abs(mContrast - contrast) < 1e-10) return; + mContrast = contrast; + mContrastChangeListeners.forEach((listener, executor) -> executor.execute( + () -> listener.onContrastChanged(contrast))); + } + } + } + /** * Define constants and conversions between {@link ContrastLevel}s and contrast values. * <p> @@ -407,43 +461,18 @@ public class UiModeManager { } } - /** - * Map that stores user provided {@link ContrastChangeListener} callbacks, - * and the executors on which these callbacks should be called. - */ - private final ArrayMap<ContrastChangeListener, Executor> - mContrastChangeListeners = new ArrayMap<>(); - private float mContrast; - - private final IUiModeManagerCallback.Stub mCallback = new IUiModeManagerCallback.Stub() { - @Override - public void notifyContrastChanged(float contrast) { - final ArrayMap<ContrastChangeListener, Executor> listeners; - synchronized (mLock) { - // if value changed in the settings, update the cached value and notify listeners - if (Math.abs(mContrast - contrast) < 1e-10) return; - mContrast = contrast; - listeners = new ArrayMap<>(mContrastChangeListeners); - } - listeners.forEach((listener, executor) -> executor.execute( - () -> listener.onContrastChanged(mContrast))); - } - }; - @UnsupportedAppUsage /*package*/ UiModeManager() throws ServiceNotFoundException { this(null /* context */); } /*package*/ UiModeManager(Context context) throws ServiceNotFoundException { - mService = IUiModeManager.Stub.asInterface( + IUiModeManager service = IUiModeManager.Stub.asInterface( ServiceManager.getServiceOrThrow(Context.UI_MODE_SERVICE)); mContext = context; - try { - mService.addCallback(mCallback); - mContrast = mService.getContrast(); - } catch (RemoteException e) { - Log.e(TAG, "Setup failed: UiModeManagerService is dead", e); + if (service == null) return; + synchronized (mLock) { + if (sGlobals == null) sGlobals = new Globals(service); } } @@ -533,9 +562,9 @@ public class UiModeManager { @SystemApi @RequiresPermission(android.Manifest.permission.ENTER_CAR_MODE_PRIORITIZED) public void enableCarMode(@IntRange(from = 0) int priority, @EnableCarMode int flags) { - if (mService != null) { + if (sGlobals != null) { try { - mService.enableCarMode(flags, priority, + sGlobals.mService.enableCarMode(flags, priority, mContext == null ? null : mContext.getOpPackageName()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); @@ -585,9 +614,9 @@ public class UiModeManager { * @param flags One of the disable car mode flags. */ public void disableCarMode(@DisableCarMode int flags) { - if (mService != null) { + if (sGlobals != null) { try { - mService.disableCarModeByCallingPackage(flags, + sGlobals.mService.disableCarModeByCallingPackage(flags, mContext == null ? null : mContext.getOpPackageName()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); @@ -606,9 +635,9 @@ public class UiModeManager { * {@link Configuration#UI_MODE_TYPE_VR_HEADSET Configuration.UI_MODE_TYPE_VR_HEADSET}. */ public int getCurrentModeType() { - if (mService != null) { + if (sGlobals != null) { try { - return mService.getCurrentModeType(); + return sGlobals.mService.getCurrentModeType(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -653,9 +682,9 @@ public class UiModeManager { * @see #setApplicationNightMode(int) */ public void setNightMode(@NightMode int mode) { - if (mService != null) { + if (sGlobals != null) { try { - mService.setNightMode(mode); + sGlobals.mService.setNightMode(mode); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -674,9 +703,9 @@ public class UiModeManager { @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_DAY_NIGHT_MODE) public void setNightModeCustomType(@NightModeCustomType int nightModeCustomType) { - if (mService != null) { + if (sGlobals != null) { try { - mService.setNightModeCustomType(nightModeCustomType); + sGlobals.mService.setNightModeCustomType(nightModeCustomType); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -693,9 +722,9 @@ public class UiModeManager { @SystemApi @RequiresPermission(android.Manifest.permission.MODIFY_DAY_NIGHT_MODE) public @NightModeCustomReturnType int getNightModeCustomType() { - if (mService != null) { + if (sGlobals != null) { try { - return mService.getNightModeCustomType(); + return sGlobals.mService.getNightModeCustomType(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -732,9 +761,9 @@ public class UiModeManager { * @see #setNightMode(int) */ public void setApplicationNightMode(@NightMode int mode) { - if (mService != null) { + if (sGlobals != null) { try { - mService.setApplicationNightMode(mode); + sGlobals.mService.setApplicationNightMode(mode); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -757,9 +786,9 @@ public class UiModeManager { * @see #setNightMode(int) */ public @NightMode int getNightMode() { - if (mService != null) { + if (sGlobals != null) { try { - return mService.getNightMode(); + return sGlobals.mService.getNightMode(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -774,9 +803,9 @@ public class UiModeManager { */ @TestApi public boolean isUiModeLocked() { - if (mService != null) { + if (sGlobals != null) { try { - return mService.isUiModeLocked(); + return sGlobals.mService.isUiModeLocked(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -796,9 +825,9 @@ public class UiModeManager { */ @TestApi public boolean isNightModeLocked() { - if (mService != null) { + if (sGlobals != null) { try { - return mService.isNightModeLocked(); + return sGlobals.mService.isNightModeLocked(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -820,9 +849,10 @@ public class UiModeManager { @RequiresPermission(android.Manifest.permission.MODIFY_DAY_NIGHT_MODE) public boolean setNightModeActivatedForCustomMode(@NightModeCustomType int nightModeCustomType, boolean active) { - if (mService != null) { + if (sGlobals != null) { try { - return mService.setNightModeActivatedForCustomMode(nightModeCustomType, active); + return sGlobals.mService.setNightModeActivatedForCustomMode( + nightModeCustomType, active); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -838,9 +868,9 @@ public class UiModeManager { */ @RequiresPermission(android.Manifest.permission.MODIFY_DAY_NIGHT_MODE) public boolean setNightModeActivated(boolean active) { - if (mService != null) { + if (sGlobals != null) { try { - return mService.setNightModeActivated(active); + return sGlobals.mService.setNightModeActivated(active); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -856,9 +886,9 @@ public class UiModeManager { */ @NonNull public LocalTime getCustomNightModeStart() { - if (mService != null) { + if (sGlobals != null) { try { - return LocalTime.ofNanoOfDay(mService.getCustomNightModeStart() * 1000); + return LocalTime.ofNanoOfDay(sGlobals.mService.getCustomNightModeStart() * 1000); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -874,9 +904,9 @@ public class UiModeManager { * @param time The time of the day Dark theme should activate */ public void setCustomNightModeStart(@NonNull LocalTime time) { - if (mService != null) { + if (sGlobals != null) { try { - mService.setCustomNightModeStart(time.toNanoOfDay() / 1000); + sGlobals.mService.setCustomNightModeStart(time.toNanoOfDay() / 1000); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -891,9 +921,9 @@ public class UiModeManager { */ @NonNull public LocalTime getCustomNightModeEnd() { - if (mService != null) { + if (sGlobals != null) { try { - return LocalTime.ofNanoOfDay(mService.getCustomNightModeEnd() * 1000); + return LocalTime.ofNanoOfDay(sGlobals.mService.getCustomNightModeEnd() * 1000); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -909,9 +939,9 @@ public class UiModeManager { * @param time The time of the day Dark theme should deactivate */ public void setCustomNightModeEnd(@NonNull LocalTime time) { - if (mService != null) { + if (sGlobals != null) { try { - mService.setCustomNightModeEnd(time.toNanoOfDay() / 1000); + sGlobals.mService.setCustomNightModeEnd(time.toNanoOfDay() / 1000); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -976,9 +1006,9 @@ public class UiModeManager { @RequiresPermission(value = android.Manifest.permission.TOGGLE_AUTOMOTIVE_PROJECTION, conditional = true) public boolean requestProjection(@ProjectionType int projectionType) { - if (mService != null) { + if (sGlobals != null) { try { - return mService.requestProjection(new Binder(), projectionType, + return sGlobals.mService.requestProjection(new Binder(), projectionType, mContext.getOpPackageName()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); @@ -1005,9 +1035,10 @@ public class UiModeManager { @RequiresPermission(value = android.Manifest.permission.TOGGLE_AUTOMOTIVE_PROJECTION, conditional = true) public boolean releaseProjection(@ProjectionType int projectionType) { - if (mService != null) { + if (sGlobals != null) { try { - return mService.releaseProjection(projectionType, mContext.getOpPackageName()); + return sGlobals.mService.releaseProjection( + projectionType, mContext.getOpPackageName()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -1028,9 +1059,9 @@ public class UiModeManager { @RequiresPermission(android.Manifest.permission.READ_PROJECTION_STATE) @NonNull public Set<String> getProjectingPackages(@ProjectionType int projectionType) { - if (mService != null) { + if (sGlobals != null) { try { - return new ArraySet<>(mService.getProjectingPackages(projectionType)); + return new ArraySet<>(sGlobals.mService.getProjectingPackages(projectionType)); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -1046,9 +1077,9 @@ public class UiModeManager { @SystemApi @RequiresPermission(android.Manifest.permission.READ_PROJECTION_STATE) public @ProjectionType int getActiveProjectionTypes() { - if (mService != null) { + if (sGlobals != null) { try { - return mService.getActiveProjectionTypes(); + return sGlobals.mService.getActiveProjectionTypes(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -1076,11 +1107,12 @@ public class UiModeManager { Slog.i(TAG, "Attempted to add listener that was already added."); return; } - if (mService != null) { + if (sGlobals != null) { InnerListener innerListener = new InnerListener(executor, listener, mOnProjectionStateChangedListenerResourceManager); try { - mService.addOnProjectionStateChangedListener(innerListener, projectionType); + sGlobals.mService.addOnProjectionStateChangedListener( + innerListener, projectionType); mProjectionStateListenerMap.put(listener, innerListener); } catch (RemoteException e) { mOnProjectionStateChangedListenerResourceManager.remove(innerListener); @@ -1107,9 +1139,9 @@ public class UiModeManager { Slog.i(TAG, "Attempted to remove listener that was not added."); return; } - if (mService != null) { + if (sGlobals != null) { try { - mService.removeOnProjectionStateChangedListener(innerListener); + sGlobals.mService.removeOnProjectionStateChangedListener(innerListener); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -1197,15 +1229,10 @@ public class UiModeManager { * <li> -1 corresponds to the minimum contrast </li> * <li> 1 corresponds to the maximum contrast </li> * </ul> - * - * - * */ @FloatRange(from = -1.0f, to = 1.0f) public float getContrast() { - synchronized (mLock) { - return mContrast; - } + return sGlobals.getContrast(); } /** @@ -1219,9 +1246,7 @@ public class UiModeManager { @NonNull ContrastChangeListener listener) { Objects.requireNonNull(executor); Objects.requireNonNull(listener); - synchronized (mLock) { - mContrastChangeListeners.put(listener, executor); - } + sGlobals.addContrastChangeListener(listener, executor); } /** @@ -1232,8 +1257,6 @@ public class UiModeManager { */ public void removeContrastChangeListener(@NonNull ContrastChangeListener listener) { Objects.requireNonNull(listener); - synchronized (mLock) { - mContrastChangeListeners.remove(listener); - } + sGlobals.removeContrastChangeListener(listener); } } |