package com.android.wallpaperpicker.tileinfo; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.android.wallpaperpicker.R; import com.android.wallpaperpicker.WallpaperPickerActivity; import com.android.wallpaperpicker.WallpaperUtils; import java.util.ArrayList; import java.util.HashSet; import java.util.List; public class ThirdPartyWallpaperInfo extends WallpaperTileInfo { private final ResolveInfo mResolveInfo; private final int mIconSize; public ThirdPartyWallpaperInfo(ResolveInfo resolveInfo, int iconSize) { mResolveInfo = resolveInfo; mIconSize = iconSize; } @Override public void onClick(WallpaperPickerActivity a) { final ComponentName itemComponentName = new ComponentName( mResolveInfo.activityInfo.packageName, mResolveInfo.activityInfo.name); Intent launchIntent = new Intent(Intent.ACTION_SET_WALLPAPER) .setComponent(itemComponentName) .putExtra(WallpaperUtils.EXTRA_WALLPAPER_OFFSET, a.getWallpaperParallaxOffset()); a.startActivityForResultSafely( launchIntent, WallpaperPickerActivity.PICK_WALLPAPER_THIRD_PARTY_ACTIVITY); } @Override public View createView(Context context, LayoutInflater inflator, ViewGroup parent) { mView = inflator.inflate(R.layout.wallpaper_picker_third_party_item, parent, false); TextView label = (TextView) mView.findViewById(R.id.wallpaper_item_label); label.setText(mResolveInfo.loadLabel(context.getPackageManager())); Drawable icon = mResolveInfo.loadIcon(context.getPackageManager()); icon.setBounds(new Rect(0, 0, mIconSize, mIconSize)); label.setCompoundDrawables(null, icon, null, null); return mView; } public static List getAll(Context context) { ArrayList result = new ArrayList<>(); int iconSize = context.getResources().getDimensionPixelSize(R.dimen.wallpaperItemIconSize); final PackageManager pm = context.getPackageManager(); Intent pickImageIntent = new Intent(Intent.ACTION_GET_CONTENT).setType("image/*"); HashSet excludePackages = new HashSet<>(); // Exclude packages which contain an image picker for (ResolveInfo info : pm.queryIntentActivities(pickImageIntent, 0)) { excludePackages.add(info.activityInfo.packageName); } excludePackages.add(context.getPackageName()); excludePackages.add("com.android.wallpaper.livepicker"); final Intent pickWallpaperIntent = new Intent(Intent.ACTION_SET_WALLPAPER); for (ResolveInfo info : pm.queryIntentActivities(pickWallpaperIntent, 0)) { if (!excludePackages.contains(info.activityInfo.packageName)) { result.add(new ThirdPartyWallpaperInfo(info, iconSize)); } } return result; } }