"accessibility_soft_keyboard_mode";
/**
+ * Should we disable all animations when accessibility is turned on. On low-power devices
+ * like Android Wear, the performance makes the device unusable. Turning off animations
+ * is a partial fix.
+ *
+ * @hide
+ */
+ public static final String ACCESSIBILITY_DISABLE_ANIMATIONS =
+ "accessibility_disable_animations";
+
+ /**
* Default soft keyboard behavior.
*
* @hide
ACCESSIBILITY_CAPTIONING_TYPEFACE,
ACCESSIBILITY_CAPTIONING_FONT_SCALE,
ACCESSIBILITY_CAPTIONING_WINDOW_COLOR,
+ ACCESSIBILITY_DISABLE_ANIMATIONS,
TTS_USE_DEFAULTS,
TTS_DEFAULT_RATE,
TTS_DEFAULT_PITCH,
// Enums for animation scale update types.
@Retention(RetentionPolicy.SOURCE)
- @IntDef({WINDOW_ANIMATION_SCALE, TRANSITION_ANIMATION_SCALE, ANIMATION_DURATION_SCALE})
+ @IntDef({WINDOW_ANIMATION_SCALE, TRANSITION_ANIMATION_SCALE, ANIMATION_DURATION_SCALE,
+ ACCESSIBILITY_CHANGED})
private @interface UpdateAnimationScaleMode {};
private static final int WINDOW_ANIMATION_SCALE = 0;
private static final int TRANSITION_ANIMATION_SCALE = 1;
private static final int ANIMATION_DURATION_SCALE = 2;
+ private static final int ACCESSIBILITY_CHANGED = 3;
final private KeyguardDisableHandler mKeyguardDisableHandler;
Settings.Global.getUriFor(Settings.Global.TRANSITION_ANIMATION_SCALE);
private final Uri mAnimationDurationScaleUri =
Settings.Global.getUriFor(Settings.Global.ANIMATOR_DURATION_SCALE);
+ private final Uri mAccessibilityEnabledUri =
+ Settings.Secure.getUriFor(Settings.Secure.ACCESSIBILITY_ENABLED);
public SettingsObserver() {
super(new Handler());
UserHandle.USER_ALL);
resolver.registerContentObserver(mAnimationDurationScaleUri, false, this,
UserHandle.USER_ALL);
+ resolver.registerContentObserver(mAccessibilityEnabledUri, false, this,
+ UserHandle.USER_ALL);
}
@Override
mode = TRANSITION_ANIMATION_SCALE;
} else if (mAnimationDurationScaleUri.equals(uri)) {
mode = ANIMATION_DURATION_SCALE;
+ } else if (mAccessibilityEnabledUri.equals(uri)) {
+ // Change all of them.
+ mode = ACCESSIBILITY_CHANGED;
} else {
// Ignoring unrecognized content changes
return;
public void onLowPowerModeChanged(boolean enabled) {
synchronized (mWindowMap) {
if (mAnimationsDisabled != enabled && !mAllowAnimationsInLowPowerMode) {
- mAnimationsDisabled = enabled;
- dispatchNewAnimatorScaleLocked(null);
+ setShouldAnimationsDisabled(enabled);
}
}
}
});
- mAnimationsDisabled = mPowerManagerInternal.getLowPowerModeEnabled();
+ setShouldAnimationsDisabled(mPowerManagerInternal.getLowPowerModeEnabled());
mScreenFrozenLock = mPowerManager.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK, "SCREEN_FROZEN");
mScreenFrozenLock.setReferenceCounted(false);
}
}
+ private void setShouldAnimationsDisabled(boolean isLowPowerEnabled) {
+ boolean accessibilityEnabled = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_ENABLED, 0) == 1;
+ boolean disableAnimationsWhenAccessibility = Settings.Secure.getInt(
+ mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISABLE_ANIMATIONS, 0) == 1;
+
+ mAnimationsDisabled = isLowPowerEnabled ||
+ (accessibilityEnabled && disableAnimationsWhenAccessibility);
+ dispatchNewAnimatorScaleLocked(null);
+ }
+
private void placeWindowAfter(WindowState pos, WindowState window) {
final WindowList windows = pos.getWindowList();
final int i = windows.indexOf(pos);
dispatchNewAnimatorScaleLocked(null);
break;
}
+ case ACCESSIBILITY_CHANGED: {
+ setShouldAnimationsDisabled(
+ mPowerManagerInternal.getLowPowerModeEnabled());
+ }
+ break;
}
break;
}