From 55aa8e9aa6f3625582087f37c2ba1e2bc42ec497 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 14 Dec 2017 12:22:03 +0100 Subject: [PATCH 1/3] use standard buffer size for Utils.getBinaryHash() While a large buffer might make things slightly faster, the smaller buffer size should play much nicer when F-Droid is doing things in the background. Since calculating the hash is part of the update procedure, which can now happen in the background, this method will be often running in the background. The tests showed no difference in time between the large and small buffer. --- app/src/main/java/org/fdroid/fdroid/Utils.java | 2 +- .../test/java/org/fdroid/fdroid/UtilsTest.java | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) 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/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 } From f748d1e5fca9c955512d43e74ce46fc5ae39e6ec Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 20 Dec 2017 17:31:55 +0100 Subject: [PATCH 2/3] review AppSecurityPermissions for new changes to sync --- .../privileged/views/AppSecurityPermissions.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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 { From 3938146f93c2d123065a7228ed4e2673bf18a4c2 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 21 Dec 2017 10:08:27 +0100 Subject: [PATCH 3/3] set up "Android App Links" handling aka "Digital Asset Links" Add all the new URL path possibilities with the new website to the filter, and the possible, official host names. This makes it more likely that f-droid.org links go straight to F-Droid. * https://developers.google.com/digital-asset-links/v1/getting-started * https://developer.android.com/training/app-links/verify-site-associations.html fdroid-website#165 --- app/src/main/AndroidManifest.xml | 19 ++++++------------- .../fdroid/views/main/MainActivity.java | 18 +++++++++--------- 2 files changed, 15 insertions(+), 22 deletions(-) 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/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":