diff options
| author | 2020-06-09 03:39:21 +0000 | |
|---|---|---|
| committer | 2020-06-09 03:39:21 +0000 | |
| commit | f6795b105fe1b1f09a3681a6301c1fbddac45095 (patch) | |
| tree | 0f4b6720deead5545665a4f35992c13435519f64 | |
| parent | 3759f3e64b4f3d81a9dc7c7f680808b31794ccba (diff) | |
| parent | cbf1e41fecded6c70cbbed2c4312facc5a4ab2ae (diff) | |
Merge "Move HapticSettingObserver to companion object." into rvc-dev
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/util/magnetictarget/MagnetizedObject.kt | 59 |
1 files changed, 38 insertions, 21 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/util/magnetictarget/MagnetizedObject.kt b/packages/SystemUI/src/com/android/systemui/util/magnetictarget/MagnetizedObject.kt index e905e6772074..da7953d27f59 100644 --- a/packages/SystemUI/src/com/android/systemui/util/magnetictarget/MagnetizedObject.kt +++ b/packages/SystemUI/src/com/android/systemui/util/magnetictarget/MagnetizedObject.kt @@ -245,9 +245,6 @@ abstract class MagnetizedObject<T : Any>( */ var hapticsEnabled = true - /** Whether the HAPTIC_FEEDBACK_ENABLED setting is true. */ - private var systemHapticsEnabled = false - /** Default spring configuration to use for animating the object into a target. */ var springConfig = PhysicsAnimator.SpringConfig( SpringForce.STIFFNESS_MEDIUM, SpringForce.DAMPING_RATIO_NO_BOUNCY) @@ -259,24 +256,7 @@ abstract class MagnetizedObject<T : Any>( var flungIntoTargetSpringConfig = springConfig init { - val hapticSettingObserver = - object : ContentObserver(Handler.getMain()) { - override fun onChange(selfChange: Boolean) { - systemHapticsEnabled = - Settings.System.getIntForUser( - context.contentResolver, - Settings.System.HAPTIC_FEEDBACK_ENABLED, - 0, - UserHandle.USER_CURRENT) != 0 - } - } - - context.contentResolver.registerContentObserver( - Settings.System.getUriFor(Settings.System.HAPTIC_FEEDBACK_ENABLED), - true /* notifyForDescendants */, hapticSettingObserver) - - // Trigger the observer once to initialize systemHapticsEnabled. - hapticSettingObserver.onChange(false /* selfChange */) + initHapticSettingObserver(context) } /** @@ -623,6 +603,43 @@ abstract class MagnetizedObject<T : Any>( companion object { /** + * Whether the HAPTIC_FEEDBACK_ENABLED setting is true. + * + * We put it in the companion object because we need to register a settings observer and + * [MagnetizedObject] doesn't have an obvious lifecycle so we don't have a good time to + * remove that observer. Since this settings is shared among all instances we just let all + * instances read from this value. + */ + private var systemHapticsEnabled = false + private var hapticSettingObserverInitialized = false + + private fun initHapticSettingObserver(context: Context) { + if (hapticSettingObserverInitialized) { + return + } + + val hapticSettingObserver = + object : ContentObserver(Handler.getMain()) { + override fun onChange(selfChange: Boolean) { + systemHapticsEnabled = + Settings.System.getIntForUser( + context.contentResolver, + Settings.System.HAPTIC_FEEDBACK_ENABLED, + 0, + UserHandle.USER_CURRENT) != 0 + } + } + + context.contentResolver.registerContentObserver( + Settings.System.getUriFor(Settings.System.HAPTIC_FEEDBACK_ENABLED), + true /* notifyForDescendants */, hapticSettingObserver) + + // Trigger the observer once to initialize systemHapticsEnabled. + hapticSettingObserver.onChange(false /* selfChange */) + hapticSettingObserverInitialized = true + } + + /** * Magnetizes the given view. Magnetized views are attracted to one or more magnetic * targets. Magnetic targets attract objects that are dragged near them, and hold them there * unless they're moved away or released. Releasing objects inside a magnetic target |