blob: ac19a8901e93c7fc6cb3ca86cfaa8fa1150ab12a [file] [log] [blame]
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<ThirdPartyWallpaperInfo> getAll(Context context) {
ArrayList<ThirdPartyWallpaperInfo> 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<String> 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;
}
}