diff --git a/core/java/android/service/quickaccesswallet/QuickAccessWalletClient.java b/core/java/android/service/quickaccesswallet/QuickAccessWalletClient.java
index f12256173c436..f69c89d453126 100644
--- a/core/java/android/service/quickaccesswallet/QuickAccessWalletClient.java
+++ b/core/java/android/service/quickaccesswallet/QuickAccessWalletClient.java
@@ -177,6 +177,14 @@ public interface QuickAccessWalletClient extends Closeable {
@Nullable
Drawable getLogo();
+ /**
+ * Returns the tile icon associated with the {@link QuickAccessWalletService}.
+ *
+ * @hide
+ */
+ @Nullable
+ Drawable getTileIcon();
+
/**
* Returns the service label specified by {@code android:label} in the service manifest entry.
*
diff --git a/core/java/android/service/quickaccesswallet/QuickAccessWalletClientImpl.java b/core/java/android/service/quickaccesswallet/QuickAccessWalletClientImpl.java
index 2e4af3fad1b52..2d0faad8cb13d 100644
--- a/core/java/android/service/quickaccesswallet/QuickAccessWalletClientImpl.java
+++ b/core/java/android/service/quickaccesswallet/QuickAccessWalletClientImpl.java
@@ -307,6 +307,12 @@ public class QuickAccessWalletClientImpl implements QuickAccessWalletClient, Ser
return mServiceInfo == null ? null : mServiceInfo.getWalletLogo(mContext);
}
+ @Nullable
+ @Override
+ public Drawable getTileIcon() {
+ return mServiceInfo == null ? null : mServiceInfo.getTileIcon();
+ }
+
@Override
@Nullable
public CharSequence getServiceLabel() {
diff --git a/core/java/android/service/quickaccesswallet/QuickAccessWalletService.java b/core/java/android/service/quickaccesswallet/QuickAccessWalletService.java
index ef6150dd02f92..db20a51e23ed2 100644
--- a/core/java/android/service/quickaccesswallet/QuickAccessWalletService.java
+++ b/core/java/android/service/quickaccesswallet/QuickAccessWalletService.java
@@ -195,6 +195,13 @@ public abstract class QuickAccessWalletService extends Service {
*/
public static final String SERVICE_META_DATA = "android.quickaccesswallet";
+ /**
+ * Name of the QuickAccessWallet tile service meta-data.
+ *
+ * @hide
+ */
+ public static final String TILE_SERVICE_META_DATA = "android.quickaccesswallet.tile";
+
private final Handler mHandler = new Handler(Looper.getMainLooper());
/**
diff --git a/core/java/android/service/quickaccesswallet/QuickAccessWalletServiceInfo.java b/core/java/android/service/quickaccesswallet/QuickAccessWalletServiceInfo.java
index c87407e9d38c8..0d290eee5777d 100644
--- a/core/java/android/service/quickaccesswallet/QuickAccessWalletServiceInfo.java
+++ b/core/java/android/service/quickaccesswallet/QuickAccessWalletServiceInfo.java
@@ -56,12 +56,15 @@ class QuickAccessWalletServiceInfo {
private final ServiceInfo mServiceInfo;
private final ServiceMetadata mServiceMetadata;
+ private final TileServiceMetadata mTileServiceMetadata;
private QuickAccessWalletServiceInfo(
@NonNull ServiceInfo serviceInfo,
- @NonNull ServiceMetadata metadata) {
+ @NonNull ServiceMetadata metadata,
+ @NonNull TileServiceMetadata tileServiceMetadata) {
mServiceInfo = serviceInfo;
mServiceMetadata = metadata;
+ mTileServiceMetadata = tileServiceMetadata;
}
@Nullable
@@ -84,7 +87,9 @@ class QuickAccessWalletServiceInfo {
}
ServiceMetadata metadata = parseServiceMetadata(context, serviceInfo);
- return new QuickAccessWalletServiceInfo(serviceInfo, metadata);
+ TileServiceMetadata tileServiceMetadata =
+ new TileServiceMetadata(parseTileServiceMetadata(context, serviceInfo));
+ return new QuickAccessWalletServiceInfo(serviceInfo, metadata, tileServiceMetadata);
}
private static ComponentName getDefaultPaymentApp(Context context) {
@@ -105,6 +110,31 @@ class QuickAccessWalletServiceInfo {
return resolveInfos.isEmpty() ? null : resolveInfos.get(0).serviceInfo;
}
+ private static class TileServiceMetadata {
+ @Nullable
+ private final Drawable mTileIcon;
+
+ private TileServiceMetadata(@Nullable Drawable tileIcon) {
+ mTileIcon = tileIcon;
+ }
+ }
+
+ @Nullable
+ private static Drawable parseTileServiceMetadata(Context context, ServiceInfo serviceInfo) {
+ PackageManager pm = context.getPackageManager();
+ int tileIconDrawableId =
+ serviceInfo.metaData.getInt(QuickAccessWalletService.TILE_SERVICE_META_DATA);
+ if (tileIconDrawableId != 0) {
+ try {
+ Resources resources = pm.getResourcesForApplication(serviceInfo.applicationInfo);
+ return resources.getDrawable(tileIconDrawableId, null);
+ } catch (PackageManager.NameNotFoundException e) {
+ Log.e(TAG, "Error parsing quickaccesswallet tile service meta-data", e);
+ }
+ }
+ return null;
+ }
+
private static class ServiceMetadata {
@Nullable
private final String mSettingsActivity;
@@ -216,6 +246,11 @@ class QuickAccessWalletServiceInfo {
return mServiceInfo.loadIcon(context.getPackageManager());
}
+ @Nullable
+ Drawable getTileIcon() {
+ return mTileServiceMetadata.mTileIcon;
+ }
+
@NonNull
CharSequence getShortcutShortLabel(Context context) {
if (!TextUtils.isEmpty(mServiceMetadata.mShortcutShortLabel)) {
diff --git a/packages/SystemUI/res/drawable/ic_wallet_lockscreen.xml b/packages/SystemUI/res/drawable/ic_wallet_lockscreen.xml
index 2f8f11d72331b..def7b3136f30d 100644
--- a/packages/SystemUI/res/drawable/ic_wallet_lockscreen.xml
+++ b/packages/SystemUI/res/drawable/ic_wallet_lockscreen.xml
@@ -17,21 +17,12 @@
*/
-->
-
-
-
-
-
-
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24"
+ android:tint="?attr/colorControlNormal">
+
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 4dc7508f42b56..82b6c0c1805d4 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/QuickAccessWalletTile.java
@@ -158,7 +158,11 @@ public class QuickAccessWalletTile extends QSTileImpl {
CharSequence label = mController.getWalletClient().getServiceLabel();
state.label = label == null ? mLabel : label;
state.contentDescription = state.label;
- state.icon = ResourceIcon.get(R.drawable.ic_wallet_lockscreen);
+ Drawable tileIcon = mController.getWalletClient().getTileIcon();
+ state.icon =
+ tileIcon == null
+ ? ResourceIcon.get(R.drawable.ic_wallet_lockscreen)
+ : new DrawableIcon(tileIcon);
boolean isDeviceLocked = !mKeyguardStateController.isUnlocked();
if (mController.getWalletClient().isWalletServiceAvailable()
&& mController.getWalletClient().isWalletFeatureAvailable()) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
index 8e3aed43d1af5..16f8319928bb9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
@@ -455,6 +455,10 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
mWalletButton.setVisibility(GONE);
mIndicationArea.setPadding(0, 0, 0, 0);
} else {
+ Drawable tileIcon = mQuickAccessWalletController.getWalletClient().getTileIcon();
+ if (tileIcon != null) {
+ mWalletButton.setImageDrawable(tileIcon);
+ }
mWalletButton.setVisibility(VISIBLE);
mWalletButton.setOnClickListener(this::onWalletClick);
mIndicationArea.setPadding(mIndicationPadding, 0, mIndicationPadding, 0);
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 b1e67f5cb7c82..a70c2be4954e1 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
@@ -43,6 +43,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
import android.os.Handler;
import android.service.quickaccesswallet.GetWalletCardsError;
@@ -93,6 +94,7 @@ public class QuickAccessWalletTileTest extends SysuiTestCase {
private static final Icon CARD_IMAGE =
Icon.createWithBitmap(Bitmap.createBitmap(70, 50, Bitmap.Config.ARGB_8888));
+ private final Drawable mTileIcon = mContext.getDrawable(R.drawable.ic_qs_wallet);
private final Intent mWalletIntent = new Intent(QuickAccessWalletService.ACTION_VIEW_WALLET)
.setComponent(new ComponentName(mContext.getPackageName(), "WalletActivity"));
@@ -137,6 +139,7 @@ public class QuickAccessWalletTileTest extends SysuiTestCase {
when(mHost.getContext()).thenReturn(mSpiedContext);
when(mHost.getUiEventLogger()).thenReturn(mUiEventLogger);
when(mQuickAccessWalletClient.getServiceLabel()).thenReturn(LABEL);
+ when(mQuickAccessWalletClient.getTileIcon()).thenReturn(mTileIcon);
when(mQuickAccessWalletClient.isWalletFeatureAvailable()).thenReturn(true);
when(mQuickAccessWalletClient.isWalletServiceAvailable()).thenReturn(true);
when(mQuickAccessWalletClient.isWalletFeatureAvailableWhenDeviceLocked()).thenReturn(true);
@@ -255,6 +258,18 @@ public class QuickAccessWalletTileTest extends SysuiTestCase {
@Test
public void testHandleUpdateState_updateLabelAndIcon() {
QSTile.State state = new QSTile.State();
+
+ mTile.handleUpdateState(state, null);
+
+ assertEquals(LABEL, state.label.toString());
+ assertTrue(state.label.toString().contentEquals(state.contentDescription));
+ assertEquals(mTileIcon, state.icon.getDrawable(mContext));
+ }
+
+ @Test
+ public void testHandleUpdateState_updateLabelAndIcon_noIconFromApi() {
+ when(mQuickAccessWalletClient.getTileIcon()).thenReturn(null);
+ QSTile.State state = new QSTile.State();
QSTile.Icon icon = QSTileImpl.ResourceIcon.get(R.drawable.ic_wallet_lockscreen);
mTile.handleUpdateState(state, null);