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' diff --git a/app/src/basic/res/xml/preferences.xml b/app/src/basic/res/xml/preferences.xml index dd194a299..c4d8280cb 100644 --- a/app/src/basic/res/xml/preferences.xml +++ b/app/src/basic/res/xml/preferences.xml @@ -76,15 +76,12 @@ android:entryValues="@array/themeValues"/> </android.support.v7.preference.PreferenceCategory> - <android.support.v7.preference.PreferenceCategory android:title="@string/appcompatibility"> + <android.support.v7.preference.PreferenceCategory android:title="@string/appcompatibility" + android:key="pref_category_appcompatibility"> <SwitchPreference android:title="@string/show_incompat_versions" android:defaultValue="false" android:key="incompatibleVersions"/> - <SwitchPreference - android:title="@string/show_root_apps" - android:defaultValue="true" - android:key="rooted"/> <SwitchPreference android:title="@string/show_anti_feature_apps" android:defaultValue="false" diff --git a/app/src/main/java/org/fdroid/fdroid/AppDetails2.java b/app/src/main/java/org/fdroid/fdroid/AppDetails2.java index 328854bf4..7a1251258 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. + * <p> + * 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; } @@ -705,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/AppFilter.java b/app/src/main/java/org/fdroid/fdroid/AppFilter.java deleted file mode 100644 index 141fdc967..000000000 --- a/app/src/main/java/org/fdroid/fdroid/AppFilter.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2010-12 Ciaran Gultnieks, ciaran@ciarang.com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 3 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -package org.fdroid.fdroid; - -import org.fdroid.fdroid.data.App; - -public class AppFilter { - - // Return true if the given app should be filtered out based on user - // preferences, and false otherwise. - public boolean filter(App app) { - if (app.requirements != null && !Preferences.get().showAppsRequiringRoot()) { - for (String requirement : app.requirements) { - if ("root".equals(requirement)) { - return true; - } - } - } - if (app.antiFeatures != null && app.antiFeatures.length > 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<String, Boolean> initialized = new HashMap<>(); - private final List<ChangeListener> showAppsRequiringRootListeners = new ArrayList<>(); private final List<ChangeListener> showAppsRequiringAntiFeaturesListeners = new ArrayList<>(); private final List<ChangeListener> localRepoNameListeners = new ArrayList<>(); private final List<ChangeListener> 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<App>, 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/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} - * <p/> + * <p> * 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. + * <p> + * 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..8e0f5e926 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; @@ -52,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. * <p> * 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 @@ -95,7 +96,6 @@ public class InstallManagerService extends Service { private LocalBroadcastManager localBroadcastManager; private AppUpdateStatusManager appUpdateStatusManager; - private BroadcastReceiver broadcastReceiver; private boolean running = false; /** @@ -111,21 +111,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 +125,6 @@ public class InstallManagerService extends Service { @Override public void onDestroy() { running = false; - unregisterReceiver(broadcastReceiver); super.onDestroy(); } @@ -489,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/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 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..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. + * <ul> + * <li>Whether the app is incompatible + * <li>Version that app can be upgraded to + * <li>Installed version + * </ul> */ 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()); @@ -48,7 +51,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..884a8ce32 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 @@ -28,6 +28,7 @@ package org.fdroid.fdroid.views.fragments; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.support.v14.preference.PreferenceFragment; @@ -65,7 +66,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, @@ -157,11 +157,18 @@ public class PreferencesFragment extends PreferenceFragment languagePref.setEntries(languages.getAllNames()); languagePref.setEntryValues(languages.getSupportedLocales()); } + + if (getActivity().getPackageManager().hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)) { + PreferenceCategory category = (PreferenceCategory) findPreference("pref_category_appcompatibility"); + category.removePreference(findPreference(Preferences.PREF_FORCE_TOUCH_APPS)); + } } private void checkSummary(String key, int resId) { Preference pref = findPreference(key); - pref.setSummary(resId); + if (pref != null) { + pref.setSummary(resId); + } } private void entrySummary(String key) { @@ -249,10 +256,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/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<RecyclerView.ViewHolder * {@link org.fdroid.fdroid.AppUpdateStatusManager.Status#UpdateAvailable} are not interesting here. */ private boolean shouldShowStatus(AppUpdateStatusManager.AppUpdateStatus status) { - return status.status == AppUpdateStatusManager.Status.Downloading || + return status.status == AppUpdateStatusManager.Status.PendingInstall || + status.status == AppUpdateStatusManager.Status.Downloading || + status.status == AppUpdateStatusManager.Status.Installing || status.status == AppUpdateStatusManager.Status.Installed || status.status == AppUpdateStatusManager.Status.ReadyToInstall; } 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); 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 @@ <string name="repo_add_mirror">إضافة مستودع مِرآة</string> <string name="sort_search">ترتيب حسب</string> - <string name="show_root_apps">إضافة التطبيقات التي تحتاج إلى التصريحات الجذرية</string> - <string name="show_root_apps_on">إظهار التطبيقات التي تتطلّب التصريحات الجذرية</string> <string name="force_touch_apps">إضافة التطبيقات التي تتطلّب لمس الشاشة</string> <string name="hide_on_long_search_press_title">الإخفاء عن طريق زر البحث</string> <string name="hide_on_long_search_press_summary">الضغط المُطوّل على زر البحث يُمكّن مِن إخفاء التطبيق</string> 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 @@ <string name="menu_liberapay">Liberapay</string> <string name="warning_scaning_qr_code">Ваша камеры не падтрымлівае аўтафокус. Сканаванне кода можа быць абцяжаранае.</string> - <string name="show_root_apps">Паказваць root-прыкладанні</string> - <string name="show_root_apps_on">Паказваць прыкладанні, які патрабуюць root-прывілей</string> <string name="force_touch_apps">Паказваць прыкладанні для сэнсарнага экрана</string> <string name="force_touch_apps_on">Паказваць прыкладанні, якія патрабуюць сэнсарны экран незалежна ад наяўнасці апаратнай падтрымкі</string> 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 @@ <string name="menu_liberapay">Liberapay</string> - <string name="show_root_apps_on">Mostra aplicacions que requereixen privilegis d\'administrador</string> <string name="panic_hide_warning_title">Recorda com restaurar-ho</string> <string name="panic_hide_warning_message">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.</string> @@ -516,7 +515,6 @@ <string name="antidisabledalgorithmlist">La signatura de seguretat de l\'aplicació és feble</string> <string name="antiknownvulnlist">Aquesta aplicació té un problema de seguretat conegut</string> - <string name="show_root_apps">Inclou aplicacions amb accés d\'administrador</string> <string name="show_anti_feature_apps">Inclou aplicacions amb característiques indesitjades</string> <string name="show_anti_feature_apps_on">Mostra aplicacions que requereixen característiques indesitjades</string> <string name="force_touch_apps">Inclou aplicacions per pantalla tàctil</string> 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 @@ <string name="menu_liberapay">Liberapay</string> <string name="warning_scaning_qr_code">Vypadá to, že váš fotoaparát nemá automatické zaostřování. Oskenování kódu může být obtížné.</string> - <string name="show_root_apps">Zahrnout aplikace vyžadující root přístup</string> - <string name="show_root_apps_on">Zobrazit aplikace které vyžadují práva root</string> <string name="show_anti_feature_apps">Zahrnout aplikace s funkcemi které nejsou v zájmu uživatele</string> <string name="show_anti_feature_apps_on">Zobrazit aplikace které vyžadují funkce které nejsou v zájmu uživatele</string> <string name="force_touch_apps">Zahrnout aplikace pro dotykovou obrazovku</string> 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 @@ <string name="antidisabledalgorithmlist">Denne app har en svag sikkerhedssignatur</string> <string name="antiknownvulnlist">Denne app indeholder en kendt sårbarhed</string> - <string name="show_root_apps">Inkluder root-apps</string> - <string name="show_root_apps_on">Vis apps som kræver root-rettigheder</string> </resources> 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 @@ <string name="panic_hide_warning_title">Wiederherstellungsmethode merken</string> <string name="warning_scaning_qr_code">Ihre Kamera scheint keinen Autofokus zu haben. Es könnte schwierig sein, den Code zu scannen.</string> - <string name="show_root_apps">Root-Apps einbeziehen</string> - <string name="show_root_apps_on">Apps anzeigen, die Root-Berechtigungen benötigen</string> <string name="repo_add_mirror">Mirror hinzufügen</string> <string name="repo_exists_add_fingerprint">%1$s ist bereits eingerichtet, dies fügt neue Schlüsselinformationen hinzu.</string> <string name="repo_exists_enable">%1$s ist bereits eingestellt, bestätigen Sie, dass Sie erneut aktivieren möchten.</string> 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 @@ <string name="menu_liberapay">Liberapay</string> <string name="warning_scaning_qr_code">Via fotilo ne havas memfokuson. Povas esti malfacile skani la kodon.</string> - <string name="show_root_apps">Inkluzivi ĉefuzantajn aplikaĵojn</string> - <string name="show_root_apps_on">Montri aplikaĵojn, kiuj postulas ĉefuzantan aliron (root)</string> <string name="show_anti_feature_apps">Inkluzivi aplikaĵojn kun fiebloj</string> <string name="show_anti_feature_apps_on">Montri aplikaĵojn, kiuj enhavas nedeziratajn eblojn</string> <string name="force_touch_apps">Inkluzivi tuŝekranajn aplikaĵojn</string> 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 @@ <string name="repo_exists_and_enabled">%1$s ya está configurado y habilitado.</string> <string name="repo_delete_to_overwrite">Primero borra %1$s para agregar este ya que hay un conflicto de claves.</string> <string name="repo_exists_add_mirror">Esto es una copia de %1$s, ¿agregarlo como réplica?</string> - <string name="show_root_apps">Incluir aplicaciones con acceso de administrador</string> - <string name="show_root_apps_on">Listar aplicaciones que requieren privilegios de administrador</string> <string name="show_anti_feature_apps">Incluir aplicaciones controvertidas</string> <string name="show_anti_feature_apps_on">Listar aplicaciones que requieren características controvertidas</string> <string name="force_touch_apps">Incluir aplicaciones de pantalla táctil</string> 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 @@ <string name="menu_liberapay">Liberapay</string> <string name="warning_scaning_qr_code">Zure kamerak ez du fokatze automatikorako gaitasunik. Kodea eskaneatzea zaila izan daiteke.</string> - <string name="show_root_apps">Sartu root aplikazioak</string> - <string name="show_root_apps_on">Erakutsi root baimenak behar dituzten aplikazioak</string> <string name="show_anti_feature_apps">Sartu ezaugarri zalantzagarriak dituzten aplikazioak</string> <string name="show_anti_feature_apps_on">Erakutsi ezaugarri zalantzagarriak behar dituzten aplikazioak</string> <string name="force_touch_apps">Sartu ukimen pantaila darabilten aplikazioak</string> 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 @@ <string name="antidisabledalgorithmlist">این کاره یک امضای امنیتی ضعیف دارد</string> <string name="antiknownvulnlist">این کاره یک آسیبپذیری امنیتی شناختهشده دارد</string> - <string name="show_root_apps">شامل کارههای ریشهای</string> - <string name="show_root_apps_on">نمایش کارههایی که نیاز به دسترسی ریشه دارند</string> <string name="show_anti_feature_apps">شامل کارههای ضدویژگیدار</string> <string name="show_anti_feature_apps_on">نمایش کارههایی که نیاز به ضدویژگی دارند</string> <string name="force_touch_apps">شامل کارههای لمسی</string> 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 @@ <string name="antidisabledalgorithmlist">Tällä sovelluksella on heikko turvallisuusallekirjoitus</string> <string name="antiknownvulnlist">Tämä sovellus sisältää tunnetun haavoittuvuuden</string> - <string name="show_root_apps">Sisällytä root-sovellukset</string> - <string name="show_root_apps_on">Näytä sovellukset, jotka vaativat root-oikeudet</string> <string name="show_anti_feature_apps">Sisällytä anti-ominaisuus -sovellukset</string> <string name="show_anti_feature_apps_on">Näytä sovellukset, jotka vaativat anti-ominaisuuksia</string> <string name="force_touch_apps">Sisällytä kosketusnäyttösovellukset</string> 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 @@ <string name="hide_on_long_search_press_summary">Appuyer longtemps sur le bouton de recherche masquera l\'application</string> <string name="warning_scaning_qr_code">Votre appareil-photo n’a pas de mise au point automatique. Il sera peut-être difficile de scanner le code.</string> - <string name="show_root_apps">Inclure les applications root</string> - <string name="show_root_apps_on">Afficher les applications nécessitant les privilèges root</string> <string name="repo_add_mirror">Ajouter un miroir</string> <string name="repo_delete_to_overwrite">Veuillez d\'abord supprimer %1$s pour pouvoir l\'ajouter avec la clé en conflit.</string> <string name="repo_exists_add_mirror">Il s\'agit d\'une copie de %1$s, l\'ajouter comme miroir ?</string> 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 @@ <string name="antidisabledalgorithmlist">Este aplicativo ten unha sinatura de seguridade feble</string> <string name="antiknownvulnlist">Esta aplicación contén unha vulnerabilidade de seguridade coñecida</string> - <string name="show_root_apps">Incluir aplicativos con permiso de administrador</string> - <string name="show_root_apps_on">Amosar aplicativos que requiren privilexios de administrador</string> <string name="show_anti_feature_apps">Incluir aplicativos con anti-funcionalidades</string> <string name="show_anti_feature_apps_on">Amosar aplicativos que requiren de anti-funcionalidades</string> <string name="force_touch_apps">Incluir aplicativos de pantalla táctil</string> 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 @@ <string name="menu_liberapay">Liberapay</string> <string name="warning_scaning_qr_code">כנראה שלמצלמה שלך אין מיקוד אוטומטי. סריקת הקוד עשויה להוות מכשול.</string> - <string name="show_root_apps">לכלול גירסאות שדורשות גישת על</string> - <string name="show_root_apps_on">הצגת יישומונים שדורשים גישת על למכשיר</string> <string name="show_anti_feature_apps">לכלול יישומונים שמכילים תכונות שליליות</string> <string name="show_anti_feature_apps_on">הצגת יישומונים שדורשים תכונות שליליות</string> <string name="force_touch_apps">לכלול יישומוני מסך מגע</string> 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 @@ <string name="antidisabledalgorithmlist">Ennek az alkalmazásnak gyönge a biztonsági aláírása</string> <string name="antiknownvulnlist">Ez az alkalmazás ismert biztonsági rést tartalmaz</string> - <string name="show_root_apps">Root jogot igénylő alkalmazások belefoglalása</string> <string name="over_data">Adatkapcsolaton keresztül</string> <string name="repo_exists_add_fingerprint">A(z) %1$s már be lett állítva, ez új kulcsinformációkat fog hozzáadni.</string> <string name="repo_exists_enable">A(z) %1$s már be lett állítva, erősítse meg, hogy újra engedélyezni akarja.</string> @@ -481,7 +480,6 @@ <string name="repo_delete_to_overwrite">Először törölje a(z) %1$s alkalmazást, hogy hozzáadhassa egy ütköző kulccsal.</string> <string name="menu_liberapay">Liberapay</string> - <string name="show_root_apps_on">Azon alkalmazások megjelenítése, melyekhez root jogosultság szükséges</string> <string name="show_anti_feature_apps">Előnytelen funkciókkal rendelkező alkalmazások belefoglalása</string> <string name="show_anti_feature_apps_on">Azon alkalmazások megjelenítése, melyek előnytelen funkciókkal rendelkeznek</string> <string name="force_touch_apps">Érintőképernyős alkalmazások belefoglalása</string> 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 @@ <string name="repo_exists_add_mirror">Ini adalah salinan dari %1$s, tambahkan sebagai mirror?</string> <string name="menu_liberapay">Liberapay</string> - <string name="show_root_apps">Termasuk apl root</string> - <string name="show_root_apps_on">Tampilkan apl yg butuh akses root</string> <string name="show_anti_feature_apps">Termasuk apl anti-fitur</string> <string name="show_anti_feature_apps_on">Tampilkan apl yg butuh anti-fitur</string> <string name="force_touch_apps">Termasuk apl layar sentuh</string> 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 @@ <string name="menu_liberapay">Liberapay</string> <string name="warning_scaning_qr_code">Þ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.</string> - <string name="show_root_apps">Hafa með rótaraðgangsforrit</string> - <string name="show_root_apps_on">Birta forrit sem þurfa rótaraðgang</string> <string name="show_anti_feature_apps">Hafa með forrit með ókostum</string> <string name="show_anti_feature_apps_on">Birta forrit með óæskilegum eiginleikum</string> <string name="force_touch_apps">Hafa með forrit sem þurfa snertiskjá</string> 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 @@ <string name="repo_exists_add_mirror">Questa è una copia di %1$s, aggiungerla come mirror?</string> <string name="menu_liberapay">Liberapay</string> - <string name="show_root_apps">Includi app di root</string> - <string name="show_root_apps_on">Mostra le app che richiedono privilegi di root</string> <string name="show_anti_feature_apps">Includi app con anti-caratteristiche</string> <string name="show_anti_feature_apps_on">Mostra app che richiedono anti-caratteristiche</string> <string name="force_touch_apps">Includi app tattili</string> 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 @@ <string name="repo_exists_and_enabled">%1$sはすでに設定済みで有効です。</string> <string name="repo_delete_to_overwrite">競合する鍵でこのリポジトリを追加するためには、先に%1$sを削除してください。</string> <string name="repo_exists_add_mirror">これは%1$sの複製です。ミラーとして追加しますか?</string> - <string name="show_root_apps">root権限の使用が必要なアプリ</string> - <string name="show_root_apps_on">root権限の使用を必要とするアプリを表示します</string> <string name="show_anti_feature_apps">好ましくない機能の使用が必要なアプリ</string> <string name="show_anti_feature_apps_on">好ましくない機能の使用を必要とするアプリを表示します</string> <string name="force_touch_apps">タッチスクリーンの使用が必要なアプリ</string> 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 @@ <string name="repo_exists_and_enabled">%1$s은(는) 이미 설정되어 있으며, 활성화됩니다.</string> <string name="repo_delete_to_overwrite">이것과 충돌하는 키를 추가하려면 먼저 %1$s을(를) 삭제합니다.</string> <string name="repo_exists_add_mirror">이것은 %1$s의 복사본입니다, 그것을 미러로 추가하시겠습니까?</string> - <string name="show_root_apps">루트 앱을 포함</string> - <string name="show_root_apps_on">루트 권한이 필요한 앱을 보여주기</string> <string name="show_anti_feature_apps">안티 기능 앱을 포함</string> <string name="show_anti_feature_apps_on">안티 기능이 필요한 앱을 보여주기</string> <string name="force_touch_apps">터치스크린 앱을 포함</string> 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 @@ <string name="menu_liberapay">Liberapay</string> <string name="warning_scaning_qr_code">Kameraet ditt mangler autofokus. Det kan vise seg vanskelig å skanne koden.</string> - <string name="show_root_apps">Inkluder root-programmer</string> - <string name="show_root_apps_on">Vis programmer som krever root-tilgang</string> <string name="show_anti_feature_apps">Inkluder antifunksjons-programmer</string> <string name="show_anti_feature_apps_on">Vis programmer som krever anti-funksjoner</string> <string name="force_touch_apps">Inkluder pekeskjermsprogrammer</string> 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 @@ <string name="appcompatibility">Compatibiliteit van app</string> <string name="show_incompat_versions">Incompatibele versies tonen</string> <string name="show_incompat_versions_on">Toont app-versies die niet compatibel zijn met uw apparaat</string> - <string name="show_root_apps">Root-apps tonen</string> - <string name="show_root_apps_on">Toont apps die root-privileges vereisen</string> <string name="show_anti_feature_apps">Apps met antifuncties tonen</string> <string name="show_anti_feature_apps_on">Toont apps die antifuncties bevatten</string> <string name="force_touch_apps">Aanraakschermapps tonen</string> 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 @@ <string name="menu_liberapay">Liberapay</string> <string name="warning_scaning_qr_code">Je camera lijkt niet over autofocus te beschikken. Het scannen van de code kan moeilijk zijn.</string> - <string name="show_root_apps">Root-apps tonen</string> - <string name="show_root_apps_on">Toon apps die root-privileges vereisen</string> <string name="show_anti_feature_apps">Apps met antifuncties tonen</string> <string name="show_anti_feature_apps_on">Toon apps die antifuncties bevatten</string> <string name="force_touch_apps">Aanraakschermapps tonen</string> 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 @@ <string name="menu_liberapay">Liberapay</string> <string name="warning_scaning_qr_code">Twój aparat nie posiada autofokusu. Mogą wystąpić trudności ze zeskanowaniem kodu.</string> - <string name="show_root_apps">Uwzględnij aplikacje roota</string> - <string name="show_root_apps_on">Pokaż aplikacje wymagające do działania uprawnień roota</string> <string name="show_anti_feature_apps">Uwzględnij (trochę) niefajne aplikacje</string> <string name="show_anti_feature_apps_on">Pokaż aplikacje zawierające niepożądane funkcje</string> <string name="force_touch_apps">Uwzględnij aplikacje dotykowe</string> 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 @@ <string name="warning_scaning_qr_code">Sua câmera não parece ter focagem automática. Pode ser difícil escanear o código.</string> <string name="repo_add_mirror">Adicionar mirror</string> <string name="repo_exists_add_mirror">Esta é uma copia de %1$s, adicionar ele como um mirror?</string> - <string name="show_root_apps">Incluir aplicativos root</string> - <string name="show_root_apps_on">Mostrar aplicativos que requerem privilégios root</string> <string name="show_anti_feature_apps">Incluir aplicativos antifraude</string> <string name="force_touch_apps">Incluir aplicativos touchscreen</string> <string name="force_touch_apps_on">Mostrar aplicativos touchscreen independente do suporte de hardware</string> 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 @@ <string name="repo_exists_add_mirror">Esta é uma cópia de %1$s, deseja adicionar como \'mirror\'?</string> <string name="menu_liberapay">Liberapay</string> - <string name="show_root_apps">Incluir aplicações \'root\'</string> - <string name="show_root_apps_on">Mostrar aplicações que necessitam de acesso \'root\'</string> <string name="show_anti_feature_apps">Incluir aplicações com anti-funcionalidades</string> <string name="show_anti_feature_apps_on">Mostrar aplicações que necessitem de anti-funcionalidades</string> <string name="force_touch_apps">Incluir aplicações \'touchscreen\'</string> 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 @@ <string name="warning_scaning_qr_code">Camera foto a dispozitivului nu pare să suporte focalizare automată. Ar putea fi dificil să se scaneze codul.</string> <string name="menu_liberapay">Liberapay</string> - <string name="show_root_apps">Include root</string> - <string name="show_root_apps_on">Se listează și aplicațiile ce necesită acces de tip administrator (root)</string> <string name="show_anti_feature_apps">Include caracteristici periculoase</string> <string name="show_anti_feature_apps_on">Se listează și aplicațiile ce prezintă caracteristici periculoase (ex. urmărire)</string> <string name="force_touch_apps">Include ecran tactil</string> 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 @@ <string name="hide_on_long_search_press_summary">Длительное нажатие кнопки поиска скроет приложение</string> <string name="warning_scaning_qr_code">Ваша камера не поддерживает автофокус. Сканирование кода может быть затруднено.</string> - <string name="show_root_apps">Включить root-приложения</string> - <string name="show_root_apps_on">Показать приложения, требующие привилегий root</string> <string name="repo_add_mirror">Добавить зеркало</string> <string name="repo_exists_add_mirror">Это копия %1$s, добавить ее как зеркало?</string> <string name="show_anti_feature_apps">Включить приложения с сомнительным функционалом</string> 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 @@ <string name="menu_liberapay">Liberapay</string> <string name="warning_scaning_qr_code">Paret chi sa fotocàmera tua non tèngiat su focus automàticu. Diat pòdere èssere difìtzile a iscansire su còdighe.</string> - <string name="show_root_apps">Inclue sas aplicatziones \"root\"</string> - <string name="show_root_apps_on">Ammustra sas aplicatziones chi tenent bisòngiu de sos privilègios de root</string> <string name="show_anti_feature_apps">Inclue sas aplicatziones cun anti-funtzionalidades</string> <string name="show_anti_feature_apps_on">Ammustra sas aplicatziones chi tenent bisòngiu de anti-funtzionalidades</string> <string name="force_touch_apps">Inclue sas aplicatziones chi impreant s\'ischermu tàtile</string> 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 @@ <string name="expert_on">Pokaži dodatne informacije in omogoči dodatne nastavitve</string> <string name="show_incompat_versions_on">Pokaži verzije aplikacij, ki so nekompatibilne z napravo</string> - <string name="show_root_apps">Vključi root aplikacije</string> - <string name="show_root_apps_on">Prikaži aplikacije, ki zahtevajo root dostop</string> <string name="show_anti_feature_apps">Vključi aplikcije z proti-lastnostmi</string> <string name="force_touch_apps">Vključi aplikacije, ki potrebujejo zaslone na dotik</string> <string name="local_repo">Lokalni vir aplikacij</string> 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 @@ <string name="appcompatibility">Përshtatja e Aplikacioneve</string> <string name="show_incompat_versions">Përfshije verzione jo përshtatshme</string> <string name="show_incompat_versions_on">Shfaqe verzione të aplikacioneve që janë nuk përshtaten me pajisjen tuaj</string> - <string name="show_root_apps">Përfshije aplikacionet rrënjë</string> - <string name="show_root_apps_on">Shfaqe aplikacionet që kërkojnë privilegjet rrënjë</string> <string name="show_anti_feature_apps">Përfshije aplikacionet kundër-veçori</string> <string name="show_anti_feature_apps_on">Shfaqe aplikacione që kërkojnë kundër-veçori</string> <string name="force_touch_apps">Përfshije aplikacionet me gjurmë gishtore</string> 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 @@ <string name="antidisabledalgorithmlist">Denna app har en svag säkerhetssignatur</string> <string name="antiknownvulnlist">Denna app innehåller en känd säkerhetsårbarhet</string> - <string name="show_root_apps">Inkludera root-appar</string> - <string name="show_root_apps_on">Visa appar som kräver root-privilegier</string> <string name="show_anti_feature_apps">Inkludera mot-funktionsappar</string> <string name="show_anti_feature_apps_on">Vis appar som kräver mot-funktioner</string> <string name="force_touch_apps">Inkludera pekskärmsappar</string> 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 @@ <string name="appcompatibility">అనువర్తన అనుకూలత</string> <string name="show_incompat_versions">సరిపడలేని వెర్షన్లను చేర్చండి</string> - <string name="show_root_apps">రూట్ అనువర్తనాలను చేర్చండి</string> - <string name="show_root_apps_on">రూట్ అధికారాలు అవసరమయ్యే అనువర్తనాలను చూపించు</string> <string name="force_touch_apps">టచ్స్క్రీన్ అనువర్తనాలను చేర్చండి</string> <string name="local_repo">స్థానిక రెపో</string> <string name="local_repo_running">F- Droid మారడానికి సిద్ధంగా ఉంది</string> 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 @@ <string name="menu_liberapay">Liberapay</string> <string name="warning_scaning_qr_code">Kameranızın kendiliğinden odaklanması yok gibi görünüyor. Kodu taramak zor olabilir.</string> - <string name="show_root_apps">Kök uygulamalarını içer</string> - <string name="show_root_apps_on">Kök yetkileri gerektiren uygulamaları göster</string> <string name="show_anti_feature_apps">Karşıt-özellikli uygulamaları içer</string> <string name="show_anti_feature_apps_on">Karşıt-özellikler gerektiren uygulamaları göster</string> <string name="force_touch_apps">Dokunmatik ekran uygulamalarını içer</string> 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 @@ <string name="antifeatures">ئىقتىدار-قارشى</string> <string name="expert_on">قوشۇمچە ئۇچۇرلانى كۆرسەت ۋە قوشۇمچە تەڭشەكلەرنى قوزغات</string> - <string name="show_root_apps_on">يىلتىز ھۇقۇقىنى تەلەپ قىلىدىغان ئۇيغۇلىمىلارنى كۆرسەت</string> <string name="show_anti_feature_apps">ئىقتىدار-چەكلەش ئۇيغۇلىمىلىرىنى ئۆز ئىچىگە ئالىدۇ</string> <string name="local_repo">يەرلىك ئامبار</string> <string name="deleting_repo">ھازىرقى ئامبار ئۆچۈرۈلىۋاتىدۇ…</string> 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 @@ <string name="repo_exists_enable">%1$s вже налаштовано, підтвердьте, що бажаєте наново увімкнути.</string> <string name="repo_exists_and_enabled">%1$s вже налаштовано і увімкнуто.</string> <string name="repo_delete_to_overwrite">Спершу видаліть %1$s, аби додати його з конфліктним ключем.</string> - <string name="show_root_apps">Увімкнути root додатки</string> - <string name="show_root_apps_on">Показати додатки, які потребують root привілеїв</string> <string name="share_repository">Поділитися репозиторієм</string> <string name="use_bluetooth">Використовувати Bluetooth</string> <string name="swap_toast_hotspot_enabled">Точку доступу Wi-Fi увімкнуто</string> 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 @@ <string name="antidisabledalgorithmlist">Ứng dụng này có chữ kí bảo mật yếu</string> <string name="antiknownvulnlist">Ứng dụng này có lỗ hổng bảo mật đã bị phát hiện</string> - <string name="show_root_apps">Hiện ứng dụng root</string> - <string name="show_root_apps_on">Hiện các ứng dụng cần quyền root</string> <string name="show_anti_feature_apps">Hiện ứng dụng có tính năng không mong muốn</string> <string name="show_anti_feature_apps_on">Hiện các ứng dụng có một số tính năng không mong muốn</string> <string name="force_touch_apps">Hiện ứng dụng cảm ứng</string> 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 @@ <string name="hide_on_long_search_press_summary">长按搜索按钮将隐藏此应用</string> <string name="warning_scaning_qr_code">您的相机似乎没有自动对焦。扫描二维码可能较为困难。</string> - <string name="show_root_apps">包括需 root 的应用</string> - <string name="show_root_apps_on">显示需要 root 权限的应用程序</string> <string name="show_anti_feature_apps">包括带有 anti-feature 的应用</string> <string name="show_anti_feature_apps_on">显示需要 anti-feature 的应用程序</string> <string name="repo_add_mirror">添加镜像</string> 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 @@ <string name="menu_liberapay">Liberapay</string> <string name="warning_scaning_qr_code">您的相機似乎沒有自動對焦。掃描代碼可能會很困難。</string> - <string name="show_root_apps">包括 root 應用程式</string> - <string name="show_root_apps_on">顯示需要 root 授權的應用程式</string> <string name="show_anti_feature_apps">包括反特徵應用程式</string> <string name="show_anti_feature_apps_on">顯示需要反特徵的應用程式</string> <string name="force_touch_apps">包括觸控式螢幕的應用程式</string> 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 <string name="appcompatibility">App compatibility</string> <string name="show_incompat_versions">Include incompatible versions</string> <string name="show_incompat_versions_on">Show app versions that are incompatible with the device</string> - <string name="show_root_apps">Include root apps</string> - <string name="show_root_apps_on">Show apps that require root privileges</string> <string name="show_anti_feature_apps">Include anti-feature apps</string> <string name="show_anti_feature_apps_on">Show apps that require anti-features</string> <string name="force_touch_apps">Include touchscreen apps</string> diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 846044d13..2eb46455d 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -76,15 +76,12 @@ android:entryValues="@array/themeValues"/> </android.support.v7.preference.PreferenceCategory> - <android.support.v7.preference.PreferenceCategory android:title="@string/appcompatibility"> + <android.support.v7.preference.PreferenceCategory android:title="@string/appcompatibility" + android:key="pref_category_appcompatibility"> <SwitchPreference android:title="@string/show_incompat_versions" android:defaultValue="false" android:key="incompatibleVersions"/> - <SwitchPreference - android:title="@string/show_root_apps" - android:defaultValue="true" - android:key="rooted"/> <SwitchPreference android:title="@string/show_anti_feature_apps" android:defaultValue="false" diff --git a/app/src/test/java/org/fdroid/fdroid/PreferencesTest.java b/app/src/test/java/org/fdroid/fdroid/PreferencesTest.java index 3afc307c7..3a4b03d85 100644 --- a/app/src/test/java/org/fdroid/fdroid/PreferencesTest.java +++ b/app/src/test/java/org/fdroid/fdroid/PreferencesTest.java @@ -118,8 +118,6 @@ public class PreferencesTest { preferences.showAppsWithAntiFeatures()); assertEquals(defaults.getBoolean(Preferences.PREF_SHOW_INCOMPAT_VERSIONS, false), preferences.showIncompatibleVersions()); - assertEquals(defaults.getBoolean(Preferences.PREF_SHOW_ROOT_APPS, false), - preferences.showAppsRequiringRoot()); assertEquals(defaults.getBoolean(Preferences.PREF_UPDATE_NOTIFICATION_ENABLED, false), preferences.isUpdateNotificationEnabled()); 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() {