Ejemplo n.º 1
0
  /**
   * Queries the {@link android.content.pm.PackageManager} for any installed {@link
   * com.battlelancer.seriesguide.api.SeriesGuideExtension} extensions. Their info is extracted into
   * {@link com.battlelancer.seriesguide.extensions.ExtensionManager.Extension} objects.
   */
  public List<Extension> queryAllAvailableExtensions() {
    Intent queryIntent = new Intent(SeriesGuideExtension.ACTION_SERIESGUIDE_EXTENSION);
    PackageManager pm = mContext.getPackageManager();
    List<ResolveInfo> resolveInfos =
        pm.queryIntentServices(queryIntent, PackageManager.GET_META_DATA);

    List<Extension> extensions = new ArrayList<>();
    for (ResolveInfo info : resolveInfos) {
      Extension extension = new Extension();
      // get label, icon and component name
      extension.label = info.loadLabel(pm).toString();
      extension.icon = info.loadIcon(pm);
      extension.componentName =
          new ComponentName(info.serviceInfo.packageName, info.serviceInfo.name);
      // get description
      Context packageContext;
      try {
        packageContext = mContext.createPackageContext(extension.componentName.getPackageName(), 0);
        Resources packageRes = packageContext.getResources();
        extension.description = packageRes.getString(info.serviceInfo.descriptionRes);
      } catch (SecurityException
          | PackageManager.NameNotFoundException
          | Resources.NotFoundException e) {
        Timber.e(e, "Reading description for extension " + extension.componentName + " failed");
        extension.description = "";
      }
      // get (optional) settings activity
      Bundle metaData = info.serviceInfo.metaData;
      if (metaData != null) {
        String settingsActivity = metaData.getString("settingsActivity");
        if (!TextUtils.isEmpty(settingsActivity)) {
          extension.settingsActivity =
              ComponentName.unflattenFromString(
                  info.serviceInfo.packageName + "/" + settingsActivity);
        }
      }

      Timber.d(
          "queryAllAvailableExtensions: found extension "
              + extension.label
              + " "
              + extension.componentName);
      extensions.add(extension);
    }

    return extensions;
  }