2017-06-20 10:03:56 -07:00
|
|
|
/*
|
|
|
|
|
* Copyright (C) 2017 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.launcher3.util;
|
|
|
|
|
|
|
|
|
|
import android.view.View;
|
|
|
|
|
import android.view.Window;
|
|
|
|
|
|
2018-05-14 14:23:18 -07:00
|
|
|
import java.util.Arrays;
|
|
|
|
|
|
2017-06-20 10:03:56 -07:00
|
|
|
/**
|
|
|
|
|
* Utility class to manage various window flags to control system UI.
|
|
|
|
|
*/
|
|
|
|
|
public class SystemUiController {
|
|
|
|
|
|
|
|
|
|
// Various UI states in increasing order of priority
|
|
|
|
|
public static final int UI_STATE_BASE_WINDOW = 0;
|
2020-06-10 12:19:25 -07:00
|
|
|
public static final int UI_STATE_SCRIM_VIEW = 1;
|
2017-06-20 10:03:56 -07:00
|
|
|
public static final int UI_STATE_WIDGET_BOTTOM_SHEET = 2;
|
2020-06-02 02:31:31 -07:00
|
|
|
public static final int UI_STATE_OVERVIEW = 3;
|
2020-07-18 08:32:23 -07:00
|
|
|
public static final int UI_STATE_ALLAPPS = 4;
|
2017-06-20 10:03:56 -07:00
|
|
|
|
|
|
|
|
public static final int FLAG_LIGHT_NAV = 1 << 0;
|
|
|
|
|
public static final int FLAG_DARK_NAV = 1 << 1;
|
|
|
|
|
public static final int FLAG_LIGHT_STATUS = 1 << 2;
|
|
|
|
|
public static final int FLAG_DARK_STATUS = 1 << 3;
|
|
|
|
|
|
|
|
|
|
private final Window mWindow;
|
2020-07-18 08:32:23 -07:00
|
|
|
private final int[] mStates = new int[5];
|
2017-06-20 10:03:56 -07:00
|
|
|
|
|
|
|
|
public SystemUiController(Window window) {
|
|
|
|
|
mWindow = window;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void updateUiState(int uiState, boolean isLight) {
|
|
|
|
|
updateUiState(uiState, isLight
|
|
|
|
|
? (FLAG_LIGHT_NAV | FLAG_LIGHT_STATUS) : (FLAG_DARK_NAV | FLAG_DARK_STATUS));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void updateUiState(int uiState, int flags) {
|
|
|
|
|
if (mStates[uiState] == flags) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
mStates[uiState] = flags;
|
|
|
|
|
|
|
|
|
|
int oldFlags = mWindow.getDecorView().getSystemUiVisibility();
|
|
|
|
|
// Apply the state flags in priority order
|
|
|
|
|
int newFlags = oldFlags;
|
|
|
|
|
for (int stateFlag : mStates) {
|
2020-06-10 12:19:25 -07:00
|
|
|
newFlags = getSysUiVisibilityFlags(stateFlag, newFlags);
|
2017-06-20 10:03:56 -07:00
|
|
|
}
|
|
|
|
|
if (newFlags != oldFlags) {
|
|
|
|
|
mWindow.getDecorView().setSystemUiVisibility(newFlags);
|
|
|
|
|
}
|
|
|
|
|
}
|
2018-05-14 14:23:18 -07:00
|
|
|
|
2020-06-10 12:19:25 -07:00
|
|
|
/**
|
|
|
|
|
* Returns the sysui visibility for the base layer
|
|
|
|
|
*/
|
|
|
|
|
public int getBaseSysuiVisibility() {
|
|
|
|
|
return getSysUiVisibilityFlags(
|
|
|
|
|
mStates[UI_STATE_BASE_WINDOW], mWindow.getDecorView().getSystemUiVisibility());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private int getSysUiVisibilityFlags(int stateFlag, int currentVisibility) {
|
2020-07-29 16:54:20 -07:00
|
|
|
if ((stateFlag & FLAG_LIGHT_NAV) != 0) {
|
|
|
|
|
currentVisibility |= View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
|
|
|
|
|
} else if ((stateFlag & FLAG_DARK_NAV) != 0) {
|
|
|
|
|
currentVisibility &= ~(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
|
2020-06-10 12:19:25 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ((stateFlag & FLAG_LIGHT_STATUS) != 0) {
|
|
|
|
|
currentVisibility |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
|
|
|
|
|
} else if ((stateFlag & FLAG_DARK_STATUS) != 0) {
|
|
|
|
|
currentVisibility &= ~(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
|
|
|
|
|
}
|
|
|
|
|
return currentVisibility;
|
|
|
|
|
}
|
|
|
|
|
|
2018-05-14 14:23:18 -07:00
|
|
|
@Override
|
|
|
|
|
public String toString() {
|
|
|
|
|
return "mStates=" + Arrays.toString(mStates);
|
|
|
|
|
}
|
2017-06-20 10:03:56 -07:00
|
|
|
}
|