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

Commit 09970f41 authored by Heemin Seog's avatar Heemin Seog
Browse files

Lazy load BiometricUnlockController

This one also includes other big dependencies like StatusBar,
NotificationShadeWindowController, ShadeController, and more.

Bug: 147455109
Test: manual (with timing from SystemUIOverlayWindowManager)
Change-Id: I7d8f1a92e66860ea278c062af873665b1b8e47b0
parent c7b99da1
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -51,6 +51,8 @@ import com.android.systemui.statusbar.policy.KeyguardStateController;
import javax.inject.Inject;
import javax.inject.Singleton;

import dagger.Lazy;

/**
 * Automotive implementation of the {@link KeyguardViewController}. It controls the Keyguard View
 * that is mounted to the SystemUIOverlayWindow.
@@ -66,9 +68,10 @@ public class CarKeyguardViewController extends OverlayViewController implements
    private final CarServiceProvider mCarServiceProvider;
    private final KeyguardStateController mKeyguardStateController;
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    private final Lazy<BiometricUnlockController> mBiometricUnlockControllerLazy;
    private final LockPatternUtils mLockPatternUtils;
    private final FalsingManager mFalsingManager;
    private final KeyguardBypassController mKeyguardBypassController;
    private final Lazy<KeyguardBypassController> mKeyguardBypassControllerLazy;
    private final DismissCallbackRegistry mDismissCallbackRegistry;
    private final ViewMediatorCallback mViewMediatorCallback;
    private final CarNavigationBarController mCarNavigationBarController;
@@ -109,14 +112,14 @@ public class CarKeyguardViewController extends OverlayViewController implements
            OverlayViewGlobalStateController overlayViewGlobalStateController,
            KeyguardStateController keyguardStateController,
            KeyguardUpdateMonitor keyguardUpdateMonitor,
            BiometricUnlockController biometricUnlockController,
            Lazy<BiometricUnlockController> biometricUnlockControllerLazy,
            ViewMediatorCallback viewMediatorCallback,
            CarNavigationBarController carNavigationBarController,
            /* The params below are only used to reuse KeyguardBouncer */
            LockPatternUtils lockPatternUtils,
            DismissCallbackRegistry dismissCallbackRegistry,
            FalsingManager falsingManager,
            KeyguardBypassController keyguardBypassController) {
            Lazy<KeyguardBypassController> keyguardBypassControllerLazy) {

        super(R.id.keyguard_stub, overlayViewGlobalStateController);

@@ -125,14 +128,14 @@ public class CarKeyguardViewController extends OverlayViewController implements
        mCarServiceProvider = carServiceProvider;
        mKeyguardStateController = keyguardStateController;
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mBiometricUnlockControllerLazy = biometricUnlockControllerLazy;
        mLockPatternUtils = lockPatternUtils;
        mFalsingManager = falsingManager;
        mKeyguardBypassController = keyguardBypassController;
        mKeyguardBypassControllerLazy = keyguardBypassControllerLazy;
        mDismissCallbackRegistry = dismissCallbackRegistry;
        mViewMediatorCallback = viewMediatorCallback;
        mCarNavigationBarController = carNavigationBarController;

        biometricUnlockController.setKeyguardViewController(this);
        registerUserSwitchedListener();
    }

@@ -142,7 +145,8 @@ public class CarKeyguardViewController extends OverlayViewController implements
                mViewMediatorCallback, mLockPatternUtils,
                getLayout().findViewById(R.id.keyguard_container), mDismissCallbackRegistry,
                mExpansionCallback, mKeyguardStateController, mFalsingManager,
                mKeyguardBypassController);
                mKeyguardBypassControllerLazy.get());
        mBiometricUnlockControllerLazy.get().setKeyguardViewController(this);
    }

    @Override
+9 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.car.window;

import android.content.Context;
import android.util.Log;

import com.android.systemui.R;
import com.android.systemui.SystemUI;
@@ -35,7 +36,7 @@ import javax.inject.Singleton;
 */
@Singleton
public class SystemUIOverlayWindowManager extends SystemUI {
    private static final String TAG = "SystemUIOverlayWindowManager";
    private static final String TAG = "SystemUIOverlayWM";
    private final Map<Class<?>, Provider<OverlayViewMediator>>
            mContentMediatorCreators;
    private final OverlayViewGlobalStateController mOverlayViewGlobalStateController;
@@ -59,6 +60,7 @@ public class SystemUIOverlayWindowManager extends SystemUI {

    private void startServices(String[] services) {
        for (String clsName : services) {
            long ti = System.currentTimeMillis();
            try {
                OverlayViewMediator obj = resolveContentMediator(clsName);
                if (obj == null) {
@@ -73,6 +75,12 @@ public class SystemUIOverlayWindowManager extends SystemUI {
                    | InvocationTargetException ex) {
                throw new RuntimeException(ex);
            }

            // Warn if initialization of component takes too long
            ti = System.currentTimeMillis() - ti;
            if (ti > 200) {
                Log.w(TAG, "Initialization of " + clsName + " took " + ti + " ms");
            }
        }
    }

+8 −6
Original line number Diff line number Diff line
@@ -54,6 +54,8 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import dagger.Lazy;

@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper
public class CarKeyguardViewControllerTest extends SysuiTestCase {
@@ -88,13 +90,13 @@ public class CarKeyguardViewControllerTest extends SysuiTestCase {
                mOverlayViewGlobalStateController,
                mock(KeyguardStateController.class),
                mock(KeyguardUpdateMonitor.class),
                mock(BiometricUnlockController.class),
                () -> mock(BiometricUnlockController.class),
                mock(ViewMediatorCallback.class),
                mock(CarNavigationBarController.class),
                mock(LockPatternUtils.class),
                mock(DismissCallbackRegistry.class),
                mock(FalsingManager.class),
                mock(KeyguardBypassController.class)
                () -> mock(KeyguardBypassController.class)
        );
    }

@@ -186,17 +188,17 @@ public class CarKeyguardViewControllerTest extends SysuiTestCase {
                OverlayViewGlobalStateController overlayViewGlobalStateController,
                KeyguardStateController keyguardStateController,
                KeyguardUpdateMonitor keyguardUpdateMonitor,
                BiometricUnlockController biometricUnlockController,
                Lazy<BiometricUnlockController> biometricUnlockControllerLazy,
                ViewMediatorCallback viewMediatorCallback,
                CarNavigationBarController carNavigationBarController,
                LockPatternUtils lockPatternUtils,
                DismissCallbackRegistry dismissCallbackRegistry,
                FalsingManager falsingManager,
                KeyguardBypassController keyguardBypassController) {
                Lazy<KeyguardBypassController> keyguardBypassControllerLazy) {
            super(context, mainHandler, carServiceProvider, overlayViewGlobalStateController,
                    keyguardStateController, keyguardUpdateMonitor, biometricUnlockController,
                    keyguardStateController, keyguardUpdateMonitor, biometricUnlockControllerLazy,
                    viewMediatorCallback, carNavigationBarController, lockPatternUtils,
                    dismissCallbackRegistry, falsingManager, keyguardBypassController);
                    dismissCallbackRegistry, falsingManager, keyguardBypassControllerLazy);
        }

        @Override