Clean up settings shortcuts

- Remove some bad entries
 - Fix icons to be top-level item specific
 - Add memory

Bug: 20632230
Change-Id: I067b467b9ee354b52ef61b312dc5a89fd7eae2ac
This commit is contained in:
Jason Monk
2015-06-11 15:47:29 -04:00
parent 1fdbbffced
commit 2acff556c2
7 changed files with 117 additions and 14 deletions

View File

@@ -17,18 +17,33 @@
package com.android.settings;
import android.app.LauncherActivity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.MeasureSpec;
import android.widget.ImageView;
import android.widget.ListView;
import com.android.settings.Settings.TetherSettingsActivity;
import com.android.settings.dashboard.DashboardCategory;
import com.android.settings.dashboard.DashboardTile;
import com.android.settingslib.TetherUtil;
import java.util.ArrayList;
import java.util.List;
public class CreateShortcut extends LauncherActivity {
private static final String TOP_LEVEL_HEADER = "com.android.settings.TOP_LEVEL_HEADER_ID";
@Override
protected Intent getTargetIntent() {
Intent targetIntent = new Intent(Intent.ACTION_MAIN, null);
@@ -46,10 +61,45 @@ public class CreateShortcut extends LauncherActivity {
Intent.ShortcutIconResource.fromContext(this, R.mipmap.ic_launcher_settings));
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, itemForPosition(position).label);
ResolveInfo resolveInfo = itemForPosition(position).resolveInfo;
ActivityInfo activityInfo = resolveInfo.activityInfo;
if (activityInfo.metaData != null && activityInfo.metaData.containsKey(TOP_LEVEL_HEADER)) {
int topLevelId = activityInfo.metaData.getInt(TOP_LEVEL_HEADER);
int resourceId = getDrawableResource(topLevelId);
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, createIcon(resourceId));
}
setResult(RESULT_OK, intent);
finish();
}
private Bitmap createIcon(int resource) {
Context context = new ContextThemeWrapper(this, android.R.style.Theme_Material_Light);
View view = LayoutInflater.from(context).inflate(R.layout.shortcut_badge, null);
((ImageView) view.findViewById(android.R.id.icon)).setImageResource(resource);
int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
view.measure(spec, spec);
Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(),
Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
view.draw(canvas);
return bitmap;
}
private int getDrawableResource(int topLevelId) {
ArrayList<DashboardCategory> categories = new ArrayList<>();
SettingsActivity.loadCategoriesFromResource(R.xml.dashboard_categories, categories, this);
for (DashboardCategory category : categories) {
for (DashboardTile tile : category.tiles) {
if (tile.id == topLevelId) {
return tile.iconRes;
}
}
}
return 0;
}
@Override
protected boolean onEvaluateShowIcons() {
return false;
@@ -60,7 +110,8 @@ public class CreateShortcut extends LauncherActivity {
* implementation queries for activities.
*/
protected List<ResolveInfo> onQueryPackageManager(Intent queryIntent) {
List<ResolveInfo> activities = super.onQueryPackageManager(queryIntent);
List<ResolveInfo> activities = getPackageManager().queryIntentActivities(queryIntent,
PackageManager.GET_META_DATA);
if (activities == null) return null;
for (int i = activities.size() - 1; i >= 0; i--) {
ResolveInfo info = activities.get(i);

View File

@@ -113,5 +113,6 @@ public class Settings extends SettingsActivity {
public static class TopLevelSettings extends SettingsActivity { /* empty */ }
public static class ApnSettingsActivity extends SettingsActivity { /* empty */ }
public static class WifiCallingSettingsActivity extends SettingsActivity { /* empty */ }
public static class MemorySettingsActivity extends SettingsActivity { /* empty */ }
}

View File

@@ -1039,7 +1039,7 @@ public class SettingsActivity extends Activity
*/
private void buildDashboardCategories(List<DashboardCategory> categories) {
categories.clear();
loadCategoriesFromResource(R.xml.dashboard_categories, categories);
loadCategoriesFromResource(R.xml.dashboard_categories, categories, this);
updateTilesList(categories);
}
@@ -1050,10 +1050,11 @@ public class SettingsActivity extends Activity
* @param resid The XML resource to load and parse.
* @param target The list in which the parsed categories and tiles should be placed.
*/
private void loadCategoriesFromResource(int resid, List<DashboardCategory> target) {
public static void loadCategoriesFromResource(int resid, List<DashboardCategory> target,
Context context) {
XmlResourceParser parser = null;
try {
parser = getResources().getXml(resid);
parser = context.getResources().getXml(resid);
AttributeSet attrs = Xml.asAttributeSet(parser);
int type;
@@ -1082,7 +1083,7 @@ public class SettingsActivity extends Activity
if ("dashboard-category".equals(nodeName)) {
DashboardCategory category = new DashboardCategory();
TypedArray sa = obtainStyledAttributes(
TypedArray sa = context.obtainStyledAttributes(
attrs, com.android.internal.R.styleable.PreferenceHeader);
category.id = sa.getResourceId(
com.android.internal.R.styleable.PreferenceHeader_id,
@@ -1098,12 +1099,13 @@ public class SettingsActivity extends Activity
}
}
sa.recycle();
sa = obtainStyledAttributes(attrs, com.android.internal.R.styleable.Preference);
sa = context.obtainStyledAttributes(attrs,
com.android.internal.R.styleable.Preference);
tv = sa.peekValue(
com.android.internal.R.styleable.Preference_key);
if (tv != null && tv.type == TypedValue.TYPE_STRING) {
if (tv.resourceId != 0) {
category.key = getString(tv.resourceId);
category.key = context.getString(tv.resourceId);
} else {
category.key = tv.string.toString();
}
@@ -1121,7 +1123,7 @@ public class SettingsActivity extends Activity
if (innerNodeName.equals("dashboard-tile")) {
DashboardTile tile = new DashboardTile();
sa = obtainStyledAttributes(
sa = context.obtainStyledAttributes(
attrs, com.android.internal.R.styleable.PreferenceHeader);
tile.id = sa.getResourceId(
com.android.internal.R.styleable.PreferenceHeader_id,
@@ -1163,11 +1165,13 @@ public class SettingsActivity extends Activity
String innerNodeName2 = parser.getName();
if (innerNodeName2.equals("extra")) {
getResources().parseBundleExtra("extra", attrs, curBundle);
context.getResources().parseBundleExtra("extra", attrs,
curBundle);
XmlUtils.skipCurrentTag(parser);
} else if (innerNodeName2.equals("intent")) {
tile.intent = Intent.parseIntent(getResources(), parser, attrs);
tile.intent = Intent.parseIntent(context.getResources(), parser,
attrs);
} else {
XmlUtils.skipCurrentTag(parser);
@@ -1180,7 +1184,7 @@ public class SettingsActivity extends Activity
}
// Show the SIM Cards setting if there are more than 2 SIMs installed.
if(tile.id != R.id.sim_settings || Utils.showSimCardTile(this)){
if(tile.id != R.id.sim_settings || Utils.showSimCardTile(context)){
category.addTile(tile);
}