Move permission getter in Apk class
Also fix permissions list based on the fact that F-Droid deletes android.permission. prefix only for default Android permissions, not custom ones.
This commit is contained in:
parent
24ed40bd34
commit
1652c32d51
@ -92,6 +92,7 @@ import org.fdroid.fdroid.installer.InstallerService;
|
|||||||
import org.fdroid.fdroid.net.Downloader;
|
import org.fdroid.fdroid.net.Downloader;
|
||||||
import org.fdroid.fdroid.net.DownloaderService;
|
import org.fdroid.fdroid.net.DownloaderService;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -1375,14 +1376,12 @@ public class AppDetails extends AppCompatActivity {
|
|||||||
private void buildPermissionInfo() {
|
private void buildPermissionInfo() {
|
||||||
final TextView permissionListView = (TextView) llViewMorePermissions.findViewById(R.id.permissions_list);
|
final TextView permissionListView = (TextView) llViewMorePermissions.findViewById(R.id.permissions_list);
|
||||||
|
|
||||||
CommaSeparatedList permsList = appDetails.getApks().getItem(0).permissions;
|
ArrayList<String> permsList = appDetails.getApks().getItem(0).getFullPermissionList();
|
||||||
if (permsList == null) {
|
if (permsList == null) {
|
||||||
permissionListView.setText(R.string.no_permissions);
|
permissionListView.setText(R.string.no_permissions);
|
||||||
} else {
|
} else {
|
||||||
Iterator<String> permissions = permsList.iterator();
|
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
while (permissions.hasNext()) {
|
for (String permissionName : permsList) {
|
||||||
final String permissionName = permissions.next();
|
|
||||||
try {
|
try {
|
||||||
final Permission permission = new Permission(getActivity(), permissionName);
|
final Permission permission = new Permission(getActivity(), permissionName);
|
||||||
// TODO: Make this list RTL friendly
|
// TODO: Make this list RTL friendly
|
||||||
|
@ -4,7 +4,7 @@ import android.content.Context;
|
|||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.PermissionInfo;
|
import android.content.pm.PermissionInfo;
|
||||||
|
|
||||||
class Permission {
|
public class Permission {
|
||||||
|
|
||||||
private final PackageManager packageManager;
|
private final PackageManager packageManager;
|
||||||
private final PermissionInfo permissionInfo;
|
private final PermissionInfo permissionInfo;
|
||||||
@ -13,17 +13,7 @@ class Permission {
|
|||||||
throws PackageManager.NameNotFoundException {
|
throws PackageManager.NameNotFoundException {
|
||||||
this.packageManager = context.getPackageManager();
|
this.packageManager = context.getPackageManager();
|
||||||
this.permissionInfo = this.packageManager.getPermissionInfo(
|
this.permissionInfo = this.packageManager.getPermissionInfo(
|
||||||
fdroidToAndroid(permission), PackageManager.GET_META_DATA);
|
permission, PackageManager.GET_META_DATA);
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* It appears that all of the permissions in android.Manifest.permissions
|
|
||||||
* are prefixed with "android.permission." and then the constant name.
|
|
||||||
* FDroid just includes the constant name in the apk list, so we prefix it
|
|
||||||
* with "android.permission."
|
|
||||||
*/
|
|
||||||
private static String fdroidToAndroid(String permission) {
|
|
||||||
return "android.permission." + permission;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public CharSequence getName() {
|
public CharSequence getName() {
|
||||||
|
@ -5,9 +5,11 @@ import android.content.ContentValues;
|
|||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import org.fdroid.fdroid.Utils;
|
import org.fdroid.fdroid.Utils;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
public class Apk extends ValueObject implements Comparable<Apk> {
|
public class Apk extends ValueObject implements Comparable<Apk> {
|
||||||
@ -141,6 +143,43 @@ public class Apk extends ValueObject implements Comparable<Apk> {
|
|||||||
return repoAddress + "/" + apkName.replace(" ", "%20");
|
return repoAddress + "/" + apkName.replace(" ", "%20");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ArrayList<String> getFullPermissionList() {
|
||||||
|
if (this.permissions == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
ArrayList<String> permissionsFull = new ArrayList<>();
|
||||||
|
for (String perm : this.permissions) {
|
||||||
|
permissionsFull.add(fdroidToAndroidPermission(perm));
|
||||||
|
}
|
||||||
|
return permissionsFull;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getFullPermissionsArray() {
|
||||||
|
ArrayList<String> fullPermissions = getFullPermissionList();
|
||||||
|
if (fullPermissions == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return fullPermissions.toArray(new String[fullPermissions.size()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It appears that the default Android permissions in android.Manifest.permissions
|
||||||
|
* are prefixed with "android.permission." and then the constant name.
|
||||||
|
* FDroid just includes the constant name in the apk list, so we prefix it
|
||||||
|
* with "android.permission."
|
||||||
|
*
|
||||||
|
* see https://gitlab.com/fdroid/fdroidserver/blob/master/fdroidserver/update.py#L535#
|
||||||
|
*/
|
||||||
|
public static String fdroidToAndroidPermission(String permission) {
|
||||||
|
if (!permission.contains(".")) {
|
||||||
|
return "android.permission." + permission;
|
||||||
|
}
|
||||||
|
|
||||||
|
return permission;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return packageName + " (version " + versionCode + ")";
|
return packageName + " (version " + versionCode + ")";
|
||||||
|
@ -24,6 +24,7 @@ import android.content.pm.PackageInfo;
|
|||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
|
||||||
|
import org.fdroid.fdroid.Permission;
|
||||||
import org.fdroid.fdroid.data.Apk;
|
import org.fdroid.fdroid.data.Apk;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -45,17 +46,7 @@ public class AppDiff {
|
|||||||
mPkgInfo = new PackageInfo();
|
mPkgInfo = new PackageInfo();
|
||||||
mPkgInfo.packageName = apk.packageName;
|
mPkgInfo.packageName = apk.packageName;
|
||||||
mPkgInfo.applicationInfo = new ApplicationInfo();
|
mPkgInfo.applicationInfo = new ApplicationInfo();
|
||||||
|
mPkgInfo.requestedPermissions = apk.getFullPermissionsArray();
|
||||||
if (apk.permissions == null) {
|
|
||||||
mPkgInfo.requestedPermissions = null;
|
|
||||||
} else {
|
|
||||||
// TODO: duplicate code with Permission.fdroidToAndroid
|
|
||||||
ArrayList<String> permissionsFixed = new ArrayList<>();
|
|
||||||
for (String perm : apk.permissions.toArrayList()) {
|
|
||||||
permissionsFixed.add("android.permission." + perm);
|
|
||||||
}
|
|
||||||
mPkgInfo.requestedPermissions = permissionsFixed.toArray(new String[permissionsFixed.size()]);
|
|
||||||
}
|
|
||||||
|
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user