From 18830647141d7e1c252a549ff33c7294294eed56 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Thu, 31 Dec 2015 14:17:33 +0100 Subject: [PATCH] Show error dialog when external dirs are not available --- .../preferences/PreferenceController.java | 44 ++++++++++++++----- 1 file changed, 33 insertions(+), 11 deletions(-) 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 c5b5f237b..a872039f9 100644 --- a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java +++ b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java @@ -695,34 +695,56 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc private void showChooseDataFolderDialog() { Context context = ui.getActivity(); - String dataFolder = UserPreferences.getDataFolder(null).getAbsolutePath(); + 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); - String[] folders = new String[mediaDirs.length]; - CharSequence[] choices = new CharSequence[mediaDirs.length]; + List folders = new ArrayList<>(mediaDirs.length); + List choices = new ArrayList<>(mediaDirs.length); for(int i=0; i < mediaDirs.length; i++) { - String path = folders[i] = mediaDirs[i].getAbsolutePath(); - if(dataFolder.equals(path)) { + if(mediaDirs[i] == null) { + 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) { - choices[i] = path.substring(0, index); + choice = path.substring(0, index); } else { - choices[i] = path; + choice = path; } long bytes = StorageUtils.getFreeSpaceAvailable(path); String freeSpace = String.format(context.getString(R.string.free_space_label), Converter.byteToString(bytes)); - choices[i] = Html.fromHtml("" + choices[i] - + " [" + freeSpace + "]" + ""); + choices.add(Html.fromHtml("" + choice + + " [" + freeSpace + "]" + "")); + } + 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) + .items(choices.toArray(new CharSequence[choices.size()])) .itemsCallbackSingleChoice(selectedIndex, (dialog1, itemView, which, text) -> { - String folder = folders[which]; + String folder = folders.get(which); Log.d(TAG, "data folder: " + folder); UserPreferences.setDataFolder(folder); setDataFolderText();