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

Commit 704d2383 authored by Silin Huang's avatar Silin Huang Committed by Android Build Coastguard Worker
Browse files

Do not load drawable for wallet card if the card image icon iscreated

with content URI.

This prevents the primary user from accessing the secondary user's
photos for QAW card images.

Test: manually, atest
Bug: 272020068
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:ff753ae693065685d85bbda6af2953905fdf434c)
Merged-In: I6932c5131b3c795bac4ea9b537938e7ef4f3ea4e
Change-Id: I6932c5131b3c795bac4ea9b537938e7ef4f3ea4e
parent 19a0fdb3
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.qs.tiles;

import static android.graphics.drawable.Icon.TYPE_URI;
import static android.provider.Settings.Secure.NFC_PAYMENT_DEFAULT_COMPONENT;

import static com.android.systemui.wallet.controller.QuickAccessWalletController.WalletChangeEvent.DEFAULT_PAYMENT_APP_CHANGE;
@@ -223,7 +224,12 @@ public class QuickAccessWalletTile extends QSTileImpl<QSTile.State> {
                return;
            }
            mSelectedCard = cards.get(selectedIndex);
            android.graphics.drawable.Icon cardImageIcon = mSelectedCard.getCardImage();
            if (cardImageIcon.getType() == TYPE_URI) {
                mCardViewDrawable = null;
            } else {
                mCardViewDrawable = mSelectedCard.getCardImage().loadDrawable(mContext);
            }
            refreshState();
        }

+6 −1
Original line number Diff line number Diff line
@@ -338,7 +338,12 @@ public class WalletScreenController implements
         */
        QAWalletCardViewInfo(Context context, WalletCard walletCard) {
            mWalletCard = walletCard;
            Icon cardImageIcon = mWalletCard.getCardImage();
            if (cardImageIcon.getType() == Icon.TYPE_URI) {
                mCardDrawable = null;
            } else {
                mCardDrawable = mWalletCard.getCardImage().loadDrawable(context);
            }
            Icon icon = mWalletCard.getCardIcon();
            mIconDrawable = icon == null ? null : icon.loadDrawable(context);
        }
+28 −0
Original line number Diff line number Diff line
@@ -94,6 +94,8 @@ public class QuickAccessWalletTileTest extends SysuiTestCase {
    private static final String CARD_DESCRIPTION = "•••• 1234";
    private static final Icon CARD_IMAGE =
            Icon.createWithBitmap(Bitmap.createBitmap(70, 50, Bitmap.Config.ARGB_8888));
    private static final int PRIMARY_USER_ID = 0;
    private static final int SECONDARY_USER_ID = 10;

    private final Drawable mTileIcon = mContext.getDrawable(R.drawable.ic_qs_wallet);
    private final Intent mWalletIntent = new Intent(QuickAccessWalletService.ACTION_VIEW_WALLET)
@@ -120,6 +122,8 @@ public class QuickAccessWalletTileTest extends SysuiTestCase {
    private SecureSettings mSecureSettings;
    @Mock
    private QuickAccessWalletController mController;
    @Mock
    private Icon mCardImage;
    @Captor
    ArgumentCaptor<QuickAccessWalletClient.OnWalletCardsRetrievedCallback> mCallbackCaptor;

@@ -143,6 +147,8 @@ public class QuickAccessWalletTileTest extends SysuiTestCase {
        when(mQuickAccessWalletClient.isWalletServiceAvailable()).thenReturn(true);
        when(mQuickAccessWalletClient.isWalletFeatureAvailableWhenDeviceLocked()).thenReturn(true);
        when(mController.getWalletClient()).thenReturn(mQuickAccessWalletClient);
        when(mCardImage.getType()).thenReturn(Icon.TYPE_URI);
        when(mCardImage.loadDrawableAsUser(any(), eq(SECONDARY_USER_ID))).thenReturn(null);

        mTile = new QuickAccessWalletTile(
                mHost,
@@ -381,6 +387,28 @@ public class QuickAccessWalletTileTest extends SysuiTestCase {
        assertNotNull(mTile.getState().sideViewCustomDrawable);
    }

    @Test
    public void testQueryCards_notCurrentUser_hasCards_noSideViewDrawable() {
        when(mKeyguardStateController.isUnlocked()).thenReturn(true);

        PendingIntent pendingIntent =
                PendingIntent.getActivity(mContext, 0, mWalletIntent, PendingIntent.FLAG_IMMUTABLE);
        WalletCard walletCard =
                new WalletCard.Builder(
                    CARD_ID, mCardImage, CARD_DESCRIPTION, pendingIntent).build();
        GetWalletCardsResponse response =
                new GetWalletCardsResponse(Collections.singletonList(walletCard), 0);

        mTile.handleSetListening(true);

        verify(mController).queryWalletCards(mCallbackCaptor.capture());

        mCallbackCaptor.getValue().onWalletCardsRetrieved(response);
        mTestableLooper.processAllMessages();

        assertNull(mTile.getState().sideViewCustomDrawable);
    }

    @Test
    public void testQueryCards_noCards_notUpdateSideViewDrawable() {
        setUpWalletCard(/* hasCard= */ false);