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

Commit 886d9763 authored by Heemin Seog's avatar Heemin Seog Committed by Android (Google) Code Review
Browse files

Merge "User switcher in primary sysui window"

parents 2bb9f65c 17134e29
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -15,9 +15,16 @@
  ~ limitations under the License.
  -->

<!-- Fullscreen views in sysui should be listed here in increasing Z order. -->
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@android:color/transparent"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ViewStub android:id="@+id/fullscreen_user_switcher_stub"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:layout="@layout/car_fullscreen_user_switcher"/>

</FrameLayout>
 No newline at end of file
+19 −3
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ public class SystemUIPrimaryWindowController implements
    private ViewGroup mBaseLayout;
    private WindowManager.LayoutParams mLp;
    private WindowManager.LayoutParams mLpChanged;
    private boolean mIsAttached = false;

    @Inject
    public SystemUIPrimaryWindowController(
@@ -86,8 +87,17 @@ public class SystemUIPrimaryWindowController implements
        return mBaseLayout;
    }

    /** Returns {@code true} if the window is already attached. */
    public boolean isAttached() {
        return mIsAttached;
    }

    /** Attaches the window to the window manager. */
    public void attach() {
        if (mIsAttached) {
            return;
        }
        mIsAttached = true;
        // Now that the status bar window encompasses the sliding panel and its
        // translucent backdrop, the entire thing is made TRANSLUCENT and is
        // hardware-accelerated.
@@ -98,13 +108,14 @@ public class SystemUIPrimaryWindowController implements
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                        | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH
                        | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
                        | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
                        | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
                        | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
                PixelFormat.TRANSLUCENT);
        mLp.token = new Binder();
        mLp.gravity = Gravity.TOP;
        mLp.setFitWindowInsetsTypes(/* types= */ 0);
        mLp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
        mLp.setTitle("NotificationShade");
        mLp.setTitle("SystemUIPrimaryWindow");
        mLp.packageName = mContext.getPackageName();
        mLp.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;

@@ -118,8 +129,11 @@ public class SystemUIPrimaryWindowController implements
            // TODO: Update this so that the windowing type gets the full height of the display
            //  when we use MATCH_PARENT.
            mLpChanged.height = mDisplayHeight + mNavBarHeight;
            mLpChanged.flags &= ~WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
        } else {
            mLpChanged.height = mStatusBarHeight;
            // TODO: Allow touches to go through to the status bar to handle notification panel.
            mLpChanged.flags |= WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
        }
        updateWindow();
    }
@@ -131,7 +145,9 @@ public class SystemUIPrimaryWindowController implements

    private void updateWindow() {
        if (mLp != null && mLp.copyFrom(mLpChanged) != 0) {
            if (isAttached()) {
                mWindowManager.updateViewLayout(mBaseLayout, mLp);
            }
        }
    }
}
+19 −41
Original line number Diff line number Diff line
@@ -67,6 +67,7 @@ import com.android.systemui.bubbles.BubbleController;
import com.android.systemui.car.CarDeviceProvisionedController;
import com.android.systemui.car.CarDeviceProvisionedListener;
import com.android.systemui.car.CarServiceProvider;
import com.android.systemui.car.SystemUIPrimaryWindowController;
import com.android.systemui.classifier.FalsingLog;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.dagger.qualifiers.UiBackground;
@@ -168,6 +169,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
    // acceleration rate for the fling animation
    private static final float FLING_SPEED_UP_FACTOR = 0.6f;

    private final UserSwitcherController mUserSwitcherController;
    private final ScrimController mScrimController;
    private final LockscreenLockIconController mLockscreenLockIconController;

@@ -177,17 +179,16 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
    private float mBackgroundAlphaDiff;
    private float mInitialBackgroundAlpha;

    private final Lazy<FullscreenUserSwitcher> mFullscreenUserSwitcherLazy;
    private FullscreenUserSwitcher mFullscreenUserSwitcher;

    private CarBatteryController mCarBatteryController;
    private BatteryMeterView mBatteryMeterView;
    private Drawable mNotificationPanelBackground;

    private final Object mQueueLock = new Object();
    private final SystemUIPrimaryWindowController mSystemUIPrimaryWindowController;
    private final CarNavigationBarController mCarNavigationBarController;
    private final FlingAnimationUtils.Builder mFlingAnimationUtilsBuilder;
    private final Lazy<PowerManagerHelper> mPowerManagerHelperLazy;
    private final FullscreenUserSwitcher mFullscreenUserSwitcher;
    private final ShadeController mShadeController;
    private final CarServiceProvider mCarServiceProvider;
    private final CarDeviceProvisionedController mCarDeviceProvisionedController;
@@ -338,7 +339,8 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
            /* Car Settings injected components. */
            CarServiceProvider carServiceProvider,
            Lazy<PowerManagerHelper> powerManagerHelperLazy,
            Lazy<FullscreenUserSwitcher> fullscreenUserSwitcherLazy,
            FullscreenUserSwitcher fullscreenUserSwitcher,
            SystemUIPrimaryWindowController systemUIPrimaryWindowController,
            CarNavigationBarController carNavigationBarController,
            FlingAnimationUtils.Builder flingAnimationUtilsBuilder) {
        super(
@@ -422,6 +424,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
                userInfoControllerImpl,
                notificationRowBinder,
                dismissCallbackRegistry);
        mUserSwitcherController = userSwitcherController;
        mScrimController = scrimController;
        mLockscreenLockIconController = lockscreenLockIconController;
        mCarDeviceProvisionedController =
@@ -429,7 +432,8 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
        mShadeController = shadeController;
        mCarServiceProvider = carServiceProvider;
        mPowerManagerHelperLazy = powerManagerHelperLazy;
        mFullscreenUserSwitcherLazy = fullscreenUserSwitcherLazy;
        mFullscreenUserSwitcher = fullscreenUserSwitcher;
        mSystemUIPrimaryWindowController = systemUIPrimaryWindowController;
        mCarNavigationBarController = carNavigationBarController;
        mFlingAnimationUtilsBuilder = flingAnimationUtilsBuilder;
    }
@@ -444,6 +448,13 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
        mScreenLifecycle = Dependency.get(ScreenLifecycle.class);
        mScreenLifecycle.addObserver(mScreenObserver);

        // TODO: Remove the setup of user switcher from Car Status Bar.
        mSystemUIPrimaryWindowController.attach();
        mFullscreenUserSwitcher.setStatusBar(this);
        mFullscreenUserSwitcher.setContainer(
                mSystemUIPrimaryWindowController.getBaseLayout().findViewById(
                        R.id.fullscreen_user_switcher_stub));

        // Notification bar related setup.
        mInitialBackgroundAlpha = (float) mContext.getResources().getInteger(
                R.integer.config_initialNotificationBackgroundAlpha) / 100;
@@ -510,16 +521,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
                });
    }

    /**
     * Allows for showing or hiding just the navigation bars. This is indented to be used when
     * the full screen user selector is shown.
     */
    void setNavBarVisibility(@View.Visibility int visibility) {
        mCarNavigationBarController.setBottomWindowVisibility(visibility);
        mCarNavigationBarController.setLeftWindowVisibility(visibility);
        mCarNavigationBarController.setRightWindowVisibility(visibility);
    }

    @Override
    public boolean hideKeyguard() {
        boolean result = super.hideKeyguard();
@@ -924,9 +925,6 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
                    + " scroll " + mStackScroller.getScrollX()
                    + "," + mStackScroller.getScrollY());
        }

        pw.print("  mFullscreenUserSwitcher=");
        pw.println(mFullscreenUserSwitcher);
        pw.print("  mCarBatteryController=");
        pw.println(mCarBatteryController);
        pw.print("  mBatteryMeterView=");
@@ -972,14 +970,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt

    @Override
    protected void createUserSwitcher() {
        UserSwitcherController userSwitcherController =
                Dependency.get(UserSwitcherController.class);
        if (userSwitcherController.useFullscreenUserSwitcher()) {
            mFullscreenUserSwitcher = mFullscreenUserSwitcherLazy.get();
            mFullscreenUserSwitcher.setStatusBar(this);
            mFullscreenUserSwitcher.setContainer(
                    mStatusBarWindow.findViewById(R.id.fullscreen_user_switcher_stub));
        } else {
        if (!mUserSwitcherController.useFullscreenUserSwitcher()) {
            super.createUserSwitcher();
        }
    }
@@ -996,25 +987,12 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt
        super.onStateChanged(newState);

        if (newState != StatusBarState.FULLSCREEN_USER_SWITCHER) {
            hideUserSwitcher();
            mFullscreenUserSwitcher.hide();
        } else {
            dismissKeyguardWhenUserSwitcherNotDisplayed();
        }
    }

    /** Makes the full screen user switcher visible, if applicable. */
    public void showUserSwitcher() {
        if (mFullscreenUserSwitcher != null && mState == StatusBarState.FULLSCREEN_USER_SWITCHER) {
            mFullscreenUserSwitcher.show(); // Makes the switcher visible.
        }
    }

    private void hideUserSwitcher() {
        if (mFullscreenUserSwitcher != null) {
            mFullscreenUserSwitcher.hide();
        }
    }

    final ScreenLifecycle.Observer mScreenObserver = new ScreenLifecycle.Observer() {
        @Override
        public void onScreenTurnedOn() {
@@ -1024,7 +1002,7 @@ public class CarStatusBar extends StatusBar implements CarBatteryController.Batt

    // We automatically dismiss keyguard unless user switcher is being shown on the keyguard.
    private void dismissKeyguardWhenUserSwitcherNotDisplayed() {
        if (mFullscreenUserSwitcher == null) {
        if (!mUserSwitcherController.useFullscreenUserSwitcher()) {
            return; // Not using the full screen user switcher.
        }

+13 −5
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.ViewMediatorCallback;
import com.android.systemui.R;
import com.android.systemui.dock.DockManager;
import com.android.systemui.navigationbar.car.CarNavigationBarController;
import com.android.systemui.statusbar.NotificationMediaManager;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.phone.NavigationModeController;
@@ -40,6 +41,8 @@ import javax.inject.Singleton;
public class CarStatusBarKeyguardViewManager extends StatusBarKeyguardViewManager {

    protected boolean mShouldHideNavBar;
    private final CarNavigationBarController mCarNavigationBarController;
    private final FullscreenUserSwitcher mFullscreenUserSwitcher;

    @Inject
    public CarStatusBarKeyguardViewManager(Context context,
@@ -52,13 +55,17 @@ public class CarStatusBarKeyguardViewManager extends StatusBarKeyguardViewManage
            DockManager dockManager,
            StatusBarWindowController statusBarWindowController,
            KeyguardStateController keyguardStateController,
            NotificationMediaManager notificationMediaManager) {
            NotificationMediaManager notificationMediaManager,
            CarNavigationBarController carNavigationBarController,
            FullscreenUserSwitcher fullscreenUserSwitcher) {
        super(context, callback, lockPatternUtils, sysuiStatusBarStateController,
                configurationController, keyguardUpdateMonitor, navigationModeController,
                dockManager, statusBarWindowController, keyguardStateController,
                notificationMediaManager);
        mShouldHideNavBar = context.getResources()
                .getBoolean(R.bool.config_hideNavWhenKeyguardBouncerShown);
        mCarNavigationBarController = carNavigationBarController;
        mFullscreenUserSwitcher = fullscreenUserSwitcher;
    }

    @Override
@@ -66,8 +73,10 @@ public class CarStatusBarKeyguardViewManager extends StatusBarKeyguardViewManage
        if (!mShouldHideNavBar) {
            return;
        }
        CarStatusBar statusBar = (CarStatusBar) mStatusBar;
        statusBar.setNavBarVisibility(navBarVisible ? View.VISIBLE : View.GONE);
        int visibility = navBarVisible ? View.VISIBLE : View.GONE;
        mCarNavigationBarController.setBottomWindowVisibility(visibility);
        mCarNavigationBarController.setLeftWindowVisibility(visibility);
        mCarNavigationBarController.setRightWindowVisibility(visibility);
    }

    /**
@@ -86,8 +95,7 @@ public class CarStatusBarKeyguardViewManager extends StatusBarKeyguardViewManage
     */
    @Override
    public void onCancelClicked() {
        CarStatusBar statusBar = (CarStatusBar) mStatusBar;
        statusBar.showUserSwitcher();
        mFullscreenUserSwitcher.show();
    }

    /**
+5 −2
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import com.android.systemui.assist.AssistManager;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.bubbles.BubbleController;
import com.android.systemui.car.CarServiceProvider;
import com.android.systemui.car.SystemUIPrimaryWindowController;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.dagger.qualifiers.UiBackground;
import com.android.systemui.keyguard.DismissCallbackRegistry;
@@ -207,7 +208,8 @@ public class CarStatusBarModule {
            DismissCallbackRegistry dismissCallbackRegistry,
            CarServiceProvider carServiceProvider,
            Lazy<PowerManagerHelper> powerManagerHelperLazy,
            Lazy<FullscreenUserSwitcher> fullscreenUserSwitcherLazy,
            FullscreenUserSwitcher fullscreenUserSwitcher,
            SystemUIPrimaryWindowController systemUIPrimaryWindowController,
            CarNavigationBarController carNavigationBarController,
            FlingAnimationUtils.Builder flingAnimationUtilsBuilder) {
        return new CarStatusBar(
@@ -292,7 +294,8 @@ public class CarStatusBarModule {
                dismissCallbackRegistry,
                carServiceProvider,
                powerManagerHelperLazy,
                fullscreenUserSwitcherLazy,
                fullscreenUserSwitcher,
                systemUIPrimaryWindowController,
                carNavigationBarController,
                flingAnimationUtilsBuilder);
    }
Loading