blob: fc40077810ff1c6f70ef87a3f22f27833d5f4a42 [file] [log] [blame]
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui.statusbar;
import static java.lang.annotation.RetentionPolicy.SOURCE;
import android.annotation.IntDef;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.phone.StatusBar;
import java.lang.annotation.Retention;
/**
* Sends updates to {@link StateListener}s about changes to the status bar state and dozing state
*/
public interface SysuiStatusBarStateController extends StatusBarStateController {
// TODO: b/115739177 (remove this explicit ordering if we can)
@Retention(SOURCE)
@IntDef({RANK_STATUS_BAR, RANK_STATUS_BAR_WINDOW_CONTROLLER, RANK_STACK_SCROLLER, RANK_SHELF})
@interface SbStateListenerRank {}
// This is the set of known dependencies when updating StatusBarState
int RANK_STATUS_BAR = 0;
int RANK_STATUS_BAR_WINDOW_CONTROLLER = 1;
int RANK_STACK_SCROLLER = 2;
int RANK_SHELF = 3;
/**
* Add a listener and a rank based on the priority of this message
* @param listener the listener
* @param rank the order in which you'd like to be called. Ranked listeners will be
* notified before unranked, and we will sort ranked listeners from low to high
*
* @deprecated This method exists only to solve latent inter-dependencies from refactoring
* StatusBarState out of StatusBar.java. Any new listeners should be built not to need ranking
* (i.e., they are non-dependent on the order of operations of StatusBarState listeners).
*/
@Deprecated
void addCallback(StateListener listener, int rank);
/**
* Update the status bar state
* @param state see {@link StatusBarState} for valid options
* @return {@code true} if the state changed, else {@code false}
*/
default boolean setState(int state) {
return setState(state, false /* force */);
}
/**
* Update the status bar state
* @param state see {@link StatusBarState} for valid options
* @param force whether to set the state even if it's the same as the current state. This will
* dispatch the state to all StatusBarStateListeners, ensuring that all listening
* components are reset to this state.
* @return {@code true} if the state was changed or set forcefully
*/
boolean setState(int state, boolean force);
/**
* Update the dozing state from {@link StatusBar}'s perspective
* @param isDozing well, are we dozing?
* @return {@code true} if the state changed, else {@code false}
*/
boolean setIsDozing(boolean isDozing);
/**
* Changes the current doze amount.
*
* @param dozeAmount New doze/dark amount.
* @param animated If change should be animated or not. This will cancel current animations.
*/
void setDozeAmount(float dozeAmount, boolean animated);
/**
* Sets whether to leave status bar open when hiding keyguard
*/
void setLeaveOpenOnKeyguardHide(boolean leaveOpen);
/**
* Whether to leave status bar open when hiding keyguard
*/
boolean leaveOpenOnKeyguardHide();
/**
* Interpolated doze amount
*/
float getInterpolatedDozeAmount();
/**
* Whether status bar is going to full shade
*/
boolean goingToFullShade();
/**
* Whether the previous state of the status bar was the shade locked
*/
boolean fromShadeLocked();
/**
* Set keyguard requested
*/
void setKeyguardRequested(boolean keyguardRequested);
/**
* Is keyguard requested
*/
boolean isKeyguardRequested();
/**
* Set the fullscreen state
*/
void setFullscreenState(boolean isFullscreen, boolean isImmersive);
/**
* Set pulsing
*/
void setPulsing(boolean visibility);
/**
* Listener with rankings SbStateListenerRank that have dependencies so must be updated
* in a certain order
*/
class RankedListener {
final StateListener mListener;
final int mRank;
RankedListener(StateListener l, int r) {
mListener = l;
mRank = r;
}
}
}