package tk.wasdennnoch.androidn_ify.ui; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.AsyncTask; import java.util.ArrayList; import java.util.Collections; import java.util.List; import tk.wasdennnoch.androidn_ify.ui.misc.CachedResolveInfo; @SuppressWarnings({"WeakerAccess", "EmptyMethod"}) public class LoadAppInfoTask extends AsyncTask<Object, Void, List<CachedResolveInfo>> { private OnFinishListener mListener; @Override protected void onPreExecute() { super.onPreExecute(); } @SuppressWarnings("unchecked") @Override protected List<CachedResolveInfo> doInBackground(Object... args) { mListener = (OnFinishListener) args[1]; Context context = (Context) args[1]; PackageManager packageManager = context.getPackageManager(); List<CachedResolveInfo> mCachedAppsInfo = new ArrayList<>(); List<ResolveInfo> mAppsInfo; Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); mAppsInfo = packageManager.queryIntentActivities(mainIntent, 0); Collections.sort(mAppsInfo, new ResolveInfo.DisplayNameComparator(packageManager)); Loop: for (ResolveInfo app : mAppsInfo) { // Some apps (like .Wave) add multiple launcher icons, this bugs blacklist selection, so only add one item per package name for (int i = 0; i < mCachedAppsInfo.size(); i++) { if (mCachedAppsInfo.get(i).getPackageName().equals(app.activityInfo.packageName)) continue Loop; } CachedResolveInfo cachedResolveInfo = new CachedResolveInfo(); cachedResolveInfo.setIcon(app.loadIcon(packageManager)); cachedResolveInfo.setLabel(app.loadLabel(packageManager)); cachedResolveInfo.setResolveInfo(app); mCachedAppsInfo.add(cachedResolveInfo); } return mCachedAppsInfo; } protected void onPostExecute(List<CachedResolveInfo> apps) { mListener.onFinish(apps); } public interface OnFinishListener { void onFinish(List<CachedResolveInfo> apps); } }