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;
}