summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/CreateShortcut.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/settings/CreateShortcut.java')
-rw-r--r--src/com/android/settings/CreateShortcut.java53
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);