117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski/* 217b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski * Copyright (C) 2010 The Android Open Source Project 317b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski * 417b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 517b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski * you may not use this file except in compliance with the License. 617b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski * You may obtain a copy of the License at 717b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski * 817b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 917b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski * 1017b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski * Unless required by applicable law or agreed to in writing, software 1117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 1217b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1317b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski * See the License for the specific language governing permissions and 1417b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski * limitations under the License. 1517b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski */ 1617b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 1717b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskipackage com.android.wallpaper.livepicker; 1817b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 1917b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.app.WallpaperInfo; 2017b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.content.Context; 2117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.content.Intent; 2217b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.content.pm.PackageManager; 2317b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.content.pm.ResolveInfo; 2417b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.content.res.Resources; 2517b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.graphics.Bitmap; 2617b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.graphics.Canvas; 2717b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.graphics.Paint; 2817b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.graphics.drawable.BitmapDrawable; 2917b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.graphics.drawable.Drawable; 3017b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.os.AsyncTask; 3117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.service.wallpaper.WallpaperService; 3217b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.text.Html; 3317b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.util.Log; 3417b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.view.Gravity; 3517b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.view.LayoutInflater; 3617b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.view.View; 3717b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.view.ViewGroup; 3817b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.widget.BaseAdapter; 3917b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.widget.ImageView; 4017b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.widget.ListAdapter; 4117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport android.widget.TextView; 4217b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 4317b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport org.xmlpull.v1.XmlPullParserException; 4417b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 4517b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport java.io.IOException; 4617b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport java.text.Collator; 4717b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport java.util.ArrayList; 4817b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport java.util.Collections; 4917b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport java.util.Comparator; 5017b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskiimport java.util.List; 5117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 5217b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinskipublic class LiveWallpaperListAdapter extends BaseAdapter implements ListAdapter { 5317b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski private static final String LOG_TAG = "LiveWallpaperListAdapter"; 5417b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 5517b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski private final LayoutInflater mInflater; 5617b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski private final PackageManager mPackageManager; 5717b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 58494767f1f8a29d2197837463fb6477646e682478Adam Lesinski private List<LiveWallpaperInfo> mWallpapers; 5917b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 60494767f1f8a29d2197837463fb6477646e682478Adam Lesinski @SuppressWarnings("unchecked") 6117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski public LiveWallpaperListAdapter(Context context) { 6217b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 6317b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski mPackageManager = context.getPackageManager(); 6417b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 65494767f1f8a29d2197837463fb6477646e682478Adam Lesinski List<ResolveInfo> list = mPackageManager.queryIntentServices( 66494767f1f8a29d2197837463fb6477646e682478Adam Lesinski new Intent(WallpaperService.SERVICE_INTERFACE), 67494767f1f8a29d2197837463fb6477646e682478Adam Lesinski PackageManager.GET_META_DATA); 68494767f1f8a29d2197837463fb6477646e682478Adam Lesinski 69494767f1f8a29d2197837463fb6477646e682478Adam Lesinski mWallpapers = generatePlaceholderViews(list.size()); 70494767f1f8a29d2197837463fb6477646e682478Adam Lesinski 71494767f1f8a29d2197837463fb6477646e682478Adam Lesinski new LiveWallpaperEnumerator(context).execute(list); 72494767f1f8a29d2197837463fb6477646e682478Adam Lesinski } 73494767f1f8a29d2197837463fb6477646e682478Adam Lesinski 74494767f1f8a29d2197837463fb6477646e682478Adam Lesinski private List<LiveWallpaperInfo> generatePlaceholderViews(int amount) { 75494767f1f8a29d2197837463fb6477646e682478Adam Lesinski ArrayList<LiveWallpaperInfo> list = new ArrayList<LiveWallpaperInfo>(amount); 76494767f1f8a29d2197837463fb6477646e682478Adam Lesinski for (int i = 0; i < amount; i++) { 77494767f1f8a29d2197837463fb6477646e682478Adam Lesinski LiveWallpaperInfo info = new LiveWallpaperInfo(); 78494767f1f8a29d2197837463fb6477646e682478Adam Lesinski list.add(info); 79494767f1f8a29d2197837463fb6477646e682478Adam Lesinski } 80494767f1f8a29d2197837463fb6477646e682478Adam Lesinski return list; 8117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } 8217b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 8317b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski public int getCount() { 8417b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski if (mWallpapers == null) { 8517b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski return 0; 8617b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } 8717b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski return mWallpapers.size(); 8817b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } 8917b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 9017b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski public Object getItem(int position) { 9117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski return mWallpapers.get(position); 9217b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } 9317b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 9417b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski public long getItemId(int position) { 9517b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski return position; 9617b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } 9717b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 9817b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski public View getView(int position, View convertView, ViewGroup parent) { 9917b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski ViewHolder holder; 10017b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski if (convertView == null) { 10117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski convertView = mInflater.inflate(R.layout.live_wallpaper_entry, parent, false); 10217b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 10317b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski holder = new ViewHolder(); 104494767f1f8a29d2197837463fb6477646e682478Adam Lesinski holder.title = (TextView) convertView.findViewById(R.id.title); 10517b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski holder.thumbnail = (ImageView) convertView.findViewById(R.id.thumbnail); 10617b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski convertView.setTag(holder); 10717b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } else { 10817b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski holder = (ViewHolder) convertView.getTag(); 10917b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } 11017b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 11117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski LiveWallpaperInfo wallpaperInfo = mWallpapers.get(position); 112494767f1f8a29d2197837463fb6477646e682478Adam Lesinski if (holder.thumbnail != null) { 113494767f1f8a29d2197837463fb6477646e682478Adam Lesinski holder.thumbnail.setImageDrawable(wallpaperInfo.thumbnail); 11417b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } 115494767f1f8a29d2197837463fb6477646e682478Adam Lesinski 116494767f1f8a29d2197837463fb6477646e682478Adam Lesinski if (holder.title != null && wallpaperInfo.info != null) { 117494767f1f8a29d2197837463fb6477646e682478Adam Lesinski holder.title.setText(wallpaperInfo.info.loadLabel(mPackageManager)); 118494767f1f8a29d2197837463fb6477646e682478Adam Lesinski if (holder.thumbnail == null) { 119494767f1f8a29d2197837463fb6477646e682478Adam Lesinski holder.title.setCompoundDrawablesWithIntrinsicBounds(null, wallpaperInfo.thumbnail, 120494767f1f8a29d2197837463fb6477646e682478Adam Lesinski null, null); 121494767f1f8a29d2197837463fb6477646e682478Adam Lesinski } 122494767f1f8a29d2197837463fb6477646e682478Adam Lesinski } 123494767f1f8a29d2197837463fb6477646e682478Adam Lesinski 12417b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski return convertView; 12517b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } 12617b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 12717b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski public class LiveWallpaperInfo { 12817b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski public Drawable thumbnail; 12917b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski public WallpaperInfo info; 13017b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski public Intent intent; 13117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } 13217b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 13317b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski private class ViewHolder { 13417b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski TextView title; 13517b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski ImageView thumbnail; 13617b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } 13717b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 138494767f1f8a29d2197837463fb6477646e682478Adam Lesinski private class LiveWallpaperEnumerator extends 139494767f1f8a29d2197837463fb6477646e682478Adam Lesinski AsyncTask<List<ResolveInfo>, LiveWallpaperInfo, Void> { 14017b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski private Context mContext; 141494767f1f8a29d2197837463fb6477646e682478Adam Lesinski private int mWallpaperPosition; 14217b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 14317b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski public LiveWallpaperEnumerator(Context context) { 14417b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski super(); 14517b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski mContext = context; 146494767f1f8a29d2197837463fb6477646e682478Adam Lesinski mWallpaperPosition = 0; 14717b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } 14817b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 14917b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski @Override 150494767f1f8a29d2197837463fb6477646e682478Adam Lesinski protected Void doInBackground(List<ResolveInfo>... params) { 15117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski final PackageManager packageManager = mContext.getPackageManager(); 15217b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 153494767f1f8a29d2197837463fb6477646e682478Adam Lesinski List<ResolveInfo> list = params[0]; 15417b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 15517b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski final Resources res = mContext.getResources(); 15617b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski BitmapDrawable galleryIcon = (BitmapDrawable) res.getDrawable( 15717b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski R.drawable.livewallpaper_placeholder); 15817b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG); 15917b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski paint.setTextAlign(Paint.Align.CENTER); 16017b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski Canvas canvas = new Canvas(); 16117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 16217b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski Collections.sort(list, new Comparator<ResolveInfo>() { 16317b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski final Collator mCollator; 16417b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 16517b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski { 16617b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski mCollator = Collator.getInstance(); 16717b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } 16817b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 16917b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski public int compare(ResolveInfo info1, ResolveInfo info2) { 17017b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski return mCollator.compare(info1.loadLabel(packageManager), 17117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski info2.loadLabel(packageManager)); 17217b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } 17317b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski }); 17417b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 17517b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski for (ResolveInfo resolveInfo : list) { 17617b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski WallpaperInfo info = null; 17717b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski try { 17817b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski info = new WallpaperInfo(mContext, resolveInfo); 17917b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } catch (XmlPullParserException e) { 18017b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski Log.w(LOG_TAG, "Skipping wallpaper " + resolveInfo.serviceInfo, e); 18117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski continue; 18217b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } catch (IOException e) { 18317b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski Log.w(LOG_TAG, "Skipping wallpaper " + resolveInfo.serviceInfo, e); 18417b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski continue; 18517b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } 18617b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 18717b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski LiveWallpaperInfo wallpaper = new LiveWallpaperInfo(); 18817b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski wallpaper.intent = new Intent(WallpaperService.SERVICE_INTERFACE); 18917b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski wallpaper.intent.setClassName(info.getPackageName(), info.getServiceName()); 19017b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski wallpaper.info = info; 19117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 19217b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski Drawable thumb = info.loadThumbnail(packageManager); 19317b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski if (thumb == null) { 19417b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski int thumbWidth = res.getDimensionPixelSize( 19517b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski R.dimen.live_wallpaper_thumbnail_width); 19617b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski int thumbHeight = res.getDimensionPixelSize( 19717b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski R.dimen.live_wallpaper_thumbnail_height); 19817b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 19917b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski Bitmap thumbnail = Bitmap.createBitmap(thumbWidth, thumbHeight, 20017b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski Bitmap.Config.ARGB_8888); 20117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 20217b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski paint.setColor(res.getColor(R.color.live_wallpaper_thumbnail_background)); 20317b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski canvas.setBitmap(thumbnail); 20417b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski canvas.drawPaint(paint); 20517b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 20617b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski galleryIcon.setBounds(0, 0, thumbWidth, thumbHeight); 20717b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski galleryIcon.setGravity(Gravity.CENTER); 20817b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski galleryIcon.draw(canvas); 20917b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 21017b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski String title = info.loadLabel(packageManager).toString(); 21117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 21217b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski paint.setColor(res.getColor(R.color.live_wallpaper_thumbnail_text_color)); 21317b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski paint.setTextSize( 21417b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski res.getDimensionPixelSize(R.dimen.live_wallpaper_thumbnail_text_size)); 21517b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 21617b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski canvas.drawText(title, (int) (thumbWidth * 0.5), 21717b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski thumbHeight - res.getDimensionPixelSize( 21817b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski R.dimen.live_wallpaper_thumbnail_text_offset), paint); 21917b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 22017b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski thumb = new BitmapDrawable(res, thumbnail); 22117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } 22217b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski wallpaper.thumbnail = thumb; 22317b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski publishProgress(wallpaper); 22417b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } 22517b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 22617b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski return null; 22717b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } 22817b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski 22917b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski @Override 23017b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski protected void onProgressUpdate(LiveWallpaperInfo...infos) { 23117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski for (LiveWallpaperInfo info : infos) { 232982af49707933862b35a39acfc700a2fd74c9d80Patrick Dubroy info.thumbnail.setDither(true); 233494767f1f8a29d2197837463fb6477646e682478Adam Lesinski if (mWallpaperPosition < mWallpapers.size()) { 234494767f1f8a29d2197837463fb6477646e682478Adam Lesinski mWallpapers.set(mWallpaperPosition, info); 235494767f1f8a29d2197837463fb6477646e682478Adam Lesinski } else { 236494767f1f8a29d2197837463fb6477646e682478Adam Lesinski mWallpapers.add(info); 237494767f1f8a29d2197837463fb6477646e682478Adam Lesinski } 238494767f1f8a29d2197837463fb6477646e682478Adam Lesinski mWallpaperPosition++; 23917b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski LiveWallpaperListAdapter.this.notifyDataSetChanged(); 24017b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } 24117b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } 24217b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski } 24317b2c070a685d3ca4eedb33045dc9af0a5a654f6Adam Lesinski} 244