diff options
author | Danesh Mondegarian <daneshm90@gmail.com> | 2013-09-02 15:21:30 -0700 |
---|---|---|
committer | Danesh Mondegarian <daneshm90@gmail.com> | 2013-09-08 18:53:30 -0700 |
commit | e576f6e7887b063d1b6d9a2052eedd4cc7c014ee (patch) | |
tree | 492d8f44a6881ba1e84e77f67e2bd6d7c78e2012 /src/com/cyanogenmod/trebuchet/IconPickerActivity.java | |
parent | 98ff0fc540dd6f515af3bee058518efcad11b494 (diff) | |
download | android_packages_apps_Trebuchet-e576f6e7887b063d1b6d9a2052eedd4cc7c014ee.tar.gz android_packages_apps_Trebuchet-e576f6e7887b063d1b6d9a2052eedd4cc7c014ee.tar.bz2 android_packages_apps_Trebuchet-e576f6e7887b063d1b6d9a2052eedd4cc7c014ee.zip |
Trebuchet : Support for custom icons per shortcut
Allows user to assign custom icons from icon packs to individual
homescreen shortcuts.
Change-Id: I6613b5f3e6517485a6f83aa5f6769e22bb7f18dc
Diffstat (limited to 'src/com/cyanogenmod/trebuchet/IconPickerActivity.java')
-rw-r--r-- | src/com/cyanogenmod/trebuchet/IconPickerActivity.java | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/src/com/cyanogenmod/trebuchet/IconPickerActivity.java b/src/com/cyanogenmod/trebuchet/IconPickerActivity.java new file mode 100644 index 000000000..2acc07e4d --- /dev/null +++ b/src/com/cyanogenmod/trebuchet/IconPickerActivity.java @@ -0,0 +1,151 @@ +package com.cyanogenmod.trebuchet; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.Map; + +import android.app.Activity; +import android.app.ActivityManager; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager.NameNotFoundException; +import android.content.res.Resources; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.os.AsyncTask; +import android.os.Bundle; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.GridView; +import android.widget.ImageView; + +public class IconPickerActivity extends Activity { + + public static final String SELECTED_RESOURCE_EXTRA = "selected_resource"; + public static final String SELECTED_BITMAP_EXTRA = "bitmap"; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + ActivityManager activityManager = + (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); + int iconSize = activityManager.getLauncherLargeIconSize(); + final String pkgName = getIntent().getStringExtra("package"); + + GridView gridview = new GridView(this); + gridview.setNumColumns(GridView.AUTO_FIT); + gridview.setHorizontalSpacing(40); + gridview.setVerticalSpacing(40); + gridview.setPadding(20, 20, 20, 0); + gridview.setFastScrollEnabled(true); + gridview.setColumnWidth(iconSize); + gridview.setStretchMode(GridView.STRETCH_COLUMN_WIDTH); + + gridview.setAdapter(new ImageAdapter(this, pkgName)); + gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView<?> adapterView, View v, int position, long id) { + Intent in = new Intent(); + DrawableInfo d = (DrawableInfo) adapterView.getAdapter().getItem(position); + in.putExtra(SELECTED_RESOURCE_EXTRA, pkgName + "|" + d.resource_name); + in.putExtra(SELECTED_BITMAP_EXTRA, ((BitmapDrawable)d.drawable.get()).getBitmap()); + setResult(Activity.RESULT_OK, in); + finish(); + } + }); + setContentView(gridview); + } + + public class ImageAdapter extends BaseAdapter { + private Context mContext; + private Resources mResources; + private ArrayList<DrawableInfo> mDrawables = new ArrayList<DrawableInfo>(); + + public class FetchDrawable extends AsyncTask<Integer, Void, Drawable> { + WeakReference<ImageView> mImageView; + + FetchDrawable(ImageView imgView) { + mImageView = new WeakReference<ImageView>(imgView); + } + + @Override + protected Drawable doInBackground(Integer... position) { + DrawableInfo info = getItem(position[0]); + int itemId = info.resource_id; + Drawable d = mResources.getDrawable(itemId); + info.drawable = new WeakReference<Drawable>(d); + return d; + } + + @Override + public void onPostExecute(Drawable result) { + if (mImageView.get() != null) { + mImageView.get().setImageDrawable(result); + } + } + } + + public ImageAdapter(Context c, String pkgName) { + mContext = c; + Map<ComponentName, String> resources = IconPackHelper.getIconPackResources(c, pkgName); + try { + mResources = c.getPackageManager().getResourcesForApplication(pkgName); + LinkedHashSet<String> drawables = new LinkedHashSet<String>(resources.values()); + for (String s : drawables) { + int id = mResources.getIdentifier(s, "drawable", pkgName); + if (id != 0) { + mDrawables.add(new DrawableInfo(s, id)); + } + } + } catch (NameNotFoundException e) { + } + } + + public int getCount() { + return mDrawables.size(); + } + + public DrawableInfo getItem(int position) { + return mDrawables.get(position); + } + + public long getItemId(int position) { + return 0; + } + + public View getView(final int position, View convertView, ViewGroup parent) { + final ImageView imageView; + if (convertView == null) { + imageView = new ImageView(mContext); + imageView.setLayoutParams(new GridView.LayoutParams( + GridView.LayoutParams.WRAP_CONTENT, GridView.LayoutParams.WRAP_CONTENT)); + imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); + } else { + imageView = (ImageView) convertView; + Object tag = imageView.getTag(); + if (tag != null && tag instanceof FetchDrawable) { + ((FetchDrawable) tag).cancel(true); + } + } + FetchDrawable req = new FetchDrawable(imageView); + imageView.setTag(req); + req.execute(position); + return imageView; + } + } + + private class DrawableInfo { + WeakReference<Drawable> drawable; + final String resource_name; + final int resource_id; + DrawableInfo(String n, int i) { + resource_name = n; + resource_id = i; + } + } +} |