diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java index 82b6c0c1805d4..ab81ac1fd577c 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java @@ -153,9 +153,25 @@ public class QuickAccessWalletTile extends QSTileImpl { }); } + @Nullable + private CharSequence getServiceLabelSafe() { + try { + return mController.getWalletClient().getServiceLabel(); + } catch (RuntimeException e) { + Log.e(TAG, "Failed to get the service label safely, recreating wallet client", e); + mController.reCreateWalletClient(); + try { + return mController.getWalletClient().getServiceLabel(); + } catch (RuntimeException e2) { + Log.e(TAG, "The QAW service label is broken.", e2); + return null; + } + } + } + @Override protected void handleUpdateState(State state, Object arg) { - CharSequence label = mController.getWalletClient().getServiceLabel(); + CharSequence label = getServiceLabelSafe(); state.label = label == null ? mLabel : label; state.contentDescription = state.label; Drawable tileIcon = mController.getWalletClient().getTileIcon(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java index a70c2be4954e1..17797b70c4af2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/QuickAccessWalletTileTest.java @@ -30,6 +30,7 @@ import static junit.framework.TestCase.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; @@ -255,6 +256,19 @@ public class QuickAccessWalletTileTest extends SysuiTestCase { assertThat(nextStartedIntent.getComponent().getClassName()).isEqualTo(walletClassName); } + @Test + public void testGetServiceLabelUnsafe_recreateWalletClient() { + doAnswer(invocation -> { + throw new Exception("Bad service label."); + }).when(mQuickAccessWalletClient).getServiceLabel(); + + QSTile.State state = new QSTile.State(); + + mTile.handleUpdateState(state, null); + + verify(mController).reCreateWalletClient(); + } + @Test public void testHandleUpdateState_updateLabelAndIcon() { QSTile.State state = new QSTile.State();