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

Commit 8a7de508 authored by Dave Mankoff's avatar Dave Mankoff
Browse files

Move listener registration out of constructor.

Work being done in the constructor was resuling in an NPE when a
callback was being called too quickly.

Add an idempotent init method to do all the setup work.

Fixes: 188015288
Test: atest SystemUITests
Change-Id: Idc0f3c7a6a53f447194b60486d814dcd76af9f25
parent cc4fa5f3
Loading
Loading
Loading
Loading
+17 −6
Original line number Diff line number Diff line
@@ -33,7 +33,6 @@ import static com.android.systemui.plugins.FalsingManager.LOW_PENALTY;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.app.ActivityManager;
import android.app.IActivityManager;
import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
@@ -147,6 +146,7 @@ public class KeyguardIndicationController implements KeyguardStateController.Cal
    private long mChargingTimeRemaining;
    private String mMessageToShowOnScreenOn;
    protected int mLockScreenMode;
    private boolean mInited;

    private KeyguardUpdateMonitorCallback mUpdateMonitorCallback;

@@ -174,7 +174,9 @@ public class KeyguardIndicationController implements KeyguardStateController.Cal
            IBatteryStats iBatteryStats,
            UserManager userManager,
            @Main DelayableExecutor executor,
            FalsingManager falsingManager) {
            FalsingManager falsingManager,
            LockPatternUtils lockPatternUtils,
            IActivityManager iActivityManager) {
        mContext = context;
        mBroadcastDispatcher = broadcastDispatcher;
        mDevicePolicyManager = devicePolicyManager;
@@ -182,17 +184,26 @@ public class KeyguardIndicationController implements KeyguardStateController.Cal
        mStatusBarStateController = statusBarStateController;
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mDockManager = dockManager;
        mDockManager.addAlignmentStateListener(
                alignState -> mHandler.post(() -> handleAlignStateChanged(alignState)));
        mWakeLock = new SettableWakeLock(
                wakeLockBuilder.setTag("Doze:KeyguardIndication").build(), TAG);
        mBatteryInfo = iBatteryStats;
        mUserManager = userManager;
        mExecutor = executor;
        mLockPatternUtils = new LockPatternUtils(context);
        mIActivityManager = ActivityManager.getService();
        mLockPatternUtils = lockPatternUtils;
        mIActivityManager = iActivityManager;
        mFalsingManager = falsingManager;

    }

    /** Call this after construction to finish setting up the instance. */
    public void init() {
        if (mInited) {
            return;
        }
        mInited = true;

        mDockManager.addAlignmentStateListener(
                alignState -> mHandler.post(() -> handleAlignStateChanged(alignState)));
        mKeyguardUpdateMonitor.registerCallback(getKeyguardCallback());
        mKeyguardUpdateMonitor.registerCallback(mTickReceiver);
        mStatusBarStateController.addCallback(mStatusBarStateListener);
+1 −0
Original line number Diff line number Diff line
@@ -4071,6 +4071,7 @@ public class NotificationPanelViewController extends PanelViewController {
            // force a call to onThemeChanged
            mConfigurationListener.onThemeChanged();
            mFalsingManager.addTapListener(mFalsingTapListener);
            mKeyguardIndicationController.init();
        }

        @Override
+2 −0
Original line number Diff line number Diff line
@@ -909,6 +909,8 @@ public class StatusBar extends SystemUI implements DemoMode,
            mBroadcastDispatcher.registerReceiver(mTaskbarChangeReceiver, filter);
        }

        mKeyguardIndicationController.init();

        mColorExtractor.addOnColorsChangedListener(this);
        mStatusBarStateController.addCallback(this,
                SysuiStatusBarStateController.RANK_STATUS_BAR);
+1 −0
Original line number Diff line number Diff line
@@ -194,6 +194,7 @@ public class StatusBarNotificationPresenter implements NotificationPresenter,
                }
            };

            mKeyguardIndicationController.init();
            mViewHierarchyManager.setUpWithPresenter(this,
                    stackScrollerController.getNotificationListContainer());
            mEntryManager.setUpWithPresenter(this);
+8 −1
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.app.IActivityManager;
import android.app.Instrumentation;
import android.app.admin.DevicePolicyManager;
import android.app.trust.TrustManager;
@@ -69,6 +70,7 @@ import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;

import com.android.internal.app.IBatteryStats;
import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.settingslib.Utils;
import com.android.settingslib.fuelgauge.BatteryStatus;
@@ -141,6 +143,10 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
    private KeyguardIndicationRotateTextViewController mRotateTextViewController;
    @Mock
    private FalsingManager mFalsingManager;
    @Mock
    private LockPatternUtils mLockPatternUtils;
    @Mock
    private IActivityManager mIActivityManager;
    @Captor
    private ArgumentCaptor<DockManager.AlignmentStateListener> mAlignmentListener;
    @Captor
@@ -208,7 +214,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
        mController = new KeyguardIndicationController(mContext, mWakeLockBuilder,
                mKeyguardStateController, mStatusBarStateController, mKeyguardUpdateMonitor,
                mDockManager, mBroadcastDispatcher, mDevicePolicyManager, mIBatteryStats,
                mUserManager, mExecutor, mFalsingManager);
                mUserManager, mExecutor, mFalsingManager, mLockPatternUtils, mIActivityManager);
        mController.init();
        mController.setIndicationArea(mIndicationArea);
        verify(mStatusBarStateController).addCallback(mStatusBarStateListenerCaptor.capture());
        mStatusBarStateListener = mStatusBarStateListenerCaptor.getValue();