diff options
| author | 2018-04-12 03:16:15 +0000 | |
|---|---|---|
| committer | 2018-04-12 03:16:15 +0000 | |
| commit | 2e79c79ecdd646f826d6cc55a705e9c591b10663 (patch) | |
| tree | 50795b4b3451db17c99b1ef4661d532b435dedd1 | |
| parent | 99a238adf1705b3b6584bb4beef6a696fbf228dd (diff) | |
| parent | d450ad6d1b2c2f12c5b1968f6ba1190e6d9c912b (diff) | |
Merge "Allow more flexibility for icon selection" into pi-dev
4 files changed, 46 insertions, 13 deletions
diff --git a/packages/SystemUI/res/values/attrs_car.xml b/packages/SystemUI/res/values/attrs_car.xml index 335ae4464dd0..99d242591e92 100644 --- a/packages/SystemUI/res/values/attrs_car.xml +++ b/packages/SystemUI/res/values/attrs_car.xml @@ -29,6 +29,8 @@ <attr name="categories" format="string"/> <!-- package names that will be added as extras to the fired intents --> <attr name="packages" format="string" /> + <!-- componentName names that will be used for detecting selected state --> + <attr name="componentNames" format="string" /> <!-- Alpha value to used when in selected state. Defaults 1f --> <attr name="selectedAlpha" format="float" /> <!-- Alpha value to used when in un-selected state. Defaults 0.7f --> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarFacetButton.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarFacetButton.java index 7285db659f3e..46f88635be79 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarFacetButton.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarFacetButton.java @@ -4,6 +4,7 @@ import android.content.Context; import android.content.Intent; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; +import android.os.UserHandle; import android.util.AttributeSet; import android.util.Log; import android.view.View; @@ -37,6 +38,7 @@ public class CarFacetButton extends LinearLayout { private AlphaOptimizedImageButton mIcon; private AlphaOptimizedImageButton mMoreIcon; private boolean mSelected = false; + private String[] mComponentNames; /** App categories that are to be used with this widget */ private String[] mFacetCategories; /** App packages that are allowed to be used with this widget */ @@ -75,6 +77,8 @@ public class CarFacetButton extends LinearLayout { String longPressIntentString = typedArray.getString(R.styleable.CarFacetButton_longIntent); String categoryString = typedArray.getString(R.styleable.CarFacetButton_categories); String packageString = typedArray.getString(R.styleable.CarFacetButton_packages); + String componentNameString = + typedArray.getString(R.styleable.CarFacetButton_componentNames); try { final Intent intent = Intent.parseUri(intentString, Intent.URI_INTENT_SCHEME); intent.putExtra(EXTRA_FACET_ID, Integer.toString(getId())); @@ -87,17 +91,20 @@ public class CarFacetButton extends LinearLayout { mFacetCategories = categoryString.split(FACET_FILTER_DELIMITER); intent.putExtra(EXTRA_FACET_CATEGORIES, mFacetCategories); } + if (componentNameString != null) { + mComponentNames = componentNameString.split(FACET_FILTER_DELIMITER); + } setOnClickListener(v -> { intent.putExtra(EXTRA_FACET_LAUNCH_PICKER, mSelected); - mContext.startActivity(intent); + mContext.startActivityAsUser(intent, UserHandle.CURRENT); }); if (longPressIntentString != null) { final Intent longPressIntent = Intent.parseUri(longPressIntentString, Intent.URI_INTENT_SCHEME); setOnLongClickListener(v -> { - mContext.startActivity(longPressIntent); + mContext.startActivityAsUser(longPressIntent, UserHandle.CURRENT); return true; }); } @@ -148,6 +155,13 @@ public class CarFacetButton extends LinearLayout { return mFacetPackages; } + public String[] getComponentName() { + if (mComponentNames == null) { + return new String[0]; + } + return mComponentNames; + } + /** * Updates the alpha of the icons to "selected" and shows the "More icon" * @param selected true if the view must be selected, false otherwise diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarFacetButtonController.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarFacetButtonController.java index b7d501e7f745..2d30ce175e53 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarFacetButtonController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarFacetButtonController.java @@ -1,10 +1,12 @@ package com.android.systemui.statusbar.car; import android.app.ActivityManager; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.util.Log; import java.util.HashMap; import java.util.List; @@ -19,6 +21,7 @@ public class CarFacetButtonController { protected HashMap<String, CarFacetButton> mButtonsByCategory = new HashMap<>(); protected HashMap<String, CarFacetButton> mButtonsByPackage = new HashMap<>(); + protected HashMap<String, CarFacetButton> mButtonsByComponentName = new HashMap<>(); protected CarFacetButton mSelectedFacetButton; protected Context mContext; @@ -34,28 +37,32 @@ public class CarFacetButtonController { */ public void addFacetButton(CarFacetButton facetButton) { String[] categories = facetButton.getCategories(); - for (int j = 0; j < categories.length; j++) { - String category = categories[j]; - mButtonsByCategory.put(category, facetButton); + for (int i = 0; i < categories.length; i++) { + mButtonsByCategory.put(categories[i], facetButton); } String[] facetPackages = facetButton.getFacetPackages(); - for (int j = 0; j < facetPackages.length; j++) { - String facetPackage = facetPackages[j]; - mButtonsByPackage.put(facetPackage, facetButton); + for (int i = 0; i < facetPackages.length; i++) { + mButtonsByPackage.put(facetPackages[i], facetButton); + } + String[] componentNames = facetButton.getComponentName(); + for (int i = 0; i < componentNames.length; i++) { + mButtonsByComponentName.put(componentNames[i], facetButton); } } public void removeAll() { mButtonsByCategory.clear(); mButtonsByPackage.clear(); + mButtonsByComponentName.clear(); mSelectedFacetButton = null; } /** * This will unselect the currently selected CarFacetButton and determine which one should be * selected next. It does this by reading the properties on the CarFacetButton and seeing if - * they are a match with the supplied taskino. + * they are a match with the supplied taskInfo. + * Order of selection detection ComponentName, PackageName, Category * @param taskInfo of the currently running application */ public void taskChanged(ActivityManager.RunningTaskInfo taskInfo) { @@ -69,7 +76,10 @@ public class CarFacetButtonController { if (mSelectedFacetButton != null) { mSelectedFacetButton.setSelected(false); } - CarFacetButton facetButton = mButtonsByPackage.get(packageName); + CarFacetButton facetButton = findFacetButtongByComponentName(taskInfo.topActivity); + if (facetButton == null) { + facetButton = mButtonsByPackage.get(packageName); + } if (facetButton != null) { facetButton.setSelected(true); mSelectedFacetButton = facetButton; @@ -83,6 +93,12 @@ public class CarFacetButtonController { } } + private CarFacetButton findFacetButtongByComponentName(ComponentName componentName) { + CarFacetButton button = mButtonsByComponentName.get(componentName.flattenToShortString()); + return (button != null) ? button : + mButtonsByComponentName.get(componentName.flattenToString()); + } + protected String getPackageCategory(String packageName) { PackageManager pm = mContext.getPackageManager(); Set<String> supportedCategories = mButtonsByCategory.keySet(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarNavigationButton.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarNavigationButton.java index ec243fe98710..084c136fc555 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarNavigationButton.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarNavigationButton.java @@ -3,6 +3,7 @@ package com.android.systemui.statusbar.car; import android.content.Context; import android.content.Intent; import android.content.res.TypedArray; +import android.os.UserHandle; import android.util.AttributeSet; import android.util.Log; import android.widget.ImageView; @@ -64,10 +65,10 @@ public class CarNavigationButton extends com.android.keyguard.AlphaOptimizedImag setOnClickListener(v -> { try { if (mBroadcastIntent) { - mContext.sendBroadcast(intent); + mContext.sendBroadcastAsUser(intent, UserHandle.CURRENT); return; } - mContext.startActivity(intent); + mContext.startActivityAsUser(intent, UserHandle.CURRENT); } catch (Exception e) { Log.e(TAG, "Failed to launch intent", e); } @@ -82,7 +83,7 @@ public class CarNavigationButton extends com.android.keyguard.AlphaOptimizedImag final Intent intent = Intent.parseUri(mLongIntent, Intent.URI_INTENT_SCHEME); setOnLongClickListener(v -> { try { - mContext.startActivity(intent); + mContext.startActivityAsUser(intent, UserHandle.CURRENT); } catch (Exception e) { Log.e(TAG, "Failed to launch intent", e); } |