1748dfe025b128ea88ba626c8bfb7da315d5af29cSunny Goyalpackage com.android.wallpaperpicker.tileinfo;
24428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
34428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.content.ComponentName;
44428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.content.Context;
54428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.content.Intent;
64428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.content.pm.PackageManager;
74428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.content.pm.ResolveInfo;
84428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.graphics.Rect;
94428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.graphics.drawable.Drawable;
104428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.view.LayoutInflater;
114428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.view.View;
124428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.view.ViewGroup;
134428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport android.widget.TextView;
144428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
15748dfe025b128ea88ba626c8bfb7da315d5af29cSunny Goyalimport com.android.wallpaperpicker.R;
16748dfe025b128ea88ba626c8bfb7da315d5af29cSunny Goyalimport com.android.wallpaperpicker.WallpaperPickerActivity;
177820af14c0252b1f8b5acc14da1a00e7b70c0fdeSunny Goyalimport com.android.wallpaperpicker.WallpaperUtils;
184428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
194428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport java.util.ArrayList;
204428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport java.util.HashSet;
214428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalimport java.util.List;
224428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
234428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyalpublic class ThirdPartyWallpaperInfo extends WallpaperTileInfo {
244428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
254428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    private final ResolveInfo mResolveInfo;
264428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    private final int mIconSize;
274428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
284428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    public ThirdPartyWallpaperInfo(ResolveInfo resolveInfo, int iconSize) {
294428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        mResolveInfo = resolveInfo;
304428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        mIconSize = iconSize;
314428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    }
324428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
334428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    @Override
344428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    public void onClick(WallpaperPickerActivity a) {
354428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        final ComponentName itemComponentName = new ComponentName(
364428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                mResolveInfo.activityInfo.packageName, mResolveInfo.activityInfo.name);
374428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        Intent launchIntent = new Intent(Intent.ACTION_SET_WALLPAPER)
3839d389f406185d91b588c4caf3225749fd2afdcfTony Wickham            .setComponent(itemComponentName)
397820af14c0252b1f8b5acc14da1a00e7b70c0fdeSunny Goyal            .putExtra(WallpaperUtils.EXTRA_WALLPAPER_OFFSET,
4039d389f406185d91b588c4caf3225749fd2afdcfTony Wickham                    a.getWallpaperParallaxOffset());
414428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        a.startActivityForResultSafely(
424428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                launchIntent, WallpaperPickerActivity.PICK_WALLPAPER_THIRD_PARTY_ACTIVITY);
434428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    }
444428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
454428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    @Override
464428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    public View createView(Context context, LayoutInflater inflator, ViewGroup parent) {
474428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        mView = inflator.inflate(R.layout.wallpaper_picker_third_party_item, parent, false);
484428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
494428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        TextView label = (TextView) mView.findViewById(R.id.wallpaper_item_label);
504428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        label.setText(mResolveInfo.loadLabel(context.getPackageManager()));
514428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        Drawable icon = mResolveInfo.loadIcon(context.getPackageManager());
524428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        icon.setBounds(new Rect(0, 0, mIconSize, mIconSize));
534428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        label.setCompoundDrawables(null, icon, null, null);
544428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        return mView;
554428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    }
564428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
574428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    public static List<ThirdPartyWallpaperInfo> getAll(Context context) {
584428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        ArrayList<ThirdPartyWallpaperInfo> result = new ArrayList<>();
594428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        int iconSize = context.getResources().getDimensionPixelSize(R.dimen.wallpaperItemIconSize);
604428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
614428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        final PackageManager pm = context.getPackageManager();
624428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        Intent pickImageIntent = new Intent(Intent.ACTION_GET_CONTENT).setType("image/*");
634428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        HashSet<String> excludePackages = new HashSet<>();
644428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        // Exclude packages which contain an image picker
654428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        for (ResolveInfo info : pm.queryIntentActivities(pickImageIntent, 0)) {
664428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal            excludePackages.add(info.activityInfo.packageName);
674428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        }
684428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        excludePackages.add(context.getPackageName());
694428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        excludePackages.add("com.android.wallpaper.livepicker");
704428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal
714428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        final Intent pickWallpaperIntent = new Intent(Intent.ACTION_SET_WALLPAPER);
724428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        for (ResolveInfo info : pm.queryIntentActivities(pickWallpaperIntent, 0)) {
734428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal            if (!excludePackages.contains(info.activityInfo.packageName)) {
744428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal                result.add(new ThirdPartyWallpaperInfo(info, iconSize));
754428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal            }
764428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        }
774428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal        return result;
784428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal    }
794428db78eed5d453c3bb376e6e28977c21b1c9ddSunny Goyal}