예제 #1
0
  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;
  }