From af1040443edf189b7a0de83b88cfef0330977d55 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 17 Apr 2019 12:30:06 +0200 Subject: [PATCH 1/7] ignore Errors and Exceptions in background services Throwable includes Errors and Exceptions. Fixes stacktraces like these: java.lang.RuntimeException: An error occurred while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:325) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) at java.util.concurrent.FutureTask.setException(FutureTask.java:223) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) at java.lang.Thread.run(Thread.java:761) Caused by: java.lang.NoSuchMethodError: No virtual method toPath()Ljava/nio/file/Path; in class Ljava/io/File; or its super classes (declaration of 'java.io.File' appears in /system/framework/core-oj.jar) at org.apache.commons.io.FileUtils.isSymlink(FileUtils.java:3107) at org.apache.commons.io.FileUtils.deleteDirectory(FileUtils.java:1616) at org.fdroid.fdroid.DeleteCacheService.onHandleWork(DeleteCacheService.java:32) at android.support.v4.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:391) at android.support.v4.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:382) at android.os.AsyncTask$2.call(AsyncTask.java:305) at java.util.concurrent.FutureTask.run(FutureTask.java:237) ... 3 more java.lang.NoSuchMethodError: No virtual method toPath()Ljava/nio/file/Path; in class Ljava/io/File; or its super classes (declaration of 'java.io.File' appears in /system/framework/core-oj.jar) at org.apache.commons.io.FileUtils.isSymlink(FileUtils.java:3107) at org.apache.commons.io.FileUtils.deleteDirectory(FileUtils.java:1616) at org.fdroid.fdroid.DeleteCacheService.onHandleWork(DeleteCacheService.java:32) at android.support.v4.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:391) at android.support.v4.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:382) at android.os.AsyncTask$2.call(AsyncTask.java:305) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) at java.lang.Thread.run(Thread.java:761) --- app/src/main/java/org/fdroid/fdroid/DeleteCacheService.java | 6 ++---- app/src/main/java/org/fdroid/fdroid/UpdateService.java | 2 +- app/src/main/java/org/fdroid/fdroid/Utils.java | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/DeleteCacheService.java b/app/src/main/java/org/fdroid/fdroid/DeleteCacheService.java index 9e05f5d89..eec11f260 100644 --- a/app/src/main/java/org/fdroid/fdroid/DeleteCacheService.java +++ b/app/src/main/java/org/fdroid/fdroid/DeleteCacheService.java @@ -28,13 +28,11 @@ public class DeleteCacheService extends JobIntentService { Log.w(TAG, "Deleting all cached contents!"); try { File cacheDir = getCacheDir(); - if (cacheDir != null) { - FileUtils.deleteDirectory(cacheDir); - } + FileUtils.deleteDirectory(cacheDir); for (File dir : ContextCompat.getExternalCacheDirs(this)) { FileUtils.deleteDirectory(dir); } - } catch (Exception e) { + } catch (Throwable e) { // NOPMD // ignored } } diff --git a/app/src/main/java/org/fdroid/fdroid/UpdateService.java b/app/src/main/java/org/fdroid/fdroid/UpdateService.java index 980dc8dc8..dfbfcac9a 100644 --- a/app/src/main/java/org/fdroid/fdroid/UpdateService.java +++ b/app/src/main/java/org/fdroid/fdroid/UpdateService.java @@ -236,7 +236,7 @@ public class UpdateService extends JobIntentService { Utils.debugLog(TAG, "scheduling update because there is good internet"); schedule(context); } - } catch (Exception e) { + } catch (Throwable e) { // NOPMD Utils.debugLog(TAG, e.getMessage()); } isScheduleIfStillOnWifiRunning = false; diff --git a/app/src/main/java/org/fdroid/fdroid/Utils.java b/app/src/main/java/org/fdroid/fdroid/Utils.java index 34bbc664c..479d53e49 100644 --- a/app/src/main/java/org/fdroid/fdroid/Utils.java +++ b/app/src/main/java/org/fdroid/fdroid/Utils.java @@ -384,7 +384,7 @@ public final class Utils { } ret = formatter.toString(); formatter.close(); - } catch (Exception e) { + } catch (Throwable e) { // NOPMD Log.w(TAG, "Unable to get certificate fingerprint", e); } return ret; From 67af661640dca991c44a63253126f672829b18a0 Mon Sep 17 00:00:00 2001 From: ioTY Date: Sat, 23 Mar 2019 22:17:22 +0100 Subject: [PATCH 2/7] Check whether fdroidPrivileged enabled --- .../java/org/fdroid/fdroid/installer/PrivilegedInstaller.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/fdroid/fdroid/installer/PrivilegedInstaller.java b/app/src/main/java/org/fdroid/fdroid/installer/PrivilegedInstaller.java index 51e5ee8f4..46d6f7c7f 100644 --- a/app/src/main/java/org/fdroid/fdroid/installer/PrivilegedInstaller.java +++ b/app/src/main/java/org/fdroid/fdroid/installer/PrivilegedInstaller.java @@ -265,7 +265,7 @@ public class PrivilegedInstaller extends Installer { PackageManager pm = context.getPackageManager(); try { pm.getPackageInfo(PRIVILEGED_EXTENSION_PACKAGE_NAME, PackageManager.GET_ACTIVITIES); - return true; + return pm.getApplicationInfo(PRIVILEGED_EXTENSION_PACKAGE_NAME, 0).enabled; } catch (PackageManager.NameNotFoundException e) { return false; } From a71489a102eec81742878220a6e927cbfcdd245c Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Fri, 3 May 2019 15:44:40 +0200 Subject: [PATCH 3/7] set max width on places where the translations get too long closes #1678 --- app/src/full/res/layout/main_tab_swap.xml | 2 + .../full/res/layout/swap_app_list_item.xml | 3 ++ .../res/layout/app_details2_version_item.xml | 3 ++ app/src/main/res/layout/updates_header.xml | 3 ++ tools/check-string-maxlength.py | 48 +++++++++++++++++++ 5 files changed, 59 insertions(+) create mode 100755 tools/check-string-maxlength.py diff --git a/app/src/full/res/layout/main_tab_swap.xml b/app/src/full/res/layout/main_tab_swap.xml index 03c35548e..3db7d5eee 100644 --- a/app/src/full/res/layout/main_tab_swap.xml +++ b/app/src/full/res/layout/main_tab_swap.xml @@ -42,6 +42,7 @@ android:id="@+id/find_people_button" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:maxEms="16" android:text="@string/nearby_splash__find_people_button" style="@style/DetailsSecondaryButtonStyle" app:layout_constraintTop_toBottomOf="@+id/title" @@ -85,6 +86,7 @@ android:id="@+id/request_read_external_storage_button" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:maxEms="16" android:text="@string/nearby_splash__request_permission" style="@style/DetailsSecondaryButtonStyle" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/full/res/layout/swap_app_list_item.xml b/app/src/full/res/layout/swap_app_list_item.xml index f4d1b069d..84aedf51c 100644 --- a/app/src/full/res/layout/swap_app_list_item.xml +++ b/app/src/full/res/layout/swap_app_list_item.xml @@ -37,6 +37,9 @@ android:layout_height="wrap_content" android:backgroundTint="@color/swap_light_blue" android:textColor="@android:color/white" + android:maxEms="10" + android:ellipsize="end" + android:singleLine="true" android:text="@string/menu_install" tools:ignore="UnusedAttribute" /> diff --git a/app/src/main/res/layout/app_details2_version_item.xml b/app/src/main/res/layout/app_details2_version_item.xml index 935c03b35..194a08489 100644 --- a/app/src/main/res/layout/app_details2_version_item.xml +++ b/app/src/main/res/layout/app_details2_version_item.xml @@ -143,6 +143,9 @@ android:layout_marginTop="5dp" android:layout_marginRight="4dp" android:layout_marginEnd="4dp" + android:maxEms="10" + android:ellipsize="end" + android:singleLine="true" tools:text="@string/menu_install"/>