Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit adcb3d67 authored by Tracy Zhou's avatar Tracy Zhou Committed by Android (Google) Code Review
Browse files

Merge "Pipe nav bar transitions logic into task bar" into main

parents 09f06c29 027600a2
Loading
Loading
Loading
Loading
+184 B
Loading image diff...
+166 B
Loading image diff...
+199 B
Loading image diff...
+225 B
Loading image diff...
+57 −4
Original line number Diff line number Diff line
@@ -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) {
Loading