Pipe nav bar transitions logic into task bar

Bug: 349155860
Test: manual
Flag: com.android.wm.shell.enable_taskbar_on_phones
Change-Id: Idaf7ecc7b964a2c406ddf4329b64971b08f5d7de
This commit is contained in:
Tracy Zhou
2024-06-11 22:54:34 -07:00
parent 30e0597a36
commit 027600a259
10 changed files with 313 additions and 5 deletions
@@ -41,6 +41,7 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_B
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_HOME_DISABLED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_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_NOTIFICATION_PANEL_EXPANDED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_OVERVIEW_DISABLED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_QUICK_SETTINGS_EXPANDED;
@@ -106,6 +107,7 @@ import com.android.systemui.shared.navigationbar.KeyButtonRipple;
import com.android.systemui.shared.rotation.FloatingRotationButton;
import com.android.systemui.shared.rotation.RotationButton;
import com.android.systemui.shared.rotation.RotationButtonController;
import com.android.systemui.shared.statusbar.phone.BarTransitions;
import com.android.systemui.shared.system.QuickStepContract;
import com.android.systemui.shared.system.QuickStepContract.SystemUiStateFlags;
@@ -154,6 +156,8 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
public static final int ALPHA_INDEX_SUW = 2;
private static final int NUM_ALPHA_CHANNELS = 3;
private static final long AUTODIM_TIMEOUT_MS = 2250;
private final ArrayList<StatePropertyHolder> mPropertyHolders = new ArrayList<>();
private final ArrayList<ImageView> mAllButtons = new ArrayList<>();
private int mState;
@@ -162,6 +166,7 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
private final @Nullable Context mNavigationBarPanelContext;
private final WindowManagerProxy mWindowManagerProxy;
private final NearestTouchFrame mNavButtonsView;
private final Handler mHandler;
private final LinearLayout mNavButtonContainer;
// Used for IME+A11Y buttons
private final ViewGroup mEndContextualContainer;
@@ -183,7 +188,7 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
this::updateNavButtonInAppDisplayProgressForSysui);
/** Expected nav button dark intensity communicated via the framework. */
private final AnimatedFloat mTaskbarNavButtonDarkIntensity = new AnimatedFloat(
this::updateNavButtonColor);
this::onDarkIntensityChanged);
/** {@code 1} if the Taskbar background color is fully opaque. */
private final AnimatedFloat mOnTaskbarBackgroundNavButtonColorOverride = new AnimatedFloat(
this::updateNavButtonColor);
@@ -219,12 +224,19 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
private ImageView mRecentsButton;
private Space mSpace;
private TaskbarTransitions mTaskbarTransitions;
private @BarTransitions.TransitionMode int mTransitionMode;
private final Runnable mAutoDim = () -> mTaskbarTransitions.setAutoDim(true);
public NavbarButtonsViewController(TaskbarActivityContext context,
@Nullable Context navigationBarPanelContext, NearestTouchFrame navButtonsView) {
@Nullable Context navigationBarPanelContext, NearestTouchFrame navButtonsView,
Handler handler) {
mContext = context;
mNavigationBarPanelContext = navigationBarPanelContext;
mWindowManagerProxy = WindowManagerProxy.INSTANCE.get(mContext);
mNavButtonsView = navButtonsView;
mHandler = handler;
mNavButtonContainer = mNavButtonsView.findViewById(R.id.end_nav_buttons);
mEndContextualContainer = mNavButtonsView.findViewById(R.id.end_contextual_buttons);
mStartContextualContainer = mNavButtonsView.findViewById(R.id.start_contextual_buttons);
@@ -234,6 +246,8 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
mOnBackgroundIconColor = Utilities.isDarkTheme(context)
? context.getColor(R.color.taskbar_nav_icon_light_color)
: context.getColor(R.color.taskbar_nav_icon_dark_color);
mTaskbarTransitions = new TaskbarTransitions(mContext, mNavButtonsView);
}
/**
@@ -345,6 +359,7 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
R.bool.floating_rotation_button_position_left);
mControllers.rotationButtonController.setRotationButton(mFloatingRotationButton,
mRotationButtonListener);
mTaskbarTransitions.init();
applyState();
mPropertyHolders.forEach(StatePropertyHolder::endAnimation);
@@ -605,6 +620,39 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
mBackButton.setAccessibilityDelegate(accessibilityDelegate);
}
public void setWallpaperVisible(boolean isVisible) {
mTaskbarTransitions.setWallpaperVisibility(isVisible);
}
public void onTransitionModeUpdated(int barMode, boolean checkBarModes) {
mTransitionMode = barMode;
if (checkBarModes) {
checkNavBarModes();
}
}
public void checkNavBarModes() {
boolean isBarHidden = (mSysuiStateFlags & SYSUI_STATE_NAV_BAR_HIDDEN) != 0;
mTaskbarTransitions.transitionTo(mTransitionMode, !isBarHidden);
}
public void finishBarAnimations() {
mTaskbarTransitions.finishAnimations();
}
public void touchAutoDim(boolean reset) {
mTaskbarTransitions.setAutoDim(false);
mHandler.removeCallbacks(mAutoDim);
if (reset) {
mHandler.postDelayed(mAutoDim, AUTODIM_TIMEOUT_MS);
}
}
public void transitionTo(@BarTransitions.TransitionMode int barMode,
boolean animate) {
mTaskbarTransitions.transitionTo(barMode, animate);
}
/** Use to set the translationY for the all nav+contextual buttons */
public AnimatedFloat getTaskbarNavButtonTranslationY() {
return mTaskbarNavButtonTranslationY;
@@ -680,8 +728,7 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
mDarkIconColorOnHome);
final int iconColor;
if (ENABLE_TASKBAR_NAVBAR_UNIFICATION && enableTaskbarOnPhones()
&& mContext.isPhoneMode()) {
if (ENABLE_TASKBAR_NAVBAR_UNIFICATION && mContext.isPhoneMode()) {
iconColor = sysUiNavButtonIconColorOnHome;
} else {
// Override the color from framework if nav buttons are over an opaque Taskbar surface.
@@ -703,6 +750,11 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
}
}
private void onDarkIntensityChanged() {
updateNavButtonColor();
mTaskbarTransitions.onDarkIntensityChanged(mTaskbarNavButtonDarkIntensity.value);
}
protected ImageView addButton(@DrawableRes int drawableId, @TaskbarButton int buttonType,
ViewGroup parent, TaskbarNavButtonController navButtonController, @IdRes int id) {
return addButton(drawableId, buttonType, parent, navButtonController, id,
@@ -1048,6 +1100,7 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT
+ mOnBackgroundNavButtonColorOverrideMultiplier.value);
mNavButtonsView.dumpLogs(prefix + "\t", pw);
mTaskbarTransitions.dumpLogs(prefix + "\t", pw);
}
private static String getStateString(int flags) {