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:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user