1748dfe025b128ea88ba626c8bfb7da315d5af29cSunny Goyalpackage com.android.wallpaperpicker.tileinfo;
24428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
34428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.app.WallpaperInfo;
44428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.app.WallpaperManager;
54428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.content.Context;
64428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.content.Intent;
74428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.content.pm.PackageManager;
84428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.content.pm.ResolveInfo;
94428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.graphics.drawable.Drawable;
104428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.os.AsyncTask;
114428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.service.wallpaper.WallpaperService;
124428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.util.Log;
134428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.view.LayoutInflater;
144428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.view.View;
154428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.view.ViewGroup;
164428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.widget.ImageView;
174428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.widget.TextView;
184428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
19748dfe025b128ea88ba626c8bfb7da315d5af29cSunny Goyalimport com.android.wallpaperpicker.R;
20748dfe025b128ea88ba626c8bfb7da315d5af29cSunny Goyalimport com.android.wallpaperpicker.WallpaperPickerActivity;
214428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
224428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport org.xmlpull.v1.XmlPullParserException;
234428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
244428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport java.io.IOException;
254428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport java.text.Collator;
264428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport java.util.ArrayList;
274428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport java.util.Collections;
284428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport java.util.Comparator;
294428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport java.util.List;
304428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
314428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalpublic class LiveWallpaperInfo extends WallpaperTileInfo {
324428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
334428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    private static final String TAG = "LiveWallpaperTile";
344428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
354428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    private Drawable mThumbnail;
364428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    private WallpaperInfo mInfo;
374428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
384428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    public LiveWallpaperInfo(Drawable thumbnail, WallpaperInfo info, Intent intent) {
394428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        mThumbnail = thumbnail;
404428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        mInfo = info;
414428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    }
424428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
434428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    @Override
444428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    public void onClick(WallpaperPickerActivity a) {
454428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        Intent preview = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
464428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        preview.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT,
474428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                mInfo.getComponent());
484428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        a.startActivityForResultSafely(preview,
494428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                WallpaperPickerActivity.PICK_WALLPAPER_THIRD_PARTY_ACTIVITY);
504428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    }
514428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
524428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    @Override
534428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    public View createView(Context context, LayoutInflater inflator, ViewGroup parent) {
544428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        mView = inflator.inflate(R.layout.wallpaper_picker_live_wallpaper_item, parent, false);
554428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
564428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        ImageView image = (ImageView) mView.findViewById(R.id.wallpaper_image);
574428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        ImageView icon = (ImageView) mView.findViewById(R.id.wallpaper_icon);
584428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        if (mThumbnail != null) {
594428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal            image.setImageDrawable(mThumbnail);
604428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal            icon.setVisibility(View.GONE);
614428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        } else {
624428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal            icon.setImageDrawable(mInfo.loadIcon(context.getPackageManager()));
634428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal            icon.setVisibility(View.VISIBLE);
644428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        }
654428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
664428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        TextView label = (TextView) mView.findViewById(R.id.wallpaper_item_label);
674428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        label.setText(mInfo.loadLabel(context.getPackageManager()));
684428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        return mView;
694428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    }
704428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
714428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    /**
724428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal     * An async task to load various live wallpaper tiles.
734428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal     */
744428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    public static class LoaderTask extends AsyncTask<Void, Void, List<LiveWallpaperInfo>> {
754428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        private final Context mContext;
764428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
774428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        public LoaderTask(Context context) {
784428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal            mContext = context;
794428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        }
804428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
814428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        @Override
824428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        protected List<LiveWallpaperInfo> doInBackground(Void... params) {
834428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal            final PackageManager pm = mContext.getPackageManager();
844428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
854428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal            List<ResolveInfo> list = pm.queryIntentServices(
864428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                    new Intent(WallpaperService.SERVICE_INTERFACE),
874428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                    PackageManager.GET_META_DATA);
884428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
894428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal            Collections.sort(list, new Comparator<ResolveInfo>() {
904428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                final Collator mCollator = Collator.getInstance();
914428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
924428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                public int compare(ResolveInfo info1, ResolveInfo info2) {
934428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                    return mCollator.compare(info1.loadLabel(pm), info2.loadLabel(pm));
944428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                }
954428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal            });
964428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
974428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal            List<LiveWallpaperInfo> result = new ArrayList<>();
984428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
994428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal            for (ResolveInfo resolveInfo : list) {
1004428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                WallpaperInfo info = null;
1014428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                try {
1024428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                    info = new WallpaperInfo(mContext, resolveInfo);
1034428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                } catch (XmlPullParserException | IOException e) {
1044428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                    Log.w(TAG, "Skipping wallpaper " + resolveInfo.serviceInfo, e);
1054428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                    continue;
1064428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                }
1074428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
1084428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
1094428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                Drawable thumb = info.loadThumbnail(pm);
1104428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                Intent launchIntent = new Intent(WallpaperService.SERVICE_INTERFACE);
1114428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                launchIntent.setClassName(info.getPackageName(), info.getServiceName());
1124428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                result.add(new LiveWallpaperInfo(thumb, info, launchIntent));
1134428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal            }
1144428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
1154428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal            return result;
1164428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        }
1174428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    }
1184428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal}