diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 76086e59d..fa543d83c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -301,7 +301,7 @@
-
+
@@ -311,20 +311,13 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
diff --git a/app/src/main/java/org/fdroid/fdroid/Utils.java b/app/src/main/java/org/fdroid/fdroid/Utils.java
index 52a8b5441..9c16d4674 100644
--- a/app/src/main/java/org/fdroid/fdroid/Utils.java
+++ b/app/src/main/java/org/fdroid/fdroid/Utils.java
@@ -409,7 +409,7 @@ public final class Utils {
fis = new FileInputStream(apk);
BufferedInputStream bis = new BufferedInputStream(fis);
- byte[] dataBytes = new byte[524288];
+ byte[] dataBytes = new byte[8192];
int nread;
while ((nread = bis.read(dataBytes)) != -1) {
md.update(dataBytes, 0, nread);
diff --git a/app/src/main/java/org/fdroid/fdroid/privileged/views/AppSecurityPermissions.java b/app/src/main/java/org/fdroid/fdroid/privileged/views/AppSecurityPermissions.java
index 84f465996..ebfb20298 100644
--- a/app/src/main/java/org/fdroid/fdroid/privileged/views/AppSecurityPermissions.java
+++ b/app/src/main/java/org/fdroid/fdroid/privileged/views/AppSecurityPermissions.java
@@ -1,4 +1,5 @@
/*
+**
** Copyright 2007, The Android Open Source Project
** Copyright 2015 Daniel MartÃ
**
@@ -43,7 +44,6 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
-
import org.fdroid.fdroid.Preferences;
import org.fdroid.fdroid.R;
@@ -67,12 +67,18 @@ import java.util.Set;
* view by instantiating AppSecurityPermissions and invoking getPermissionsView.
*
* NOTES:
- * Based on AOSP core/java/android/widget/AppSecurityPermissions
+ * Based on AOSP core/java/android/widget/AppSecurityPermissions.java
* latest included commit: a3f68ef2f6811cf72f1282214c0883db5a30901d
+ * Reviewed against frameworks/base/core/java/android/widget/AppSecurityPermissions.java
+ * from commit {@code android-8.1.0_r2}
*
* To update this file, Start from latest included commit and include changes
* until the newest commit with care:
* github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/AppSecurityPermissions.java
+ *
+ * This file has a different code style than the rest of fdroidclient because
+ * it is kept in sync with the file from AOSP. Please maintain the original
+ * AOSP code style so it is easy to track changes.
*/
public class AppSecurityPermissions {
diff --git a/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java b/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java
index 50636c861..1e3ad2412 100644
--- a/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java
+++ b/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java
@@ -16,11 +16,9 @@ import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.ViewGroup;
import android.widget.Toast;
-
import com.ashokvarma.bottomnavigation.BadgeItem;
import com.ashokvarma.bottomnavigation.BottomNavigationBar;
import com.ashokvarma.bottomnavigation.BottomNavigationItem;
-
import org.fdroid.fdroid.AppDetails2;
import org.fdroid.fdroid.AppUpdateStatusManager;
import org.fdroid.fdroid.AppUpdateStatusManager.AppUpdateStatus;
@@ -226,18 +224,20 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationB
}
switch (host) {
case "f-droid.org":
- if (path.startsWith("/repository/browse")) {
+ case "www.f-droid.org":
+ case "staging.f-droid.org":
+ if (path.startsWith("/app/") || path.startsWith("/packages/")
+ || path.matches("^/[a-z][a-z][a-zA-Z_-]*/packages/.*")) {
+ // http://f-droid.org/app/packageName
+ packageName = data.getLastPathSegment();
+ } else if (path.startsWith("/repository/browse")) {
// http://f-droid.org/repository/browse?fdfilter=search+query
query = UriCompat.getQueryParameter(data, "fdfilter");
// http://f-droid.org/repository/browse?fdid=packageName
packageName = UriCompat.getQueryParameter(data, "fdid");
- } else if (path.startsWith("/app")) {
- // http://f-droid.org/app/packageName
- packageName = data.getLastPathSegment();
- if ("app".equals(packageName)) {
- packageName = null;
- }
+ } else if ("/app".equals(data.getPath()) || "/packages".equals(data.getPath())) {
+ packageName = null;
}
break;
case "details":
diff --git a/app/src/test/java/org/fdroid/fdroid/UtilsTest.java b/app/src/test/java/org/fdroid/fdroid/UtilsTest.java
index 116d399c4..bb9589da0 100644
--- a/app/src/test/java/org/fdroid/fdroid/UtilsTest.java
+++ b/app/src/test/java/org/fdroid/fdroid/UtilsTest.java
@@ -2,7 +2,6 @@
package org.fdroid.fdroid;
import android.content.Context;
-
import org.fdroid.fdroid.views.AppDetailsRecyclerViewAdapter;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -10,6 +9,8 @@ import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
+import java.io.File;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@@ -174,6 +175,21 @@ public class UtilsTest {
}
}
+ @Test
+ public void testGetBinaryHash() {
+ File f = TestUtils.copyResourceToTempFile("largeRepo.xml");
+ assertEquals("df1754aa4b56c86c06d7842dfd02064f0781c1f740f489d3fc158bb541c8d197",
+ Utils.getBinaryHash(f, "sha256"));
+ f = TestUtils.copyResourceToTempFile("masterKeyIndex.jar");
+ assertEquals("625d5aedcd0499fe04ebab81f3c7ae30c236cee653a914ffb587d890198f3aba",
+ Utils.getBinaryHash(f, "sha256"));
+ f = TestUtils.copyResourceToTempFile("index.fdroid.2016-10-30.jar");
+ assertEquals("c138b503c6475aa749585d0e3ad4dba3546b6d33ec485efd8ac8bd603d93fedb",
+ Utils.getBinaryHash(f, "sha256"));
+ f = TestUtils.copyResourceToTempFile("index.fdroid.2016-11-10.jar");
+ assertEquals("93bea45814fd8955cabb957e7a3f8790d6c568eaa16fa30425c2d26c60490bde",
+ Utils.getBinaryHash(f, "sha256"));
+ }
// TODO write tests that work with a Certificate
}