public boolean parseProviders()

in ioXt/uraniborg/AndroidStudioProject/Hubble/app/src/main/java/com/uraniborg/hubble/PackageMetadata.java [249:319]


  public boolean parseProviders(PackageManager packageManager) {
    final String TAG = "parseProviders";
    this.providers = new JSONArray();
    ProviderInfo[] providerInfos = ref.providers;
    if (providerInfos == null) {
      return true;
    }

    for (ProviderInfo provider : providerInfos) {
      JSONObject providerJson = parseComponentInfo(provider, packageManager);
      if (providerJson == null) {
        Log.e(TAG, String.format("Failed to parse %s", provider.name));
        continue;
      }

      JSONArray pathPermsJson = new JSONArray();
      if (provider.pathPermissions != null) {
        for (PathPermission pp : provider.pathPermissions) {
          JSONObject ppJson = parsePathPermission(pp);
          if (ppJson == null) {
            Log.e(TAG, String.format("Failed to parse PathPermission for provider: %s",
                provider.name));
            continue;
          }
          pathPermsJson.put(ppJson);
        }
      }

      JSONArray uriPermPatternsJson = new JSONArray();
      if (provider.uriPermissionPatterns != null) {
        for (PatternMatcher pp : provider.uriPermissionPatterns) {
          JSONObject ppJson = parsePatternMatcher(pp);
          if (ppJson == null) {
            Log.e(TAG, String.format("Failed to parse uriPermissionPatterns for %s",
                provider.name));
            continue;
          }
          uriPermPatternsJson.put(ppJson);
        }
      }

      try {
        providerJson.put("authority", (provider.authority != null) ? provider.authority :
            JSONObject.NULL);
        providerJson.put("grantUriPermissions", provider.grantUriPermissions);


        providerJson.put("permissionRead", (provider.readPermission != null) ?
            provider.readPermission : JSONObject.NULL);
        providerJson.put("permissionWrite", (provider.writePermission != null) ?
            provider.writePermission : JSONObject.NULL);

        providerJson.put("pathPermissions", pathPermsJson);
        providerJson.put("uriPermissionPatterns", uriPermPatternsJson);

        // API Level specific fields
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
          providerJson.put("forceUriPermissions", provider.forceUriPermissions);
        } else {
          providerJson.put("forceUriPermissions", JSONObject.NULL);
        }

      } catch (JSONException e) {
        Log.e(TAG, String.format("Failed to put value into JSON Object: %s", e.getMessage()));
        return false;
      }
      this.providers.put(providerJson);
    }

    return true;
  }