Merge "Allow more flexibility for icon selection" into pi-dev

This commit is contained in:
TreeHugger Robot
2018-04-12 03:16:15 +00:00
committed by Android (Google) Code Review
4 changed files with 46 additions and 13 deletions

View File

@@ -29,6 +29,8 @@
<attr name="categories" format="string"/> <attr name="categories" format="string"/>
<!-- package names that will be added as extras to the fired intents --> <!-- package names that will be added as extras to the fired intents -->
<attr name="packages" format="string" /> <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 --> <!-- Alpha value to used when in selected state. Defaults 1f -->
<attr name="selectedAlpha" format="float" /> <attr name="selectedAlpha" format="float" />
<!-- Alpha value to used when in un-selected state. Defaults 0.7f --> <!-- Alpha value to used when in un-selected state. Defaults 0.7f -->

View File

@@ -4,6 +4,7 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.UserHandle;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
@@ -37,6 +38,7 @@ public class CarFacetButton extends LinearLayout {
private AlphaOptimizedImageButton mIcon; private AlphaOptimizedImageButton mIcon;
private AlphaOptimizedImageButton mMoreIcon; private AlphaOptimizedImageButton mMoreIcon;
private boolean mSelected = false; private boolean mSelected = false;
private String[] mComponentNames;
/** App categories that are to be used with this widget */ /** App categories that are to be used with this widget */
private String[] mFacetCategories; private String[] mFacetCategories;
/** App packages that are allowed to be used with this widget */ /** 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 longPressIntentString = typedArray.getString(R.styleable.CarFacetButton_longIntent);
String categoryString = typedArray.getString(R.styleable.CarFacetButton_categories); String categoryString = typedArray.getString(R.styleable.CarFacetButton_categories);
String packageString = typedArray.getString(R.styleable.CarFacetButton_packages); String packageString = typedArray.getString(R.styleable.CarFacetButton_packages);
String componentNameString =
typedArray.getString(R.styleable.CarFacetButton_componentNames);
try { try {
final Intent intent = Intent.parseUri(intentString, Intent.URI_INTENT_SCHEME); final Intent intent = Intent.parseUri(intentString, Intent.URI_INTENT_SCHEME);
intent.putExtra(EXTRA_FACET_ID, Integer.toString(getId())); intent.putExtra(EXTRA_FACET_ID, Integer.toString(getId()));
@@ -87,17 +91,20 @@ public class CarFacetButton extends LinearLayout {
mFacetCategories = categoryString.split(FACET_FILTER_DELIMITER); mFacetCategories = categoryString.split(FACET_FILTER_DELIMITER);
intent.putExtra(EXTRA_FACET_CATEGORIES, mFacetCategories); intent.putExtra(EXTRA_FACET_CATEGORIES, mFacetCategories);
} }
if (componentNameString != null) {
mComponentNames = componentNameString.split(FACET_FILTER_DELIMITER);
}
setOnClickListener(v -> { setOnClickListener(v -> {
intent.putExtra(EXTRA_FACET_LAUNCH_PICKER, mSelected); intent.putExtra(EXTRA_FACET_LAUNCH_PICKER, mSelected);
mContext.startActivity(intent); mContext.startActivityAsUser(intent, UserHandle.CURRENT);
}); });
if (longPressIntentString != null) { if (longPressIntentString != null) {
final Intent longPressIntent = Intent.parseUri(longPressIntentString, final Intent longPressIntent = Intent.parseUri(longPressIntentString,
Intent.URI_INTENT_SCHEME); Intent.URI_INTENT_SCHEME);
setOnLongClickListener(v -> { setOnLongClickListener(v -> {
mContext.startActivity(longPressIntent); mContext.startActivityAsUser(longPressIntent, UserHandle.CURRENT);
return true; return true;
}); });
} }
@@ -148,6 +155,13 @@ public class CarFacetButton extends LinearLayout {
return mFacetPackages; 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" * Updates the alpha of the icons to "selected" and shows the "More icon"
* @param selected true if the view must be selected, false otherwise * @param selected true if the view must be selected, false otherwise

View File

@@ -1,10 +1,12 @@
package com.android.systemui.statusbar.car; package com.android.systemui.statusbar.car;
import android.app.ActivityManager; import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo;
import android.util.Log;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@@ -19,6 +21,7 @@ public class CarFacetButtonController {
protected HashMap<String, CarFacetButton> mButtonsByCategory = new HashMap<>(); protected HashMap<String, CarFacetButton> mButtonsByCategory = new HashMap<>();
protected HashMap<String, CarFacetButton> mButtonsByPackage = new HashMap<>(); protected HashMap<String, CarFacetButton> mButtonsByPackage = new HashMap<>();
protected HashMap<String, CarFacetButton> mButtonsByComponentName = new HashMap<>();
protected CarFacetButton mSelectedFacetButton; protected CarFacetButton mSelectedFacetButton;
protected Context mContext; protected Context mContext;
@@ -34,28 +37,32 @@ public class CarFacetButtonController {
*/ */
public void addFacetButton(CarFacetButton facetButton) { public void addFacetButton(CarFacetButton facetButton) {
String[] categories = facetButton.getCategories(); String[] categories = facetButton.getCategories();
for (int j = 0; j < categories.length; j++) { for (int i = 0; i < categories.length; i++) {
String category = categories[j]; mButtonsByCategory.put(categories[i], facetButton);
mButtonsByCategory.put(category, facetButton);
} }
String[] facetPackages = facetButton.getFacetPackages(); String[] facetPackages = facetButton.getFacetPackages();
for (int j = 0; j < facetPackages.length; j++) { for (int i = 0; i < facetPackages.length; i++) {
String facetPackage = facetPackages[j]; mButtonsByPackage.put(facetPackages[i], facetButton);
mButtonsByPackage.put(facetPackage, facetButton); }
String[] componentNames = facetButton.getComponentName();
for (int i = 0; i < componentNames.length; i++) {
mButtonsByComponentName.put(componentNames[i], facetButton);
} }
} }
public void removeAll() { public void removeAll() {
mButtonsByCategory.clear(); mButtonsByCategory.clear();
mButtonsByPackage.clear(); mButtonsByPackage.clear();
mButtonsByComponentName.clear();
mSelectedFacetButton = null; mSelectedFacetButton = null;
} }
/** /**
* This will unselect the currently selected CarFacetButton and determine which one should be * 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 * 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 * @param taskInfo of the currently running application
*/ */
public void taskChanged(ActivityManager.RunningTaskInfo taskInfo) { public void taskChanged(ActivityManager.RunningTaskInfo taskInfo) {
@@ -69,7 +76,10 @@ public class CarFacetButtonController {
if (mSelectedFacetButton != null) { if (mSelectedFacetButton != null) {
mSelectedFacetButton.setSelected(false); mSelectedFacetButton.setSelected(false);
} }
CarFacetButton facetButton = mButtonsByPackage.get(packageName); CarFacetButton facetButton = findFacetButtongByComponentName(taskInfo.topActivity);
if (facetButton == null) {
facetButton = mButtonsByPackage.get(packageName);
}
if (facetButton != null) { if (facetButton != null) {
facetButton.setSelected(true); facetButton.setSelected(true);
mSelectedFacetButton = facetButton; 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) { protected String getPackageCategory(String packageName) {
PackageManager pm = mContext.getPackageManager(); PackageManager pm = mContext.getPackageManager();
Set<String> supportedCategories = mButtonsByCategory.keySet(); Set<String> supportedCategories = mButtonsByCategory.keySet();

View File

@@ -3,6 +3,7 @@ package com.android.systemui.statusbar.car;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.os.UserHandle;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log; import android.util.Log;
import android.widget.ImageView; import android.widget.ImageView;
@@ -64,10 +65,10 @@ public class CarNavigationButton extends com.android.keyguard.AlphaOptimizedImag
setOnClickListener(v -> { setOnClickListener(v -> {
try { try {
if (mBroadcastIntent) { if (mBroadcastIntent) {
mContext.sendBroadcast(intent); mContext.sendBroadcastAsUser(intent, UserHandle.CURRENT);
return; return;
} }
mContext.startActivity(intent); mContext.startActivityAsUser(intent, UserHandle.CURRENT);
} catch (Exception e) { } catch (Exception e) {
Log.e(TAG, "Failed to launch intent", 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); final Intent intent = Intent.parseUri(mLongIntent, Intent.URI_INTENT_SCHEME);
setOnLongClickListener(v -> { setOnLongClickListener(v -> {
try { try {
mContext.startActivity(intent); mContext.startActivityAsUser(intent, UserHandle.CURRENT);
} catch (Exception e) { } catch (Exception e) {
Log.e(TAG, "Failed to launch intent", e); Log.e(TAG, "Failed to launch intent", e);
} }