Loading packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java +84 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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. Loading Loading @@ -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(); Loading Loading @@ -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, Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoHideController.java +10 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading Loading @@ -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()) { Loading @@ -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); } Loading @@ -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 } Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoHideElement.java 0 → 100644 +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(); } packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java +9 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +8 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
packages/CarSystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java +84 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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. Loading Loading @@ -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(); Loading Loading @@ -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, Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoHideController.java +10 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading Loading @@ -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()) { Loading @@ -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); } Loading @@ -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 } Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoHideElement.java 0 → 100644 +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(); }
packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java +9 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +8 −0 Original line number Diff line number Diff line Loading @@ -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