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
This commit is contained in:
Dave Mankoff
2021-05-13 13:44:18 -04:00
parent cc4fa5f3b6
commit 8a7de5089a
5 changed files with 29 additions and 7 deletions

View File

@@ -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);

View File

@@ -4071,6 +4071,7 @@ public class NotificationPanelViewController extends PanelViewController {
// force a call to onThemeChanged
mConfigurationListener.onThemeChanged();
mFalsingManager.addTapListener(mFalsingTapListener);
mKeyguardIndicationController.init();
}
@Override

View File

@@ -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);

View File

@@ -194,6 +194,7 @@ public class StatusBarNotificationPresenter implements NotificationPresenter,
}
};
mKeyguardIndicationController.init();
mViewHierarchyManager.setUpWithPresenter(this,
stackScrollerController.getNotificationListContainer());
mEntryManager.setUpWithPresenter(this);

View File

@@ -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();