diff options
3 files changed, 53 insertions, 0 deletions
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 328b9719709b..cde820ad1b91 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -4577,6 +4577,17 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub return false; } + /** + * Called when always on magnification feature flag flips to check if the feature should be + * enabled for current user state. + */ + public void updateAlwaysOnMagnification() { + synchronized (mLock) { + readAlwaysOnMagnificationLocked(getCurrentUserState()); + } + } + + @GuardedBy("mLock") boolean readAlwaysOnMagnificationLocked(AccessibilityUserState userState) { final boolean isSettingsAlwaysOnEnabled = Settings.Secure.getIntForUser( mContext.getContentResolver(), diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/AlwaysOnMagnificationFeatureFlag.java b/services/accessibility/java/com/android/server/accessibility/magnification/AlwaysOnMagnificationFeatureFlag.java index ed45e7b449f4..16d2e6b47a54 100644 --- a/services/accessibility/java/com/android/server/accessibility/magnification/AlwaysOnMagnificationFeatureFlag.java +++ b/services/accessibility/java/com/android/server/accessibility/magnification/AlwaysOnMagnificationFeatureFlag.java @@ -16,10 +16,13 @@ package com.android.server.accessibility.magnification; +import android.annotation.NonNull; import android.provider.DeviceConfig; import com.android.internal.annotations.VisibleForTesting; +import java.util.concurrent.Executor; + /** * Encapsulates the feature flags for always on magnification. {@see DeviceConfig} * @@ -50,4 +53,39 @@ public class AlwaysOnMagnificationFeatureFlag { Boolean.toString(isEnabled), /* makeDefault= */ false); } + + /** + * Adds a listener for when the feature flag changes. + * + * <p>{@see DeviceConfig#addOnPropertiesChangedListener( + * String, Executor, DeviceConfig.OnPropertiesChangedListener)} + */ + @NonNull + public static DeviceConfig.OnPropertiesChangedListener addOnChangedListener( + @NonNull Executor executor, @NonNull Runnable listener) { + DeviceConfig.OnPropertiesChangedListener onChangedListener = + properties -> { + if (properties.getKeyset().contains( + FEATURE_NAME_ENABLE_ALWAYS_ON_MAGNIFICATION)) { + listener.run(); + } + }; + DeviceConfig.addOnPropertiesChangedListener( + NAMESPACE, + executor, + onChangedListener); + + return onChangedListener; + } + + /** + * Remove a listener for when the feature flag changes. + * + * <p>{@see DeviceConfig#addOnPropertiesChangedListener(String, Executor, + * DeviceConfig.OnPropertiesChangedListener)} + */ + public static void removeOnChangedListener( + @NonNull DeviceConfig.OnPropertiesChangedListener onChangedListener) { + DeviceConfig.removeOnPropertiesChangedListener(onChangedListener); + } } diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java index a6e6bd7d7b66..4753a545adb0 100644 --- a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java +++ b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationController.java @@ -48,6 +48,7 @@ import android.view.accessibility.MagnificationAnimationCallback; import com.android.internal.accessibility.util.AccessibilityStatsLogUtils; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.util.ConcurrentUtils; import com.android.server.LocalServices; import com.android.server.accessibility.AccessibilityManagerService; import com.android.server.wm.WindowManagerInternal; @@ -149,6 +150,9 @@ public class MagnificationController implements WindowMagnificationManager.Callb .getAccessibilityController().setUiChangesForAccessibilityCallbacks(this); mSupportWindowMagnification = context.getPackageManager().hasSystemFeature( FEATURE_WINDOW_MAGNIFICATION); + + AlwaysOnMagnificationFeatureFlag.addOnChangedListener( + ConcurrentUtils.DIRECT_EXECUTOR, mAms::updateAlwaysOnMagnification); } @VisibleForTesting |