From e49d8c92dfa3c69b7f4e6254492326970335ec24 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 25 Jul 2018 09:51:41 +0200 Subject: [PATCH 01/10] remove unused eu.chainfire:libsuperuser library I forgot to remove this in ab767ce621b92c5aa82c16e1edfd0aa724293391 fdroid/fdroidclient#982 --- app/build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 2db9f0937..2e909b462 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -139,7 +139,6 @@ dependencies { implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' implementation 'com.google.zxing:core:3.3.2' - implementation 'eu.chainfire:libsuperuser:1.0.0.201602271131' implementation 'info.guardianproject.netcipher:netcipher:2.0.0-alpha1' implementation 'info.guardianproject.panic:panic:0.5' implementation 'commons-io:commons-io:2.5' From a2361df8545f1bea0492e136c0b19117d24e3656 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 25 Jul 2018 22:08:03 +0200 Subject: [PATCH 02/10] hide "Update All" button once clicked to prevent repeated clicks fdroid/fdroidclient#1357 --- .../updates/items/UpdateableAppsHeader.java | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/views/updates/items/UpdateableAppsHeader.java b/app/src/main/java/org/fdroid/fdroid/views/updates/items/UpdateableAppsHeader.java index 7770e3624..5e5b6a971 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/updates/items/UpdateableAppsHeader.java +++ b/app/src/main/java/org/fdroid/fdroid/views/updates/items/UpdateableAppsHeader.java @@ -64,7 +64,7 @@ public class UpdateableAppsHeader extends AppUpdateData { } } - public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { + public static class ViewHolder extends RecyclerView.ViewHolder { private UpdateableAppsHeader header; @@ -81,8 +81,22 @@ public class UpdateableAppsHeader extends AppUpdateData { appsToUpdate = (TextView) itemView.findViewById(R.id.text_apps_to_update); toggleAppsToUpdate = (Button) itemView.findViewById(R.id.button_toggle_apps_to_update); - toggleAppsToUpdate.setOnClickListener(this); - downloadAll.setOnClickListener(this); + toggleAppsToUpdate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + header.adapter.toggleAllUpdateableApps(); + updateToggleButtonText(); + } + }); + + downloadAll.setVisibility(View.VISIBLE); + downloadAll.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + downloadAll.setVisibility(View.GONE); + UpdateService.autoDownloadUpdates(header.activity); + } + }); } public void bindHeader(UpdateableAppsHeader header) { @@ -101,16 +115,6 @@ public class UpdateableAppsHeader extends AppUpdateData { updateToggleButtonText(); } - @Override - public void onClick(View v) { - if (v == toggleAppsToUpdate) { - header.adapter.toggleAllUpdateableApps(); - updateToggleButtonText(); - } else if (v == downloadAll) { - UpdateService.autoDownloadUpdates(header.activity); - } - } - private void updateToggleButtonText() { if (header.adapter.canViewAllUpdateableApps()) { toggleAppsToUpdate.setText(R.string.updates__hide_updateable_apps); From 7d808b6e7365befc15fe4e6fb7678cc1da8837b6 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 25 Jul 2018 22:45:37 +0200 Subject: [PATCH 03/10] prevent Update button in Updates tab from being clicked multiple times fdroid/fdroidclient#1357 --- .../views/apps/AppListItemController.java | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java b/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java index eaa78f14e..fbafdb9ae 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java +++ b/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java @@ -108,7 +108,12 @@ public abstract class AppListItemController extends RecyclerView.ViewHolder { installButton = (ImageView) itemView.findViewById(R.id.install); if (installButton != null) { - installButton.setOnClickListener(onActionClicked); + installButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + onActionButtonPressed(currentApp); + } + }); if (Build.VERSION.SDK_INT >= 21) { installButton.setOutlineProvider(new ViewOutlineProvider() { @@ -140,7 +145,14 @@ public abstract class AppListItemController extends RecyclerView.ViewHolder { secondaryButton = (Button) itemView.findViewById(R.id.secondary_button); if (actionButton != null) { - actionButton.setOnClickListener(onActionClicked); + actionButton.setEnabled(true); + actionButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + actionButton.setEnabled(false); + onActionButtonPressed(currentApp); + } + }); } if (secondaryButton != null) { @@ -439,18 +451,6 @@ public abstract class AppListItemController extends RecyclerView.ViewHolder { } }; - @SuppressWarnings("FieldCanBeLocal") - private final View.OnClickListener onActionClicked = new View.OnClickListener() { - @Override - public void onClick(View v) { - if (currentApp == null) { - return; - } - - onActionButtonPressed(currentApp); - } - }; - @SuppressWarnings("FieldCanBeLocal") private final View.OnClickListener onSecondaryButtonClicked = new View.OnClickListener() { @Override @@ -463,7 +463,11 @@ public abstract class AppListItemController extends RecyclerView.ViewHolder { } }; - protected void onActionButtonPressed(@NonNull App app) { + protected void onActionButtonPressed(App app) { + if (app == null) { + return; + } + // When the button says "Run", then launch the app. if (currentStatus != null && currentStatus.status == AppUpdateStatusManager.Status.Installed) { Intent intent = activity.getPackageManager().getLaunchIntentForPackage(app.packageName); @@ -484,9 +488,6 @@ public abstract class AppListItemController extends RecyclerView.ViewHolder { Utils.debugLog(TAG, "skip download, we have already downloaded " + currentStatus.apk.getUrl() + " to " + apkFilePath); - // TODO: This seems like a bit of a hack. Is there a better way to do this by changing - // the Installer API so that we can ask it to install without having to get it to fire - // off an intent which we then listen for and action? final LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(activity); final BroadcastReceiver receiver = new BroadcastReceiver() { @Override From 395efa2e3fa5f0e83f2dfc9a2636e9d8cf30aba1 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Fri, 27 Jul 2018 16:51:35 +0200 Subject: [PATCH 04/10] mark app as installed only after F-Droid has processed the installed APK InstalledAppProviderService also updates the AppUpdateStatus of any package installs that are still in progress. Most importantly, this provides the final status update to mark the end of the installation process. It also errors out installation processes where some outside factor uninstalled the package while the F-Droid process was underway, e.g. uninstalling via adb, updates via Google Play, Yalp, etc. fdroid/fdroidclient#1536 fdroid/fdroidclient#1357 --- .../data/InstalledAppProviderService.java | 18 +++++++++++++++++- .../installer/InstallManagerService.java | 18 ------------------ 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java b/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java index 5f01aa7bd..2afc56f75 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java +++ b/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java @@ -12,6 +12,7 @@ import android.support.annotation.Nullable; import android.support.v4.app.JobIntentService; import android.util.Log; import org.acra.ACRA; +import org.fdroid.fdroid.AppUpdateStatusManager; import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.data.Schema.InstalledAppTable; import rx.functions.Action1; @@ -31,13 +32,21 @@ import java.util.concurrent.TimeUnit; * versus what Android says is installed, or processing {@link Intent}s that come * from {@link android.content.BroadcastReceiver}s for {@link Intent#ACTION_PACKAGE_ADDED} * and {@link Intent#ACTION_PACKAGE_REMOVED} - *

+ *

* Since {@link android.content.ContentProvider#insert(Uri, ContentValues)} does not check * for duplicate records, it is entirely the job of this service to ensure that it is not * inserting duplicate versions of the same installed APK. On that note, * {@link #insertAppIntoDb(Context, PackageInfo, String, String)} and * {@link #deleteAppFromDb(Context, String)} are both static methods to enable easy testing * of this stuff. + *

+ * This also updates the {@link AppUpdateStatusManager.Status status} of any + * package installs that are still in progress. Most importantly, this + * provides the final {@link AppUpdateStatusManager.Status#Installed status update} + * to mark the end of the installation process. It also errors out installation + * processes where some outside factor uninstalled the package while the F-Droid + * process was underway, e.g. uninstalling via {@code adb}, updates via Google + * Play, Yalp, etc. */ @SuppressWarnings("LineLength") public class InstalledAppProviderService extends JobIntentService { @@ -221,11 +230,15 @@ public class InstalledAppProviderService extends JobIntentService { protected void onHandleWork(@NonNull Intent intent) { Process.setThreadPriority(Process.THREAD_PRIORITY_LOWEST); + AppUpdateStatusManager ausm = AppUpdateStatusManager.getInstance(this); String packageName = intent.getData().getSchemeSpecificPart(); final String action = intent.getAction(); if (ACTION_INSERT.equals(action)) { PackageInfo packageInfo = getPackageInfo(intent, packageName); if (packageInfo != null) { + for (AppUpdateStatusManager.AppUpdateStatus status : ausm.getByPackageName(packageName)) { + ausm.updateApk(status.getUniqueKey(), AppUpdateStatusManager.Status.Installed, null); + } File apk = getPathToInstalledApk(packageInfo); if (apk == null) { return; @@ -244,6 +257,9 @@ public class InstalledAppProviderService extends JobIntentService { } } else if (ACTION_DELETE.equals(action)) { deleteAppFromDb(this, packageName); + for (AppUpdateStatusManager.AppUpdateStatus status : ausm.getByPackageName(packageName)) { + ausm.updateApk(status.getUniqueKey(), AppUpdateStatusManager.Status.InstallError, null); + } } packageChangeNotifier.onNext(packageName); } diff --git a/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java b/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java index 50d63e3e4..726b1496f 100644 --- a/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java +++ b/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java @@ -6,7 +6,6 @@ import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.net.Uri; @@ -95,7 +94,6 @@ public class InstallManagerService extends Service { private LocalBroadcastManager localBroadcastManager; private AppUpdateStatusManager appUpdateStatusManager; - private BroadcastReceiver broadcastReceiver; private boolean running = false; /** @@ -111,21 +109,6 @@ public class InstallManagerService extends Service { super.onCreate(); localBroadcastManager = LocalBroadcastManager.getInstance(this); appUpdateStatusManager = AppUpdateStatusManager.getInstance(this); - - broadcastReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - if (intent.getData() == null) return; - String packageName = intent.getData().getSchemeSpecificPart(); - for (AppUpdateStatusManager.AppUpdateStatus status : appUpdateStatusManager.getByPackageName(packageName)) { - appUpdateStatusManager.updateApk(status.getUniqueKey(), AppUpdateStatusManager.Status.Installed, null); - } - } - }; - IntentFilter intentFilter = new IntentFilter(); - intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED); - intentFilter.addDataScheme("package"); - registerReceiver(broadcastReceiver, intentFilter); running = true; pendingInstalls = getPendingInstalls(this); } @@ -140,7 +123,6 @@ public class InstallManagerService extends Service { @Override public void onDestroy() { running = false; - unregisterReceiver(broadcastReceiver); super.onDestroy(); } From 8f8aa44f43364fa9e0e25630eb0750d4bcdcc673 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 30 Jul 2018 11:23:30 +0200 Subject: [PATCH 05/10] simplify reseting package when coming to App Details screen --- .../java/org/fdroid/fdroid/AppDetails2.java | 61 ++++++++----------- 1 file changed, 27 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/AppDetails2.java b/app/src/main/java/org/fdroid/fdroid/AppDetails2.java index 328854bf4..bfe2ab8c3 100644 --- a/app/src/main/java/org/fdroid/fdroid/AppDetails2.java +++ b/app/src/main/java/org/fdroid/fdroid/AppDetails2.java @@ -109,7 +109,8 @@ public class AppDetails2 extends AppCompatActivity getSupportActionBar().setDisplayHomeAsUpEnabled(true); supportPostponeEnterTransition(); - if (!reset(getPackageNameFromIntent(getIntent()))) { + resetCurrentApp(getPackageNameFromIntent(getIntent())); + if (app == null) { finish(); return; } @@ -187,27 +188,6 @@ public class AppDetails2 extends AppCompatActivity return intent.getStringExtra(EXTRA_APPID); } - /** - * If passed null, this will show a message to the user ("Could not find app ..." or something - * like that) and then finish the activity. - */ - private void setApp(App newApp) { - if (newApp == null) { - Toast.makeText(this, R.string.no_such_app, Toast.LENGTH_LONG).show(); - finish(); - return; - } - app = newApp; - - // Remove all "installed" statuses for this app, since we are now viewing it. - AppUpdateStatusManager ausm = AppUpdateStatusManager.getInstance(this); - for (AppUpdateStatusManager.AppUpdateStatus status : ausm.getByPackageName(app.packageName)) { - if (status.status == AppUpdateStatusManager.Status.Installed) { - ausm.removeApk(status.getUniqueKey()); - } - } - } - /** * Some notifications (like "downloading" and "installed") are not shown * for this app if it is open in app details. When closing, we need to @@ -673,27 +653,40 @@ public class AppDetails2 extends AppCompatActivity /** * Reset the display and list contents. Used when entering the activity, and - * also when something has been installed/uninstalled. - * Return true if the app was found, false otherwise. + * also when something has been installed/uninstalled. An index update or + * other external factors might have changed since {@code app} was set + * before. This also removes all pending installs with + * {@link AppUpdateStatusManager.Status#Installed Installed} + * status for this {@code packageName}, to prevent any lingering open ones from + * messing up any action that the user might take. They sometimes might not get + * removed while F-Droid was in the background. + *

+ * Shows a {@link Toast} if no {@link App} was found matching {@code packageName}. */ - private boolean reset(String packageName) { - - Utils.debugLog(TAG, "Getting application details for " + packageName); - App newApp = null; - - if (!TextUtils.isEmpty(packageName)) { - newApp = AppProvider.Helper.findHighestPriorityMetadata(getContentResolver(), packageName); + private void resetCurrentApp(String packageName) { + if (TextUtils.isEmpty(packageName)) { + return; } + app = AppProvider.Helper.findHighestPriorityMetadata(getContentResolver(), packageName); - setApp(newApp); - return this.app != null; + // + AppUpdateStatusManager ausm = AppUpdateStatusManager.getInstance(this); + for (AppUpdateStatusManager.AppUpdateStatus status : ausm.getByPackageName(packageName)) { + if (status.status == AppUpdateStatusManager.Status.Installed) { + ausm.removeApk(status.getUniqueKey()); + } + } + if (app == null) { + Toast.makeText(this, R.string.no_such_app, Toast.LENGTH_LONG).show(); + } } private void onAppChanged() { recyclerView.post(new Runnable() { @Override public void run() { - if (!reset(app.packageName)) { + resetCurrentApp(app.packageName); + if (app == null) { AppDetails2.this.finish(); return; } From 109a927a68a6074d9c180b3bf2aa12aba9105a50 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 30 Jul 2018 14:20:21 +0200 Subject: [PATCH 06/10] show downloading header on Downloading/PendingInstall status PendingInstall means that the user considers the install still in process, like when F-Droid gets killed in the background. There is unfortunately no reliable way currently to ensure that removePendingInstall() is called when the app is finally installed so we can't use it here. This reverts a small part of 1c50e2891054b629e2af6b2d0b1fc89e0b1cf18b closes fdroid/fdroidclient#1527 fdroid/fdroidclient#1532 --- .../main/java/org/fdroid/fdroid/AppDetails2.java | 7 +++++++ .../fdroid/installer/InstallManagerService.java | 15 ++------------- .../views/AppDetailsRecyclerViewAdapter.java | 5 +++-- .../fdroid/views/AppDetailsAdapterTest.java | 4 ++++ 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/AppDetails2.java b/app/src/main/java/org/fdroid/fdroid/AppDetails2.java index bfe2ab8c3..7a1251258 100644 --- a/app/src/main/java/org/fdroid/fdroid/AppDetails2.java +++ b/app/src/main/java/org/fdroid/fdroid/AppDetails2.java @@ -698,6 +698,13 @@ public class AppDetails2 extends AppCompatActivity }); } + @Override + public boolean isAppDownloading() { + return currentStatus != null && + (currentStatus.status == AppUpdateStatusManager.Status.PendingInstall + || currentStatus.status == AppUpdateStatusManager.Status.Downloading); + } + @Override public void enableAndroidBeam() { NfcHelper.setAndroidBeam(this, app.packageName); diff --git a/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java b/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java index 726b1496f..8e0f5e926 100644 --- a/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java +++ b/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java @@ -51,6 +51,8 @@ import java.io.IOException; * {@code {@link #stopSelf(int)}}, so {@code Intent}s are sometimes redelivered even * though they are no longer valid. {@link #onStartCommand(Intent, int, int)} checks * first that the incoming {@code Intent} is not an invalid, redelivered {@code Intent}. + * {@link #isPendingInstall(String)} and other checks are used to check whether to + * process the redelivered {@code Intent} or not. *

* The canonical URL for the APK file to download is also used as the unique ID to * represent the download itself throughout F-Droid. This follows the model @@ -471,25 +473,12 @@ public class InstallManagerService extends Service { return pendingInstalls.contains(urlString); } - /** - * Look up by {@code packageName} whether it is a Pending Install. - * - * @see #isPendingInstall(String) - */ - public static boolean isPendingInstall(Context context, String packageName) { - if (pendingInstalls == null) { - pendingInstalls = getPendingInstalls(context); - } - return pendingInstalls.getAll().values().contains(packageName); - } - /** * Mark a given APK as in the process of being installed, with * the {@code urlString} of the download used as the unique ID, * and the file hash used to verify that things are the same. * * @see #isPendingInstall(String) - * @see #isPendingInstall(Context, String) */ public static void putPendingInstall(Context context, String urlString, String packageName) { if (pendingInstalls == null) { diff --git a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java index 150aabbc5..b59403ac8 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java +++ b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java @@ -43,7 +43,6 @@ import org.fdroid.fdroid.data.ApkProvider; import org.fdroid.fdroid.data.App; import org.fdroid.fdroid.data.InstalledAppProvider; import org.fdroid.fdroid.data.RepoProvider; -import org.fdroid.fdroid.installer.InstallManagerService; import org.fdroid.fdroid.privileged.views.AppDiff; import org.fdroid.fdroid.privileged.views.AppSecurityPermissions; import org.fdroid.fdroid.views.main.MainActivity; @@ -58,6 +57,8 @@ public class AppDetailsRecyclerViewAdapter public interface AppDetailsRecyclerViewAdapterCallbacks { + boolean isAppDownloading(); + void enableAndroidBeam(); void disableAndroidBeam(); @@ -487,7 +488,7 @@ public class AppDetailsRecyclerViewAdapter buttonSecondaryView.setOnClickListener(onUnInstallClickListener); buttonPrimaryView.setText(R.string.menu_install); buttonPrimaryView.setVisibility(versions.size() > 0 ? View.VISIBLE : View.GONE); - if (InstallManagerService.isPendingInstall(context, app.packageName)) { + if (callbacks.isAppDownloading()) { buttonPrimaryView.setText(R.string.downloading); buttonPrimaryView.setEnabled(false); buttonLayout.setVisibility(View.GONE); diff --git a/app/src/test/java/org/fdroid/fdroid/views/AppDetailsAdapterTest.java b/app/src/test/java/org/fdroid/fdroid/views/AppDetailsAdapterTest.java index 1a829fddf..c072af430 100644 --- a/app/src/test/java/org/fdroid/fdroid/views/AppDetailsAdapterTest.java +++ b/app/src/test/java/org/fdroid/fdroid/views/AppDetailsAdapterTest.java @@ -101,6 +101,10 @@ public class AppDetailsAdapterTest extends FDroidProviderTest { } private final AppDetailsRecyclerViewAdapter.AppDetailsRecyclerViewAdapterCallbacks dummyCallbacks = new AppDetailsRecyclerViewAdapter.AppDetailsRecyclerViewAdapterCallbacks() { // NOCHECKSTYLE LineLength + @Override + public boolean isAppDownloading() { + return false; + } @Override public void enableAndroidBeam() { From 90acd75b90549d1cdc700672a6bb21cc1895f75a Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 30 Jul 2018 18:03:12 +0200 Subject: [PATCH 07/10] purge broken, semi-used root filtering preference RequiresRoot should become an Anti-Feature or or something like that. Having it a one-off makes it too brittle fdroid/fdroidclient#928 --- app/src/basic/res/xml/preferences.xml | 4 -- .../java/org/fdroid/fdroid/AppFilter.java | 41 ------------------- .../java/org/fdroid/fdroid/FDroidApp.java | 10 ----- .../java/org/fdroid/fdroid/Preferences.java | 30 -------------- .../main/java/org/fdroid/fdroid/data/App.java | 13 +++--- .../apps/StandardAppListItemController.java | 2 +- .../views/fragments/PreferencesFragment.java | 5 --- app/src/main/res/values-ar/strings.xml | 2 - app/src/main/res/values-be/strings.xml | 2 - app/src/main/res/values-ca/strings.xml | 2 - app/src/main/res/values-cs/strings.xml | 2 - app/src/main/res/values-da/strings.xml | 2 - app/src/main/res/values-de/strings.xml | 2 - app/src/main/res/values-eo/strings.xml | 2 - app/src/main/res/values-es/strings.xml | 2 - app/src/main/res/values-eu/strings.xml | 2 - app/src/main/res/values-fa/strings.xml | 2 - app/src/main/res/values-fi/strings.xml | 2 - app/src/main/res/values-fr/strings.xml | 2 - app/src/main/res/values-gl/strings.xml | 2 - app/src/main/res/values-he/strings.xml | 2 - app/src/main/res/values-hu/strings.xml | 2 - app/src/main/res/values-id/strings.xml | 2 - app/src/main/res/values-is/strings.xml | 2 - app/src/main/res/values-it/strings.xml | 2 - app/src/main/res/values-ja/strings.xml | 2 - app/src/main/res/values-ko/strings.xml | 2 - app/src/main/res/values-nb/strings.xml | 2 - app/src/main/res/values-nl-rBE/strings.xml | 2 - app/src/main/res/values-nl/strings.xml | 2 - app/src/main/res/values-pl/strings.xml | 2 - app/src/main/res/values-pt-rBR/strings.xml | 2 - app/src/main/res/values-pt-rPT/strings.xml | 2 - app/src/main/res/values-ro/strings.xml | 2 - app/src/main/res/values-ru/strings.xml | 2 - app/src/main/res/values-sc/strings.xml | 2 - app/src/main/res/values-sl/strings.xml | 2 - app/src/main/res/values-sq/strings.xml | 2 - app/src/main/res/values-sv/strings.xml | 2 - app/src/main/res/values-te/strings.xml | 2 - app/src/main/res/values-tr/strings.xml | 2 - app/src/main/res/values-ug/strings.xml | 1 - app/src/main/res/values-uk/strings.xml | 2 - app/src/main/res/values-vi/strings.xml | 2 - app/src/main/res/values-zh-rCN/strings.xml | 2 - app/src/main/res/values-zh-rTW/strings.xml | 2 - app/src/main/res/values/strings.xml | 2 - app/src/main/res/xml/preferences.xml | 4 -- .../org/fdroid/fdroid/PreferencesTest.java | 2 - 49 files changed, 8 insertions(+), 182 deletions(-) delete mode 100644 app/src/main/java/org/fdroid/fdroid/AppFilter.java diff --git a/app/src/basic/res/xml/preferences.xml b/app/src/basic/res/xml/preferences.xml index dd194a299..202aee8db 100644 --- a/app/src/basic/res/xml/preferences.xml +++ b/app/src/basic/res/xml/preferences.xml @@ -81,10 +81,6 @@ android:title="@string/show_incompat_versions" android:defaultValue="false" android:key="incompatibleVersions"/> - 0 && !Preferences.get().showAppsWithAntiFeatures()) { // NOPMD NOCHECKSTYLE LineLength - return true; - } - return false; - } - -} diff --git a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java index 640d3f6f1..6844d0934 100644 --- a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java +++ b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java @@ -373,16 +373,6 @@ public class FDroidApp extends Application { InstalledAppProviderService.compareToPackageManager(this); - // If the user changes the preference to do with filtering rooted apps, - // it is easier to just notify a change in the app provider, - // so that the newly updated list will correctly filter relevant apps. - preferences.registerAppsRequiringRootChangeListener(new Preferences.ChangeListener() { - @Override - public void onPreferenceChange() { - getContentResolver().notifyChange(AppProvider.getContentUri(), null); - } - }); - // If the user changes the preference to do with filtering anti-feature apps, // it is easier to just notify a change in the app provider, // so that the newly updated list will correctly filter relevant apps. diff --git a/app/src/main/java/org/fdroid/fdroid/Preferences.java b/app/src/main/java/org/fdroid/fdroid/Preferences.java index ac282b7ef..21dff8f23 100644 --- a/app/src/main/java/org/fdroid/fdroid/Preferences.java +++ b/app/src/main/java/org/fdroid/fdroid/Preferences.java @@ -81,7 +81,6 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh public static final String PREF_UPDATE_NOTIFICATION_ENABLED = "updateNotify"; public static final String PREF_THEME = "theme"; public static final String PREF_SHOW_INCOMPAT_VERSIONS = "incompatibleVersions"; - public static final String PREF_SHOW_ROOT_APPS = "rooted"; public static final String PREF_SHOW_ANTI_FEATURE_APPS = "showAntiFeatureApps"; public static final String PREF_FORCE_TOUCH_APPS = "ignoreTouchscreen"; public static final String PREF_PROMPT_TO_SEND_CRASH_REPORTS = "promptToSendCrashReports"; @@ -155,12 +154,10 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh DateUtils.HOUR_IN_MILLIS, }; - private boolean showAppsRequiringRoot; private boolean showAppsWithAntiFeatures; private final Map initialized = new HashMap<>(); - private final List showAppsRequiringRootListeners = new ArrayList<>(); private final List showAppsRequiringAntiFeaturesListeners = new ArrayList<>(); private final List localRepoNameListeners = new ArrayList<>(); private final List localRepoHttpsListeners = new ArrayList<>(); @@ -527,20 +524,6 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh return preferences.getBoolean(PREF_ALLOW_PUSH_REQUESTS, IGNORED_B); } - /** - * This is cached as it is called several times inside app list adapters. - * Providing it here means the shared preferences file only needs to be - * read once, and we will keep our copy up to date by listening to changes - * in PREF_SHOW_ROOT_APPS. - */ - public boolean showAppsRequiringRoot() { - if (!isInitialized(PREF_SHOW_ROOT_APPS)) { - initialize(PREF_SHOW_ROOT_APPS); - showAppsRequiringRoot = preferences.getBoolean(PREF_SHOW_ROOT_APPS, IGNORED_B); - } - return showAppsRequiringRoot; - } - /** * This is cached as it is called several times inside app list adapters. * Providing it here means the shared preferences file only needs to be @@ -560,14 +543,6 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh return showAppsWithAntiFeatures; } - public void registerAppsRequiringRootChangeListener(ChangeListener listener) { - showAppsRequiringRootListeners.add(listener); - } - - public void unregisterAppsRequiringRootChangeListener(ChangeListener listener) { - showAppsRequiringRootListeners.remove(listener); - } - public void registerAppsRequiringAntiFeaturesChangeListener(ChangeListener listener) { showAppsRequiringAntiFeaturesListeners.add(listener); } @@ -590,11 +565,6 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh uninitialize(key); switch (key) { - case PREF_SHOW_ROOT_APPS: - for (ChangeListener listener : showAppsRequiringRootListeners) { - listener.onPreferenceChange(); - } - break; case PREF_SHOW_ANTI_FEATURE_APPS: for (ChangeListener listener : showAppsRequiringAntiFeaturesListeners) { listener.onPreferenceChange(); diff --git a/app/src/main/java/org/fdroid/fdroid/data/App.java b/app/src/main/java/org/fdroid/fdroid/data/App.java index 75d7d5b1b..a1b02e49e 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/App.java +++ b/app/src/main/java/org/fdroid/fdroid/data/App.java @@ -23,7 +23,6 @@ import com.fasterxml.jackson.annotation.JacksonInject; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import org.apache.commons.io.filefilter.RegexFileFilter; -import org.fdroid.fdroid.AppFilter; import org.fdroid.fdroid.FDroidApp; import org.fdroid.fdroid.Preferences; import org.fdroid.fdroid.Utils; @@ -1008,15 +1007,17 @@ public class App extends ValueObject implements Comparable, Parcelable { boolean canUpdate = hasUpdates(); AppPrefs prefs = getPrefs(context); boolean wantsUpdate = !prefs.ignoreAllUpdates && prefs.ignoreThisUpdate < suggestedVersionCode; - return canUpdate && wantsUpdate && !isFiltered(); + return canUpdate && wantsUpdate && !isDisabledByAntiFeatures(); } /** - * Whether the app is filtered or not based on AntiFeatures and root - * permission (set in the Settings page) + * @return if the given app should be filtered out based on the + * {@link Preferences#PREF_SHOW_ANTI_FEATURE_APPS Show Anti-Features Setting} */ - public boolean isFiltered() { - return new AppFilter().filter(this); + public boolean isDisabledByAntiFeatures() { + return this.antiFeatures != null + && this.antiFeatures.length > 0 + && !Preferences.get().showAppsWithAntiFeatures(); } @Nullable diff --git a/app/src/main/java/org/fdroid/fdroid/views/apps/StandardAppListItemController.java b/app/src/main/java/org/fdroid/fdroid/views/apps/StandardAppListItemController.java index dcfa73e9d..cbf884af7 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/apps/StandardAppListItemController.java +++ b/app/src/main/java/org/fdroid/fdroid/views/apps/StandardAppListItemController.java @@ -48,7 +48,7 @@ public class StandardAppListItemController extends AppListItemController { private boolean shouldShowInstall(@NonNull App app) { boolean installable = app.canAndWantToUpdate(activity) || !app.isInstalled(activity.getApplicationContext()); - boolean shouldAllow = app.compatible && !app.isFiltered(); + boolean shouldAllow = app.compatible && !app.isDisabledByAntiFeatures(); return installable && shouldAllow; } diff --git a/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java b/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java index 62f29f63e..2e4a7c2a8 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java +++ b/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java @@ -65,7 +65,6 @@ public class PreferencesFragment extends PreferenceFragment Preferences.PREF_OVER_DATA, Preferences.PREF_UPDATE_INTERVAL, Preferences.PREF_UPDATE_NOTIFICATION_ENABLED, - Preferences.PREF_SHOW_ROOT_APPS, Preferences.PREF_SHOW_ANTI_FEATURE_APPS, Preferences.PREF_SHOW_INCOMPAT_VERSIONS, Preferences.PREF_THEME, @@ -249,10 +248,6 @@ public class PreferencesFragment extends PreferenceFragment checkSummary(key, R.string.show_incompat_versions_on); break; - case Preferences.PREF_SHOW_ROOT_APPS: - checkSummary(key, R.string.show_root_apps_on); - break; - case Preferences.PREF_SHOW_ANTI_FEATURE_APPS: checkSummary(key, R.string.show_anti_feature_apps_on); break; diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 56be345d5..77cdfe52d 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -502,8 +502,6 @@ إضافة مستودع مِرآة ترتيب حسب - إضافة التطبيقات التي تحتاج إلى التصريحات الجذرية - إظهار التطبيقات التي تتطلّب التصريحات الجذرية إضافة التطبيقات التي تتطلّب لمس الشاشة الإخفاء عن طريق زر البحث الضغط المُطوّل على زر البحث يُمكّن مِن إخفاء التطبيق diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 5d67aa896..53692a686 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -562,8 +562,6 @@ Liberapay Ваша камеры не падтрымлівае аўтафокус. Сканаванне кода можа быць абцяжаранае. - Паказваць root-прыкладанні - Паказваць прыкладанні, які патрабуюць root-прывілей Паказваць прыкладанні для сэнсарнага экрана Паказваць прыкладанні, якія патрабуюць сэнсарны экран незалежна ад наяўнасці апаратнай падтрымкі diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 7dd8014ac..fc5ba2577 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -499,7 +499,6 @@ Liberapay - Mostra aplicacions que requereixen privilegis d\'administrador Recorda com restaurar-ho En una situació de pànic, això esborrarà %1$s del menú. Només es podrà restaurar escrivint \"%2$d\" a la falsa aplicació %3$s. @@ -516,7 +515,6 @@ La signatura de seguretat de l\'aplicació és feble Aquesta aplicació té un problema de seguretat conegut - Inclou aplicacions amb accés d\'administrador Inclou aplicacions amb característiques indesitjades Mostra aplicacions que requereixen característiques indesitjades Inclou aplicacions per pantalla tàctil diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 0a77dc3cc..5ca345536 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -537,8 +537,6 @@ Liberapay Vypadá to, že váš fotoaparát nemá automatické zaostřování. Oskenování kódu může být obtížné. - Zahrnout aplikace vyžadující root přístup - Zobrazit aplikace které vyžadují práva root Zahrnout aplikace s funkcemi které nejsou v zájmu uživatele Zobrazit aplikace které vyžadují funkce které nejsou v zájmu uživatele Zahrnout aplikace pro dotykovou obrazovku diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 6089834e7..259542624 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -491,6 +491,4 @@ Denne app har en svag sikkerhedssignatur Denne app indeholder en kendt sårbarhed - Inkluder root-apps - Vis apps som kræver root-rettigheder diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 4ef66334e..4c44181da 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -522,8 +522,6 @@ Wiederherstellungsmethode merken Ihre Kamera scheint keinen Autofokus zu haben. Es könnte schwierig sein, den Code zu scannen. - Root-Apps einbeziehen - Apps anzeigen, die Root-Berechtigungen benötigen Mirror hinzufügen %1$s ist bereits eingerichtet, dies fügt neue Schlüsselinformationen hinzu. %1$s ist bereits eingestellt, bestätigen Sie, dass Sie erneut aktivieren möchten. diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index eb848f48a..a2fed0039 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -515,8 +515,6 @@ Liberapay Via fotilo ne havas memfokuson. Povas esti malfacile skani la kodon. - Inkluzivi ĉefuzantajn aplikaĵojn - Montri aplikaĵojn, kiuj postulas ĉefuzantan aliron (root) Inkluzivi aplikaĵojn kun fiebloj Montri aplikaĵojn, kiuj enhavas nedeziratajn eblojn Inkluzivi tuŝekranajn aplikaĵojn diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 5adf98b72..dcc3c9f0e 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -536,8 +536,6 @@ %1$s ya está configurado y habilitado. Primero borra %1$s para agregar este ya que hay un conflicto de claves. Esto es una copia de %1$s, ¿agregarlo como réplica? - Incluir aplicaciones con acceso de administrador - Listar aplicaciones que requieren privilegios de administrador Incluir aplicaciones controvertidas Listar aplicaciones que requieren características controvertidas Incluir aplicaciones de pantalla táctil diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 2a1ff2a85..8ee62d3b0 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -547,8 +547,6 @@ Liberapay Zure kamerak ez du fokatze automatikorako gaitasunik. Kodea eskaneatzea zaila izan daiteke. - Sartu root aplikazioak - Erakutsi root baimenak behar dituzten aplikazioak Sartu ezaugarri zalantzagarriak dituzten aplikazioak Erakutsi ezaugarri zalantzagarriak behar dituzten aplikazioak Sartu ukimen pantaila darabilten aplikazioak diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 906ad2aee..b0190fead 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -517,8 +517,6 @@ این کاره یک امضای امنیتی ضعیف دارد این کاره یک آسیب‌پذیری امنیتی شناخته‌شده دارد - شامل کاره‌های ریشه‌ای - نمایش کاره‌هایی که نیاز به دسترسی ریشه دارند شامل کاره‌های ضدویژگی‌دار نمایش کاره‌هایی که نیاز به ضدویژگی دارند شامل کاره‌های لمسی diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 3e3058507..0faf5975a 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -480,8 +480,6 @@ Tällä sovelluksella on heikko turvallisuusallekirjoitus Tämä sovellus sisältää tunnetun haavoittuvuuden - Sisällytä root-sovellukset - Näytä sovellukset, jotka vaativat root-oikeudet Sisällytä anti-ominaisuus -sovellukset Näytä sovellukset, jotka vaativat anti-ominaisuuksia Sisällytä kosketusnäyttösovellukset diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index d9cd38866..e58d900e5 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -526,8 +526,6 @@ Appuyer longtemps sur le bouton de recherche masquera l\'application Votre appareil-photo n’a pas de mise au point automatique. Il sera peut-être difficile de scanner le code. - Inclure les applications root - Afficher les applications nécessitant les privilèges root Ajouter un miroir Veuillez d\'abord supprimer %1$s pour pouvoir l\'ajouter avec la clé en conflit. Il s\'agit d\'une copie de %1$s, l\'ajouter comme miroir ? diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index e4441fd6a..095a9e5e5 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -538,8 +538,6 @@ Este aplicativo ten unha sinatura de seguridade feble Esta aplicación contén unha vulnerabilidade de seguridade coñecida - Incluir aplicativos con permiso de administrador - Amosar aplicativos que requiren privilexios de administrador Incluir aplicativos con anti-funcionalidades Amosar aplicativos que requiren de anti-funcionalidades Incluir aplicativos de pantalla táctil diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index c8d3c5855..e3fb90410 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -532,8 +532,6 @@ Liberapay כנראה שלמצלמה שלך אין מיקוד אוטומטי. סריקת הקוד עשויה להוות מכשול. - לכלול גירסאות שדורשות גישת על - הצגת יישומונים שדורשים גישת על למכשיר לכלול יישומונים שמכילים תכונות שליליות הצגת יישומונים שדורשים תכונות שליליות לכלול יישומוני מסך מגע diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 7204634da..5e77863b6 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -473,7 +473,6 @@ Ennek az alkalmazásnak gyönge a biztonsági aláírása Ez az alkalmazás ismert biztonsági rést tartalmaz - Root jogot igénylő alkalmazások belefoglalása Adatkapcsolaton keresztül A(z) %1$s már be lett állítva, ez új kulcsinformációkat fog hozzáadni. A(z) %1$s már be lett állítva, erősítse meg, hogy újra engedélyezni akarja. @@ -481,7 +480,6 @@ Először törölje a(z) %1$s alkalmazást, hogy hozzáadhassa egy ütköző kulccsal. Liberapay - Azon alkalmazások megjelenítése, melyekhez root jogosultság szükséges Előnytelen funkciókkal rendelkező alkalmazások belefoglalása Azon alkalmazások megjelenítése, melyek előnytelen funkciókkal rendelkeznek Érintőképernyős alkalmazások belefoglalása diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index d673f0f7b..362ff8e12 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -514,8 +514,6 @@ Ini adalah salinan dari %1$s, tambahkan sebagai mirror? Liberapay - Termasuk apl root - Tampilkan apl yg butuh akses root Termasuk apl anti-fitur Tampilkan apl yg butuh anti-fitur Termasuk apl layar sentuh diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index bd0ec2409..f825a1a7a 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -561,8 +561,6 @@ Liberapay Það lítur út eins og myndavélin þín sé ekki með sjálfvirkan fókus. Það gæti orðið vandkvæðum bundið að skanna kóðann. - Hafa með rótaraðgangsforrit - Birta forrit sem þurfa rótaraðgang Hafa með forrit með ókostum Birta forrit með óæskilegum eiginleikum Hafa með forrit sem þurfa snertiskjá diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 3e91f6ccb..85e96a6b3 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -532,8 +532,6 @@ Questa è una copia di %1$s, aggiungerla come mirror? Liberapay - Includi app di root - Mostra le app che richiedono privilegi di root Includi app con anti-caratteristiche Mostra app che richiedono anti-caratteristiche Includi app tattili diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 62451f066..d8f0329f0 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -489,8 +489,6 @@ %1$sはすでに設定済みで有効です。 競合する鍵でこのリポジトリを追加するためには、先に%1$sを削除してください。 これは%1$sの複製です。ミラーとして追加しますか? - root権限の使用が必要なアプリ - root権限の使用を必要とするアプリを表示します 好ましくない機能の使用が必要なアプリ 好ましくない機能の使用を必要とするアプリを表示します タッチスクリーンの使用が必要なアプリ diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 38c089dab..60afb2365 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -479,8 +479,6 @@ %1$s은(는) 이미 설정되어 있으며, 활성화됩니다. 이것과 충돌하는 키를 추가하려면 먼저 %1$s을(를) 삭제합니다. 이것은 %1$s의 복사본입니다, 그것을 미러로 추가하시겠습니까? - 루트 앱을 포함 - 루트 권한이 필요한 앱을 보여주기 안티 기능 앱을 포함 안티 기능이 필요한 앱을 보여주기 터치스크린 앱을 포함 diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 6cdc5f021..e5d2e7a93 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -528,8 +528,6 @@ Liberapay Kameraet ditt mangler autofokus. Det kan vise seg vanskelig å skanne koden. - Inkluder root-programmer - Vis programmer som krever root-tilgang Inkluder antifunksjons-programmer Vis programmer som krever anti-funksjoner Inkluder pekeskjermsprogrammer diff --git a/app/src/main/res/values-nl-rBE/strings.xml b/app/src/main/res/values-nl-rBE/strings.xml index c6d65aa1f..763d1914f 100644 --- a/app/src/main/res/values-nl-rBE/strings.xml +++ b/app/src/main/res/values-nl-rBE/strings.xml @@ -238,8 +238,6 @@ Compatibiliteit van app Incompatibele versies tonen Toont app-versies die niet compatibel zijn met uw apparaat - Root-apps tonen - Toont apps die root-privileges vereisen Apps met antifuncties tonen Toont apps die antifuncties bevatten Aanraakschermapps tonen diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index ee6cb03b0..2fafd3a0e 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -508,8 +508,6 @@ Liberapay Je camera lijkt niet over autofocus te beschikken. Het scannen van de code kan moeilijk zijn. - Root-apps tonen - Toon apps die root-privileges vereisen Apps met antifuncties tonen Toon apps die antifuncties bevatten Aanraakschermapps tonen diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 7fe993136..69d92eb83 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -538,8 +538,6 @@ Liberapay Twój aparat nie posiada autofokusu. Mogą wystąpić trudności ze zeskanowaniem kodu. - Uwzględnij aplikacje roota - Pokaż aplikacje wymagające do działania uprawnień roota Uwzględnij (trochę) niefajne aplikacje Pokaż aplikacje zawierające niepożądane funkcje Uwzględnij aplikacje dotykowe diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index cb46f2019..34537f464 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -543,8 +543,6 @@ Sua câmera não parece ter focagem automática. Pode ser difícil escanear o código. Adicionar mirror Esta é uma copia de %1$s, adicionar ele como um mirror? - Incluir aplicativos root - Mostrar aplicativos que requerem privilégios root Incluir aplicativos antifraude Incluir aplicativos touchscreen Mostrar aplicativos touchscreen independente do suporte de hardware diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 6eaf98c0e..948be240a 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -545,8 +545,6 @@ Esta é uma cópia de %1$s, deseja adicionar como \'mirror\'? Liberapay - Incluir aplicações \'root\' - Mostrar aplicações que necessitam de acesso \'root\' Incluir aplicações com anti-funcionalidades Mostrar aplicações que necessitem de anti-funcionalidades Incluir aplicações \'touchscreen\' diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 41888d0ff..799321f72 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -499,8 +499,6 @@ Camera foto a dispozitivului nu pare să suporte focalizare automată. Ar putea fi dificil să se scaneze codul. Liberapay - Include root - Se listează și aplicațiile ce necesită acces de tip administrator (root) Include caracteristici periculoase Se listează și aplicațiile ce prezintă caracteristici periculoase (ex. urmărire) Include ecran tactil diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index c8569da76..c260ef90e 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -526,8 +526,6 @@ Длительное нажатие кнопки поиска скроет приложение Ваша камера не поддерживает автофокус. Сканирование кода может быть затруднено. - Включить root-приложения - Показать приложения, требующие привилегий root Добавить зеркало Это копия %1$s, добавить ее как зеркало? Включить приложения с сомнительным функционалом diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml index fc04160d2..a87c1dc3e 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -546,8 +546,6 @@ Liberapay Paret chi sa fotocàmera tua non tèngiat su focus automàticu. Diat pòdere èssere difìtzile a iscansire su còdighe. - Inclue sas aplicatziones \"root\" - Ammustra sas aplicatziones chi tenent bisòngiu de sos privilègios de root Inclue sas aplicatziones cun anti-funtzionalidades Ammustra sas aplicatziones chi tenent bisòngiu de anti-funtzionalidades Inclue sas aplicatziones chi impreant s\'ischermu tàtile diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index f6d577cf5..ea04b746b 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -232,8 +232,6 @@ Pokaži dodatne informacije in omogoči dodatne nastavitve Pokaži verzije aplikacij, ki so nekompatibilne z napravo - Vključi root aplikacije - Prikaži aplikacije, ki zahtevajo root dostop Vključi aplikcije z proti-lastnostmi Vključi aplikacije, ki potrebujejo zaslone na dotik Lokalni vir aplikacij diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml index e88146d8b..a32e60c5a 100644 --- a/app/src/main/res/values-sq/strings.xml +++ b/app/src/main/res/values-sq/strings.xml @@ -243,8 +243,6 @@ Përshtatja e Aplikacioneve Përfshije verzione jo përshtatshme Shfaqe verzione të aplikacioneve që janë nuk përshtaten me pajisjen tuaj - Përfshije aplikacionet rrënjë - Shfaqe aplikacionet që kërkojnë privilegjet rrënjë Përfshije aplikacionet kundër-veçori Shfaqe aplikacione që kërkojnë kundër-veçori Përfshije aplikacionet me gjurmë gishtore diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index a56a95172..8a46ffbc9 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -518,8 +518,6 @@ Denna app har en svag säkerhetssignatur Denna app innehåller en känd säkerhetsårbarhet - Inkludera root-appar - Visa appar som kräver root-privilegier Inkludera mot-funktionsappar Vis appar som kräver mot-funktioner Inkludera pekskärmsappar diff --git a/app/src/main/res/values-te/strings.xml b/app/src/main/res/values-te/strings.xml index 9025fcbf5..ef8d3dc1d 100644 --- a/app/src/main/res/values-te/strings.xml +++ b/app/src/main/res/values-te/strings.xml @@ -202,8 +202,6 @@ అనువర్తన అనుకూలత సరిపడలేని వెర్షన్లను చేర్చండి - రూట్ అనువర్తనాలను చేర్చండి - రూట్ అధికారాలు అవసరమయ్యే అనువర్తనాలను చూపించు టచ్స్క్రీన్ అనువర్తనాలను చేర్చండి స్థానిక రెపో F- Droid మారడానికి సిద్ధంగా ఉంది diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 78c01c525..b4ccb5b97 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -521,8 +521,6 @@ Liberapay Kameranızın kendiliğinden odaklanması yok gibi görünüyor. Kodu taramak zor olabilir. - Kök uygulamalarını içer - Kök yetkileri gerektiren uygulamaları göster Karşıt-özellikli uygulamaları içer Karşıt-özellikler gerektiren uygulamaları göster Dokunmatik ekran uygulamalarını içer diff --git a/app/src/main/res/values-ug/strings.xml b/app/src/main/res/values-ug/strings.xml index 29a692bd7..9ee9ace16 100644 --- a/app/src/main/res/values-ug/strings.xml +++ b/app/src/main/res/values-ug/strings.xml @@ -215,7 +215,6 @@ ئىقتىدار-قارشى قوشۇمچە ئۇچۇرلانى كۆرسەت ۋە قوشۇمچە تەڭشەكلەرنى قوزغات - يىلتىز ھۇقۇقىنى تەلەپ قىلىدىغان ئۇيغۇلىمىلارنى كۆرسەت ئىقتىدار-چەكلەش ئۇيغۇلىمىلىرىنى ئۆز ئىچىگە ئالىدۇ يەرلىك ئامبار ھازىرقى ئامبار ئۆچۈرۈلىۋاتىدۇ… diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index cd8b1aab6..281189970 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -541,8 +541,6 @@ %1$s вже налаштовано, підтвердьте, що бажаєте наново увімкнути. %1$s вже налаштовано і увімкнуто. Спершу видаліть %1$s, аби додати його з конфліктним ключем. - Увімкнути root додатки - Показати додатки, які потребують root привілеїв Поділитися репозиторієм Використовувати Bluetooth Точку доступу Wi-Fi увімкнуто diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 5af81201d..cf328dbf5 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -493,8 +493,6 @@ Ứng dụng này có chữ kí bảo mật yếu Ứng dụng này có lỗ hổng bảo mật đã bị phát hiện - Hiện ứng dụng root - Hiện các ứng dụng cần quyền root Hiện ứng dụng có tính năng không mong muốn Hiện các ứng dụng có một số tính năng không mong muốn Hiện ứng dụng cảm ứng diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index c965faf35..c361cee7f 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -478,8 +478,6 @@ 长按搜索按钮将隐藏此应用 您的相机似乎没有自动对焦。扫描二维码可能较为困难。 - 包括需 root 的应用 - 显示需要 root 权限的应用程序 包括带有 anti-feature 的应用 显示需要 anti-feature 的应用程序 添加镜像 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 8da7cacb1..3f61f7f28 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -500,8 +500,6 @@ Liberapay 您的相機似乎沒有自動對焦。掃描代碼可能會很困難。 - 包括 root 應用程式 - 顯示需要 root 授權的應用程式 包括反特徵應用程式 顯示需要反特徵的應用程式 包括觸控式螢幕的應用程式 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 60ff065fe..a39e8637d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -236,8 +236,6 @@ This often occurs with apps installed via Google Play or other sources, if they App compatibility Include incompatible versions Show app versions that are incompatible with the device - Include root apps - Show apps that require root privileges Include anti-feature apps Show apps that require anti-features Include touchscreen apps diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 846044d13..fa5ff6220 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -81,10 +81,6 @@ android:title="@string/show_incompat_versions" android:defaultValue="false" android:key="incompatibleVersions"/> - Date: Mon, 30 Jul 2018 15:46:58 +0200 Subject: [PATCH 08/10] show "Anti-features" in list view when app is filtered closes fdroid/fdroidclient#1533 --- .../views/apps/StandardAppListItemController.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/views/apps/StandardAppListItemController.java b/app/src/main/java/org/fdroid/fdroid/views/apps/StandardAppListItemController.java index cbf884af7..a35d64b32 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/apps/StandardAppListItemController.java +++ b/app/src/main/java/org/fdroid/fdroid/views/apps/StandardAppListItemController.java @@ -4,7 +4,6 @@ import android.app.Activity; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.View; - import org.fdroid.fdroid.AppUpdateStatusManager; import org.fdroid.fdroid.R; import org.fdroid.fdroid.data.App; @@ -12,9 +11,11 @@ import org.fdroid.fdroid.data.App; /** * Used for search results or for category lists. * Shows an inline download button, and also (if appropriate): - * * Whether the app is incompatible. - * * Version that app can be upgraded to. - * * Installed version. + *

    + *
  • Whether the app is incompatible + *
  • Version that app can be upgraded to + *
  • Installed version + *
*/ public class StandardAppListItemController extends AppListItemController { public StandardAppListItemController(Activity activity, View itemView) { @@ -35,6 +36,8 @@ public class StandardAppListItemController extends AppListItemController { private CharSequence getStatusText(@NonNull App app) { if (!app.compatible) { return activity.getString(R.string.app_incompatible); + } else if (app.isDisabledByAntiFeatures()) { + return activity.getString(R.string.antifeatures); } else if (app.isInstalled(activity.getApplicationContext())) { if (app.canAndWantToUpdate(activity)) { return activity.getString(R.string.app_version_x_available, app.getSuggestedVersionName()); From 3a501c9eace999da885af9b7150b940079276c38 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 30 Jul 2018 16:03:24 +0200 Subject: [PATCH 09/10] show PendingInstall and Installing in the Updates tab --- .../java/org/fdroid/fdroid/views/updates/UpdatesAdapter.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/fdroid/fdroid/views/updates/UpdatesAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/updates/UpdatesAdapter.java index 7489c28a8..cf5594f65 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/updates/UpdatesAdapter.java +++ b/app/src/main/java/org/fdroid/fdroid/views/updates/UpdatesAdapter.java @@ -99,7 +99,9 @@ public class UpdatesAdapter extends RecyclerView.Adapter Date: Tue, 31 Jul 2018 11:49:29 +0200 Subject: [PATCH 10/10] hide "Include touchscreen apps" pref on devices with touchscreen closes fdroid/fdroidclient#1438 --- app/src/basic/res/xml/preferences.xml | 3 ++- .../fdroid/views/fragments/PreferencesFragment.java | 10 +++++++++- app/src/main/res/xml/preferences.xml | 3 ++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/src/basic/res/xml/preferences.xml b/app/src/basic/res/xml/preferences.xml index 202aee8db..c4d8280cb 100644 --- a/app/src/basic/res/xml/preferences.xml +++ b/app/src/basic/res/xml/preferences.xml @@ -76,7 +76,8 @@ android:entryValues="@array/themeValues"/> - + - +