Merge branch 'more-crash-fixes' into 'master'
More crash fixes Closes #1332 See merge request fdroid/fdroidclient!651
This commit is contained in:
commit
a7ebb7827a
@ -7,6 +7,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Build;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.support.annotation.NonNull;
|
||||
@ -36,7 +37,6 @@ import java.util.Map;
|
||||
* and {@code versionCode} since there could be different copies of the same
|
||||
* APK on different servers, signed by different keys, or even different builds.
|
||||
*/
|
||||
@SuppressWarnings("LineLength")
|
||||
public final class AppUpdateStatusManager {
|
||||
|
||||
private static final String TAG = "AppUpdateStatusManager";
|
||||
@ -132,7 +132,7 @@ public final class AppUpdateStatusManager {
|
||||
*/
|
||||
public String toString() {
|
||||
return app.packageName + " [Status: " + status
|
||||
+ ", Progress: " + progressCurrent + " / " + progressMax + "]";
|
||||
+ ", Progress: " + progressCurrent + " / " + progressMax + ']';
|
||||
}
|
||||
|
||||
protected AppUpdateStatus(Parcel in) {
|
||||
@ -257,20 +257,14 @@ public final class AppUpdateStatusManager {
|
||||
boolean isStatusUpdate = entry.status != status;
|
||||
entry.status = status;
|
||||
entry.intent = intent;
|
||||
// If intent not set, see if we need to create a default intent
|
||||
if (entry.intent == null) {
|
||||
entry.intent = getContentIntent(entry);
|
||||
}
|
||||
setEntryContentIntentIfEmpty(entry);
|
||||
notifyChange(entry, isStatusUpdate);
|
||||
}
|
||||
|
||||
private void addApkInternal(@NonNull Apk apk, @NonNull Status status, PendingIntent intent) {
|
||||
Utils.debugLog(LOGTAG, "Add APK " + apk.apkName + " with state " + status.name());
|
||||
AppUpdateStatus entry = createAppEntry(apk, status, intent);
|
||||
// If intent not set, see if we need to create a default intent
|
||||
if (entry.intent == null) {
|
||||
entry.intent = getContentIntent(entry);
|
||||
}
|
||||
setEntryContentIntentIfEmpty(entry);
|
||||
appMapping.put(entry.getUniqueKey(), entry);
|
||||
notifyAdd(entry);
|
||||
}
|
||||
@ -453,6 +447,7 @@ public final class AppUpdateStatusManager {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("LineLength")
|
||||
void clearAllUpdates() {
|
||||
synchronized (appMapping) {
|
||||
for (Iterator<Map.Entry<String, AppUpdateStatus>> it = appMapping.entrySet().iterator(); it.hasNext(); ) { // NOCHECKSTYLE EmptyForIteratorPad
|
||||
@ -465,6 +460,7 @@ public final class AppUpdateStatusManager {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("LineLength")
|
||||
void clearAllInstalled() {
|
||||
synchronized (appMapping) {
|
||||
for (Iterator<Map.Entry<String, AppUpdateStatus>> it = appMapping.entrySet().iterator(); it.hasNext(); ) { // NOCHECKSTYLE EmptyForIteratorPad
|
||||
@ -477,28 +473,46 @@ public final class AppUpdateStatusManager {
|
||||
}
|
||||
}
|
||||
|
||||
private PendingIntent getContentIntent(AppUpdateStatus entry) {
|
||||
/**
|
||||
* If the {@link PendingIntent} aimed at {@link Notification.Builder#setContentIntent(PendingIntent)}
|
||||
* is not set, then create a default one. The goal is to link the notification
|
||||
* to the most relevant action, like the installer if the APK is downloaded, or the launcher once
|
||||
* installed, if possible, or other relevant action. If there is no app launch
|
||||
* {@code PendingIntent}, the app is probably not launchable, e.g. its a keyboard.
|
||||
* If there is not an {@code PendingIntent} to install the app, this creates an {@code PendingIntent}
|
||||
* to open up the app details page for the app. From there, the user can hit "install".
|
||||
* <p>
|
||||
* Before {@code android-11}, a {@code ContentIntent} was required in every
|
||||
* {@link Notification}. This generates a boilerplate one for places where
|
||||
* there isn't an obvious one.
|
||||
*/
|
||||
private void setEntryContentIntentIfEmpty(AppUpdateStatus entry) {
|
||||
if (entry.intent != null) {
|
||||
return;
|
||||
}
|
||||
switch (entry.status) {
|
||||
case UpdateAvailable:
|
||||
case ReadyToInstall:
|
||||
// Make sure we have an intent to install the app. If not set, we create an intent
|
||||
// to open up the app details page for the app. From there, the user can hit "install"
|
||||
return getAppDetailsIntent(entry.apk);
|
||||
|
||||
entry.intent = getAppDetailsIntent(entry.apk);
|
||||
break;
|
||||
case InstallError:
|
||||
return getAppErrorIntent(entry);
|
||||
|
||||
entry.intent = getAppErrorIntent(entry);
|
||||
break;
|
||||
case Installed:
|
||||
PackageManager pm = context.getPackageManager();
|
||||
Intent intentObject = pm.getLaunchIntentForPackage(entry.app.packageName);
|
||||
if (intentObject != null) {
|
||||
return PendingIntent.getActivity(context, 0, intentObject, 0);
|
||||
entry.intent = PendingIntent.getActivity(context, 0, intentObject, 0);
|
||||
} else {
|
||||
// Could not get launch intent, maybe not launchable, e.g. a keyboard
|
||||
return getAppDetailsIntent(entry.apk);
|
||||
entry.intent = getAppDetailsIntent(entry.apk);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (Build.VERSION.SDK_INT < 11 && entry.intent == null) {
|
||||
Intent intent = new Intent();
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
entry.intent = PendingIntent.getActivity(context, 0, intent, 0);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -77,9 +77,12 @@ class NotificationHelper {
|
||||
BroadcastReceiver receiverAppStatusChanges = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (intent == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
AppUpdateStatusManager.AppUpdateStatus entry;
|
||||
String url;
|
||||
|
||||
switch (intent.getAction()) {
|
||||
case AppUpdateStatusManager.BROADCAST_APPSTATUS_LIST_CHANGED:
|
||||
notificationManager.cancelAll();
|
||||
@ -434,11 +437,6 @@ class NotificationHelper {
|
||||
PendingIntent piDeleted = PendingIntent.getBroadcast(context, 0, intentDeleted, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
builder.setDeleteIntent(piDeleted);
|
||||
|
||||
if (Build.VERSION.SDK_INT < 11) {
|
||||
Intent intent = new Intent();
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
builder.setContentIntent(PendingIntent.getActivity(context, 0, intent, 0));
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
|
@ -4,9 +4,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.util.Base64;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.fdroid.fdroid.data.Repo;
|
||||
import org.fdroid.fdroid.data.RepoProvider;
|
||||
@ -21,6 +19,7 @@ import java.io.UnsupportedEncodingException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipInputStream;
|
||||
@ -36,7 +35,7 @@ public class Provisioner {
|
||||
/**
|
||||
* This is the name of the subfolder in the file directory of this app
|
||||
* where {@link Provisioner} looks for new provisions.
|
||||
*
|
||||
* <p>
|
||||
* eg. in the Emulator (API level 24): /data/user/0/org.fdroid.fdroid.debug/files/provisions
|
||||
*/
|
||||
private static final String NEW_PROVISIONS_DIR = "provisions";
|
||||
@ -47,9 +46,12 @@ public class Provisioner {
|
||||
/**
|
||||
* search for provision files and process them
|
||||
*/
|
||||
public static void scanAndProcess(Context context) {
|
||||
|
||||
File provisionDir = new File(context.getExternalFilesDir(null).getAbsolutePath(), NEW_PROVISIONS_DIR);
|
||||
static void scanAndProcess(Context context) {
|
||||
File externalFilesDir = context.getExternalFilesDir(null);
|
||||
if (externalFilesDir == null) {
|
||||
return;
|
||||
}
|
||||
File provisionDir = new File(externalFilesDir.getAbsolutePath(), NEW_PROVISIONS_DIR);
|
||||
|
||||
if (!provisionDir.isDirectory()) {
|
||||
Utils.debugLog(TAG, "Provisions dir does not exists: '" + provisionDir.getAbsolutePath() + "' moving on ...");
|
||||
@ -79,21 +81,24 @@ public class Provisioner {
|
||||
Uri origUrl = Uri.parse(repo.getUrl());
|
||||
Uri.Builder data = new Uri.Builder();
|
||||
data.scheme(origUrl.getScheme());
|
||||
data.encodedAuthority(Uri.encode(repo.getUsername()) + ":" + Uri.encode(repo.getPassword()) + "@" + Uri.encode(origUrl.getAuthority()));
|
||||
data.encodedAuthority(Uri.encode(repo.getUsername()) + ':'
|
||||
+ Uri.encode(repo.getPassword()) + '@' + Uri.encode(origUrl.getAuthority()));
|
||||
data.path(origUrl.getPath());
|
||||
data.appendQueryParameter("fingerprint", repo.getSigfp());
|
||||
Intent i = new Intent(context, ManageReposActivity.class);
|
||||
i.setData(data.build());
|
||||
context.startActivity(i);
|
||||
Utils.debugLog(TAG, "Provision processed: '" + provision.getProvisonPath() + "' prompted user ...");
|
||||
Utils.debugLog(TAG, "Provision processed: '"
|
||||
+ provision.getProvisonPath() + "' prompted user ...");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// remove provision file
|
||||
try {
|
||||
new File(provision.getProvisonPath()).delete();
|
||||
cleanupCounter++;
|
||||
if (new File(provision.getProvisonPath()).delete()) {
|
||||
cleanupCounter++;
|
||||
}
|
||||
} catch (SecurityException e) {
|
||||
// ignore this exception
|
||||
Utils.debugLog(TAG, "Removing provision not possible: " + e.getMessage() + " ()");
|
||||
@ -104,14 +109,18 @@ public class Provisioner {
|
||||
}
|
||||
}
|
||||
|
||||
public List<File> findProvisionFiles(Context context) {
|
||||
String provisionDirPath = context.getExternalFilesDir(null).getAbsolutePath() + File.separator + NEW_PROVISIONS_DIR;
|
||||
return findProvisionFilesInDir(new File(provisionDirPath));
|
||||
private List<File> findProvisionFiles(Context context) {
|
||||
File externalFilesDir = context.getExternalFilesDir(null);
|
||||
if (externalFilesDir == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
File provisionDir = new File(externalFilesDir.getAbsolutePath(), NEW_PROVISIONS_DIR);
|
||||
return findProvisionFilesInDir(provisionDir);
|
||||
}
|
||||
|
||||
protected List<File> findProvisionFilesInDir(File file) {
|
||||
List<File> findProvisionFilesInDir(File file) {
|
||||
if (file == null || !file.isDirectory()) {
|
||||
return new ArrayList<>();
|
||||
return Collections.emptyList();
|
||||
}
|
||||
try {
|
||||
File[] files = file.listFiles(new FilenameFilter() {
|
||||
@ -145,7 +154,7 @@ public class Provisioner {
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
protected String deobfuscate(String obfuscated) {
|
||||
String deobfuscate(String obfuscated) {
|
||||
try {
|
||||
return new String(Base64.decode(rot13(obfuscated), Base64.DEFAULT), "UTF-8");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
@ -154,7 +163,7 @@ public class Provisioner {
|
||||
}
|
||||
}
|
||||
|
||||
protected List<ProvisionPlaintext> extractProvisionsPlaintext(List<File> files) {
|
||||
List<ProvisionPlaintext> extractProvisionsPlaintext(List<File> files) {
|
||||
List<ProvisionPlaintext> result = new ArrayList<>();
|
||||
if (files != null) {
|
||||
for (File file : files) {
|
||||
@ -163,7 +172,7 @@ public class Provisioner {
|
||||
ZipInputStream in = null;
|
||||
try {
|
||||
in = new ZipInputStream(new FileInputStream(file));
|
||||
ZipEntry zipEntry = null;
|
||||
ZipEntry zipEntry;
|
||||
while ((zipEntry = in.getNextEntry()) != null) {
|
||||
String name = zipEntry.getName();
|
||||
if ("repo_provision.json".equals(name)) {
|
||||
@ -194,7 +203,7 @@ public class Provisioner {
|
||||
return result;
|
||||
}
|
||||
|
||||
public List<Provision> parseProvisions(List<ProvisionPlaintext> provisionPlaintexts) {
|
||||
List<Provision> parseProvisions(List<ProvisionPlaintext> provisionPlaintexts) {
|
||||
|
||||
List<Provision> provisions = new ArrayList<>();
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
@ -216,44 +225,44 @@ public class Provisioner {
|
||||
return provisions;
|
||||
}
|
||||
|
||||
public static class ProvisionPlaintext {
|
||||
static class ProvisionPlaintext {
|
||||
private String provisionPath;
|
||||
private String repositoryProvision;
|
||||
|
||||
public String getProvisionPath() {
|
||||
String getProvisionPath() {
|
||||
return provisionPath;
|
||||
}
|
||||
|
||||
public void setProvisionPath(String provisionPath) {
|
||||
void setProvisionPath(String provisionPath) {
|
||||
this.provisionPath = provisionPath;
|
||||
}
|
||||
|
||||
public String getRepositoryProvision() {
|
||||
String getRepositoryProvision() {
|
||||
return repositoryProvision;
|
||||
}
|
||||
|
||||
public void setRepositoryProvision(String repositoryProvision) {
|
||||
void setRepositoryProvision(String repositoryProvision) {
|
||||
this.repositoryProvision = repositoryProvision;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Provision {
|
||||
static class Provision {
|
||||
private String provisonPath;
|
||||
private RepositoryProvision repositoryProvision;
|
||||
|
||||
public String getProvisonPath() {
|
||||
String getProvisonPath() {
|
||||
return provisonPath;
|
||||
}
|
||||
|
||||
public void setProvisonPath(String provisonPath) {
|
||||
void setProvisonPath(String provisonPath) {
|
||||
this.provisonPath = provisonPath;
|
||||
}
|
||||
|
||||
public RepositoryProvision getRepositoryProvision() {
|
||||
RepositoryProvision getRepositoryProvision() {
|
||||
return repositoryProvision;
|
||||
}
|
||||
|
||||
public void setRepositoryProvision(RepositoryProvision repositoryProvision) {
|
||||
void setRepositoryProvision(RepositoryProvision repositoryProvision) {
|
||||
this.repositoryProvision = repositoryProvision;
|
||||
}
|
||||
}
|
||||
|
@ -38,12 +38,10 @@ import android.text.style.TypefaceSpan;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
|
||||
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
||||
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
|
||||
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
|
||||
import com.nostra13.universalimageloader.utils.StorageUtils;
|
||||
|
||||
import org.fdroid.fdroid.compat.FileCompat;
|
||||
import org.fdroid.fdroid.data.Repo;
|
||||
import org.fdroid.fdroid.data.SanitizedFile;
|
||||
@ -91,7 +89,7 @@ public final class Utils {
|
||||
new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss", Locale.ENGLISH);
|
||||
|
||||
private static final String[] FRIENDLY_SIZE_FORMAT = {
|
||||
"%.0f B", "%.0f KiB", "%.1f MiB", "%.2f GiB",
|
||||
"%.0f B", "%.0f KiB", "%.1f MiB", "%.2f GiB",
|
||||
};
|
||||
|
||||
public static final String FALLBACK_ICONS_DIR = "/icons/";
|
||||
@ -205,31 +203,31 @@ public final class Utils {
|
||||
}
|
||||
|
||||
private static final String[] ANDROID_VERSION_NAMES = {
|
||||
"?", // 0, undefined
|
||||
"1.0", // 1
|
||||
"1.1", // 2
|
||||
"1.5", // 3
|
||||
"1.6", // 4
|
||||
"2.0", // 5
|
||||
"2.0.1", // 6
|
||||
"2.1", // 7
|
||||
"2.2", // 8
|
||||
"2.3", // 9
|
||||
"2.3.3", // 10
|
||||
"3.0", // 11
|
||||
"3.1", // 12
|
||||
"3.2", // 13
|
||||
"4.0", // 14
|
||||
"4.0.3", // 15
|
||||
"4.1", // 16
|
||||
"4.2", // 17
|
||||
"4.3", // 18
|
||||
"4.4", // 19
|
||||
"4.4W", // 20
|
||||
"5.0", // 21
|
||||
"5.1", // 22
|
||||
"6.0", // 23
|
||||
"7.0", // 24
|
||||
"?", // 0, undefined
|
||||
"1.0", // 1
|
||||
"1.1", // 2
|
||||
"1.5", // 3
|
||||
"1.6", // 4
|
||||
"2.0", // 5
|
||||
"2.0.1", // 6
|
||||
"2.1", // 7
|
||||
"2.2", // 8
|
||||
"2.3", // 9
|
||||
"2.3.3", // 10
|
||||
"3.0", // 11
|
||||
"3.1", // 12
|
||||
"3.2", // 13
|
||||
"4.0", // 14
|
||||
"4.0.3", // 15
|
||||
"4.1", // 16
|
||||
"4.2", // 17
|
||||
"4.3", // 18
|
||||
"4.4", // 19
|
||||
"4.4W", // 20
|
||||
"5.0", // 21
|
||||
"5.1", // 22
|
||||
"6.0", // 23
|
||||
"7.0", // 24
|
||||
};
|
||||
|
||||
public static String getAndroidVersionName(int sdkLevel) {
|
||||
@ -400,7 +398,16 @@ public final class Utils {
|
||||
/**
|
||||
* Get the checksum hash of the file {@code apk} using the algorithm in {@code algo}.
|
||||
* {@code apk} must exist on the filesystem and {@code algo} must be supported
|
||||
* by this device, otherwise an {@link IllegalArgumentException} is thrown.
|
||||
* by this device, otherwise an {@link IllegalArgumentException} is thrown. This
|
||||
* method must be very defensive about checking whether the file exists, since APKs
|
||||
* can be uninstalled/deleted in background at any time, even if this is in the
|
||||
* middle of running.
|
||||
* <p>
|
||||
* This also will run into filesystem corruption if the device is having trouble.
|
||||
* So hide those so F-Droid does not pop up crash reports about that. As such this
|
||||
* exception-message-parsing-and-throwing-a-new-ignorable-exception-hackery is
|
||||
* probably warranted. See https://www.gitlab.com/fdroid/fdroidclient/issues/855
|
||||
* for more detail.
|
||||
*/
|
||||
public static String getBinaryHash(File apk, String algo) {
|
||||
FileInputStream fis = null;
|
||||
@ -418,14 +425,12 @@ public final class Utils {
|
||||
byte[] mdbytes = md.digest();
|
||||
return toHexString(mdbytes).toLowerCase(Locale.ENGLISH);
|
||||
} catch (IOException e) {
|
||||
// The annoyance (potentially) caused by miscellaneous filesystem corruption results in
|
||||
// F-Droid constantly popping up crash reports when F-Droid isn't even open. As such this
|
||||
// exception-message-parsing-and-throwing-a-new-ignorable-exception-hackery is probably
|
||||
// warranted. See https://www.gitlab.com/fdroid/fdroidclient/issues/855 for more detail.
|
||||
if (e.getMessage().contains("read failed: EIO (I/O error)")) {
|
||||
throw new PotentialFilesystemCorruptionException(e);
|
||||
String message = e.getMessage();
|
||||
if (message.contains("read failed: EIO (I/O error)")) {
|
||||
Utils.debugLog(TAG, "potential filesystem corruption while accessing " + apk + ": " + message);
|
||||
} else if (message.contains(" ENOENT ")) {
|
||||
Utils.debugLog(TAG, apk + " vanished: " + message);
|
||||
}
|
||||
|
||||
throw new IllegalArgumentException(e);
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
throw new IllegalArgumentException(e);
|
||||
@ -434,12 +439,6 @@ public final class Utils {
|
||||
}
|
||||
}
|
||||
|
||||
public static class PotentialFilesystemCorruptionException extends IllegalArgumentException {
|
||||
public PotentialFilesystemCorruptionException(IOException e) {
|
||||
super(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Computes the base 16 representation of the byte array argument.
|
||||
*
|
||||
@ -537,10 +536,10 @@ public final class Utils {
|
||||
|
||||
public static String formatLastUpdated(@NonNull Resources res, @NonNull Date date) {
|
||||
long msDiff = Calendar.getInstance().getTimeInMillis() - date.getTime();
|
||||
long days = msDiff / DateUtils.DAY_IN_MILLIS;
|
||||
long weeks = msDiff / (DateUtils.DAY_IN_MILLIS * 7);
|
||||
long days = msDiff / DateUtils.DAY_IN_MILLIS;
|
||||
long weeks = msDiff / (DateUtils.DAY_IN_MILLIS * 7);
|
||||
long months = msDiff / (DateUtils.DAY_IN_MILLIS * 30);
|
||||
long years = msDiff / (DateUtils.DAY_IN_MILLIS * 365);
|
||||
long years = msDiff / (DateUtils.DAY_IN_MILLIS * 365);
|
||||
|
||||
if (days < 1) {
|
||||
return res.getString(R.string.details_last_updated_today);
|
||||
|
@ -11,11 +11,9 @@ import android.net.Uri;
|
||||
import android.os.Process;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
import org.acra.ACRA;
|
||||
import org.fdroid.fdroid.AppUpdateStatusManager;
|
||||
import org.fdroid.fdroid.Hasher;
|
||||
import org.fdroid.fdroid.R;
|
||||
import org.fdroid.fdroid.Utils;
|
||||
import org.fdroid.fdroid.data.Schema.InstalledAppTable;
|
||||
import rx.functions.Action1;
|
||||
@ -249,15 +247,6 @@ public class InstalledAppProviderService extends IntentService {
|
||||
}
|
||||
|
||||
insertAppIntoDb(this, packageInfo, hashType, hash);
|
||||
} catch (Utils.PotentialFilesystemCorruptionException e) {
|
||||
String msg = getString(R.string.installed_app__file_corrupt, apk.getAbsolutePath());
|
||||
Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
|
||||
Log.e(TAG, "Encountered potential filesystem corruption, or other unknown " +
|
||||
"problem when calculating hash of " + apk.getAbsolutePath() + ". " +
|
||||
"It is unlikely F-Droid can do anything about this, and this " +
|
||||
"likely happened in the background. As such, we will continue without " +
|
||||
"interrupting the user by asking them to send a crash report.");
|
||||
return;
|
||||
} catch (IllegalArgumentException e) {
|
||||
Utils.debugLog(TAG, e.getMessage());
|
||||
ACRA.getErrorReporter().handleException(e, false);
|
||||
|
@ -63,7 +63,6 @@ import java.util.Set;
|
||||
* TODO: If a user downloads an old version of an app (resulting in a new update being available
|
||||
* instantly), then we need to refresh the list of apps to update.
|
||||
*/
|
||||
@SuppressWarnings("LineLength")
|
||||
public class UpdatesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
||||
implements LoaderManager.LoaderCallbacks<Cursor> {
|
||||
|
||||
@ -170,9 +169,7 @@ public class UpdatesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
||||
}
|
||||
}
|
||||
|
||||
for (KnownVulnApp app : knownVulnApps) {
|
||||
items.add(app);
|
||||
}
|
||||
items.addAll(knownVulnApps);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -329,6 +326,9 @@ public class UpdatesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
||||
private final BroadcastReceiver receiverAppStatusChanges = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (intent == null) {
|
||||
return;
|
||||
}
|
||||
switch (intent.getAction()) {
|
||||
case AppUpdateStatusManager.BROADCAST_APPSTATUS_LIST_CHANGED:
|
||||
onManyAppStatusesChanged(intent.getStringExtra(AppUpdateStatusManager.EXTRA_REASON_FOR_CHANGE));
|
||||
|
@ -467,7 +467,6 @@
|
||||
|
||||
<string name="app_list__dismiss_app_update">التحديث تم تخطيه</string>
|
||||
<string name="app_list__dismiss_vulnerable_app">تخطي الحساسية</string>
|
||||
<string name="installed_app__file_corrupt">أف-درويد تلقي خطأ EIO:ربما %s تالف!</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_uninstall">لقد وجدنا ثغرة في %1$s. نحن نوصي بإلغاء تثبيت هذا التطبيق في الحال.</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_upgrade">لقد وجدنا ثغرة في %1$s. نحن نوصي بالتحديث إلي أحدث إصدار في الحال.</string>
|
||||
<string name="latest__empty_state__never_updated">حينما يتم تحديث قائمة التطبيقات، التطبيقات الأخيرة سوف تظهر هنا</string>
|
||||
|
@ -509,7 +509,6 @@
|
||||
<string name="app_list__dismiss_vulnerable_app">Inseguridá inorada</string>
|
||||
<string name="app_list__dismiss_downloading_app">Descarga encaboxada</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid recibió un error EIO: ¡probablemente %s ta corrompíu!</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_uninstall">Alcontramos una inseguridá con %1$s. Recomendamos desinstalar esta app nel intre.</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_upgrade">Alcontramos una inseguridá con %1$s. Recomendamos actualizar a la versión más nueva nel intre.</string>
|
||||
<string name="updates__app_with_known_vulnerability__ignore">Inorar</string>
|
||||
|
@ -545,7 +545,6 @@
|
||||
|
||||
<string name="empty_search_available_app_list">Няма супадзенняў сярод даступных праграм.</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid атрымаў EIO-памылку: %s верагодна пашкоджаны!</string>
|
||||
<string name="app_list__dismiss_app_update">Абнаўленне ігнаруецца</string>
|
||||
<string name="app_list__dismiss_vulnerable_app">Уразлівасць ігнаруецца</string>
|
||||
<string name="app_list__dismiss_downloading_app">Спампоўка адмененая</string>
|
||||
|
@ -498,7 +498,6 @@
|
||||
<string name="app_list_download_ready">Изтeглено и готово за инсталиране</string>
|
||||
<string name="app_list__dismiss_downloading_app">Спряно изтегляне</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">Входно-изходна грешка. %s вероятно е повреден!</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_upgrade">Открита е уязвимост в %1$s. Препоръчва се незабавно обновяване до най-новата версия.</string>
|
||||
<string name="privacy">Лични данни</string>
|
||||
<string name="preventScreenshots_title">Без снимки на екрана</string>
|
||||
|
@ -466,7 +466,6 @@
|
||||
<string name="app_list__dismiss_vulnerable_app">ཡ་ལན་མ་བྱས་པའི་ཉེན་ཁ།</string>
|
||||
<string name="app_list__dismiss_downloading_app">ཕབ་ལེན་བརྩི་མེད།</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">ཨེཕ་རོཌ་ལ་EIO ནོར་སྐྱོན་འདུག :%s ཕལ་ཆེར་སྐྱོན་ཤོར་ཡོད་ས་རེད།</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_uninstall">ང་ཚོས་ %1$s འདི་དང་མཉམ་དུ་ཉེན་ཁ་འབྱུང་ཉེ་བ་རྙེད་སོང་། མཉེན་ཆས་འདི་ལམ་སེང་ཕྱིར་དབྱུང་བྱེད་རྒྱུའི་རེ་བ་ཞུ་གི་ཡོད།</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_upgrade">ང་ཚོས་ %1$s འདི་དང་མཉམ་དུ་ཉེན་ཁ་འབྱུང་ཉེ་བ་རྙེད་སོང་། ཁྱེད་རང་གིས་གང་མགྱོགས་ཐོན་རིམ་གསར་ཤོས་འདི་ལ་གསར་བསྒྱུར་བྱེད་རྒྱུའི་རེ་བ་འདོན་རྒྱུ་ཡིན།</string>
|
||||
<string name="updates__app_with_known_vulnerability__ignore">ཡ་ལན་མ་བྱས་པ།</string>
|
||||
|
@ -490,7 +490,6 @@
|
||||
<string name="app_list__dismiss_vulnerable_app">Vulnerabilitat ignorada</string>
|
||||
<string name="app_list__dismiss_downloading_app">Baixada cancel·lada</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">Error EIO rebut a l\'F-Droid: %s probablement és corrupte!</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_uninstall">S\'ha trobat una vulnerabilitat a %1$s. Us recomanem suprimir aquesta aplicació immediatament.</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_upgrade">S\'ha trobat una vulnerabilitat a %1$s. Us recomanem actualitzar immediatament a la versió més recent.</string>
|
||||
<string name="updates__app_with_known_vulnerability__ignore">Ignora</string>
|
||||
|
@ -445,7 +445,6 @@
|
||||
<string name="app_list__dismiss_vulnerable_app">Zranitelnost ignorována</string>
|
||||
<string name="app_list__dismiss_downloading_app">Stahování zrušeno</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid obdržel EIO chybu: %s je pravděpodobně poškozené!</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_uninstall">V %1$s byla nalezena zranitelnost. Doporučujeme tuto aplikaci okamžitě odinstalovat.</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_upgrade">V %1$s byla nalezena zranitelnost. Doporučujeme tuto aplikaci aktualizovat na nejnovější verzi.</string>
|
||||
<string name="updates__app_with_known_vulnerability__ignore">Ignorovat</string>
|
||||
|
@ -497,7 +497,6 @@
|
||||
<string name="app_list__dismiss_vulnerable_app">Sårbarhed ignoreret</string>
|
||||
<string name="app_list__dismiss_downloading_app">Hentning annulleret</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid modtog EIO-fejl: %s er formentlig korrupt!</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_uninstall">Vi har fundet en sårbarhed med %1$s. Vi anbefaler, at du afinstallerer denne app med det samme.</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_upgrade">Vi har fundet en sårbarhed med %1$s. Vi anbefaler, at du opgraderer til den nyeste version med det samme.</string>
|
||||
<string name="updates__app_with_known_vulnerability__ignore">Ignorer</string>
|
||||
|
@ -510,7 +510,6 @@
|
||||
<string name="app_details__no_versions__none_compatible_with_device">Keine mit dem Gerät kompatiblen Versionen</string>
|
||||
<string name="app_details__no_versions__explain_incompatible_signatures">Die installierte Version ist mit keiner der vorhandenen Versionen kompatibel. Eine Deinstallation der App ermöglicht Ihnen, kompatible Versionen anzusehen und zu installieren. Dies tritt häufig bei Apps auf, die über Google Play oder andere Quellen installiert wurden, da sie mit einem anderen Zertifikat signiert sind.</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid empfing einen EIO-Fehler: Möglicherweise ist %s beschädigt!</string>
|
||||
<string name="app_list__dismiss_app_update">Aktualisierung ignoriert</string>
|
||||
<string name="app_list__dismiss_vulnerable_app">Sicherheitslücke ignoriert</string>
|
||||
<string name="app_list__dismiss_downloading_app">Herunterladen abgebrochen</string>
|
||||
|
@ -461,7 +461,6 @@
|
||||
<string name="app_list__dismiss_vulnerable_app">Η ευπάθεια αγνοήθηκε</string>
|
||||
<string name="app_list__dismiss_downloading_app">Ακύρωση λήψης</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">Το F-Droid έχει ένα ΕΙΟ σφάλμα: Το %s είναι πιθανόν κατεστραμμένο!</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_uninstall">Βρέθηκε ευπάθεια με %1$s. Συνίσταται να απεγκαταστήσετε αυτή την εφαρμογή αμέσως.</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_upgrade">Βρέθηκε ευπάθεια με %1$s. Συνίσταται να αναβαθμίσετε αυτή την εφαρμογή αμέσως στη νεότερη έκδοση.</string>
|
||||
<string name="updates__app_with_known_vulnerability__ignore">Αγνοήστε</string>
|
||||
|
@ -494,7 +494,6 @@
|
||||
<string name="app_details__no_versions__none_compatible_with_device">Neniuj versioj kongruaj kun la aparato</string>
|
||||
<string name="app_details__no_versions__explain_incompatible_signatures">La instalita versio ne kongruas kun ĉiuj disponeblaj versioj. Malinstalado de aplikaĵo ebligos al vi vidigi kaj instali kongruajn versiojn. Tio ĉi ofte okazas ĉe aplikaĵoj instalitaj el Google Play aŭ aliaj fontoj, se ili estas subskribitaj per alia atestilo.</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid renkontis EIO-eraron: %s probable estas difektita!</string>
|
||||
<string name="app_list__dismiss_app_update">Ĝisdatigo ignorata</string>
|
||||
<string name="app_list__dismiss_vulnerable_app">Sekurec-fliko ignorata</string>
|
||||
<string name="app_list__dismiss_downloading_app">Elŝuto nuligita</string>
|
||||
|
@ -512,7 +512,6 @@
|
||||
<string name="app_details__no_versions__none_compatible_with_device">No hay versiones compatibles con el dispositivo</string>
|
||||
<string name="app_details__no_versions__explain_incompatible_signatures">La versión instalada no es compatible con ninguna de las versiones disponibles. Desinstalar la aplicación te permitirá ver e instalar las versiones compatibles. Esto ocurre a menudo con aplicaciones instaladas a través de Google Play o de otras fuentes, si se han firmado con un certificado diferente.</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid recibió un error EIO: ¡probablemente %s está corrupto!</string>
|
||||
<string name="app_list__dismiss_app_update">Actualización ignorada</string>
|
||||
<string name="app_list__dismiss_vulnerable_app">Vulnerabilidad ignorada</string>
|
||||
<string name="app_list__dismiss_downloading_app">Descarga cancelada</string>
|
||||
|
@ -418,7 +418,6 @@
|
||||
<string name="installed_apps__activity_title">Paigaldatud rakendused</string>
|
||||
<string name="installed_app__updates_ignored">Värskendusi ignoreeriti</string>
|
||||
<string name="installed_app__updates_ignored_for_suggested_version">Versiooni %1$s värskendust ignoreeriti</string>
|
||||
<string name="installed_app__file_corrupt">F-Droid sai EIO vea: %s on ilmselt rikutud!</string>
|
||||
<string name="updates__tts__download_updates_for_all_apps">Laadi alla kõik värskendused</string>
|
||||
|
||||
<string name="updates__app_with_known_vulnerability__prompt_uninstall">%1$s sees leiti haavatavus. Soovitatav on see rakendus koheselt eemaldada.</string>
|
||||
|
@ -531,7 +531,6 @@
|
||||
<string name="app_details__no_versions__none_compatible_with_device">Ez dago gailuarekin bateragarria den bertsiorik</string>
|
||||
<string name="app_details__no_versions__explain_incompatible_signatures">Instalatutako bertsioa ez da bateragarria eskuragarri duden bertsioekin. Aplikazioa desinstalatzeak bertsio bateragarriak ikusi eta instalatzea ahalbidetuko dizu. Hau Gogle Play edo beste iturrietatik instalatutako aplikazioekin gertatu ohi da, ziurtagiri desberdin batekin sinatu direlako.</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid-ek EIO errorea jaso du: %s hondatuta egon daiteke!</string>
|
||||
<string name="app_list__dismiss_app_update">Eguneraketa ezikusia</string>
|
||||
<string name="app_list__dismiss_vulnerable_app">Ahultasun ezikusia</string>
|
||||
<string name="app_list__dismiss_downloading_app">Deskarga utzita</string>
|
||||
|
@ -481,7 +481,6 @@
|
||||
<string name="app_list__dismiss_vulnerable_app">آسیبپذیری نادیده گرفته شد</string>
|
||||
<string name="app_list__dismiss_downloading_app">بارگیری لغو شد</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">افدروید خطای EIO گرفت: احتمالاً %s خراب است!</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_uninstall">یک آسیبپذیری در %1$s پیدا شد. توصیه میشود فوراً این کاره را حذف نصب کنید.</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_upgrade">یک آسیبپذیری در %1$s پیدا شد. توصیه میشود فوراً به جدیدترین نگارش ارتقا دهید.</string>
|
||||
<string name="updates__app_with_known_vulnerability__ignore">نادیده گرفتن</string>
|
||||
|
@ -515,7 +515,6 @@
|
||||
<string name="app_details__no_versions__no_compatible_signatures">Aucune version ne possède une signature compatible</string>
|
||||
<string name="app_details__no_versions__explain_incompatible_signatures">La version installée n\'est compatible avec aucune des versions disponibles. Désinstaller cette application vous permettra de consulter et installer les versions compatibles. Ce problème est fréquent avec les applications installées depuis Google Play ou d\'autres sources, si elles sont signées à l\'aide d\'un certificat différent.</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid a reçu une erreur EIO : %s est probablement corrompu !</string>
|
||||
<string name="app_list__dismiss_app_update">Mise à jour ignorée</string>
|
||||
<string name="app_list__dismiss_vulnerable_app">Vulnérabilité ignorée</string>
|
||||
<string name="app_list__dismiss_downloading_app">Téléchargement annulé</string>
|
||||
|
@ -386,7 +386,6 @@
|
||||
<string name="installed_apps__activity_title">Aplicacións instaladas</string>
|
||||
<string name="installed_app__updates_ignored">Anovacións ignoradas</string>
|
||||
<string name="installed_app__updates_ignored_for_suggested_version">Anovacións ignoradas para a versión %1$s</string>
|
||||
<string name="installed_app__file_corrupt">F-Droid recibiu un erro EIO: ¡probablemente %s está corrupto!</string>
|
||||
<string name="updates__tts__download_updates_for_all_apps">Descargar todas as anovacións</string>
|
||||
|
||||
<string name="updates__app_with_known_vulnerability__prompt_uninstall">Atopamos unha vulnerabilidade en %1$s. Recomendamos desinstalar esta app inmediatamente.</string>
|
||||
|
@ -502,7 +502,6 @@
|
||||
<string name="app_details__no_versions__none_compatible_with_device">אין גרסאות תואמות להתקן זה</string>
|
||||
<string name="app_details__no_versions__explain_incompatible_signatures">הגרסה המותקנת אינה תואמת לכל הגרסאות הנתמכות. הסרת היישומון תאפשר לך לצפות ולהתקין גרסאות תואמות. מצב זה קורה לרוב עם יישומונים שמותקנים דרך Google Play או מקורות אחרים, אם היישומונים נחתמו עם אישור אחר.</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">התקבלה שגיאת קלט/פלט ב־F-Droid: כנראה כי קיימת תקלה מול %s!</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_uninstall">מצאנו חולשה אצל %1$s. אנו ממליצים להסיר את היישומון הזה מיידית.</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_upgrade">מצאנו חולשה אצל %1$s. אנו ממליצים לשדרג את היישומון הזה לגרסה החדשה ביותר מיידית.</string>
|
||||
<string name="updates__app_with_known_vulnerability__ignore">התעלמות</string>
|
||||
|
@ -447,7 +447,6 @@
|
||||
<item quantity="other">%1$d éve frissítve</item>
|
||||
</plurals>
|
||||
<string name="app_installed_media">A fájl telepítve ide: %s</string>
|
||||
<string name="installed_app__file_corrupt">Az F-Droid EIO hibát kapott: a(z) %s valószínűleg sérült!</string>
|
||||
<string name="status_inserting_x_apps">Alkalmazás részleteinek mentése (%1$d / %2$d), forrás: %3$s</string>
|
||||
<plurals name="button_view_all_apps_in_category">
|
||||
<item quantity="one">%d megtekintése</item>
|
||||
|
@ -498,7 +498,6 @@
|
||||
<string name="app_list__dismiss_app_update">Pembaruan diabaikan</string>
|
||||
<string name="app_list__dismiss_downloading_app">Unduhan dibatalkan</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid menerima galat EIO: %s mungkin rusak!</string>
|
||||
<string name="updates__app_with_known_vulnerability__ignore">Abaikan</string>
|
||||
|
||||
<string name="app_details__incompatible_mismatched_signature">Tanda tangan berbeda dari versi terpasang</string>
|
||||
|
@ -549,7 +549,6 @@
|
||||
<string name="app_list__dismiss_vulnerable_app">Öryggisgalli hunsaður</string>
|
||||
<string name="app_list__dismiss_downloading_app">Hætt við niðurhal</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid tók á móti EIO-villu: %s er líklega skemmd!</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_uninstall">Við fundum öryggisveilu í %1$s. Við mælum með því að þetta forrit verði fjarlægt strax.</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_upgrade">Við fundum öryggisveilu í %1$s. Við mælum með því að þetta forrit verði strax uppfært í nýjustu útgáfuna.</string>
|
||||
<string name="updates__app_with_known_vulnerability__ignore">Hunsa</string>
|
||||
|
@ -530,7 +530,6 @@
|
||||
<string name="app_list__dismiss_vulnerable_app">Vulnerabilità ignorata</string>
|
||||
<string name="app_list__dismiss_downloading_app">Download annullato</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid ha ricevuto un errore EIO: %s probabilmente è corrotto!</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_uninstall">Abbiamo trovato una vulnerabilità in %1$s. Ti raccomandiamo di disinstallare questa applicazione immediatamente.</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_upgrade">Abbiamo trovato una vulnerabilità in %1$s. Ti raccomandiamo di aggiornare all\'ultima versione immediatamente.</string>
|
||||
<string name="updates__app_with_known_vulnerability__ignore">Ignora</string>
|
||||
|
@ -460,7 +460,6 @@
|
||||
<string name="app_list__dismiss_vulnerable_app">脆弱性を無視しました</string>
|
||||
<string name="app_list__dismiss_downloading_app">ダウンロードをキャンセルしました</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-DroidがEIOエラーを受信しました: %sは壊れている可能性があります!</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_uninstall">%1$sで脆弱性を発見しました。今すぐにこのアプリをアンインストールすることをおすすめします。</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_upgrade">%1$sで脆弱性を発見しました。今すぐに最新バージョンへのアップグレードすることをおすすめします。</string>
|
||||
<string name="updates__app_with_known_vulnerability__ignore">無視する</string>
|
||||
|
@ -366,7 +366,6 @@
|
||||
<string name="installed_apps__activity_title">설치된 앱</string>
|
||||
<string name="installed_app__updates_ignored">업데이트 무시됨</string>
|
||||
<string name="installed_app__updates_ignored_for_suggested_version">버전 %1$s의 업데이트 무시됨</string>
|
||||
<string name="installed_app__file_corrupt">F-Droid가 EIO 오류를 수신했습니다: %s은(는) 아마도 손상되었을 것입니다!</string>
|
||||
<string name="updates__tts__download_updates_for_all_apps">모든 업데이트 다운로드</string>
|
||||
|
||||
<string name="updates__app_with_known_vulnerability__ignore">무시</string>
|
||||
|
@ -506,7 +506,6 @@
|
||||
<string name="app_details__no_versions__none_compatible_with_device">Ingen versjoner kompatible med enhet</string>
|
||||
<string name="app_details__no_versions__explain_incompatible_signatures">Den installerte versjonen er ikke kompatibel med noen tilgjengelig versjoner. Å avinstallere programmet vil la deg vise og installere kompatible versjoner. Dette skjer ofte når programmer er installert via Google Play eller fra andre kilder, hvis de er signert med et annet sertifikat.</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid støtte på en EIO-feil: %s er antagelig skadet!</string>
|
||||
<string name="app_list__dismiss_app_update">Oppdatering oversett</string>
|
||||
<string name="app_list__dismiss_vulnerable_app">Sårbarhet ignorert</string>
|
||||
<string name="app_list__dismiss_downloading_app">Nedlasting avbrutt</string>
|
||||
|
@ -493,7 +493,6 @@
|
||||
<string name="app_details__no_versions__none_compatible_with_device">Geen versies compatibel met apparaat</string>
|
||||
<string name="app_details__no_versions__explain_incompatible_signatures">De geïnstalleerde versie is niet compatibel met de beschikbare versies. Door de app te verwijderen zullen compatibele versies worden weergegeven, waarna je ze kan installeren. Dit gebeurt vaak wanneer je apps installeert via Google Play of andere bronnen, en deze door een ander certificaat zijn ondertekend.</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid ontving een EIO-fout: %s is waarschijnlijk beschadigd!</string>
|
||||
<string name="app_list__dismiss_app_update">Update genegeerd</string>
|
||||
<string name="app_list__dismiss_vulnerable_app">Kwetsbaarheid genegeerd</string>
|
||||
<string name="app_list__dismiss_downloading_app">Download geannuleerd</string>
|
||||
|
@ -523,7 +523,6 @@
|
||||
<string name="app_details__no_versions__none_compatible_with_device">Brak wersji zgodnych z urządzeniem</string>
|
||||
<string name="app_details__no_versions__explain_incompatible_signatures">Zainstalowana wersja nie jest kompatybilna z jakąkolwiek dostępną wersją. Odinstalowanie aplikacji umożliwi podgląd i zainstalowanie zgodnych wersji. To często zdarza się w przypadku aplikacji zainstalowanych ze Sklepu Play lub z innych źródeł, jeżeli są one podpisane innym kluczem.</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid napotkał na błąd EIO: %s prawdopodobnie jest uszkodzony!</string>
|
||||
<string name="app_list__dismiss_app_update">Ignorowana aktualizacja</string>
|
||||
<string name="app_list__dismiss_vulnerable_app">Ignorowana łatka bezpieczeństwa</string>
|
||||
<string name="app_list__dismiss_downloading_app">Anulowano pobieranie</string>
|
||||
|
@ -526,7 +526,6 @@
|
||||
<string name="app_list__dismiss_vulnerable_app">Vulnerabilidade ignorada</string>
|
||||
<string name="app_list__dismiss_downloading_app">Baixar cancelado</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid recebeu erro EIO: %s está provavelmente corrompido!</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_uninstall">Nós encontramos uma vulnerabilidade com o %1$s. Nós recomendamos desinstalar o aplicativo imediatamente.</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_upgrade">Nós encontramos uma vulnerabilidade com o %1$s. Nós recomendamos atualizar para a versão mais nova imediatamente.</string>
|
||||
<string name="updates__app_with_known_vulnerability__ignore">Ignorar</string>
|
||||
|
@ -533,7 +533,6 @@
|
||||
<string name="app_list__dismiss_vulnerable_app">Vulnerabilidade ignorada</string>
|
||||
<string name="app_list__dismiss_downloading_app">Descarga cancelada</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">Ocorreu um erro EIO: possivelmente %s está danificada!</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_uninstall">Encontrámos uma vulnerabilidade em %1$s. Recomendamos a desinstalação imediata da aplicação.</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_upgrade">Encontrámos uma vulnerabilidade em %1$s. Recomendamos a atualização imediata da aplicação.</string>
|
||||
<string name="updates__app_with_known_vulnerability__ignore">Ignorar</string>
|
||||
|
@ -471,7 +471,6 @@
|
||||
<string name="app_details__no_versions__none_compatible_with_device">Nici o versiune nu este compatibilă cu acest dispozitiv</string>
|
||||
<string name="app_details__no_versions__explain_incompatible_signatures">Versiunea instalată nu este compatibilă cu cele disponibile. Dacă dezinstalați aplicația veți putea vedea și instala versiunile compatibile. Acest fapt se întâmplă cel mai des atunci când aplicațiile sunt instalate din Google Play sau din alte surse, dacă sunt semnate cu un certificat diferit.</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid a întâlnit o eroare EIO: %s este probabil corupt!</string>
|
||||
<string name="app_list__dismiss_app_update">Actualizare ignorată</string>
|
||||
<string name="app_list__dismiss_vulnerable_app">Vulnerabilitate ignorată</string>
|
||||
<string name="app_list__dismiss_downloading_app">Descărcare anulată</string>
|
||||
|
@ -508,7 +508,6 @@
|
||||
<string name="app_list__dismiss_vulnerable_app">Уязвимость игнорируется</string>
|
||||
<string name="app_list__dismiss_downloading_app">Загрузка отменена</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid получил ошибку EIO: вероятно, файл %s поврежден!</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_uninstall">Обнаружена уязвимость в %1$s. Мы рекомендуем немедленно удалить это приложение.</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_upgrade">Обнаружена уязвимость в %1$s. Мы рекомендуем немедленно обновиться до новейшей версии.</string>
|
||||
<string name="updates__app_with_known_vulnerability__ignore">Пропустить</string>
|
||||
|
@ -533,7 +533,6 @@
|
||||
<string name="app_details__no_versions__none_compatible_with_device">Peruna versione cumpatìbile cun su dispositivu</string>
|
||||
<string name="app_details__no_versions__explain_incompatible_signatures">Sa versione installada no est cumpatìbile cun sas versiones disponìbiles. Disinstallende s\'aplicatzione t\'at a permìtere de bìdere e installare versiones cumpatìbiles. Custu acontessit, a s\'ispissu, cun aplicatziones installadas pro mèdiu de Google Play o àteras mitzas, si sunt firmadas cun unu tzertificadu diferente.</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid at retzidu un\'errore EIO: %s est probabilmente corrùmpidu!</string>
|
||||
<string name="app_list__dismiss_app_update">Agiornamentu ignoradu</string>
|
||||
<string name="app_list__dismiss_vulnerable_app">Vulnerabilidade ignorada</string>
|
||||
<string name="app_list__dismiss_downloading_app">Iscantzellamentu annulladu</string>
|
||||
|
@ -530,7 +530,6 @@
|
||||
<string name="app_list__dismiss_vulnerable_app">Zraniteľnosť bola ignorovaná</string>
|
||||
<string name="app_list__dismiss_downloading_app">Sťahovanie bolo zrušené</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid obdržal chybu EIO: %s je pravdepodobne poškodený!</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_uninstall">Zistili sme zraniteľnosť %1$s. Odporúčame okamžite odinštalovať túto aplikáciu.</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_upgrade">Objavili sme zraniteľnosť %1$s. Odporúčame ihneď aktualizovať na najnovšiu verziu.</string>
|
||||
<string name="updates__app_with_known_vulnerability__ignore">Ignorovať</string>
|
||||
|
@ -514,7 +514,6 @@
|
||||
<string name="app_list__dismiss_vulnerable_app">Рањивост је занемарена</string>
|
||||
<string name="app_list__dismiss_downloading_app">Преузимање отказано</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">Ф-дроид је примио ЕУИ грешку: %s је вероватно покварена!</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_uninstall">Пронашли смо безбедносну рањивост у %1$s. Препоручујемо да сместа уклоните апликацију.</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_upgrade">Пронашли смо безбедносну рањивост у %1$s. Препоручујемо да сместа надоградите апликацију.</string>
|
||||
<string name="updates__app_with_known_vulnerability__ignore">Занемари</string>
|
||||
|
@ -488,7 +488,6 @@
|
||||
<string name="app_details__no_versions__none_compatible_with_device">Inga versioner är kompatibla med enheten</string>
|
||||
<string name="app_details__no_versions__explain_incompatible_signatures">Den installerade versionen är inte kompatibel med några tillgängliga versioner. Om du avinstallerar appen kan du visa och installera kompatibla versioner. Det här händer ofta med appar installerade via Google Play eller andra källor, om de är signerade med ett annat certifikat.</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid mottog EIO-fel: %s är förmodligen korrupt!</string>
|
||||
<string name="app_list__dismiss_app_update">Uppdatering ignorerad</string>
|
||||
<string name="app_list__dismiss_vulnerable_app">Sårbarhet ignorerad</string>
|
||||
<string name="app_list__dismiss_downloading_app">Hämtning avbruten</string>
|
||||
|
@ -503,7 +503,6 @@
|
||||
<string name="app_details__no_versions__none_compatible_with_device">Cihazla uyumlu sürüm yok</string>
|
||||
<string name="app_details__no_versions__explain_incompatible_signatures">Kurulu sürüm hiçbir kullanılabilir sürümle uyumlu değil. Uygulamayı kaldırmak, uyumlu sürümleri görüntüleyip kurmanızı sağlayacaktır. Bu genellikle, farklı bir sertifika ile imzalanmışsa, Google Play veya diğer kaynaklar aracılığıyla kurulmuş uygulamalarda oluşur.</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid EIO hatası aldı: %s büyük olasılıkla bozuk!</string>
|
||||
<string name="app_list__dismiss_app_update">Güncelleme yok sayıldı</string>
|
||||
<string name="app_list__dismiss_vulnerable_app">Güvenlik açığı yok sayıldı</string>
|
||||
<string name="app_list__dismiss_downloading_app">İndirme iptal edildi</string>
|
||||
|
@ -511,7 +511,6 @@
|
||||
<string name="app_list_download_ready">Завантажено, готовий до встановлення</string>
|
||||
|
||||
<string name="status_inserting_x_apps">Збереження деталей застосунку (%1$d/%2$d) з %3$s</string>
|
||||
<string name="installed_app__file_corrupt">F-Droid отримав помилку EIO: %s ймовірно, зіпсований!</string>
|
||||
<string name="app_list__dismiss_app_update">Оновлення ігнорується</string>
|
||||
<string name="app_list__dismiss_vulnerable_app">Вразливість ігнорується</string>
|
||||
<string name="app_list__dismiss_downloading_app">Завантаження скасовано</string>
|
||||
|
@ -375,7 +375,6 @@
|
||||
<string name="installed_apps__activity_title">Ứng dụng đã cài đặt</string>
|
||||
<string name="installed_app__updates_ignored">Đã bỏ qua các cập nhật</string>
|
||||
<string name="installed_app__updates_ignored_for_suggested_version">Đã bỏ qua cập nhật với phiên bản %1$s</string>
|
||||
<string name="installed_app__file_corrupt">F-Droid nhận được lỗi vào ra: Có khả năng %s đã bị hỏng!</string>
|
||||
<string name="updates__tts__download_updates_for_all_apps">Tải về tất cả các bản cập nhật</string>
|
||||
|
||||
<string name="updates__app_with_known_vulnerability__prompt_uninstall">Chúng tôi đã tìm thấy lỗ hổng bảo mật trong ứng dụng %1$s. Chúng tôi khuyên bạn gỡ bỏ ứng dụng này ngay lập tức.</string>
|
||||
|
@ -457,7 +457,6 @@
|
||||
<string name="app_list__dismiss_vulnerable_app">已忽略漏洞</string>
|
||||
<string name="app_list__dismiss_downloading_app">已取消下载</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid收到了EIO错误:%s很可能已经损毁!</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_uninstall">我们发现了关于%1$s的漏洞,建议您立即卸载此应用。</string>
|
||||
<string name="updates__app_with_known_vulnerability__prompt_upgrade">我们发现了关于%1$s的漏洞,建议您立即升级到最新的版本。</string>
|
||||
<string name="updates__app_with_known_vulnerability__ignore">忽略</string>
|
||||
|
@ -456,5 +456,4 @@
|
||||
<string name="app_details__no_versions__none_compatible_with_device">沒有與裝置相容的版本</string>
|
||||
<string name="app_details__no_versions__explain_incompatible_signatures">已安裝的程式版本與可供安裝的版本並不相容。卸載現有的應用程式將讓您檢視及安裝相容的版本。此問題通常出現於透過 Google Play 或其他途徑安裝,並使用不同認證的應用程式。</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid 偵測到一個 EIO 錯誤:%s 很可能已崩潰!</string>
|
||||
</resources>
|
||||
|
@ -469,7 +469,6 @@
|
||||
<string name="app_details__no_versions__none_compatible_with_device">沒有與裝置相容的版本</string>
|
||||
<string name="app_details__no_versions__explain_incompatible_signatures">已安裝的版本不相容於任何可用的版本。解除安裝該應用程式,將使您能夠查看和安裝相容的版本。這通常是透過 Google Play 或其它來源安裝的應用程式,如果它們是由不同的證書簽署時才會發生。</string>
|
||||
|
||||
<string name="installed_app__file_corrupt">F-Droid 接收到 EIO 錯誤:%s 很可能已損壞!</string>
|
||||
<string name="app_list__dismiss_app_update">已忽略更新</string>
|
||||
<string name="app_list__dismiss_vulnerable_app">已忽略漏洞</string>
|
||||
<string name="app_list__dismiss_downloading_app">已取消下載</string>
|
||||
|
@ -96,7 +96,6 @@ This often occurs with apps installed via Google Play or other sources, if they
|
||||
<string name="installed_app__updates_ignored_for_suggested_version">Updates ignored for Version %1$s</string>
|
||||
<!-- The inline download button shown in the "Updates" screen only uses an icon and so requires
|
||||
some descriptive text for the TTS engine -->
|
||||
<string name="installed_app__file_corrupt">F-Droid received EIO error: %s is probably corrupt!</string>
|
||||
<string name="updates__tts__download_app">Download</string>
|
||||
<string name="updates__tts__download_updates_for_all_apps">Download all updates</string>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user