1 /*
2  * Copyright (C) 2019 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.systemui.statusbar;
18 
19 import static java.lang.annotation.RetentionPolicy.SOURCE;
20 
21 import android.annotation.IntDef;
22 
23 import com.android.systemui.plugins.statusbar.StatusBarStateController;
24 import com.android.systemui.statusbar.phone.StatusBar;
25 
26 import java.lang.annotation.Retention;
27 
28 /**
29  * Sends updates to {@link StateListener}s about changes to the status bar state and dozing state
30  */
31 public interface SysuiStatusBarStateController extends StatusBarStateController {
32 
33     // TODO: b/115739177 (remove this explicit ordering if we can)
34     @Retention(SOURCE)
35     @IntDef({RANK_STATUS_BAR, RANK_STATUS_BAR_WINDOW_CONTROLLER, RANK_STACK_SCROLLER, RANK_SHELF})
36     @interface SbStateListenerRank {}
37     // This is the set of known dependencies when updating StatusBarState
38     int RANK_STATUS_BAR = 0;
39     int RANK_STATUS_BAR_WINDOW_CONTROLLER = 1;
40     int RANK_STACK_SCROLLER = 2;
41     int RANK_SHELF = 3;
42 
43     /**
44      * Add a listener and a rank based on the priority of this message
45      * @param listener the listener
46      * @param rank the order in which you'd like to be called. Ranked listeners will be
47      * notified before unranked, and we will sort ranked listeners from low to high
48      *
49      * @deprecated This method exists only to solve latent inter-dependencies from refactoring
50      * StatusBarState out of StatusBar.java. Any new listeners should be built not to need ranking
51      * (i.e., they are non-dependent on the order of operations of StatusBarState listeners).
52      */
53     @Deprecated
addCallback(StateListener listener, int rank)54     void addCallback(StateListener listener, int rank);
55 
56     /**
57      * Update the status bar state
58      * @param state see {@link StatusBarState} for valid options
59      * @return {@code true} if the state changed, else {@code false}
60      */
setState(int state)61     boolean setState(int state);
62 
63     /**
64      * Update the dozing state from {@link StatusBar}'s perspective
65      * @param isDozing well, are we dozing?
66      * @return {@code true} if the state changed, else {@code false}
67      */
setIsDozing(boolean isDozing)68     boolean setIsDozing(boolean isDozing);
69 
70     /**
71      * Changes the current doze amount.
72      *
73      * @param dozeAmount New doze/dark amount.
74      * @param animated If change should be animated or not. This will cancel current animations.
75      */
setDozeAmount(float dozeAmount, boolean animated)76     void setDozeAmount(float dozeAmount, boolean animated);
77 
78     /**
79      * Sets whether to leave status bar open when hiding keyguard
80      */
setLeaveOpenOnKeyguardHide(boolean leaveOpen)81     void setLeaveOpenOnKeyguardHide(boolean leaveOpen);
82 
83     /**
84      * Whether to leave status bar open when hiding keyguard
85      */
leaveOpenOnKeyguardHide()86     boolean leaveOpenOnKeyguardHide();
87 
88     /**
89      * Interpolated doze amount
90      */
getInterpolatedDozeAmount()91     float getInterpolatedDozeAmount();
92 
93     /**
94      * Whether status bar is going to full shade
95      */
goingToFullShade()96     boolean goingToFullShade();
97 
98     /**
99      * Whether the previous state of the status bar was the shade locked
100      */
fromShadeLocked()101     boolean fromShadeLocked();
102 
103     /**
104      * Set keyguard requested
105      */
setKeyguardRequested(boolean keyguardRequested)106     void setKeyguardRequested(boolean keyguardRequested);
107 
108     /**
109      * Is keyguard requested
110      */
isKeyguardRequested()111     boolean isKeyguardRequested();
112 
113     /**
114      * Set the fullscreen state
115      */
setFullscreenState(boolean isFullscreen, boolean isImmersive)116     void setFullscreenState(boolean isFullscreen, boolean isImmersive);
117 
118     /**
119      * Set pulsing
120      */
setPulsing(boolean visibility)121     void setPulsing(boolean visibility);
122 
123     /**
124      * Listener with rankings SbStateListenerRank that have dependencies so must be updated
125      * in a certain order
126      */
127     class RankedListener {
128         final StateListener mListener;
129         final int mRank;
130 
RankedListener(StateListener l, int r)131         RankedListener(StateListener l, int r) {
132             mListener = l;
133             mRank = r;
134         }
135     }
136 }
137