private List<AppInfo> loadApps(ProgressDialog dialog) { PackageManager packageManager = getPackageManager(); List<ApplicationInfo> packages = packageManager.getInstalledApplications(PackageManager.GET_META_DATA); List<AppInfo> apps = new ArrayList<AppInfo>(); dialog.setMax(packages.size()); int i = 1; for (ApplicationInfo app : packages) { AppInfo appInfo = new AppInfo(); appInfo.title = (String) app.loadLabel(packageManager); appInfo.summary = app.packageName; appInfo.icon = app.loadIcon(packageManager); appInfo.enabled = mSettingsHelper.isListed(app.packageName); apps.add(appInfo); dialog.setProgress(i++); } Collections.sort( apps, new Comparator<AppInfo>() { @Override public int compare(AppInfo appInfo1, AppInfo appInfo2) { boolean app1 = mSettingsHelper.isListed(appInfo1.summary); boolean app2 = mSettingsHelper.isListed(appInfo2.summary); if (app1 && app2 || !app1 && !app2) { return appInfo1.title.compareToIgnoreCase(appInfo2.title); } else if (app1) { return -1; } else if (app2) { return 1; } return 0; } }); return apps; }