Merge "AnimateKeyguardInDelay should use the animator duration scale" into sc-qpr1-dev am: 872ae9e154

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15686697

Change-Id: Ib9750365cdade56f94ba0b2fd16322a6a4bc1d67
This commit is contained in:
TreeHugger Robot
2021-08-30 19:08:17 +00:00
committed by Automerger Merge Worker
2 changed files with 34 additions and 8 deletions

View File

@@ -132,8 +132,7 @@ public class KeyguardVisibilityHelper {
.alpha(1f)
.withEndAction(mAnimateKeyguardStatusViewVisibleEndRunnable)
.start();
} else if (mUnlockedScreenOffAnimationController
.isScreenOffLightRevealAnimationPlaying()) {
} else if (mUnlockedScreenOffAnimationController.shouldAnimateInKeyguard()) {
mKeyguardViewVisibilityAnimating = true;
// Ask the screen off animation controller to animate the keyguard visibility for us

View File

@@ -5,20 +5,23 @@ import android.animation.AnimatorListenerAdapter
import android.animation.ValueAnimator
import android.content.Context
import android.content.res.Configuration
import android.database.ContentObserver
import android.os.Handler
import android.provider.Settings
import com.android.systemui.statusbar.StatusBarState
import android.view.View
import com.android.systemui.animation.Interpolators
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.keyguard.KeyguardViewMediator
import com.android.systemui.keyguard.WakefulnessLifecycle
import com.android.systemui.statusbar.LightRevealScrim
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.StatusBarStateControllerImpl
import com.android.systemui.statusbar.notification.AnimatableProperty
import com.android.systemui.statusbar.notification.PropertyAnimator
import com.android.systemui.statusbar.notification.stack.AnimationProperties
import com.android.systemui.statusbar.notification.stack.StackStateAnimator
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.util.settings.GlobalSettings
import javax.inject.Inject
/**
@@ -46,13 +49,16 @@ class UnlockedScreenOffAnimationController @Inject constructor(
private val statusBarStateControllerImpl: StatusBarStateControllerImpl,
private val keyguardViewMediatorLazy: dagger.Lazy<KeyguardViewMediator>,
private val keyguardStateController: KeyguardStateController,
private val dozeParameters: dagger.Lazy<DozeParameters>
private val dozeParameters: dagger.Lazy<DozeParameters>,
private val globalSettings: GlobalSettings
) : WakefulnessLifecycle.Observer {
private val handler = Handler()
private lateinit var statusBar: StatusBar
private lateinit var lightRevealScrim: LightRevealScrim
private var animatorDurationScale = 1f
private var shouldAnimateInKeyguard = false
private var lightRevealAnimationPlaying = false
private var aodUiAnimationPlaying = false
@@ -79,6 +85,12 @@ class UnlockedScreenOffAnimationController @Inject constructor(
})
}
val animatorDurationScaleObserver = object : ContentObserver(null) {
override fun onChange(selfChange: Boolean) {
updateAnimatorDurationScale()
}
}
fun initialize(
statusBar: StatusBar,
lightRevealScrim: LightRevealScrim
@@ -86,14 +98,25 @@ class UnlockedScreenOffAnimationController @Inject constructor(
this.lightRevealScrim = lightRevealScrim
this.statusBar = statusBar
updateAnimatorDurationScale()
globalSettings.registerContentObserver(
Settings.Global.getUriFor(Settings.Global.ANIMATOR_DURATION_SCALE),
/* notify for descendants */ false,
animatorDurationScaleObserver)
wakefulnessLifecycle.addObserver(this)
}
fun updateAnimatorDurationScale() {
animatorDurationScale =
globalSettings.getFloat(Settings.Global.ANIMATOR_DURATION_SCALE, 1f)
}
/**
* Animates in the provided keyguard view, ending in the same position that it will be in on
* AOD.
*/
fun animateInKeyguard(keyguardView: View, after: Runnable) {
shouldAnimateInKeyguard = false
keyguardView.alpha = 0f
keyguardView.visibility = View.VISIBLE
@@ -138,6 +161,7 @@ class UnlockedScreenOffAnimationController @Inject constructor(
// Waking up, so reset this flag.
decidedToAnimateGoingToSleep = null
shouldAnimateInKeyguard = false
lightRevealAnimator.cancel()
handler.removeCallbacksAndMessages(null)
}
@@ -146,7 +170,6 @@ class UnlockedScreenOffAnimationController @Inject constructor(
// Set this to false in onFinishedWakingUp rather than onStartedWakingUp so that other
// observers (such as StatusBar) can ask us whether we were playing the screen off animation
// and reset accordingly.
lightRevealAnimationPlaying = false
aodUiAnimationPlaying = false
// If we can't control the screen off animation, we shouldn't mess with the StatusBar's
@@ -167,15 +190,15 @@ class UnlockedScreenOffAnimationController @Inject constructor(
if (dozeParameters.get().shouldControlUnlockedScreenOff()) {
decidedToAnimateGoingToSleep = true
shouldAnimateInKeyguard = true
lightRevealAnimationPlaying = true
lightRevealAnimator.start()
handler.postDelayed({
aodUiAnimationPlaying = true
// Show AOD. That'll cause the KeyguardVisibilityHelper to call #animateInKeyguard.
statusBar.notificationPanelViewController.showAodUi()
}, ANIMATE_IN_KEYGUARD_DELAY)
}, (ANIMATE_IN_KEYGUARD_DELAY * animatorDurationScale).toLong())
} else {
decidedToAnimateGoingToSleep = false
}
@@ -228,6 +251,10 @@ class UnlockedScreenOffAnimationController @Inject constructor(
return lightRevealAnimationPlaying || aodUiAnimationPlaying
}
fun shouldAnimateInKeyguard(): Boolean {
return shouldAnimateInKeyguard
}
/**
* Whether the light reveal animation is playing. The second part of the screen off animation,
* where AOD animates in, might still be playing if this returns false.
@@ -235,4 +262,4 @@ class UnlockedScreenOffAnimationController @Inject constructor(
fun isScreenOffLightRevealAnimationPlaying(): Boolean {
return lightRevealAnimationPlaying
}
}
}