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}