Use the main thread to update alignment indication

The alignment status is reported from WLC-HAL level and runs
on another thread. It may cause CalledFromWrongThreadException,
if use that thread to update UI directly.

Bug: 146770234
Test: atest SystemUITests:KeyguardIndicationControllerTest
Change-Id: I89bf1c188d6ba094106e059f1590c9eaf3703bb8
(cherry picked from commit 0e72713fdf)
Merged-In: I89bf1c188d6ba094106e059f1590c9eaf3703bb8
This commit is contained in:
Wilson Wu
2019-12-26 16:17:56 +08:00
parent 835a9b4e4f
commit f656f6d2c1
2 changed files with 32 additions and 21 deletions

View File

@@ -166,7 +166,8 @@ public class KeyguardIndicationController implements StateListener,
mStatusBarStateController = statusBarStateController;
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mDockManager = dockManager;
mDockManager.addAlignmentStateListener(this::handleAlignStateChanged);
mDockManager.addAlignmentStateListener(
alignState -> mHandler.post(() -> handleAlignStateChanged(alignState)));
// lock icon is not used on all form factors.
if (mLockIcon != null) {
mLockIcon.setOnLongClickListener(this::handleLockLongClick);

View File

@@ -223,12 +223,14 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
@Test
public void onAlignmentStateChanged_showsSlowChargingIndication() {
createController();
verify(mDockManager).addAlignmentStateListener(mAlignmentListener.capture());
mController.setVisible(true);
mInstrumentation.runOnMainSync(() -> {
createController();
verify(mDockManager).addAlignmentStateListener(mAlignmentListener.capture());
mController.setVisible(true);
mAlignmentListener.getValue().onAlignmentStateChanged(
DockManager.ALIGN_STATE_POOR);
mAlignmentListener.getValue().onAlignmentStateChanged(DockManager.ALIGN_STATE_POOR);
});
mInstrumentation.waitForIdleSync();
assertThat(mTextView.getText()).isEqualTo(
mContext.getResources().getString(R.string.dock_alignment_slow_charging));
@@ -238,11 +240,14 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
@Test
public void onAlignmentStateChanged_showsNotChargingIndication() {
createController();
verify(mDockManager).addAlignmentStateListener(mAlignmentListener.capture());
mController.setVisible(true);
mInstrumentation.runOnMainSync(() -> {
createController();
verify(mDockManager).addAlignmentStateListener(mAlignmentListener.capture());
mController.setVisible(true);
mAlignmentListener.getValue().onAlignmentStateChanged(DockManager.ALIGN_STATE_TERRIBLE);
mAlignmentListener.getValue().onAlignmentStateChanged(DockManager.ALIGN_STATE_TERRIBLE);
});
mInstrumentation.waitForIdleSync();
assertThat(mTextView.getText()).isEqualTo(
mContext.getResources().getString(R.string.dock_alignment_not_charging));
@@ -252,13 +257,15 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
@Test
public void onAlignmentStateChanged_whileDozing_showsSlowChargingIndication() {
createController();
verify(mDockManager).addAlignmentStateListener(mAlignmentListener.capture());
mController.setVisible(true);
mController.setDozing(true);
mInstrumentation.runOnMainSync(() -> {
createController();
verify(mDockManager).addAlignmentStateListener(mAlignmentListener.capture());
mController.setVisible(true);
mController.setDozing(true);
mAlignmentListener.getValue().onAlignmentStateChanged(
DockManager.ALIGN_STATE_POOR);
mAlignmentListener.getValue().onAlignmentStateChanged(DockManager.ALIGN_STATE_POOR);
});
mInstrumentation.waitForIdleSync();
assertThat(mTextView.getText()).isEqualTo(
mContext.getResources().getString(R.string.dock_alignment_slow_charging));
@@ -268,12 +275,15 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
@Test
public void onAlignmentStateChanged_whileDozing_showsNotChargingIndication() {
createController();
verify(mDockManager).addAlignmentStateListener(mAlignmentListener.capture());
mController.setVisible(true);
mController.setDozing(true);
mInstrumentation.runOnMainSync(() -> {
createController();
verify(mDockManager).addAlignmentStateListener(mAlignmentListener.capture());
mController.setVisible(true);
mController.setDozing(true);
mAlignmentListener.getValue().onAlignmentStateChanged(DockManager.ALIGN_STATE_TERRIBLE);
mAlignmentListener.getValue().onAlignmentStateChanged(DockManager.ALIGN_STATE_TERRIBLE);
});
mInstrumentation.waitForIdleSync();
assertThat(mTextView.getText()).isEqualTo(
mContext.getResources().getString(R.string.dock_alignment_not_charging));