summaryrefslogtreecommitdiff
path: root/app/src/main
diff options
context:
space:
mode:
authorMartin Fietz <Martin.Fietz@gmail.com>2017-10-20 20:39:38 +0200
committerGitHub <noreply@github.com>2017-10-20 20:39:38 +0200
commit33ea125489cf2aaa492ad0e9631b9aed85c45efe (patch)
tree00e528eafa96a81948cfb659c3545f6df0094294 /app/src/main
parent3eb637d690ec21cc9b98da1dde324c3ff2f07770 (diff)
parent7aae71e3bab10d5dff640ac1d85bf6433b6775bf (diff)
downloadAntennaPod-33ea125489cf2aaa492ad0e9631b9aed85c45efe.zip
Merge pull request #2439 from dklimkin/htmlpatch
Reworking data dir dialog
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/StorageErrorActivity.java73
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/ChooseDataFolderDialog.java97
-rw-r--r--app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java72
3 files changed, 115 insertions, 127 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/StorageErrorActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/StorageErrorActivity.java
index 62bff0891..d104a9e93 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/StorageErrorActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/StorageErrorActivity.java
@@ -10,10 +10,8 @@ import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
-import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
-import android.text.Html;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Button;
@@ -21,13 +19,11 @@ import android.widget.Button;
import com.afollestad.materialdialogs.MaterialDialog;
import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.core.preferences.UserPreferences;
-import de.danoeh.antennapod.core.util.Converter;
import de.danoeh.antennapod.core.util.StorageUtils;
+import de.danoeh.antennapod.dialog.ChooseDataFolderDialog;
/** Is show if there is now external storage available. */
public class StorageErrorActivity extends AppCompatActivity {
@@ -117,65 +113,14 @@ public class StorageErrorActivity extends AppCompatActivity {
// see PreferenceController.showChooseDataFolderDialog()
private void showChooseDataFolderDialog() {
- File dataFolder = UserPreferences.getDataFolder(null);
- if(dataFolder == null) {
- new MaterialDialog.Builder(this)
- .title(R.string.error_label)
- .content(R.string.external_storage_error_msg)
- .neutralText(android.R.string.ok)
- .show();
- return;
- }
- String dataFolderPath = dataFolder.getAbsolutePath();
- int selectedIndex = -1;
- File[] mediaDirs = ContextCompat.getExternalFilesDirs(this, null);
- List<String> folders = new ArrayList<>(mediaDirs.length);
- List<CharSequence> choices = new ArrayList<>(mediaDirs.length);
- for(int i=0; i < mediaDirs.length; i++) {
- File dir = mediaDirs[i];
- if(dir == null || !dir.exists() || !dir.canRead() || !dir.canWrite()) {
- continue;
- }
- String path = mediaDirs[i].getAbsolutePath();
- folders.add(path);
- if(dataFolderPath.equals(path)) {
- selectedIndex = i;
- }
- int index = path.indexOf("Android");
- String choice;
- if(index >= 0) {
- choice = path.substring(0, index);
- } else {
- choice = path;
- }
- long bytes = StorageUtils.getFreeSpaceAvailable(path);
- String freeSpace = String.format(getString(R.string.free_space_label),
- Converter.byteToString(bytes));
- choices.add(Html.fromHtml("<html><small>" + choice + " [" + freeSpace + "]"
- + "</small></html>"));
- }
- if(choices.size() == 0) {
- new MaterialDialog.Builder(this)
- .title(R.string.error_label)
- .content(R.string.external_storage_error_msg)
- .neutralText(android.R.string.ok)
- .show();
- return;
- }
- MaterialDialog dialog = new MaterialDialog.Builder(this)
- .title(R.string.choose_data_directory)
- .content(R.string.choose_data_directory_message)
- .items(choices.toArray(new CharSequence[choices.size()]))
- .itemsCallbackSingleChoice(selectedIndex, (dialog1, itemView, which, text) -> {
- String folder = folders.get(which);
- UserPreferences.setDataFolder(folder);
- leaveErrorState();
- return true;
- })
- .negativeText(R.string.cancel_label)
- .cancelable(true)
- .build();
- dialog.show();
+ ChooseDataFolderDialog.showDialog(
+ this, new ChooseDataFolderDialog.RunnableWithString() {
+ @Override
+ public void run(final String folder) {
+ UserPreferences.setDataFolder(folder);
+ leaveErrorState();
+ }
+ });
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/ChooseDataFolderDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/ChooseDataFolderDialog.java
new file mode 100644
index 000000000..e8faa7c29
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/ChooseDataFolderDialog.java
@@ -0,0 +1,97 @@
+package de.danoeh.antennapod.dialog;
+
+import android.content.Context;
+import android.os.Build;
+import android.support.v4.content.ContextCompat;
+import android.text.Html;
+
+import com.afollestad.materialdialogs.MaterialDialog;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.core.preferences.UserPreferences;
+import de.danoeh.antennapod.core.util.Converter;
+import de.danoeh.antennapod.core.util.StorageUtils;
+
+public class ChooseDataFolderDialog {
+
+ public static abstract class RunnableWithString implements Runnable {
+ public RunnableWithString() {
+ super();
+ }
+ public abstract void run(final String arg);
+ @Override public void run() {
+ throw new IllegalArgumentException("Expect one String parameter.");
+ }
+ }
+
+ private ChooseDataFolderDialog() {}
+
+ public static void showDialog(final Context context, RunnableWithString handlerFunc) {
+ File dataFolder = UserPreferences.getDataFolder(null);
+ if (dataFolder == null) {
+ new MaterialDialog.Builder(context)
+ .title(R.string.error_label)
+ .content(R.string.external_storage_error_msg)
+ .neutralText(android.R.string.ok)
+ .show();
+ return;
+ }
+ String dataFolderPath = dataFolder.getAbsolutePath();
+ int selectedIndex = -1;
+ int index = 0;
+ File[] mediaDirs = ContextCompat.getExternalFilesDirs(context, null);
+ final List<String> folders = new ArrayList<>(mediaDirs.length);
+ final List<CharSequence> choices = new ArrayList<>(mediaDirs.length);
+ for (File dir : mediaDirs) {
+ if(dir == null || !dir.exists() || !dir.canRead() || !dir.canWrite()) {
+ continue;
+ }
+ String path = dir.getAbsolutePath();
+ folders.add(path);
+ if(dataFolderPath.equals(path)) {
+ selectedIndex = index;
+ }
+ int prefixIndex = path.indexOf("Android");
+ String choice = (prefixIndex > 0) ? path.substring(0, prefixIndex) : path;
+ long bytes = StorageUtils.getFreeSpaceAvailable(path);
+ String item = String.format(
+ "<small>%1$s [%2$s]</small>", choice, Converter.byteToString(bytes));
+ choices.add(fromHtmlVersioned(item));
+ index++;
+ }
+ if (choices.isEmpty()) {
+ new MaterialDialog.Builder(context)
+ .title(R.string.error_label)
+ .content(R.string.external_storage_error_msg)
+ .neutralText(android.R.string.ok)
+ .show();
+ return;
+ }
+ MaterialDialog dialog = new MaterialDialog.Builder(context)
+ .title(R.string.choose_data_directory)
+ .content(R.string.choose_data_directory_message)
+ .items(choices)
+ .itemsCallbackSingleChoice(selectedIndex, (dialog1, itemView, which, text) -> {
+ String folder = folders.get(which);
+ handlerFunc.run(folder);
+ return true;
+ })
+ .negativeText(R.string.cancel_label)
+ .cancelable(true)
+ .build();
+ dialog.show();
+ }
+
+ @SuppressWarnings("deprecation")
+ private static CharSequence fromHtmlVersioned(final String html) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
+ return Html.fromHtml(html);
+ }
+ return Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY);
+ }
+
+} \ No newline at end of file
diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java
index f46d44320..1e396b8a8 100644
--- a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java
+++ b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java
@@ -68,11 +68,10 @@ import de.danoeh.antennapod.core.export.opml.OpmlWriter;
import de.danoeh.antennapod.core.preferences.GpodnetPreferences;
import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.service.GpodnetSyncService;
-import de.danoeh.antennapod.core.util.Converter;
-import de.danoeh.antennapod.core.util.StorageUtils;
import de.danoeh.antennapod.core.util.flattr.FlattrUtils;
import de.danoeh.antennapod.dialog.AuthenticationDialog;
import de.danoeh.antennapod.dialog.AutoFlattrPreferenceDialog;
+import de.danoeh.antennapod.dialog.ChooseDataFolderDialog;
import de.danoeh.antennapod.dialog.GpodnetSetHostnameDialog;
import de.danoeh.antennapod.dialog.ProxyDialog;
import de.danoeh.antennapod.dialog.VariableSpeedDialog;
@@ -945,67 +944,14 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc
}
private void showChooseDataFolderDialog() {
- Context context = ui.getActivity();
- File dataFolder = UserPreferences.getDataFolder(null);
- if(dataFolder == null) {
- new MaterialDialog.Builder(ui.getActivity())
- .title(R.string.error_label)
- .content(R.string.external_storage_error_msg)
- .neutralText(android.R.string.ok)
- .show();
- return;
- }
- String dataFolderPath = dataFolder.getAbsolutePath();
- int selectedIndex = -1;
- File[] mediaDirs = ContextCompat.getExternalFilesDirs(context, null);
- List<String> folders = new ArrayList<>(mediaDirs.length);
- List<CharSequence> choices = new ArrayList<>(mediaDirs.length);
- for(int i=0; i < mediaDirs.length; i++) {
- File dir = mediaDirs[i];
- if(dir == null || !dir.exists() || !dir.canRead() || !dir.canWrite()) {
- continue;
- }
- String path = mediaDirs[i].getAbsolutePath();
- folders.add(path);
- if(dataFolderPath.equals(path)) {
- selectedIndex = i;
- }
- int index = path.indexOf("Android");
- String choice;
- if(index >= 0) {
- choice = path.substring(0, index);
- } else {
- choice = path;
- }
- long bytes = StorageUtils.getFreeSpaceAvailable(path);
- String freeSpace = String.format(context.getString(R.string.free_space_label),
- Converter.byteToString(bytes));
- choices.add(Html.fromHtml("<html><small>" + choice
- + " [" + freeSpace + "]" + "</small></html>"));
- }
- if(choices.size() == 0) {
- new MaterialDialog.Builder(ui.getActivity())
- .title(R.string.error_label)
- .content(R.string.external_storage_error_msg)
- .neutralText(android.R.string.ok)
- .show();
- return;
- }
- MaterialDialog dialog = new MaterialDialog.Builder(ui.getActivity())
- .title(R.string.choose_data_directory)
- .content(R.string.choose_data_directory_message)
- .items(choices.toArray(new CharSequence[choices.size()]))
- .itemsCallbackSingleChoice(selectedIndex, (dialog1, itemView, which, text) -> {
- String folder = folders.get(which);
- Log.d(TAG, "data folder: " + folder);
- UserPreferences.setDataFolder(folder);
- setDataFolderText();
- return true;
- })
- .negativeText(R.string.cancel_label)
- .cancelable(true)
- .build();
- dialog.show();
+ ChooseDataFolderDialog.showDialog(
+ ui.getActivity(), new ChooseDataFolderDialog.RunnableWithString() {
+ @Override
+ public void run(final String folder) {
+ UserPreferences.setDataFolder(folder);
+ setDataFolderText();
+ }
+ });
}
// UPDATE TIME/INTERVAL DIALOG