Fix transient behavior with task bar
Fixes: 200730636 Test: manual Change-Id: Ie3dc424542ff457218fe4ec2fd516244f51bb94f
This commit is contained in:
@@ -17,11 +17,19 @@
|
||||
package com.android.systemui.navigationbar;
|
||||
|
||||
import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU;
|
||||
import static android.view.WindowInsetsController.APPEARANCE_LOW_PROFILE_BARS;
|
||||
import static android.view.WindowInsetsController.APPEARANCE_OPAQUE_NAVIGATION_BARS;
|
||||
import static android.view.WindowInsetsController.APPEARANCE_SEMI_TRANSPARENT_NAVIGATION_BARS;
|
||||
|
||||
import static com.android.systemui.accessibility.SystemActions.SYSTEM_ACTION_ID_ACCESSIBILITY_BUTTON;
|
||||
import static com.android.systemui.accessibility.SystemActions.SYSTEM_ACTION_ID_ACCESSIBILITY_BUTTON_CHOOSER;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_CLICKABLE;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE;
|
||||
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT;
|
||||
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT_TRANSPARENT;
|
||||
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE;
|
||||
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_SEMI_TRANSPARENT;
|
||||
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSPARENT;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
@@ -50,6 +58,7 @@ import com.android.systemui.dump.DumpManager;
|
||||
import com.android.systemui.recents.OverviewProxyService;
|
||||
import com.android.systemui.settings.UserTracker;
|
||||
import com.android.systemui.shared.system.QuickStepContract;
|
||||
import com.android.systemui.statusbar.phone.BarTransitions.TransitionMode;
|
||||
import com.android.systemui.statusbar.phone.CentralSurfaces;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
@@ -325,6 +334,23 @@ public final class NavBarHelper implements
|
||||
void updateAssistantAvailable(boolean available);
|
||||
}
|
||||
|
||||
static @TransitionMode int transitionMode(boolean isTransient, int appearance) {
|
||||
final int lightsOutOpaque = APPEARANCE_LOW_PROFILE_BARS | APPEARANCE_OPAQUE_NAVIGATION_BARS;
|
||||
if (isTransient) {
|
||||
return MODE_SEMI_TRANSPARENT;
|
||||
} else if ((appearance & lightsOutOpaque) == lightsOutOpaque) {
|
||||
return MODE_LIGHTS_OUT;
|
||||
} else if ((appearance & APPEARANCE_LOW_PROFILE_BARS) != 0) {
|
||||
return MODE_LIGHTS_OUT_TRANSPARENT;
|
||||
} else if ((appearance & APPEARANCE_OPAQUE_NAVIGATION_BARS) != 0) {
|
||||
return MODE_OPAQUE;
|
||||
} else if ((appearance & APPEARANCE_SEMI_TRANSPARENT_NAVIGATION_BARS) != 0) {
|
||||
return MODE_SEMI_TRANSPARENT;
|
||||
} else {
|
||||
return MODE_TRANSPARENT;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dump(@NonNull PrintWriter pw, @NonNull String[] args) {
|
||||
pw.println("NavbarTaskbarFriendster");
|
||||
|
||||
@@ -27,9 +27,6 @@ import static android.app.WindowConfiguration.ROTATION_UNDEFINED;
|
||||
import static android.view.Display.DEFAULT_DISPLAY;
|
||||
import static android.view.InsetsState.ITYPE_NAVIGATION_BAR;
|
||||
import static android.view.InsetsState.containsType;
|
||||
import static android.view.WindowInsetsController.APPEARANCE_LOW_PROFILE_BARS;
|
||||
import static android.view.WindowInsetsController.APPEARANCE_OPAQUE_NAVIGATION_BARS;
|
||||
import static android.view.WindowInsetsController.APPEARANCE_SEMI_TRANSPARENT_NAVIGATION_BARS;
|
||||
import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
|
||||
import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
|
||||
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION;
|
||||
@@ -39,6 +36,7 @@ import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;
|
||||
import static com.android.internal.accessibility.common.ShortcutConstants.CHOOSER_PACKAGE_NAME;
|
||||
import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.HOME_BUTTON_LONG_PRESS_DURATION_MS;
|
||||
import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.NAV_BAR_HANDLE_FORCE_OPAQUE;
|
||||
import static com.android.systemui.navigationbar.NavBarHelper.transitionMode;
|
||||
import static com.android.systemui.recents.OverviewProxyService.OverviewProxyListener;
|
||||
import static com.android.systemui.shared.recents.utilities.Utilities.isTablet;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_CLICKABLE;
|
||||
@@ -48,11 +46,7 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_I
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SWITCHER_SHOWING;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.isGesturalMode;
|
||||
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT;
|
||||
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT_TRANSPARENT;
|
||||
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE;
|
||||
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_SEMI_TRANSPARENT;
|
||||
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSPARENT;
|
||||
import static com.android.systemui.statusbar.phone.BarTransitions.TransitionMode;
|
||||
import static com.android.systemui.statusbar.phone.CentralSurfaces.DEBUG_WINDOW_STATE;
|
||||
import static com.android.systemui.statusbar.phone.CentralSurfaces.dumpBarTransitions;
|
||||
@@ -1152,23 +1146,6 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
|
||||
return false;
|
||||
}
|
||||
|
||||
private static @TransitionMode int transitionMode(boolean isTransient, int appearance) {
|
||||
final int lightsOutOpaque = APPEARANCE_LOW_PROFILE_BARS | APPEARANCE_OPAQUE_NAVIGATION_BARS;
|
||||
if (isTransient) {
|
||||
return MODE_SEMI_TRANSPARENT;
|
||||
} else if ((appearance & lightsOutOpaque) == lightsOutOpaque) {
|
||||
return MODE_LIGHTS_OUT;
|
||||
} else if ((appearance & APPEARANCE_LOW_PROFILE_BARS) != 0) {
|
||||
return MODE_LIGHTS_OUT_TRANSPARENT;
|
||||
} else if ((appearance & APPEARANCE_OPAQUE_NAVIGATION_BARS) != 0) {
|
||||
return MODE_OPAQUE;
|
||||
} else if ((appearance & APPEARANCE_SEMI_TRANSPARENT_NAVIGATION_BARS) != 0) {
|
||||
return MODE_SEMI_TRANSPARENT;
|
||||
} else {
|
||||
return MODE_TRANSPARENT;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disable(int displayId, int state1, int state2, boolean animate) {
|
||||
if (displayId != mDisplayId) {
|
||||
|
||||
@@ -69,7 +69,6 @@ import java.util.Optional;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
|
||||
/** A controller to handle navigation bars. */
|
||||
@SysUISingleton
|
||||
public class NavigationBarController implements
|
||||
|
||||
@@ -24,6 +24,7 @@ import static android.view.InsetsState.containsType;
|
||||
import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
|
||||
|
||||
import static com.android.systemui.navigationbar.NavBarHelper.transitionMode;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_CLICKABLE;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A11Y_BUTTON_LONG_CLICKABLE;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_ALLOW_GESTURE_IGNORING_BAR_VISIBILITY;
|
||||
@@ -35,6 +36,7 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_I
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_OVERVIEW_DISABLED;
|
||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING;
|
||||
import static com.android.systemui.statusbar.phone.BarTransitions.TransitionMode;
|
||||
|
||||
import android.app.StatusBarManager;
|
||||
import android.app.StatusBarManager.WindowVisibleState;
|
||||
@@ -50,6 +52,7 @@ import android.util.Log;
|
||||
import android.view.Display;
|
||||
import android.view.InsetsVisibilities;
|
||||
import android.view.View;
|
||||
import android.view.WindowInsetsController.Appearance;
|
||||
import android.view.WindowInsetsController.Behavior;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
@@ -114,6 +117,9 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
||||
};
|
||||
private int mDisabledFlags;
|
||||
private @WindowVisibleState int mTaskBarWindowState = WINDOW_STATE_SHOWING;
|
||||
|
||||
private @TransitionMode int mTransitionMode;
|
||||
private @Appearance int mAppearance;
|
||||
private @Behavior int mBehavior;
|
||||
private final Context mContext;
|
||||
private final DisplayManager mDisplayManager;
|
||||
@@ -146,19 +152,12 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
||||
}
|
||||
};
|
||||
|
||||
private final Consumer<Boolean> mNavbarOverlayVisibilityChangeCallback = (visible) -> {
|
||||
if (visible) {
|
||||
mAutoHideController.touchAutoHide();
|
||||
}
|
||||
};
|
||||
private BackAnimation mBackAnimation;
|
||||
|
||||
@Inject
|
||||
public TaskbarDelegate(
|
||||
Context context,
|
||||
public TaskbarDelegate(Context context,
|
||||
EdgeBackGestureHandler.Factory edgeBackGestureHandlerFactory,
|
||||
LightBarTransitionsController.Factory lightBarTransitionsControllerFactory
|
||||
) {
|
||||
LightBarTransitionsController.Factory lightBarTransitionsControllerFactory) {
|
||||
mLightBarTransitionsControllerFactory = lightBarTransitionsControllerFactory;
|
||||
mEdgeBackGestureHandler = edgeBackGestureHandlerFactory.create(context);
|
||||
|
||||
@@ -360,9 +359,15 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
||||
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme, int behavior,
|
||||
InsetsVisibilities requestedVisibilities, String packageName) {
|
||||
mOverviewProxyService.onSystemBarAttributesChanged(displayId, behavior);
|
||||
if (mLightBarController != null && displayId == mDisplayId) {
|
||||
mLightBarController.onNavigationBarAppearanceChanged(appearance, false/*nbModeChanged*/,
|
||||
BarTransitions.MODE_TRANSPARENT /*navigationBarMode*/, navbarColorManagedByIme);
|
||||
boolean nbModeChanged = false;
|
||||
if (mAppearance != appearance) {
|
||||
mAppearance = appearance;
|
||||
nbModeChanged = updateTransitionMode(
|
||||
transitionMode(mTaskbarTransientShowing, appearance));
|
||||
}
|
||||
if (displayId == mDisplayId) {
|
||||
mLightBarController.onNavigationBarAppearanceChanged(appearance, nbModeChanged,
|
||||
BarTransitions.MODE_TRANSPARENT, navbarColorManagedByIme);
|
||||
}
|
||||
if (mBehavior != behavior) {
|
||||
mBehavior = behavior;
|
||||
@@ -413,6 +418,22 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
||||
|
||||
private void onTransientStateChanged() {
|
||||
mEdgeBackGestureHandler.onNavBarTransientStateChanged(mTaskbarTransientShowing);
|
||||
|
||||
final int transitionMode = transitionMode(mTaskbarTransientShowing, mAppearance);
|
||||
if (updateTransitionMode(transitionMode)) {
|
||||
mLightBarController.onNavigationBarModeChanged(transitionMode);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean updateTransitionMode(int barMode) {
|
||||
if (mTransitionMode != barMode) {
|
||||
mTransitionMode = barMode;
|
||||
if (mAutoHideController != null) {
|
||||
mAutoHideController.touchAutoHide();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user