Merge branch 'finalize-1.3' into 'master'
Finalize 1.3 Closes #1438, #1533, and #1527 See merge request fdroid/fdroidclient!721
This commit is contained in:
commit
6c6e3ad82d
@ -139,7 +139,6 @@ dependencies {
|
|||||||
|
|
||||||
implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
|
implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
|
||||||
implementation 'com.google.zxing:core:3.3.2'
|
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.netcipher:netcipher:2.0.0-alpha1'
|
||||||
implementation 'info.guardianproject.panic:panic:0.5'
|
implementation 'info.guardianproject.panic:panic:0.5'
|
||||||
implementation 'commons-io:commons-io:2.5'
|
implementation 'commons-io:commons-io:2.5'
|
||||||
|
@ -76,15 +76,12 @@
|
|||||||
android:entryValues="@array/themeValues"/>
|
android:entryValues="@array/themeValues"/>
|
||||||
</android.support.v7.preference.PreferenceCategory>
|
</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
|
<SwitchPreference
|
||||||
android:title="@string/show_incompat_versions"
|
android:title="@string/show_incompat_versions"
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:key="incompatibleVersions"/>
|
android:key="incompatibleVersions"/>
|
||||||
<SwitchPreference
|
|
||||||
android:title="@string/show_root_apps"
|
|
||||||
android:defaultValue="true"
|
|
||||||
android:key="rooted"/>
|
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
android:title="@string/show_anti_feature_apps"
|
android:title="@string/show_anti_feature_apps"
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
|
@ -109,7 +109,8 @@ public class AppDetails2 extends AppCompatActivity
|
|||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
supportPostponeEnterTransition();
|
supportPostponeEnterTransition();
|
||||||
|
|
||||||
if (!reset(getPackageNameFromIntent(getIntent()))) {
|
resetCurrentApp(getPackageNameFromIntent(getIntent()));
|
||||||
|
if (app == null) {
|
||||||
finish();
|
finish();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -187,27 +188,6 @@ public class AppDetails2 extends AppCompatActivity
|
|||||||
return intent.getStringExtra(EXTRA_APPID);
|
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
|
* Some notifications (like "downloading" and "installed") are not shown
|
||||||
* for this app if it is open in app details. When closing, we need to
|
* 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
|
* Reset the display and list contents. Used when entering the activity, and
|
||||||
* also when something has been installed/uninstalled.
|
* also when something has been installed/uninstalled. An index update or
|
||||||
* Return true if the app was found, false otherwise.
|
* 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) {
|
private void resetCurrentApp(String packageName) {
|
||||||
|
if (TextUtils.isEmpty(packageName)) {
|
||||||
Utils.debugLog(TAG, "Getting application details for " + packageName);
|
return;
|
||||||
App newApp = null;
|
|
||||||
|
|
||||||
if (!TextUtils.isEmpty(packageName)) {
|
|
||||||
newApp = AppProvider.Helper.findHighestPriorityMetadata(getContentResolver(), packageName);
|
|
||||||
}
|
}
|
||||||
|
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() {
|
private void onAppChanged() {
|
||||||
recyclerView.post(new Runnable() {
|
recyclerView.post(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (!reset(app.packageName)) {
|
resetCurrentApp(app.packageName);
|
||||||
|
if (app == null) {
|
||||||
AppDetails2.this.finish();
|
AppDetails2.this.finish();
|
||||||
return;
|
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
|
@Override
|
||||||
public void enableAndroidBeam() {
|
public void enableAndroidBeam() {
|
||||||
NfcHelper.setAndroidBeam(this, app.packageName);
|
NfcHelper.setAndroidBeam(this, app.packageName);
|
||||||
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -373,16 +373,6 @@ public class FDroidApp extends Application {
|
|||||||
|
|
||||||
InstalledAppProviderService.compareToPackageManager(this);
|
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,
|
// 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,
|
// it is easier to just notify a change in the app provider,
|
||||||
// so that the newly updated list will correctly filter relevant apps.
|
// so that the newly updated list will correctly filter relevant apps.
|
||||||
|
@ -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_UPDATE_NOTIFICATION_ENABLED = "updateNotify";
|
||||||
public static final String PREF_THEME = "theme";
|
public static final String PREF_THEME = "theme";
|
||||||
public static final String PREF_SHOW_INCOMPAT_VERSIONS = "incompatibleVersions";
|
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_SHOW_ANTI_FEATURE_APPS = "showAntiFeatureApps";
|
||||||
public static final String PREF_FORCE_TOUCH_APPS = "ignoreTouchscreen";
|
public static final String PREF_FORCE_TOUCH_APPS = "ignoreTouchscreen";
|
||||||
public static final String PREF_PROMPT_TO_SEND_CRASH_REPORTS = "promptToSendCrashReports";
|
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,
|
DateUtils.HOUR_IN_MILLIS,
|
||||||
};
|
};
|
||||||
|
|
||||||
private boolean showAppsRequiringRoot;
|
|
||||||
private boolean showAppsWithAntiFeatures;
|
private boolean showAppsWithAntiFeatures;
|
||||||
|
|
||||||
private final Map<String, Boolean> initialized = new HashMap<>();
|
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> showAppsRequiringAntiFeaturesListeners = new ArrayList<>();
|
||||||
private final List<ChangeListener> localRepoNameListeners = new ArrayList<>();
|
private final List<ChangeListener> localRepoNameListeners = new ArrayList<>();
|
||||||
private final List<ChangeListener> localRepoHttpsListeners = 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);
|
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.
|
* 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
|
* 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;
|
return showAppsWithAntiFeatures;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerAppsRequiringRootChangeListener(ChangeListener listener) {
|
|
||||||
showAppsRequiringRootListeners.add(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void unregisterAppsRequiringRootChangeListener(ChangeListener listener) {
|
|
||||||
showAppsRequiringRootListeners.remove(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void registerAppsRequiringAntiFeaturesChangeListener(ChangeListener listener) {
|
public void registerAppsRequiringAntiFeaturesChangeListener(ChangeListener listener) {
|
||||||
showAppsRequiringAntiFeaturesListeners.add(listener);
|
showAppsRequiringAntiFeaturesListeners.add(listener);
|
||||||
}
|
}
|
||||||
@ -590,11 +565,6 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
|
|||||||
uninitialize(key);
|
uninitialize(key);
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case PREF_SHOW_ROOT_APPS:
|
|
||||||
for (ChangeListener listener : showAppsRequiringRootListeners) {
|
|
||||||
listener.onPreferenceChange();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case PREF_SHOW_ANTI_FEATURE_APPS:
|
case PREF_SHOW_ANTI_FEATURE_APPS:
|
||||||
for (ChangeListener listener : showAppsRequiringAntiFeaturesListeners) {
|
for (ChangeListener listener : showAppsRequiringAntiFeaturesListeners) {
|
||||||
listener.onPreferenceChange();
|
listener.onPreferenceChange();
|
||||||
|
@ -23,7 +23,6 @@ import com.fasterxml.jackson.annotation.JacksonInject;
|
|||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import org.apache.commons.io.filefilter.RegexFileFilter;
|
import org.apache.commons.io.filefilter.RegexFileFilter;
|
||||||
import org.fdroid.fdroid.AppFilter;
|
|
||||||
import org.fdroid.fdroid.FDroidApp;
|
import org.fdroid.fdroid.FDroidApp;
|
||||||
import org.fdroid.fdroid.Preferences;
|
import org.fdroid.fdroid.Preferences;
|
||||||
import org.fdroid.fdroid.Utils;
|
import org.fdroid.fdroid.Utils;
|
||||||
@ -1008,15 +1007,17 @@ public class App extends ValueObject implements Comparable<App>, Parcelable {
|
|||||||
boolean canUpdate = hasUpdates();
|
boolean canUpdate = hasUpdates();
|
||||||
AppPrefs prefs = getPrefs(context);
|
AppPrefs prefs = getPrefs(context);
|
||||||
boolean wantsUpdate = !prefs.ignoreAllUpdates && prefs.ignoreThisUpdate < suggestedVersionCode;
|
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
|
* @return if the given app should be filtered out based on the
|
||||||
* permission (set in the Settings page)
|
* {@link Preferences#PREF_SHOW_ANTI_FEATURE_APPS Show Anti-Features Setting}
|
||||||
*/
|
*/
|
||||||
public boolean isFiltered() {
|
public boolean isDisabledByAntiFeatures() {
|
||||||
return new AppFilter().filter(this);
|
return this.antiFeatures != null
|
||||||
|
&& this.antiFeatures.length > 0
|
||||||
|
&& !Preferences.get().showAppsWithAntiFeatures();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@ -12,6 +12,7 @@ import android.support.annotation.Nullable;
|
|||||||
import android.support.v4.app.JobIntentService;
|
import android.support.v4.app.JobIntentService;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import org.acra.ACRA;
|
import org.acra.ACRA;
|
||||||
|
import org.fdroid.fdroid.AppUpdateStatusManager;
|
||||||
import org.fdroid.fdroid.Utils;
|
import org.fdroid.fdroid.Utils;
|
||||||
import org.fdroid.fdroid.data.Schema.InstalledAppTable;
|
import org.fdroid.fdroid.data.Schema.InstalledAppTable;
|
||||||
import rx.functions.Action1;
|
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
|
* 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}
|
* from {@link android.content.BroadcastReceiver}s for {@link Intent#ACTION_PACKAGE_ADDED}
|
||||||
* and {@link Intent#ACTION_PACKAGE_REMOVED}
|
* and {@link Intent#ACTION_PACKAGE_REMOVED}
|
||||||
* <p/>
|
* <p>
|
||||||
* Since {@link android.content.ContentProvider#insert(Uri, ContentValues)} does not check
|
* 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
|
* 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,
|
* inserting duplicate versions of the same installed APK. On that note,
|
||||||
* {@link #insertAppIntoDb(Context, PackageInfo, String, String)} and
|
* {@link #insertAppIntoDb(Context, PackageInfo, String, String)} and
|
||||||
* {@link #deleteAppFromDb(Context, String)} are both static methods to enable easy testing
|
* {@link #deleteAppFromDb(Context, String)} are both static methods to enable easy testing
|
||||||
* of this stuff.
|
* 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")
|
@SuppressWarnings("LineLength")
|
||||||
public class InstalledAppProviderService extends JobIntentService {
|
public class InstalledAppProviderService extends JobIntentService {
|
||||||
@ -221,11 +230,15 @@ public class InstalledAppProviderService extends JobIntentService {
|
|||||||
protected void onHandleWork(@NonNull Intent intent) {
|
protected void onHandleWork(@NonNull Intent intent) {
|
||||||
Process.setThreadPriority(Process.THREAD_PRIORITY_LOWEST);
|
Process.setThreadPriority(Process.THREAD_PRIORITY_LOWEST);
|
||||||
|
|
||||||
|
AppUpdateStatusManager ausm = AppUpdateStatusManager.getInstance(this);
|
||||||
String packageName = intent.getData().getSchemeSpecificPart();
|
String packageName = intent.getData().getSchemeSpecificPart();
|
||||||
final String action = intent.getAction();
|
final String action = intent.getAction();
|
||||||
if (ACTION_INSERT.equals(action)) {
|
if (ACTION_INSERT.equals(action)) {
|
||||||
PackageInfo packageInfo = getPackageInfo(intent, packageName);
|
PackageInfo packageInfo = getPackageInfo(intent, packageName);
|
||||||
if (packageInfo != null) {
|
if (packageInfo != null) {
|
||||||
|
for (AppUpdateStatusManager.AppUpdateStatus status : ausm.getByPackageName(packageName)) {
|
||||||
|
ausm.updateApk(status.getUniqueKey(), AppUpdateStatusManager.Status.Installed, null);
|
||||||
|
}
|
||||||
File apk = getPathToInstalledApk(packageInfo);
|
File apk = getPathToInstalledApk(packageInfo);
|
||||||
if (apk == null) {
|
if (apk == null) {
|
||||||
return;
|
return;
|
||||||
@ -244,6 +257,9 @@ public class InstalledAppProviderService extends JobIntentService {
|
|||||||
}
|
}
|
||||||
} else if (ACTION_DELETE.equals(action)) {
|
} else if (ACTION_DELETE.equals(action)) {
|
||||||
deleteAppFromDb(this, packageName);
|
deleteAppFromDb(this, packageName);
|
||||||
|
for (AppUpdateStatusManager.AppUpdateStatus status : ausm.getByPackageName(packageName)) {
|
||||||
|
ausm.updateApk(status.getUniqueKey(), AppUpdateStatusManager.Status.InstallError, null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
packageChangeNotifier.onNext(packageName);
|
packageChangeNotifier.onNext(packageName);
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ import android.app.Service;
|
|||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
@ -52,6 +51,8 @@ import java.io.IOException;
|
|||||||
* {@code {@link #stopSelf(int)}}, so {@code Intent}s are sometimes redelivered even
|
* {@code {@link #stopSelf(int)}}, so {@code Intent}s are sometimes redelivered even
|
||||||
* though they are no longer valid. {@link #onStartCommand(Intent, int, int)} checks
|
* 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}.
|
* 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>
|
* <p>
|
||||||
* The canonical URL for the APK file to download is also used as the unique ID to
|
* 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
|
* represent the download itself throughout F-Droid. This follows the model
|
||||||
@ -95,7 +96,6 @@ public class InstallManagerService extends Service {
|
|||||||
|
|
||||||
private LocalBroadcastManager localBroadcastManager;
|
private LocalBroadcastManager localBroadcastManager;
|
||||||
private AppUpdateStatusManager appUpdateStatusManager;
|
private AppUpdateStatusManager appUpdateStatusManager;
|
||||||
private BroadcastReceiver broadcastReceiver;
|
|
||||||
private boolean running = false;
|
private boolean running = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -111,21 +111,6 @@ public class InstallManagerService extends Service {
|
|||||||
super.onCreate();
|
super.onCreate();
|
||||||
localBroadcastManager = LocalBroadcastManager.getInstance(this);
|
localBroadcastManager = LocalBroadcastManager.getInstance(this);
|
||||||
appUpdateStatusManager = AppUpdateStatusManager.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;
|
running = true;
|
||||||
pendingInstalls = getPendingInstalls(this);
|
pendingInstalls = getPendingInstalls(this);
|
||||||
}
|
}
|
||||||
@ -140,7 +125,6 @@ public class InstallManagerService extends Service {
|
|||||||
@Override
|
@Override
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
running = false;
|
running = false;
|
||||||
unregisterReceiver(broadcastReceiver);
|
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -489,25 +473,12 @@ public class InstallManagerService extends Service {
|
|||||||
return pendingInstalls.contains(urlString);
|
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
|
* Mark a given APK as in the process of being installed, with
|
||||||
* the {@code urlString} of the download used as the unique ID,
|
* the {@code urlString} of the download used as the unique ID,
|
||||||
* and the file hash used to verify that things are the same.
|
* and the file hash used to verify that things are the same.
|
||||||
*
|
*
|
||||||
* @see #isPendingInstall(String)
|
* @see #isPendingInstall(String)
|
||||||
* @see #isPendingInstall(Context, String)
|
|
||||||
*/
|
*/
|
||||||
public static void putPendingInstall(Context context, String urlString, String packageName) {
|
public static void putPendingInstall(Context context, String urlString, String packageName) {
|
||||||
if (pendingInstalls == null) {
|
if (pendingInstalls == null) {
|
||||||
|
@ -43,7 +43,6 @@ import org.fdroid.fdroid.data.ApkProvider;
|
|||||||
import org.fdroid.fdroid.data.App;
|
import org.fdroid.fdroid.data.App;
|
||||||
import org.fdroid.fdroid.data.InstalledAppProvider;
|
import org.fdroid.fdroid.data.InstalledAppProvider;
|
||||||
import org.fdroid.fdroid.data.RepoProvider;
|
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.AppDiff;
|
||||||
import org.fdroid.fdroid.privileged.views.AppSecurityPermissions;
|
import org.fdroid.fdroid.privileged.views.AppSecurityPermissions;
|
||||||
import org.fdroid.fdroid.views.main.MainActivity;
|
import org.fdroid.fdroid.views.main.MainActivity;
|
||||||
@ -58,6 +57,8 @@ public class AppDetailsRecyclerViewAdapter
|
|||||||
|
|
||||||
public interface AppDetailsRecyclerViewAdapterCallbacks {
|
public interface AppDetailsRecyclerViewAdapterCallbacks {
|
||||||
|
|
||||||
|
boolean isAppDownloading();
|
||||||
|
|
||||||
void enableAndroidBeam();
|
void enableAndroidBeam();
|
||||||
|
|
||||||
void disableAndroidBeam();
|
void disableAndroidBeam();
|
||||||
@ -487,7 +488,7 @@ public class AppDetailsRecyclerViewAdapter
|
|||||||
buttonSecondaryView.setOnClickListener(onUnInstallClickListener);
|
buttonSecondaryView.setOnClickListener(onUnInstallClickListener);
|
||||||
buttonPrimaryView.setText(R.string.menu_install);
|
buttonPrimaryView.setText(R.string.menu_install);
|
||||||
buttonPrimaryView.setVisibility(versions.size() > 0 ? View.VISIBLE : View.GONE);
|
buttonPrimaryView.setVisibility(versions.size() > 0 ? View.VISIBLE : View.GONE);
|
||||||
if (InstallManagerService.isPendingInstall(context, app.packageName)) {
|
if (callbacks.isAppDownloading()) {
|
||||||
buttonPrimaryView.setText(R.string.downloading);
|
buttonPrimaryView.setText(R.string.downloading);
|
||||||
buttonPrimaryView.setEnabled(false);
|
buttonPrimaryView.setEnabled(false);
|
||||||
buttonLayout.setVisibility(View.GONE);
|
buttonLayout.setVisibility(View.GONE);
|
||||||
|
@ -108,7 +108,12 @@ public abstract class AppListItemController extends RecyclerView.ViewHolder {
|
|||||||
|
|
||||||
installButton = (ImageView) itemView.findViewById(R.id.install);
|
installButton = (ImageView) itemView.findViewById(R.id.install);
|
||||||
if (installButton != null) {
|
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) {
|
if (Build.VERSION.SDK_INT >= 21) {
|
||||||
installButton.setOutlineProvider(new ViewOutlineProvider() {
|
installButton.setOutlineProvider(new ViewOutlineProvider() {
|
||||||
@ -140,7 +145,14 @@ public abstract class AppListItemController extends RecyclerView.ViewHolder {
|
|||||||
secondaryButton = (Button) itemView.findViewById(R.id.secondary_button);
|
secondaryButton = (Button) itemView.findViewById(R.id.secondary_button);
|
||||||
|
|
||||||
if (actionButton != null) {
|
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) {
|
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")
|
@SuppressWarnings("FieldCanBeLocal")
|
||||||
private final View.OnClickListener onSecondaryButtonClicked = new View.OnClickListener() {
|
private final View.OnClickListener onSecondaryButtonClicked = new View.OnClickListener() {
|
||||||
@Override
|
@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.
|
// When the button says "Run", then launch the app.
|
||||||
if (currentStatus != null && currentStatus.status == AppUpdateStatusManager.Status.Installed) {
|
if (currentStatus != null && currentStatus.status == AppUpdateStatusManager.Status.Installed) {
|
||||||
Intent intent = activity.getPackageManager().getLaunchIntentForPackage(app.packageName);
|
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() +
|
Utils.debugLog(TAG, "skip download, we have already downloaded " + currentStatus.apk.getUrl() +
|
||||||
" to " + apkFilePath);
|
" 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 LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(activity);
|
||||||
final BroadcastReceiver receiver = new BroadcastReceiver() {
|
final BroadcastReceiver receiver = new BroadcastReceiver() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -4,7 +4,6 @@ import android.app.Activity;
|
|||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import org.fdroid.fdroid.AppUpdateStatusManager;
|
import org.fdroid.fdroid.AppUpdateStatusManager;
|
||||||
import org.fdroid.fdroid.R;
|
import org.fdroid.fdroid.R;
|
||||||
import org.fdroid.fdroid.data.App;
|
import org.fdroid.fdroid.data.App;
|
||||||
@ -12,9 +11,11 @@ import org.fdroid.fdroid.data.App;
|
|||||||
/**
|
/**
|
||||||
* Used for search results or for category lists.
|
* Used for search results or for category lists.
|
||||||
* Shows an inline download button, and also (if appropriate):
|
* Shows an inline download button, and also (if appropriate):
|
||||||
* * Whether the app is incompatible.
|
* <ul>
|
||||||
* * Version that app can be upgraded to.
|
* <li>Whether the app is incompatible
|
||||||
* * Installed version.
|
* <li>Version that app can be upgraded to
|
||||||
|
* <li>Installed version
|
||||||
|
* </ul>
|
||||||
*/
|
*/
|
||||||
public class StandardAppListItemController extends AppListItemController {
|
public class StandardAppListItemController extends AppListItemController {
|
||||||
public StandardAppListItemController(Activity activity, View itemView) {
|
public StandardAppListItemController(Activity activity, View itemView) {
|
||||||
@ -35,6 +36,8 @@ public class StandardAppListItemController extends AppListItemController {
|
|||||||
private CharSequence getStatusText(@NonNull App app) {
|
private CharSequence getStatusText(@NonNull App app) {
|
||||||
if (!app.compatible) {
|
if (!app.compatible) {
|
||||||
return activity.getString(R.string.app_incompatible);
|
return activity.getString(R.string.app_incompatible);
|
||||||
|
} else if (app.isDisabledByAntiFeatures()) {
|
||||||
|
return activity.getString(R.string.antifeatures);
|
||||||
} else if (app.isInstalled(activity.getApplicationContext())) {
|
} else if (app.isInstalled(activity.getApplicationContext())) {
|
||||||
if (app.canAndWantToUpdate(activity)) {
|
if (app.canAndWantToUpdate(activity)) {
|
||||||
return activity.getString(R.string.app_version_x_available, app.getSuggestedVersionName());
|
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) {
|
private boolean shouldShowInstall(@NonNull App app) {
|
||||||
boolean installable = app.canAndWantToUpdate(activity) || !app.isInstalled(activity.getApplicationContext());
|
boolean installable = app.canAndWantToUpdate(activity) || !app.isInstalled(activity.getApplicationContext());
|
||||||
boolean shouldAllow = app.compatible && !app.isFiltered();
|
boolean shouldAllow = app.compatible && !app.isDisabledByAntiFeatures();
|
||||||
|
|
||||||
return installable && shouldAllow;
|
return installable && shouldAllow;
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,7 @@ package org.fdroid.fdroid.views.fragments;
|
|||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v14.preference.PreferenceFragment;
|
import android.support.v14.preference.PreferenceFragment;
|
||||||
@ -65,7 +66,6 @@ public class PreferencesFragment extends PreferenceFragment
|
|||||||
Preferences.PREF_OVER_DATA,
|
Preferences.PREF_OVER_DATA,
|
||||||
Preferences.PREF_UPDATE_INTERVAL,
|
Preferences.PREF_UPDATE_INTERVAL,
|
||||||
Preferences.PREF_UPDATE_NOTIFICATION_ENABLED,
|
Preferences.PREF_UPDATE_NOTIFICATION_ENABLED,
|
||||||
Preferences.PREF_SHOW_ROOT_APPS,
|
|
||||||
Preferences.PREF_SHOW_ANTI_FEATURE_APPS,
|
Preferences.PREF_SHOW_ANTI_FEATURE_APPS,
|
||||||
Preferences.PREF_SHOW_INCOMPAT_VERSIONS,
|
Preferences.PREF_SHOW_INCOMPAT_VERSIONS,
|
||||||
Preferences.PREF_THEME,
|
Preferences.PREF_THEME,
|
||||||
@ -157,12 +157,19 @@ public class PreferencesFragment extends PreferenceFragment
|
|||||||
languagePref.setEntries(languages.getAllNames());
|
languagePref.setEntries(languages.getAllNames());
|
||||||
languagePref.setEntryValues(languages.getSupportedLocales());
|
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) {
|
private void checkSummary(String key, int resId) {
|
||||||
Preference pref = findPreference(key);
|
Preference pref = findPreference(key);
|
||||||
|
if (pref != null) {
|
||||||
pref.setSummary(resId);
|
pref.setSummary(resId);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void entrySummary(String key) {
|
private void entrySummary(String key) {
|
||||||
ListPreference pref = (ListPreference) findPreference(key);
|
ListPreference pref = (ListPreference) findPreference(key);
|
||||||
@ -249,10 +256,6 @@ public class PreferencesFragment extends PreferenceFragment
|
|||||||
checkSummary(key, R.string.show_incompat_versions_on);
|
checkSummary(key, R.string.show_incompat_versions_on);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Preferences.PREF_SHOW_ROOT_APPS:
|
|
||||||
checkSummary(key, R.string.show_root_apps_on);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Preferences.PREF_SHOW_ANTI_FEATURE_APPS:
|
case Preferences.PREF_SHOW_ANTI_FEATURE_APPS:
|
||||||
checkSummary(key, R.string.show_anti_feature_apps_on);
|
checkSummary(key, R.string.show_anti_feature_apps_on);
|
||||||
break;
|
break;
|
||||||
|
@ -99,7 +99,9 @@ public class UpdatesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||||||
* {@link org.fdroid.fdroid.AppUpdateStatusManager.Status#UpdateAvailable} are not interesting here.
|
* {@link org.fdroid.fdroid.AppUpdateStatusManager.Status#UpdateAvailable} are not interesting here.
|
||||||
*/
|
*/
|
||||||
private boolean shouldShowStatus(AppUpdateStatusManager.AppUpdateStatus status) {
|
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.Installed ||
|
||||||
status.status == AppUpdateStatusManager.Status.ReadyToInstall;
|
status.status == AppUpdateStatusManager.Status.ReadyToInstall;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
private UpdateableAppsHeader header;
|
||||||
|
|
||||||
@ -81,8 +81,22 @@ public class UpdateableAppsHeader extends AppUpdateData {
|
|||||||
appsToUpdate = (TextView) itemView.findViewById(R.id.text_apps_to_update);
|
appsToUpdate = (TextView) itemView.findViewById(R.id.text_apps_to_update);
|
||||||
toggleAppsToUpdate = (Button) itemView.findViewById(R.id.button_toggle_apps_to_update);
|
toggleAppsToUpdate = (Button) itemView.findViewById(R.id.button_toggle_apps_to_update);
|
||||||
|
|
||||||
toggleAppsToUpdate.setOnClickListener(this);
|
toggleAppsToUpdate.setOnClickListener(new View.OnClickListener() {
|
||||||
downloadAll.setOnClickListener(this);
|
@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) {
|
public void bindHeader(UpdateableAppsHeader header) {
|
||||||
@ -101,16 +115,6 @@ public class UpdateableAppsHeader extends AppUpdateData {
|
|||||||
updateToggleButtonText();
|
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() {
|
private void updateToggleButtonText() {
|
||||||
if (header.adapter.canViewAllUpdateableApps()) {
|
if (header.adapter.canViewAllUpdateableApps()) {
|
||||||
toggleAppsToUpdate.setText(R.string.updates__hide_updateable_apps);
|
toggleAppsToUpdate.setText(R.string.updates__hide_updateable_apps);
|
||||||
|
@ -502,8 +502,6 @@
|
|||||||
<string name="repo_add_mirror">إضافة مستودع مِرآة</string>
|
<string name="repo_add_mirror">إضافة مستودع مِرآة</string>
|
||||||
<string name="sort_search">ترتيب حسب</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="force_touch_apps">إضافة التطبيقات التي تتطلّب لمس الشاشة</string>
|
||||||
<string name="hide_on_long_search_press_title">الإخفاء عن طريق زر البحث</string>
|
<string name="hide_on_long_search_press_title">الإخفاء عن طريق زر البحث</string>
|
||||||
<string name="hide_on_long_search_press_summary">الضغط المُطوّل على زر البحث يُمكّن مِن إخفاء التطبيق</string>
|
<string name="hide_on_long_search_press_summary">الضغط المُطوّل على زر البحث يُمكّن مِن إخفاء التطبيق</string>
|
||||||
|
@ -562,8 +562,6 @@
|
|||||||
<string name="menu_liberapay">Liberapay</string>
|
<string name="menu_liberapay">Liberapay</string>
|
||||||
|
|
||||||
<string name="warning_scaning_qr_code">Ваша камеры не падтрымлівае аўтафокус. Сканаванне кода можа быць абцяжаранае.</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">Паказваць прыкладанні для сэнсарнага экрана</string>
|
||||||
<string name="force_touch_apps_on">Паказваць прыкладанні, якія патрабуюць сэнсарны экран незалежна ад наяўнасці апаратнай падтрымкі</string>
|
<string name="force_touch_apps_on">Паказваць прыкладанні, якія патрабуюць сэнсарны экран незалежна ад наяўнасці апаратнай падтрымкі</string>
|
||||||
|
|
||||||
|
@ -499,7 +499,6 @@
|
|||||||
|
|
||||||
<string name="menu_liberapay">Liberapay</string>
|
<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_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>
|
<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="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="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">Inclou aplicacions amb característiques indesitjades</string>
|
||||||
<string name="show_anti_feature_apps_on">Mostra aplicacions que requereixen 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>
|
<string name="force_touch_apps">Inclou aplicacions per pantalla tàctil</string>
|
||||||
|
@ -537,8 +537,6 @@
|
|||||||
<string name="menu_liberapay">Liberapay</string>
|
<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="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">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="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>
|
<string name="force_touch_apps">Zahrnout aplikace pro dotykovou obrazovku</string>
|
||||||
|
@ -491,6 +491,4 @@
|
|||||||
<string name="antidisabledalgorithmlist">Denne app har en svag sikkerhedssignatur</string>
|
<string name="antidisabledalgorithmlist">Denne app har en svag sikkerhedssignatur</string>
|
||||||
<string name="antiknownvulnlist">Denne app indeholder en kendt sårbarhed</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>
|
</resources>
|
||||||
|
@ -522,8 +522,6 @@
|
|||||||
|
|
||||||
<string name="panic_hide_warning_title">Wiederherstellungsmethode merken</string>
|
<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="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_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_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>
|
<string name="repo_exists_enable">%1$s ist bereits eingestellt, bestätigen Sie, dass Sie erneut aktivieren möchten.</string>
|
||||||
|
@ -515,8 +515,6 @@
|
|||||||
<string name="menu_liberapay">Liberapay</string>
|
<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="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">Inkluzivi aplikaĵojn kun fiebloj</string>
|
||||||
<string name="show_anti_feature_apps_on">Montri aplikaĵojn, kiuj enhavas nedeziratajn eblojn</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>
|
<string name="force_touch_apps">Inkluzivi tuŝekranajn aplikaĵojn</string>
|
||||||
|
@ -536,8 +536,6 @@
|
|||||||
<string name="repo_exists_and_enabled">%1$s ya está configurado y habilitado.</string>
|
<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_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="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">Incluir aplicaciones controvertidas</string>
|
||||||
<string name="show_anti_feature_apps_on">Listar aplicaciones que requieren características 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>
|
<string name="force_touch_apps">Incluir aplicaciones de pantalla táctil</string>
|
||||||
|
@ -547,8 +547,6 @@
|
|||||||
<string name="menu_liberapay">Liberapay</string>
|
<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="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">Sartu ezaugarri zalantzagarriak dituzten aplikazioak</string>
|
||||||
<string name="show_anti_feature_apps_on">Erakutsi ezaugarri zalantzagarriak behar 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>
|
<string name="force_touch_apps">Sartu ukimen pantaila darabilten aplikazioak</string>
|
||||||
|
@ -517,8 +517,6 @@
|
|||||||
<string name="antidisabledalgorithmlist">این کاره یک امضای امنیتی ضعیف دارد</string>
|
<string name="antidisabledalgorithmlist">این کاره یک امضای امنیتی ضعیف دارد</string>
|
||||||
<string name="antiknownvulnlist">این کاره یک آسیبپذیری امنیتی شناختهشده دارد</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">شامل کارههای ضدویژگیدار</string>
|
||||||
<string name="show_anti_feature_apps_on">نمایش کارههایی که نیاز به ضدویژگی دارند</string>
|
<string name="show_anti_feature_apps_on">نمایش کارههایی که نیاز به ضدویژگی دارند</string>
|
||||||
<string name="force_touch_apps">شامل کارههای لمسی</string>
|
<string name="force_touch_apps">شامل کارههای لمسی</string>
|
||||||
|
@ -480,8 +480,6 @@
|
|||||||
<string name="antidisabledalgorithmlist">Tällä sovelluksella on heikko turvallisuusallekirjoitus</string>
|
<string name="antidisabledalgorithmlist">Tällä sovelluksella on heikko turvallisuusallekirjoitus</string>
|
||||||
<string name="antiknownvulnlist">Tämä sovellus sisältää tunnetun haavoittuvuuden</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">Sisällytä anti-ominaisuus -sovellukset</string>
|
||||||
<string name="show_anti_feature_apps_on">Näytä sovellukset, jotka vaativat anti-ominaisuuksia</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>
|
<string name="force_touch_apps">Sisällytä kosketusnäyttösovellukset</string>
|
||||||
|
@ -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="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="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_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_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>
|
<string name="repo_exists_add_mirror">Il s\'agit d\'une copie de %1$s, l\'ajouter comme miroir ?</string>
|
||||||
|
@ -538,8 +538,6 @@
|
|||||||
<string name="antidisabledalgorithmlist">Este aplicativo ten unha sinatura de seguridade feble</string>
|
<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="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">Incluir aplicativos con anti-funcionalidades</string>
|
||||||
<string name="show_anti_feature_apps_on">Amosar aplicativos que requiren de 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>
|
<string name="force_touch_apps">Incluir aplicativos de pantalla táctil</string>
|
||||||
|
@ -532,8 +532,6 @@
|
|||||||
<string name="menu_liberapay">Liberapay</string>
|
<string name="menu_liberapay">Liberapay</string>
|
||||||
|
|
||||||
<string name="warning_scaning_qr_code">כנראה שלמצלמה שלך אין מיקוד אוטומטי. סריקת הקוד עשויה להוות מכשול.</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">לכלול יישומונים שמכילים תכונות שליליות</string>
|
||||||
<string name="show_anti_feature_apps_on">הצגת יישומונים שדורשים תכונות שליליות</string>
|
<string name="show_anti_feature_apps_on">הצגת יישומונים שדורשים תכונות שליליות</string>
|
||||||
<string name="force_touch_apps">לכלול יישומוני מסך מגע</string>
|
<string name="force_touch_apps">לכלול יישומוני מסך מגע</string>
|
||||||
|
@ -473,7 +473,6 @@
|
|||||||
<string name="antidisabledalgorithmlist">Ennek az alkalmazásnak gyönge a biztonsági aláírása</string>
|
<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="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="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_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>
|
<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="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="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">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="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>
|
<string name="force_touch_apps">Érintőképernyős alkalmazások belefoglalása</string>
|
||||||
|
@ -514,8 +514,6 @@
|
|||||||
<string name="repo_exists_add_mirror">Ini adalah salinan dari %1$s, tambahkan sebagai mirror?</string>
|
<string name="repo_exists_add_mirror">Ini adalah salinan dari %1$s, tambahkan sebagai mirror?</string>
|
||||||
<string name="menu_liberapay">Liberapay</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">Termasuk apl anti-fitur</string>
|
||||||
<string name="show_anti_feature_apps_on">Tampilkan apl yg butuh 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>
|
<string name="force_touch_apps">Termasuk apl layar sentuh</string>
|
||||||
|
@ -561,8 +561,6 @@
|
|||||||
<string name="menu_liberapay">Liberapay</string>
|
<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="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">Hafa með forrit með ókostum</string>
|
||||||
<string name="show_anti_feature_apps_on">Birta forrit með óæskilegum eiginleikum</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>
|
<string name="force_touch_apps">Hafa með forrit sem þurfa snertiskjá</string>
|
||||||
|
@ -532,8 +532,6 @@
|
|||||||
<string name="repo_exists_add_mirror">Questa è una copia di %1$s, aggiungerla come mirror?</string>
|
<string name="repo_exists_add_mirror">Questa è una copia di %1$s, aggiungerla come mirror?</string>
|
||||||
<string name="menu_liberapay">Liberapay</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">Includi app con anti-caratteristiche</string>
|
||||||
<string name="show_anti_feature_apps_on">Mostra app che richiedono 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>
|
<string name="force_touch_apps">Includi app tattili</string>
|
||||||
|
@ -489,8 +489,6 @@
|
|||||||
<string name="repo_exists_and_enabled">%1$sはすでに設定済みで有効です。</string>
|
<string name="repo_exists_and_enabled">%1$sはすでに設定済みで有効です。</string>
|
||||||
<string name="repo_delete_to_overwrite">競合する鍵でこのリポジトリを追加するためには、先に%1$sを削除してください。</string>
|
<string name="repo_delete_to_overwrite">競合する鍵でこのリポジトリを追加するためには、先に%1$sを削除してください。</string>
|
||||||
<string name="repo_exists_add_mirror">これは%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">好ましくない機能の使用が必要なアプリ</string>
|
||||||
<string name="show_anti_feature_apps_on">好ましくない機能の使用を必要とするアプリを表示します</string>
|
<string name="show_anti_feature_apps_on">好ましくない機能の使用を必要とするアプリを表示します</string>
|
||||||
<string name="force_touch_apps">タッチスクリーンの使用が必要なアプリ</string>
|
<string name="force_touch_apps">タッチスクリーンの使用が必要なアプリ</string>
|
||||||
|
@ -479,8 +479,6 @@
|
|||||||
<string name="repo_exists_and_enabled">%1$s은(는) 이미 설정되어 있으며, 활성화됩니다.</string>
|
<string name="repo_exists_and_enabled">%1$s은(는) 이미 설정되어 있으며, 활성화됩니다.</string>
|
||||||
<string name="repo_delete_to_overwrite">이것과 충돌하는 키를 추가하려면 먼저 %1$s을(를) 삭제합니다.</string>
|
<string name="repo_delete_to_overwrite">이것과 충돌하는 키를 추가하려면 먼저 %1$s을(를) 삭제합니다.</string>
|
||||||
<string name="repo_exists_add_mirror">이것은 %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">안티 기능 앱을 포함</string>
|
||||||
<string name="show_anti_feature_apps_on">안티 기능이 필요한 앱을 보여주기</string>
|
<string name="show_anti_feature_apps_on">안티 기능이 필요한 앱을 보여주기</string>
|
||||||
<string name="force_touch_apps">터치스크린 앱을 포함</string>
|
<string name="force_touch_apps">터치스크린 앱을 포함</string>
|
||||||
|
@ -528,8 +528,6 @@
|
|||||||
<string name="menu_liberapay">Liberapay</string>
|
<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="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">Inkluder antifunksjons-programmer</string>
|
||||||
<string name="show_anti_feature_apps_on">Vis programmer som krever anti-funksjoner</string>
|
<string name="show_anti_feature_apps_on">Vis programmer som krever anti-funksjoner</string>
|
||||||
<string name="force_touch_apps">Inkluder pekeskjermsprogrammer</string>
|
<string name="force_touch_apps">Inkluder pekeskjermsprogrammer</string>
|
||||||
|
@ -238,8 +238,6 @@
|
|||||||
<string name="appcompatibility">Compatibiliteit van app</string>
|
<string name="appcompatibility">Compatibiliteit van app</string>
|
||||||
<string name="show_incompat_versions">Incompatibele versies tonen</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_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">Apps met antifuncties tonen</string>
|
||||||
<string name="show_anti_feature_apps_on">Toont apps die antifuncties bevatten</string>
|
<string name="show_anti_feature_apps_on">Toont apps die antifuncties bevatten</string>
|
||||||
<string name="force_touch_apps">Aanraakschermapps tonen</string>
|
<string name="force_touch_apps">Aanraakschermapps tonen</string>
|
||||||
|
@ -508,8 +508,6 @@
|
|||||||
<string name="menu_liberapay">Liberapay</string>
|
<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="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">Apps met antifuncties tonen</string>
|
||||||
<string name="show_anti_feature_apps_on">Toon apps die antifuncties bevatten</string>
|
<string name="show_anti_feature_apps_on">Toon apps die antifuncties bevatten</string>
|
||||||
<string name="force_touch_apps">Aanraakschermapps tonen</string>
|
<string name="force_touch_apps">Aanraakschermapps tonen</string>
|
||||||
|
@ -538,8 +538,6 @@
|
|||||||
<string name="menu_liberapay">Liberapay</string>
|
<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="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">Uwzględnij (trochę) niefajne aplikacje</string>
|
||||||
<string name="show_anti_feature_apps_on">Pokaż aplikacje zawierające niepożądane funkcje</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>
|
<string name="force_touch_apps">Uwzględnij aplikacje dotykowe</string>
|
||||||
|
@ -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="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_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="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="show_anti_feature_apps">Incluir aplicativos antifraude</string>
|
||||||
<string name="force_touch_apps">Incluir aplicativos touchscreen</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>
|
<string name="force_touch_apps_on">Mostrar aplicativos touchscreen independente do suporte de hardware</string>
|
||||||
|
@ -545,8 +545,6 @@
|
|||||||
<string name="repo_exists_add_mirror">Esta é uma cópia de %1$s, deseja adicionar como \'mirror\'?</string>
|
<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="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">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="show_anti_feature_apps_on">Mostrar aplicações que necessitem de anti-funcionalidades</string>
|
||||||
<string name="force_touch_apps">Incluir aplicações \'touchscreen\'</string>
|
<string name="force_touch_apps">Incluir aplicações \'touchscreen\'</string>
|
||||||
|
@ -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="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="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">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="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>
|
<string name="force_touch_apps">Include ecran tactil</string>
|
||||||
|
@ -526,8 +526,6 @@
|
|||||||
<string name="hide_on_long_search_press_summary">Длительное нажатие кнопки поиска скроет приложение</string>
|
<string name="hide_on_long_search_press_summary">Длительное нажатие кнопки поиска скроет приложение</string>
|
||||||
|
|
||||||
<string name="warning_scaning_qr_code">Ваша камера не поддерживает автофокус. Сканирование кода может быть затруднено.</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_add_mirror">Добавить зеркало</string>
|
||||||
<string name="repo_exists_add_mirror">Это копия %1$s, добавить ее как зеркало?</string>
|
<string name="repo_exists_add_mirror">Это копия %1$s, добавить ее как зеркало?</string>
|
||||||
<string name="show_anti_feature_apps">Включить приложения с сомнительным функционалом</string>
|
<string name="show_anti_feature_apps">Включить приложения с сомнительным функционалом</string>
|
||||||
|
@ -546,8 +546,6 @@
|
|||||||
<string name="menu_liberapay">Liberapay</string>
|
<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="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">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="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>
|
<string name="force_touch_apps">Inclue sas aplicatziones chi impreant s\'ischermu tàtile</string>
|
||||||
|
@ -232,8 +232,6 @@
|
|||||||
<string name="expert_on">Pokaži dodatne informacije in omogoči dodatne nastavitve</string>
|
<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_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="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="force_touch_apps">Vključi aplikacije, ki potrebujejo zaslone na dotik</string>
|
||||||
<string name="local_repo">Lokalni vir aplikacij</string>
|
<string name="local_repo">Lokalni vir aplikacij</string>
|
||||||
|
@ -243,8 +243,6 @@
|
|||||||
<string name="appcompatibility">Përshtatja e Aplikacioneve</string>
|
<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">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_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">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="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>
|
<string name="force_touch_apps">Përfshije aplikacionet me gjurmë gishtore</string>
|
||||||
|
@ -518,8 +518,6 @@
|
|||||||
<string name="antidisabledalgorithmlist">Denna app har en svag säkerhetssignatur</string>
|
<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="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">Inkludera mot-funktionsappar</string>
|
||||||
<string name="show_anti_feature_apps_on">Vis appar som kräver mot-funktioner</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>
|
<string name="force_touch_apps">Inkludera pekskärmsappar</string>
|
||||||
|
@ -202,8 +202,6 @@
|
|||||||
|
|
||||||
<string name="appcompatibility">అనువర్తన అనుకూలత</string>
|
<string name="appcompatibility">అనువర్తన అనుకూలత</string>
|
||||||
<string name="show_incompat_versions">సరిపడలేని వెర్షన్లను చేర్చండి</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="force_touch_apps">టచ్స్క్రీన్ అనువర్తనాలను చేర్చండి</string>
|
||||||
<string name="local_repo">స్థానిక రెపో</string>
|
<string name="local_repo">స్థానిక రెపో</string>
|
||||||
<string name="local_repo_running">F- Droid మారడానికి సిద్ధంగా ఉంది</string>
|
<string name="local_repo_running">F- Droid మారడానికి సిద్ధంగా ఉంది</string>
|
||||||
|
@ -521,8 +521,6 @@
|
|||||||
<string name="menu_liberapay">Liberapay</string>
|
<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="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">Karşıt-özellikli uygulamaları içer</string>
|
||||||
<string name="show_anti_feature_apps_on">Karşıt-özellikler gerektiren uygulamaları göster</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>
|
<string name="force_touch_apps">Dokunmatik ekran uygulamalarını içer</string>
|
||||||
|
@ -215,7 +215,6 @@
|
|||||||
<string name="antifeatures">ئىقتىدار-قارشى</string>
|
<string name="antifeatures">ئىقتىدار-قارشى</string>
|
||||||
<string name="expert_on">قوشۇمچە ئۇچۇرلانى كۆرسەت ۋە قوشۇمچە تەڭشەكلەرنى قوزغات</string>
|
<string name="expert_on">قوشۇمچە ئۇچۇرلانى كۆرسەت ۋە قوشۇمچە تەڭشەكلەرنى قوزغات</string>
|
||||||
|
|
||||||
<string name="show_root_apps_on">يىلتىز ھۇقۇقىنى تەلەپ قىلىدىغان ئۇيغۇلىمىلارنى كۆرسەت</string>
|
|
||||||
<string name="show_anti_feature_apps">ئىقتىدار-چەكلەش ئۇيغۇلىمىلىرىنى ئۆز ئىچىگە ئالىدۇ</string>
|
<string name="show_anti_feature_apps">ئىقتىدار-چەكلەش ئۇيغۇلىمىلىرىنى ئۆز ئىچىگە ئالىدۇ</string>
|
||||||
<string name="local_repo">يەرلىك ئامبار</string>
|
<string name="local_repo">يەرلىك ئامبار</string>
|
||||||
<string name="deleting_repo">ھازىرقى ئامبار ئۆچۈرۈلىۋاتىدۇ…</string>
|
<string name="deleting_repo">ھازىرقى ئامبار ئۆچۈرۈلىۋاتىدۇ…</string>
|
||||||
|
@ -541,8 +541,6 @@
|
|||||||
<string name="repo_exists_enable">%1$s вже налаштовано, підтвердьте, що бажаєте наново увімкнути.</string>
|
<string name="repo_exists_enable">%1$s вже налаштовано, підтвердьте, що бажаєте наново увімкнути.</string>
|
||||||
<string name="repo_exists_and_enabled">%1$s вже налаштовано і увімкнуто.</string>
|
<string name="repo_exists_and_enabled">%1$s вже налаштовано і увімкнуто.</string>
|
||||||
<string name="repo_delete_to_overwrite">Спершу видаліть %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="share_repository">Поділитися репозиторієм</string>
|
||||||
<string name="use_bluetooth">Використовувати Bluetooth</string>
|
<string name="use_bluetooth">Використовувати Bluetooth</string>
|
||||||
<string name="swap_toast_hotspot_enabled">Точку доступу Wi-Fi увімкнуто</string>
|
<string name="swap_toast_hotspot_enabled">Точку доступу Wi-Fi увімкнуто</string>
|
||||||
|
@ -493,8 +493,6 @@
|
|||||||
<string name="antidisabledalgorithmlist">Ứng dụng này có chữ kí bảo mật yếu</string>
|
<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="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">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="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>
|
<string name="force_touch_apps">Hiện ứng dụng cảm ứng</string>
|
||||||
|
@ -478,8 +478,6 @@
|
|||||||
<string name="hide_on_long_search_press_summary">长按搜索按钮将隐藏此应用</string>
|
<string name="hide_on_long_search_press_summary">长按搜索按钮将隐藏此应用</string>
|
||||||
|
|
||||||
<string name="warning_scaning_qr_code">您的相机似乎没有自动对焦。扫描二维码可能较为困难。</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">包括带有 anti-feature 的应用</string>
|
||||||
<string name="show_anti_feature_apps_on">显示需要 anti-feature 的应用程序</string>
|
<string name="show_anti_feature_apps_on">显示需要 anti-feature 的应用程序</string>
|
||||||
<string name="repo_add_mirror">添加镜像</string>
|
<string name="repo_add_mirror">添加镜像</string>
|
||||||
|
@ -500,8 +500,6 @@
|
|||||||
<string name="menu_liberapay">Liberapay</string>
|
<string name="menu_liberapay">Liberapay</string>
|
||||||
|
|
||||||
<string name="warning_scaning_qr_code">您的相機似乎沒有自動對焦。掃描代碼可能會很困難。</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">包括反特徵應用程式</string>
|
||||||
<string name="show_anti_feature_apps_on">顯示需要反特徵的應用程式</string>
|
<string name="show_anti_feature_apps_on">顯示需要反特徵的應用程式</string>
|
||||||
<string name="force_touch_apps">包括觸控式螢幕的應用程式</string>
|
<string name="force_touch_apps">包括觸控式螢幕的應用程式</string>
|
||||||
|
@ -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="appcompatibility">App compatibility</string>
|
||||||
<string name="show_incompat_versions">Include incompatible versions</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_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">Include anti-feature apps</string>
|
||||||
<string name="show_anti_feature_apps_on">Show apps that require anti-features</string>
|
<string name="show_anti_feature_apps_on">Show apps that require anti-features</string>
|
||||||
<string name="force_touch_apps">Include touchscreen apps</string>
|
<string name="force_touch_apps">Include touchscreen apps</string>
|
||||||
|
@ -76,15 +76,12 @@
|
|||||||
android:entryValues="@array/themeValues"/>
|
android:entryValues="@array/themeValues"/>
|
||||||
</android.support.v7.preference.PreferenceCategory>
|
</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
|
<SwitchPreference
|
||||||
android:title="@string/show_incompat_versions"
|
android:title="@string/show_incompat_versions"
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:key="incompatibleVersions"/>
|
android:key="incompatibleVersions"/>
|
||||||
<SwitchPreference
|
|
||||||
android:title="@string/show_root_apps"
|
|
||||||
android:defaultValue="true"
|
|
||||||
android:key="rooted"/>
|
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
android:title="@string/show_anti_feature_apps"
|
android:title="@string/show_anti_feature_apps"
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
|
@ -118,8 +118,6 @@ public class PreferencesTest {
|
|||||||
preferences.showAppsWithAntiFeatures());
|
preferences.showAppsWithAntiFeatures());
|
||||||
assertEquals(defaults.getBoolean(Preferences.PREF_SHOW_INCOMPAT_VERSIONS, false),
|
assertEquals(defaults.getBoolean(Preferences.PREF_SHOW_INCOMPAT_VERSIONS, false),
|
||||||
preferences.showIncompatibleVersions());
|
preferences.showIncompatibleVersions());
|
||||||
assertEquals(defaults.getBoolean(Preferences.PREF_SHOW_ROOT_APPS, false),
|
|
||||||
preferences.showAppsRequiringRoot());
|
|
||||||
assertEquals(defaults.getBoolean(Preferences.PREF_UPDATE_NOTIFICATION_ENABLED, false),
|
assertEquals(defaults.getBoolean(Preferences.PREF_UPDATE_NOTIFICATION_ENABLED, false),
|
||||||
preferences.isUpdateNotificationEnabled());
|
preferences.isUpdateNotificationEnabled());
|
||||||
|
|
||||||
|
@ -101,6 +101,10 @@ public class AppDetailsAdapterTest extends FDroidProviderTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private final AppDetailsRecyclerViewAdapter.AppDetailsRecyclerViewAdapterCallbacks dummyCallbacks = new AppDetailsRecyclerViewAdapter.AppDetailsRecyclerViewAdapterCallbacks() { // NOCHECKSTYLE LineLength
|
private final AppDetailsRecyclerViewAdapter.AppDetailsRecyclerViewAdapterCallbacks dummyCallbacks = new AppDetailsRecyclerViewAdapter.AppDetailsRecyclerViewAdapterCallbacks() { // NOCHECKSTYLE LineLength
|
||||||
|
@Override
|
||||||
|
public boolean isAppDownloading() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void enableAndroidBeam() {
|
public void enableAndroidBeam() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user