diff options
Diffstat (limited to 'src/com/android/settings/CreateShortcut.java')
-rw-r--r-- | src/com/android/settings/CreateShortcut.java | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/src/com/android/settings/CreateShortcut.java b/src/com/android/settings/CreateShortcut.java index fa2ce7c..637bc6f 100644 --- a/src/com/android/settings/CreateShortcut.java +++ b/src/com/android/settings/CreateShortcut.java @@ -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); |