1 package com.android.systemui.statusbar.phone
2 
3 import com.android.systemui.animation.ActivityLaunchAnimator
4 import com.android.systemui.animation.LaunchAnimator
5 
6 /**
7  * A [ActivityLaunchAnimator.Controller] that takes care of collapsing the status bar at the right
8  * time.
9  */
10 class StatusBarLaunchAnimatorController(
11     private val delegate: ActivityLaunchAnimator.Controller,
12     private val statusBar: StatusBar,
13     private val isLaunchForActivity: Boolean = true
14 ) : ActivityLaunchAnimator.Controller by delegate {
15     override fun onIntentStarted(willAnimate: Boolean) {
16         delegate.onIntentStarted(willAnimate)
17         if (!willAnimate) {
18             statusBar.collapsePanelOnMainThread()
19         }
20     }
21 
22     override fun onLaunchAnimationStart(isExpandingFullyAbove: Boolean) {
23         delegate.onLaunchAnimationStart(isExpandingFullyAbove)
24         statusBar.notificationPanelViewController.setIsLaunchAnimationRunning(true)
25         if (!isExpandingFullyAbove) {
26             statusBar.collapsePanelWithDuration(
27                 ActivityLaunchAnimator.TIMINGS.totalDuration.toInt())
28         }
29     }
30 
31     override fun onLaunchAnimationEnd(isExpandingFullyAbove: Boolean) {
32         delegate.onLaunchAnimationEnd(isExpandingFullyAbove)
33         statusBar.notificationPanelViewController.setIsLaunchAnimationRunning(false)
34         statusBar.onLaunchAnimationEnd(isExpandingFullyAbove)
35     }
36 
37     override fun onLaunchAnimationProgress(
38         state: LaunchAnimator.State,
39         progress: Float,
40         linearProgress: Float
41     ) {
42         delegate.onLaunchAnimationProgress(state, progress, linearProgress)
43         statusBar.notificationPanelViewController.applyLaunchAnimationProgress(linearProgress)
44     }
45 
46     override fun onLaunchAnimationCancelled() {
47         delegate.onLaunchAnimationCancelled()
48         statusBar.onLaunchAnimationCancelled(isLaunchForActivity)
49     }
50 }