diff --git a/app/src/main/java/org/fdroid/fdroid/Preferences.java b/app/src/main/java/org/fdroid/fdroid/Preferences.java
index c436694a2..d9243712a 100644
--- a/app/src/main/java/org/fdroid/fdroid/Preferences.java
+++ b/app/src/main/java/org/fdroid/fdroid/Preferences.java
@@ -40,7 +40,7 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
if (preferences.getString(PREF_LOCAL_REPO_NAME, null) == null) {
preferences.edit()
.putString(PREF_LOCAL_REPO_NAME, getDefaultLocalRepoName())
- .commit();
+ .apply();
}
}
@@ -113,7 +113,7 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
}
public void setPrivilegedInstallerEnabled(boolean enable) {
- preferences.edit().putBoolean(PREF_PRIVILEGED_INSTALLER, enable).commit();
+ preferences.edit().putBoolean(PREF_PRIVILEGED_INSTALLER, enable).apply();
}
public boolean isFirstTime() {
@@ -121,7 +121,7 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
}
public void setFirstTime(boolean firstTime) {
- preferences.edit().putBoolean(PREF_FIRST_TIME, firstTime).commit();
+ preferences.edit().putBoolean(PREF_FIRST_TIME, firstTime).apply();
}
public boolean isPostPrivilegedInstall() {
@@ -129,7 +129,7 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
}
public void setPostPrivilegedInstall(boolean postInstall) {
- preferences.edit().putBoolean(PREF_POST_PRIVILEGED_INSTALL, postInstall).commit();
+ preferences.edit().putBoolean(PREF_POST_PRIVILEGED_INSTALL, postInstall).apply();
}
public boolean shouldCacheApks() {
@@ -149,7 +149,7 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
}
public void setShowNfcDuringSwap(boolean show) {
- preferences.edit().putBoolean(PREF_SHOW_NFC_DURING_SWAP, show).commit();
+ preferences.edit().putBoolean(PREF_SHOW_NFC_DURING_SWAP, show).apply();
}
public boolean expertMode() {
diff --git a/app/src/main/java/org/fdroid/fdroid/UpdateService.java b/app/src/main/java/org/fdroid/fdroid/UpdateService.java
index 927d4783d..407a27078 100644
--- a/app/src/main/java/org/fdroid/fdroid/UpdateService.java
+++ b/app/src/main/java/org/fdroid/fdroid/UpdateService.java
@@ -406,7 +406,7 @@ public class UpdateService extends IntentService implements ProgressListener {
SharedPreferences.Editor e = prefs.edit();
e.putLong(Preferences.PREF_UPD_LAST, System.currentTimeMillis());
- e.commit();
+ e.apply();
if (errorRepos == 0) {
if (changes) {
diff --git a/app/src/main/java/org/fdroid/fdroid/compat/FileCompat.java b/app/src/main/java/org/fdroid/fdroid/compat/FileCompat.java
index aae28192c..4f0031ac7 100644
--- a/app/src/main/java/org/fdroid/fdroid/compat/FileCompat.java
+++ b/app/src/main/java/org/fdroid/fdroid/compat/FileCompat.java
@@ -11,6 +11,12 @@ import org.fdroid.fdroid.data.SanitizedFile;
import java.io.IOException;
import java.lang.reflect.Method;
+/**
+ * This class works only with {@link SanitizedFile} instances to enforce
+ * filtering of the file names from files downloaded from the internet.
+ * This helps prevent things like SQL injection, shell command injection
+ * and other attacks based on putting various characters into filenames.
+ */
public class FileCompat extends Compatibility {
private static final String TAG = "FileCompat";
diff --git a/app/src/main/java/org/fdroid/fdroid/net/Downloader.java b/app/src/main/java/org/fdroid/fdroid/net/Downloader.java
index e66b793ad..180d3aebd 100644
--- a/app/src/main/java/org/fdroid/fdroid/net/Downloader.java
+++ b/app/src/main/java/org/fdroid/fdroid/net/Downloader.java
@@ -40,7 +40,7 @@ public abstract class Downloader {
protected abstract InputStream getDownloadersInputStream() throws IOException;
- protected abstract void close() throws IOException;
+ protected abstract void close();
Downloader(URL url, File destFile)
throws FileNotFoundException, MalformedURLException {
@@ -117,11 +117,6 @@ public abstract class Downloader {
}
/**
- * In a synchronous download (the usual usage of the Downloader interface),
- * you will not be able to interrupt this because the thread will block
- * after you have called download(). However if you use the AsyncDownloadWrapper,
- * then it will use this mechanism to cancel the download.
- *
* After every network operation that could take a while, we will check if an
* interrupt occured during that blocking operation. The goal is to ensure we
* don't move onto another slow, network operation if we have cancelled the
diff --git a/app/src/main/java/org/fdroid/fdroid/net/LocalFileDownloader.java b/app/src/main/java/org/fdroid/fdroid/net/LocalFileDownloader.java
index ecd23ae86..7e249040e 100644
--- a/app/src/main/java/org/fdroid/fdroid/net/LocalFileDownloader.java
+++ b/app/src/main/java/org/fdroid/fdroid/net/LocalFileDownloader.java
@@ -1,5 +1,7 @@
package org.fdroid.fdroid.net;
+import org.fdroid.fdroid.Utils;
+
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@@ -10,22 +12,23 @@ import java.net.URL;
public class LocalFileDownloader extends Downloader {
+ private InputStream inputStream;
+
LocalFileDownloader(URL url, File destFile) throws FileNotFoundException, MalformedURLException {
super(url, destFile);
}
- private File getFileToDownload() {
- return new File(sourceUrl.getPath());
- }
-
@Override
protected InputStream getDownloadersInputStream() throws IOException {
- return new FileInputStream(getFileToDownload());
+ inputStream = new FileInputStream(new File(sourceUrl.getPath()));
+ return inputStream;
}
@Override
- protected void close() throws IOException {
- // Do nothing.
+ protected void close() {
+ if (inputStream != null) {
+ Utils.closeQuietly(inputStream);
+ }
}
@Override
diff --git a/app/src/main/java/org/fdroid/fdroid/views/fragments/AppListFragment.java b/app/src/main/java/org/fdroid/fdroid/views/fragments/AppListFragment.java
index 35918f065..5f326cc4f 100644
--- a/app/src/main/java/org/fdroid/fdroid/views/fragments/AppListFragment.java
+++ b/app/src/main/java/org/fdroid/fdroid/views/fragments/AppListFragment.java
@@ -141,7 +141,7 @@ public abstract class AppListFragment extends ListFragment implements
boolean hasTriedEmptyUpdate = prefs.getBoolean(triedEmptyUpdate, false);
if (!hasTriedEmptyUpdate) {
Utils.debugLog(TAG, "Empty app list, and we haven't done an update yet. Forcing repo update.");
- prefs.edit().putBoolean(triedEmptyUpdate, true).commit();
+ prefs.edit().putBoolean(triedEmptyUpdate, true).apply();
UpdateService.updateNow(getActivity());
return true;
}
diff --git a/app/src/main/java/org/fdroid/fdroid/views/fragments/AvailableAppsFragment.java b/app/src/main/java/org/fdroid/fdroid/views/fragments/AvailableAppsFragment.java
index 24f87f224..f75b6eafd 100644
--- a/app/src/main/java/org/fdroid/fdroid/views/fragments/AvailableAppsFragment.java
+++ b/app/src/main/java/org/fdroid/fdroid/views/fragments/AvailableAppsFragment.java
@@ -230,7 +230,7 @@ public class AvailableAppsFragment extends AppListFragment implements
Context.MODE_PRIVATE);
SharedPreferences.Editor e = p.edit();
e.putString(CATEGORY_KEY, currentCategory);
- e.commit();
+ e.apply();
}
@Override
diff --git a/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java b/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java
index c6007348e..f8a40f920 100644
--- a/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java
+++ b/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java
@@ -204,13 +204,13 @@ public class PreferencesFragment extends PreferenceFragment
// privileged permission are granted, i.e. the extension is installed correctly
SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
editor.putBoolean(Preferences.PREF_PRIVILEGED_INSTALLER, true);
- editor.commit();
+ editor.apply();
pref.setChecked(true);
} else {
// privileged permission not available
SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
editor.putBoolean(Preferences.PREF_PRIVILEGED_INSTALLER, false);
- editor.commit();
+ editor.apply();
pref.setChecked(false);
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(getActivity());
@@ -248,7 +248,7 @@ public class PreferencesFragment extends PreferenceFragment
} else {
SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
editor.putBoolean(Preferences.PREF_PRIVILEGED_INSTALLER, false);
- editor.commit();
+ editor.apply();
pref.setChecked(false);
}
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index 17e93b7f2..2cc397980 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -108,7 +108,7 @@
Määritä välityspalvelimesi porttinumero (esim. 8118)
Yhdessäkään säilössä ei ole pakettipäivityksiä
Muut säilöt eivät luoneet virheitä.
- Päivityksenaikainen virhe:
+ Päivityksenaikainen virhe: %s
Teema
Vahvistamaton
Tätä säilöä ei ole vielä käytetty.
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index 4c1c23cfb..f97fb6a54 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -63,7 +63,7 @@
Jungiamasi prie
%1$s
Įjungtose saugyklose nėra nieko naujo
- Klaida naujinant:
+ Klaida naujinant: %s
Tema
Programų kiekis
Aprašymas
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 0a0f0df40..945cfaacb 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -184,7 +184,7 @@
F-Droid已准备好交换应用
触摸可查看详细信息以及允许其他人与你交换应用程序。
- 正在添加 %s 到软件源…
+ 正在添加 %s 到软件源…
正在写入已签名的索引文件(index.jar)…
创建软件源索引失败!
正在链接APK到软件源……