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