mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-19 02:38:20 +00:00
- Replace UI_STATE_OVERVIEW with UI_STATE_FULLSCREEN_TASK. Overview no longer needs it's own status bar treatment as it's handled by ScrimView already. So remove instances of UI_STATE_OVERVIEW and replace some with UI_STATE_FULLSCREEN_TASK if a TaskView is behind the status bar. - Add ScrimView to fallback recents activity. - Remove scrim from Background state, don't fade it in until the gesture ends to RECENTS. Test: watch scrim and status bar colors during the following - Swipe up to home (no scrim, status bar matches task at first but then wallpaper once task isn't overlapping status bar) - Swipe up to overview (no scrim until let go to overview, status bar matches task at first, then wallpaper after not overlapping, then scrim once it's 90% opacity) - Quick switch from home (scrim fades in, status bar matches once it reaches 90% opacity) - Quick switch from app (no scrim, status bar matches center task) - Repeat above for 3P launcher and 2 button mode Fixes: 185681676 Fixes: 185286870 Change-Id: I9e5c292cc734e714169b9cc8268e8dad4e868aca
98 lines
3.3 KiB
Java
98 lines
3.3 KiB
Java
/*
|
|
* 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;
|
|
|
|
import java.util.Arrays;
|
|
|
|
/**
|
|
* 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;
|
|
public static final int UI_STATE_SCRIM_VIEW = 1;
|
|
public static final int UI_STATE_WIDGET_BOTTOM_SHEET = 2;
|
|
public static final int UI_STATE_FULLSCREEN_TASK = 3;
|
|
public static final int UI_STATE_ALLAPPS = 4;
|
|
|
|
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;
|
|
private final int[] mStates = new int[5];
|
|
|
|
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) {
|
|
newFlags = getSysUiVisibilityFlags(stateFlag, newFlags);
|
|
}
|
|
if (newFlags != oldFlags) {
|
|
mWindow.getDecorView().setSystemUiVisibility(newFlags);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 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) {
|
|
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);
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return "mStates=" + Arrays.toString(mStates);
|
|
}
|
|
}
|