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

Commit 14dc6a6a authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 6244512 from 2267cbc5 to qt-qpr3-release

Change-Id: Ifccb3288df2d286fcc348792c6c47dffe21e74a7
parents b1e3ff40 2267cbc5
Loading
Loading
Loading
Loading
+84 −0
Original line number Diff line number Diff line
@@ -16,6 +16,9 @@

package com.android.systemui.statusbar.car;

import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE;
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_SEMI_TRANSPARENT;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
@@ -98,6 +101,8 @@ import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.VisualStabilityManager;
import com.android.systemui.statusbar.notification.logging.NotificationLogger;
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
import com.android.systemui.statusbar.phone.AutoHideElement;
import com.android.systemui.statusbar.phone.BarTransitions;
import com.android.systemui.statusbar.phone.CollapsedStatusBarFragment;
import com.android.systemui.statusbar.phone.LightBarController;
import com.android.systemui.statusbar.phone.NotificationGroupAlertTransferHelper;
@@ -121,6 +126,7 @@ import java.util.Map;
 */
public class CarStatusBar extends StatusBar implements CarBatteryController.BatteryViewHandler {
    private static final String TAG = "CarStatusBar";
    private static final int MODE_INVALID = -1;
    // used to calculate how fast to open or close the window
    private static final float DEFAULT_FLING_VELOCITY = 0;
    // max time a fling animation takes
@@ -267,6 +273,9 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
        }
    };

    private int mNavigationBarMode;
    private BarTransitions mNavBarTransitions;

    @Override
    public void start() {
        // Non blocking call to connect to car service. Call this early so that we'll be connected
@@ -381,6 +390,18 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
                        Log.wtf(TAG, " mVolumeChangeCallback failed to connect to car ", e);
                    }
                });

        mAutoHideController.setNavigationBar(new AutoHideElement() {
            @Override
            public void synchronizeState() {
                checkNavBarModes();
            }

            @Override
            public boolean isSemiTransparent() {
                return mNavigationBarMode == MODE_SEMI_TRANSPARENT;
            }
        });
    }

    @Override
@@ -420,6 +441,65 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
        mUserSwitcherController = Dependency.get(UserSwitcherController.class);
    }

    @Override
    public void setSystemUiVisibility(int displayId, int vis, int fullscreenStackVis,
            int dockedStackVis, int mask, Rect fullscreenStackBounds, Rect dockedStackBounds,
            boolean navbarColorManagedByIme) {
        // Ensure we store the systemUiVisibility flags before the super call overwrites it.
        int oldVal = getSystemUiVisibility();

        super.setSystemUiVisibility(displayId, vis, fullscreenStackVis, dockedStackVis, mask,
                fullscreenStackBounds, dockedStackBounds, navbarColorManagedByIme);

        if (displayId != getDisplayId()) {
            return;
        }

        int newVal = (oldVal & ~mask) | (vis & mask);

        // update navigation bar mode
        int nbMode = mNavigationBarWindow == null ? MODE_INVALID : computeNavBarMode(oldVal,
                newVal);
        boolean nbModeChanged = nbMode != MODE_INVALID;
        if (nbModeChanged) {
            if (mNavigationBarMode != nbMode) {
                mNavigationBarMode = nbMode;
                checkNavBarModes();
            }
            mAutoHideController.touchAutoHide();
        }

        mLightBarController.onNavigationVisibilityChanged(
                vis, mask, nbModeChanged, mNavigationBarMode, navbarColorManagedByIme);
    }

    @BarTransitions.TransitionMode
    private int computeNavBarMode(int oldVis, int newVis) {
        int oldMode = navBarMode(oldVis);
        int newMode = navBarMode(newVis);
        if (oldMode == newMode) {
            return -1; // no mode change
        }
        return newMode;
    }

    @BarTransitions.TransitionMode
    private int navBarMode(int vis) {
        if ((vis & View.NAVIGATION_BAR_TRANSIENT) != 0) {
            return MODE_SEMI_TRANSPARENT;
        } else {
            return MODE_OPAQUE;
        }
    }

    /**
     * Checks current navigation bar mode and make transitions.
     */
    private void checkNavBarModes() {
        boolean anim = isDeviceInteractive() && mBottomNavBarVisible;
        mNavBarTransitions.transitionTo(mNavigationBarMode, anim);
    }

    @Override
    protected void setUpQuickSettingsTilePanel() {
        // ignore.
@@ -925,7 +1005,9 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
                    mNotificationViewController.setIsInForeground(false);
                    // let the status bar know that the panel is closed
                    setPanelExpanded(false);
                    mAutoHideController.userAutoHide();
                } else {
                    mAutoHideController.cancelAutoHide();
                    mNotificationViewController.setIsInForeground(true);
                    // let the status bar know that the panel is open
                    mNotificationView.setVisibleNotificationsAsSeen();
@@ -1000,6 +1082,8 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
        if (mShowBottom) {
            mNavigationBarWindow = (ViewGroup) View.inflate(mContext,
                    R.layout.navigation_bar_window, null);
            mNavBarTransitions = new BarTransitions(mNavigationBarWindow,
                    R.drawable.nav_background);
        }
        if (mShowLeft) {
            mLeftNavigationBarWindow = (ViewGroup) View.inflate(mContext,
+10 −7
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ public class AutoHideController implements CommandQueue.Callbacks {
    private final NotificationRemoteInputManager mRemoteInputManager;
    private final CommandQueue mCommandQueue;
    private StatusBar mStatusBar;
    private NavigationBarFragment mNavigationBar;
    private AutoHideElement mNavigationBar;

    @VisibleForTesting
    int mDisplayId;
@@ -85,11 +85,11 @@ public class AutoHideController implements CommandQueue.Callbacks {
        }
    }

    void setStatusBar(StatusBar statusBar) {
    public void setStatusBar(StatusBar statusBar) {
        mStatusBar = statusBar;
    }

    void setNavigationBar(NavigationBarFragment navigationBar) {
    public void setNavigationBar(AutoHideElement navigationBar) {
        mNavigationBar = navigationBar;
    }

@@ -158,7 +158,8 @@ public class AutoHideController implements CommandQueue.Callbacks {
        mAutoHideSuspended = (mSystemUiVisibility & getTransientMask()) != 0;
    }

    void touchAutoHide() {
    /** Schedule auto hide if necessary otherwise cancel any pending runnables. */
    public void touchAutoHide() {
        // update transient bar auto hide
        if ((hasStatusBar() && mStatusBar.getStatusBarMode() == MODE_SEMI_TRANSPARENT)
                || hasNavigationBar() && mNavigationBar.isSemiTransparent()) {
@@ -172,13 +173,14 @@ public class AutoHideController implements CommandQueue.Callbacks {
        if (hasStatusBar()) {
            return () -> mStatusBar.checkBarModes();
        } else if (hasNavigationBar()) {
            return () -> mNavigationBar.checkNavBarModes();
            return () -> mNavigationBar.synchronizeState();
        } else {
            return null;
        }
    }

    private void cancelAutoHide() {
    /** Remove any scheduled auto hide runnables. */
    public void cancelAutoHide() {
        mAutoHideSuspended = false;
        mHandler.removeCallbacks(mAutoHide);
    }
@@ -202,7 +204,8 @@ public class AutoHideController implements CommandQueue.Callbacks {
        }
    }

    private void userAutoHide() {
    /** Schedule auto hide. */
    public void userAutoHide() {
        cancelAutoHide();
        mHandler.postDelayed(mAutoHide, 350); // longer than app gesture -> flag clear
    }
+32 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.statusbar.phone;

/** An interface for a UI element controlled by the {@link AutoHideController}. */
public interface AutoHideElement {
    /**
     * Synchronizes the UI State of this {@link AutoHideElement}. This method is posted as a
     * {@link Runnable} on the main thread.
     */
    void synchronizeState();

    /**
     * Returns {@code true} if the {@link AutoHideElement} is in a
     * {@link BarTransitions#MODE_SEMI_TRANSPARENT} state.
     */
    boolean isSemiTransparent();
}
+9 −1
Original line number Diff line number Diff line
@@ -120,7 +120,7 @@ import javax.inject.Inject;
 * on clicks and view states of the nav bar.
 */
public class NavigationBarFragment extends LifecycleFragment implements Callbacks,
        NavigationModeController.ModeChangedListener {
        NavigationModeController.ModeChangedListener, AutoHideElement {

    public static final String TAG = "NavigationBar";
    private static final boolean DEBUG = false;
@@ -970,10 +970,18 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
        mAutoHideController.setNavigationBar(this);
    }

    // AutoHideElement
    @Override
    public boolean isSemiTransparent() {
        return mNavigationBarMode == MODE_SEMI_TRANSPARENT;
    }

    // AutoHideElement
    @Override
    public void synchronizeState() {
        checkNavBarModes();
    }

    private void checkBarModes() {
        // We only have status bar on default display now.
        if (mIsOnDefaultDisplay) {
+8 −0
Original line number Diff line number Diff line
@@ -2205,6 +2205,14 @@ public class StatusBar extends SystemUI implements DemoMode,
                navbarColorManagedByIme);
    }

    protected final int getSystemUiVisibility() {
        return mSystemUiVisibility;
    }

    protected final int getDisplayId() {
        return mDisplayId;
    }

    @Override
    public void showWirelessChargingAnimation(int batteryLevel) {
        if (mDozing || mKeyguardManager.isKeyguardLocked()) {
Loading