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 }