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:
@@ -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);
|
||||
|
Reference in New Issue
Block a user