exodus-privacy-android-app/app/src/main/java/org/eu/exodus_privacy/exodusprivacy/objects/ReportDisplay.java

87 lines
3.7 KiB
Java
Raw Normal View History

2019-11-20 23:08:51 +01:00
package org.eu.exodus_privacy.exodusprivacy.objects;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PermissionGroupInfo;
import android.content.pm.PermissionInfo;
import android.graphics.drawable.Drawable;
import org.eu.exodus_privacy.exodusprivacy.R;
import org.eu.exodus_privacy.exodusprivacy.adapters.ApplicationViewModel;
2019-11-20 23:08:51 +01:00
import org.eu.exodus_privacy.exodusprivacy.manager.DatabaseManager;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class ReportDisplay {
public Report report;
public String packageName;
public String versionName;
public String displayName;
public String creator;
public long versionCode;
public Drawable logo;
public List<Permission> permissions;
public Set<Tracker> trackers;
public String source;
public String viewOnStore;
2019-11-20 23:08:51 +01:00
2020-12-07 09:04:44 +01:00
private ReportDisplay() {
2019-11-20 23:08:51 +01:00
}
public static ReportDisplay buildReportDisplay(Context context, ApplicationViewModel model, PackageManager manager, PackageInfo info) {
2019-11-20 23:08:51 +01:00
ReportDisplay reportDisplay = new ReportDisplay();
reportDisplay.packageName = model.packageName;
reportDisplay.versionName = model.versionName;
reportDisplay.versionCode = model.versionCode;
reportDisplay.displayName = model.label.toString();
2019-11-20 23:08:51 +01:00
reportDisplay.report = model.report;
2020-12-07 09:04:44 +01:00
reportDisplay.source = context.getString(R.string.source, model.source);
reportDisplay.viewOnStore = context.getString(model.source.equals("google") ? R.string.view_on_google_play : R.string.view_on_fdroid);
2019-11-20 23:08:51 +01:00
reportDisplay.trackers = model.trackers;
2019-11-20 23:08:51 +01:00
if (reportDisplay.report != null)
2020-12-07 09:04:44 +01:00
reportDisplay.creator = DatabaseManager.getInstance(context).getCreator(reportDisplay.report.appId);
2019-11-20 23:08:51 +01:00
2020-12-07 09:04:44 +01:00
List<Permission> requestedPermissions = new ArrayList<>();
2019-11-20 23:08:51 +01:00
if (info.requestedPermissions != null) {
2020-12-07 09:04:44 +01:00
for (int i = 0; i < info.requestedPermissions.length; i++) {
2019-11-20 23:08:51 +01:00
Permission permission = new Permission();
permission.fullName = info.requestedPermissions[i];
try {
2020-12-07 09:04:44 +01:00
PermissionInfo permissionInfo = manager.getPermissionInfo(permission.fullName, PackageManager.GET_META_DATA);
if (permissionInfo.loadDescription(manager) != null)
2019-11-20 23:08:51 +01:00
permission.description = permissionInfo.loadDescription(manager).toString();
2020-12-07 09:04:44 +01:00
if (permissionInfo.loadLabel(manager) != null)
2019-11-20 23:08:51 +01:00
permission.name = permissionInfo.loadLabel(manager).toString();
permission.dangerous = permissionInfo.protectionLevel == PermissionInfo.PROTECTION_DANGEROUS;
2020-12-07 09:04:44 +01:00
if (permission.fullName.equals(Manifest.permission.WRITE_SETTINGS) || permission.fullName.equals(Manifest.permission.SYSTEM_ALERT_WINDOW)) //Special permissions
2019-11-20 23:08:51 +01:00
permission.dangerous = true;
if (permissionInfo.group != null) {
PermissionGroupInfo permissionGroupInfo = manager.getPermissionGroupInfo(permissionInfo.group, PackageManager.GET_META_DATA);
2020-12-07 09:04:44 +01:00
if (permissionGroupInfo.loadIcon(manager) != null)
2019-11-20 23:08:51 +01:00
permission.icon = permissionGroupInfo.loadIcon(manager);
}
} catch (PackageManager.NameNotFoundException e) {
e.getLocalizedMessage();
}
requestedPermissions.add(permission);
}
}
reportDisplay.permissions = requestedPermissions;
reportDisplay.logo = model.icon;
2019-11-20 23:08:51 +01:00
return reportDisplay;
}
}