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

Commit 89066a5c authored by Silin Huang's avatar Silin Huang
Browse files

Fix a bug that the QuickAccessWalletTile displaying packageName as

title.

The root cause is that it the QAWClient#getServiceLabel invoked an
outdated serviceInfo, which causes an IOException.

Test: atest
Fixes: 188789272
Change-Id: I0a2aae165d8057cfb1b1d30690c96a31d3455a2f
parent fddad8e2
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -153,9 +153,25 @@ public class QuickAccessWalletTile extends QSTileImpl<QSTile.State> {
        });
    }

    @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();
+14 −0
Original line number Diff line number Diff line
@@ -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();