From 7e0ae10e84f738d141ff32a3c5be6164bb6d4012 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 27 Feb 2017 14:24:35 +0100 Subject: [PATCH] uses-permission fields as Apk instance vars This adds support for the index fields: uses-permission and uses-permission-sdk-23. For most index fields, Jackson handles directly mapping the incoming data to the instance vars based on the matching field/var names. For uses-permission*, methods are declared for handling those properties in the incoming index. These fields will be ignored when using the v0 index.xml format. --- .../main/java/org/fdroid/fdroid/data/Apk.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/fdroid/fdroid/data/Apk.java b/app/src/main/java/org/fdroid/fdroid/data/Apk.java index e08078756..f7e6c3df8 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/Apk.java +++ b/app/src/main/java/org/fdroid/fdroid/data/Apk.java @@ -8,7 +8,7 @@ import android.os.Build; import android.os.Parcel; import android.os.Parcelable; import android.support.annotation.NonNull; - +import com.fasterxml.jackson.annotation.JsonProperty; import org.fdroid.fdroid.BuildConfig; import org.fdroid.fdroid.RepoXMLHandler; import org.fdroid.fdroid.Utils; @@ -429,4 +429,27 @@ public class Apk extends ValueObject implements Comparable, Parcelable { return null; } + @JsonProperty("uses-permission") + private void setUsesPermission(Object[][] permissions) { // NOPMD + setRequestedPermissions(permissions, 0); + } + + @JsonProperty("uses-permission-sdk-23") + private void setUsesPermissionSdk23(Object[][] permissions) { // NOPMD + setRequestedPermissions(permissions, 23); + } + + private void setRequestedPermissions(Object[][] permissions, int minSdk) { + HashSet set = new HashSet<>(); + for (Object[] versions : permissions) { + int maxSdk = Integer.MAX_VALUE; + if (versions[1] != null) { + maxSdk = (int) versions[1]; + } + if (minSdk <= Build.VERSION.SDK_INT && Build.VERSION.SDK_INT <= maxSdk) { + set.add((String) versions[0]); + } + } + requestedPermissions = set.toArray(new String[set.size()]); + } }