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
Change-Id: I6932c5131b3c795bac4ea9b537938e7ef4f3ea4e
This commit is contained in:
Silin Huang
2023-04-12 17:22:11 +00:00
parent 9cbd0b8c2a
commit ff753ae693
3 changed files with 43 additions and 3 deletions

View File

@@ -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;
@@ -246,7 +247,12 @@ public class QuickAccessWalletTile extends QSTileImpl<QSTile.State> {
return;
}
mSelectedCard = cards.get(selectedIndex);
mCardViewDrawable = mSelectedCard.getCardImage().loadDrawable(mContext);
android.graphics.drawable.Icon cardImageIcon = mSelectedCard.getCardImage();
if (cardImageIcon.getType() == TYPE_URI) {
mCardViewDrawable = null;
} else {
mCardViewDrawable = mSelectedCard.getCardImage().loadDrawable(mContext);
}
refreshState();
}

View File

@@ -319,7 +319,12 @@ public class WalletScreenController implements
*/
QAWalletCardViewInfo(Context context, WalletCard walletCard) {
mWalletCard = walletCard;
mCardDrawable = mWalletCard.getCardImage().loadDrawable(context);
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);
}

View File

@@ -91,8 +91,11 @@ public class QuickAccessWalletTileTest extends SysuiTestCase {
private static final String CARD_ID = "card_id";
private static final String LABEL = "QAW";
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)
@@ -119,6 +122,8 @@ public class QuickAccessWalletTileTest extends SysuiTestCase {
private SecureSettings mSecureSettings;
@Mock
private QuickAccessWalletController mController;
@Mock
private Icon mCardImage;
@Captor
ArgumentCaptor<Intent> mIntentCaptor;
@Captor
@@ -144,6 +149,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,
@@ -415,6 +422,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);
@@ -462,6 +491,6 @@ public class QuickAccessWalletTileTest extends SysuiTestCase {
private WalletCard createWalletCard(Context context) {
PendingIntent pendingIntent =
PendingIntent.getActivity(context, 0, mWalletIntent, PendingIntent.FLAG_IMMUTABLE);
return new WalletCard.Builder(CARD_ID, CARD_IMAGE, "•••• 1234", pendingIntent).build();
return new WalletCard.Builder(CARD_ID, CARD_IMAGE, CARD_DESCRIPTION, pendingIntent).build();
}
}