diff --git a/res/layout/appinfo.xml b/res/layout/appinfo.xml
index 9fbc5ac81..6c86329d0 100644
--- a/res/layout/appinfo.xml
+++ b/res/layout/appinfo.xml
@@ -28,5 +28,19 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:singleLine="false" />
+
+
+
+
diff --git a/res/values/strings.xml b/res/values/strings.xml
index c632f086b..3e6a8eda1 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -163,5 +163,8 @@
Processing application\n%2$d of %3$d from\n%1$s
Connecting to\n%1$s
Checking apps compatibility with your device…
+ Permissions for v%s
+ Show permissions
+ Display a list of permissions an app needs
diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml
index 2935561de..d99d4e0af 100644
--- a/res/xml/preferences.xml
+++ b/res/xml/preferences.xml
@@ -53,6 +53,7 @@
+
permissions = permsList != null ? permsList.iterator() : null;
+ if (null != permissions && permissions.hasNext()) {
+ StringBuilder sb = new StringBuilder();
+ while(permissions.hasNext()) {
+ String permissionName = permissions.next();
+ try {
+ Permission permission = new Permission(this, permissionName);
+ sb.append(permission.getName());
+ if (permissions.hasNext()) {
+ sb.append('\n');
+ }
+ } catch (NameNotFoundException e) {
+ Log.d( "FDroid",
+ "Can't find permsission '" + permissionName + "'");
+ }
+ }
+ tv.setText(sb.toString());
+ } else {
+ tv.setText("NONE");
+ }
+ tv = (TextView) infoView.findViewById(R.id.permissions);
+ tv.setText(getResources().getString(
+ R.string.permissions, app.apks.get(0).version));
+ } else {
+ tv.setVisibility(View.GONE);
+ tv = (TextView) infoView.findViewById(R.id.permissions);
+ tv.setVisibility(View.GONE);
+ }
}
@Override
diff --git a/src/org/fdroid/fdroid/Permission.java b/src/org/fdroid/fdroid/Permission.java
new file mode 100644
index 000000000..1ab88837b
--- /dev/null
+++ b/src/org/fdroid/fdroid/Permission.java
@@ -0,0 +1,42 @@
+package org.fdroid.fdroid;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.pm.PermissionInfo;
+import android.graphics.drawable.Drawable;
+
+public class Permission {
+
+ private final PackageManager packageManager;
+ private final PermissionInfo permissionInfo;
+
+ public Permission(Context context, String permission)
+ throws PackageManager.NameNotFoundException {
+ this.packageManager = context.getPackageManager();
+ this.permissionInfo = this.packageManager.getPermissionInfo(
+ fdroidToAndroid(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() {
+ return this.permissionInfo.loadLabel(this.packageManager);
+ }
+
+ public CharSequence getDescription() {
+ return this.permissionInfo.loadDescription(this.packageManager);
+ }
+
+ public Drawable getIcon() {
+ return this.permissionInfo.loadIcon(this.packageManager);
+ }
+
+}