OSDN Git Service

DO NOT MERGE: Allow nearby sharing to substitute name & icon in chip
authorDan Sandler <dsandler@android.com>
Wed, 18 Dec 2019 02:20:18 +0000 (21:20 -0500)
committerDaniel Sandler <dsandler@android.com>
Thu, 19 Dec 2019 01:43:51 +0000 (01:43 +0000)
meta-data bundle keys (values are resids):

    CHIP_LABEL_METADATA_KEY = "android.service.chooser.chip_label"
    CHIP_ICON_METADATA_KEY = "android.service.chooser.chip_icon"

Test: manual, confirm that correct name & icon are used
      and that custom icon is tinted in light/dark theme
      (and that the copy chip is tinted right, too!)
Bug: 144290152
Change-Id: I57157e07630fa8bec3057e6d18336c59944fcb4f

core/java/com/android/internal/app/ChooserActivity.java
core/res/res/drawable/ic_menu_copy_material.xml
core/res/res/layout/chooser_action_button.xml

index d257c5c..d34174c 100644 (file)
@@ -54,6 +54,7 @@ import android.content.pm.ResolveInfo;
 import android.content.pm.ShortcutInfo;
 import android.content.pm.ShortcutManager;
 import android.content.res.Configuration;
+import android.content.res.Resources;
 import android.database.Cursor;
 import android.database.DataSetObserver;
 import android.graphics.Bitmap;
@@ -931,20 +932,38 @@ public class ChooserActivity extends ResolverActivity {
 
         final Intent resolveIntent = new Intent();
         resolveIntent.setComponent(cn);
-        final ResolveInfo ri = getPackageManager().resolveActivity(resolveIntent, 0);
-        if (ri == null) {
+        final ResolveInfo ri = getPackageManager().resolveActivity(
+                resolveIntent, PackageManager.GET_META_DATA);
+        if (ri == null || ri.activityInfo == null) {
             Log.e(TAG, "Device-specified nearby sharing component (" + cn
                     + ") not available");
             return null;
         }
 
-        // TODO(b/144290152): CHIP_LABEL_METADATA_KEY / CHIP_ICON_METADATA_KEY
-
-        CharSequence name = ri.loadLabel(getPackageManager());
+        // Allow the nearby sharing component to provide a more appropriate icon and label
+        // for the chip.
+        CharSequence name = null;
+        Drawable icon = null;
+        final Bundle metaData = ri.activityInfo.metaData;
+        if (metaData != null) {
+            try {
+                final Resources pkgRes = getPackageManager().getResourcesForActivity(cn);
+                final int nameResId = metaData.getInt(CHIP_LABEL_METADATA_KEY);
+                name = pkgRes.getString(nameResId);
+                final int resId = metaData.getInt(CHIP_ICON_METADATA_KEY);
+                icon = pkgRes.getDrawable(resId);
+            } catch (NameNotFoundException ex) { }
+        }
+        if (TextUtils.isEmpty(name)) {
+            name = ri.loadLabel(getPackageManager());
+        }
+        if (icon == null) {
+            icon = ri.loadIcon(getPackageManager());
+        }
 
         final DisplayResolveInfo dri = new DisplayResolveInfo(
                 originalIntent, ri, name, "", null);
-        dri.setDisplayIcon(ri.loadIcon(getPackageManager()));
+        dri.setDisplayIcon(icon);
         return dri;
     }
 
@@ -976,7 +995,10 @@ public class ChooserActivity extends ResolverActivity {
         return createActionButton(
                 ti.getDisplayIcon(),
                 ti.getDisplayLabel(),
-                (View unused) -> safelyStartActivity(ti)
+                (View unused) -> {
+                    safelyStartActivity(ti);
+                    finish();
+                }
         );
     }
 
index ee58738..8c9f1c5 100644 (file)
     android:width="24dp"
     android:height="24dp"
     android:viewportWidth="24"
-    android:viewportHeight="24">
+    android:viewportHeight="24"
+    android:autoMirrored="true"
+    android:tint="?attr/colorControlNormal">
   <path
-      android:fillColor="?android:attr/textColorSecondary"
+      android:fillColor="@color/white"
       android:pathData="M18,21L4,21L4,7L2,7v14c0,1.1 0.9,2 2,2h14v-2zM21,17L21,3c0,-1.1 -0.9,-2 -2,-2L8,1c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h11c1.1,0 2,-0.9 2,-2zM19,17L8,17L8,3h11v14z"/>
 </vector>
index 562f188..119b2e9 100644 (file)
@@ -25,4 +25,6 @@
     android:singleLine="true"
     android:clickable="true"
     android:background="@drawable/chooser_action_button_bg"
+    android:drawableTint="?android:attr/colorControlNormal"
+    android:drawableTintMode="src_in"
     />