Merge "Fix transient behavior with task bar" into tm-qpr-dev am: 84e84a1329
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18764454 Change-Id: Ic166b28d9782f65a43aab4dd97e8d4fd48aa0cc0 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -17,11 +17,19 @@
|
|||||||
package com.android.systemui.navigationbar;
|
package com.android.systemui.navigationbar;
|
||||||
|
|
||||||
import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU;
|
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;
|
||||||
import static com.android.systemui.accessibility.SystemActions.SYSTEM_ACTION_ID_ACCESSIBILITY_BUTTON_CHOOSER;
|
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_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_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.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -50,6 +58,7 @@ import com.android.systemui.dump.DumpManager;
|
|||||||
import com.android.systemui.recents.OverviewProxyService;
|
import com.android.systemui.recents.OverviewProxyService;
|
||||||
import com.android.systemui.settings.UserTracker;
|
import com.android.systemui.settings.UserTracker;
|
||||||
import com.android.systemui.shared.system.QuickStepContract;
|
import com.android.systemui.shared.system.QuickStepContract;
|
||||||
|
import com.android.systemui.statusbar.phone.BarTransitions.TransitionMode;
|
||||||
import com.android.systemui.statusbar.phone.CentralSurfaces;
|
import com.android.systemui.statusbar.phone.CentralSurfaces;
|
||||||
|
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
@@ -325,6 +334,23 @@ public final class NavBarHelper implements
|
|||||||
void updateAssistantAvailable(boolean available);
|
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
|
@Override
|
||||||
public void dump(@NonNull PrintWriter pw, @NonNull String[] args) {
|
public void dump(@NonNull PrintWriter pw, @NonNull String[] args) {
|
||||||
pw.println("NavbarTaskbarFriendster");
|
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.Display.DEFAULT_DISPLAY;
|
||||||
import static android.view.InsetsState.ITYPE_NAVIGATION_BAR;
|
import static android.view.InsetsState.ITYPE_NAVIGATION_BAR;
|
||||||
import static android.view.InsetsState.containsType;
|
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.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.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
|
||||||
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION;
|
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.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.HOME_BUTTON_LONG_PRESS_DURATION_MS;
|
||||||
import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.NAV_BAR_HANDLE_FORCE_OPAQUE;
|
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.recents.OverviewProxyService.OverviewProxyListener;
|
||||||
import static com.android.systemui.shared.recents.utilities.Utilities.isTablet;
|
import static com.android.systemui.shared.recents.utilities.Utilities.isTablet;
|
||||||
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_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_IME_SWITCHER_SHOWING;
|
||||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN;
|
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.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_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.BarTransitions.TransitionMode;
|
||||||
import static com.android.systemui.statusbar.phone.CentralSurfaces.DEBUG_WINDOW_STATE;
|
import static com.android.systemui.statusbar.phone.CentralSurfaces.DEBUG_WINDOW_STATE;
|
||||||
import static com.android.systemui.statusbar.phone.CentralSurfaces.dumpBarTransitions;
|
import static com.android.systemui.statusbar.phone.CentralSurfaces.dumpBarTransitions;
|
||||||
@@ -1152,23 +1146,6 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
|
|||||||
return false;
|
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
|
@Override
|
||||||
public void disable(int displayId, int state1, int state2, boolean animate) {
|
public void disable(int displayId, int state1, int state2, boolean animate) {
|
||||||
if (displayId != mDisplayId) {
|
if (displayId != mDisplayId) {
|
||||||
|
|||||||
@@ -69,7 +69,6 @@ import java.util.Optional;
|
|||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
|
||||||
/** A controller to handle navigation bars. */
|
/** A controller to handle navigation bars. */
|
||||||
@SysUISingleton
|
@SysUISingleton
|
||||||
public class NavigationBarController implements
|
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.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
|
||||||
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
|
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_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_A11Y_BUTTON_LONG_CLICKABLE;
|
||||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_ALLOW_GESTURE_IGNORING_BAR_VISIBILITY;
|
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_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_OVERVIEW_DISABLED;
|
||||||
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING;
|
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;
|
||||||
import android.app.StatusBarManager.WindowVisibleState;
|
import android.app.StatusBarManager.WindowVisibleState;
|
||||||
@@ -50,6 +52,7 @@ import android.util.Log;
|
|||||||
import android.view.Display;
|
import android.view.Display;
|
||||||
import android.view.InsetsVisibilities;
|
import android.view.InsetsVisibilities;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.WindowInsetsController.Appearance;
|
||||||
import android.view.WindowInsetsController.Behavior;
|
import android.view.WindowInsetsController.Behavior;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
@@ -114,6 +117,9 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
|||||||
};
|
};
|
||||||
private int mDisabledFlags;
|
private int mDisabledFlags;
|
||||||
private @WindowVisibleState int mTaskBarWindowState = WINDOW_STATE_SHOWING;
|
private @WindowVisibleState int mTaskBarWindowState = WINDOW_STATE_SHOWING;
|
||||||
|
|
||||||
|
private @TransitionMode int mTransitionMode;
|
||||||
|
private @Appearance int mAppearance;
|
||||||
private @Behavior int mBehavior;
|
private @Behavior int mBehavior;
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final DisplayManager mDisplayManager;
|
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;
|
private BackAnimation mBackAnimation;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public TaskbarDelegate(
|
public TaskbarDelegate(Context context,
|
||||||
Context context,
|
|
||||||
EdgeBackGestureHandler.Factory edgeBackGestureHandlerFactory,
|
EdgeBackGestureHandler.Factory edgeBackGestureHandlerFactory,
|
||||||
LightBarTransitionsController.Factory lightBarTransitionsControllerFactory
|
LightBarTransitionsController.Factory lightBarTransitionsControllerFactory) {
|
||||||
) {
|
|
||||||
mLightBarTransitionsControllerFactory = lightBarTransitionsControllerFactory;
|
mLightBarTransitionsControllerFactory = lightBarTransitionsControllerFactory;
|
||||||
mEdgeBackGestureHandler = edgeBackGestureHandlerFactory.create(context);
|
mEdgeBackGestureHandler = edgeBackGestureHandlerFactory.create(context);
|
||||||
|
|
||||||
@@ -360,9 +359,15 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
|||||||
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme, int behavior,
|
AppearanceRegion[] appearanceRegions, boolean navbarColorManagedByIme, int behavior,
|
||||||
InsetsVisibilities requestedVisibilities, String packageName) {
|
InsetsVisibilities requestedVisibilities, String packageName) {
|
||||||
mOverviewProxyService.onSystemBarAttributesChanged(displayId, behavior);
|
mOverviewProxyService.onSystemBarAttributesChanged(displayId, behavior);
|
||||||
if (mLightBarController != null && displayId == mDisplayId) {
|
boolean nbModeChanged = false;
|
||||||
mLightBarController.onNavigationBarAppearanceChanged(appearance, false/*nbModeChanged*/,
|
if (mAppearance != appearance) {
|
||||||
BarTransitions.MODE_TRANSPARENT /*navigationBarMode*/, navbarColorManagedByIme);
|
mAppearance = appearance;
|
||||||
|
nbModeChanged = updateTransitionMode(
|
||||||
|
transitionMode(mTaskbarTransientShowing, appearance));
|
||||||
|
}
|
||||||
|
if (displayId == mDisplayId) {
|
||||||
|
mLightBarController.onNavigationBarAppearanceChanged(appearance, nbModeChanged,
|
||||||
|
BarTransitions.MODE_TRANSPARENT, navbarColorManagedByIme);
|
||||||
}
|
}
|
||||||
if (mBehavior != behavior) {
|
if (mBehavior != behavior) {
|
||||||
mBehavior = behavior;
|
mBehavior = behavior;
|
||||||
@@ -413,6 +418,22 @@ public class TaskbarDelegate implements CommandQueue.Callbacks,
|
|||||||
|
|
||||||
private void onTransientStateChanged() {
|
private void onTransientStateChanged() {
|
||||||
mEdgeBackGestureHandler.onNavBarTransientStateChanged(mTaskbarTransientShowing);
|
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
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user