diff options
Diffstat (limited to 'app/src/main')
4 files changed, 36 insertions, 72 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 eb8d7ed2f..4947f478a 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/StorageErrorActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/StorageErrorActivity.java @@ -28,7 +28,11 @@ public class StorageErrorActivity extends AppCompatActivity { setContentView(R.layout.storage_error); Button btnChooseDataFolder = findViewById(R.id.btnChooseDataFolder); - btnChooseDataFolder.setOnClickListener(v -> showChooseDataFolderDialog()); + btnChooseDataFolder.setOnClickListener(v -> + ChooseDataFolderDialog.showDialog(this, path -> { + UserPreferences.setDataFolder(path); + leaveErrorState(); + })); } @Override @@ -51,18 +55,6 @@ public class StorageErrorActivity extends AppCompatActivity { } } - // see StoragePreferencesFragment.showChooseDataFolderDialog() - private void showChooseDataFolderDialog() { - ChooseDataFolderDialog.showDialog( - this, new ChooseDataFolderDialog.RunnableWithString() { - @Override - public void run(final String folder) { - UserPreferences.setDataFolder(folder); - leaveErrorState(); - } - }); - } - private void leaveErrorState() { finish(); startActivity(new Intent(this, MainActivity.class)); diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/DataFolderAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/DataFolderAdapter.java index 5848d37f7..bcad1b5a4 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/DataFolderAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/DataFolderAdapter.java @@ -1,6 +1,5 @@ package de.danoeh.antennapod.adapter; -import android.app.Dialog; import android.content.Context; import android.text.format.Formatter; import android.view.LayoutInflater; @@ -9,29 +8,25 @@ import android.view.ViewGroup; import android.widget.ProgressBar; import android.widget.RadioButton; import android.widget.TextView; - import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; +import androidx.core.util.Consumer; import androidx.recyclerview.widget.RecyclerView; - -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.StorageUtils; -import de.danoeh.antennapod.dialog.ChooseDataFolderDialog; +import java.io.File; +import java.util.ArrayList; +import java.util.List; public class DataFolderAdapter extends RecyclerView.Adapter<DataFolderAdapter.ViewHolder> { - private final ChooseDataFolderDialog.RunnableWithString selectionHandler; + private final Consumer<String> selectionHandler; private final String currentPath; private final List<StoragePath> entries; private final String freeSpaceString; - private Dialog dialog; - public DataFolderAdapter(Context context, ChooseDataFolderDialog.RunnableWithString selectionHandler) { + public DataFolderAdapter(Context context, @NonNull Consumer<String> selectionHandler) { this.entries = getStorageEntries(context); this.currentPath = getCurrentPath(); this.selectionHandler = selectionHandler; @@ -56,8 +51,10 @@ public class DataFolderAdapter extends RecyclerView.Adapter<DataFolderAdapter.Vi holder.path.setText(storagePath.getShortPath()); holder.size.setText(String.format(freeSpaceString, freeSpace, totalSpace)); holder.progressBar.setProgress(storagePath.getUsagePercentage()); - holder.root.setOnClickListener((View v) -> selectAndDismiss(storagePath)); - holder.radioButton.setOnClickListener((View v) -> selectAndDismiss(storagePath)); + View.OnClickListener selectListener = v -> selectionHandler.accept(storagePath.getFullPath()); + holder.root.setOnClickListener(selectListener); + holder.radioButton.setOnClickListener(selectListener); + if (storagePath.getFullPath().equals(currentPath)) { holder.radioButton.toggle(); } @@ -68,10 +65,6 @@ public class DataFolderAdapter extends RecyclerView.Adapter<DataFolderAdapter.Vi return entries.size(); } - public void setDialog(Dialog dialog) { - this.dialog = dialog; - } - private String getCurrentPath() { File dataFolder = UserPreferences.getDataFolder(null); if (dataFolder != null) { @@ -99,11 +92,6 @@ public class DataFolderAdapter extends RecyclerView.Adapter<DataFolderAdapter.Vi return dir != null && dir.exists() && dir.canRead() && dir.canWrite(); } - private void selectAndDismiss(StoragePath storagePath) { - selectionHandler.run(storagePath.getFullPath()); - dialog.dismiss(); - } - static class ViewHolder extends RecyclerView.ViewHolder { private final View root; private final TextView path; diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/ChooseDataFolderDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/ChooseDataFolderDialog.java index ec285a8f6..2c375f5cd 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/ChooseDataFolderDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/ChooseDataFolderDialog.java @@ -4,6 +4,7 @@ import android.content.Context; import android.view.View; import androidx.appcompat.app.AlertDialog; +import androidx.core.util.Consumer; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import de.danoeh.antennapod.R; @@ -11,29 +12,7 @@ import de.danoeh.antennapod.adapter.DataFolderAdapter; public class ChooseDataFolderDialog { - public abstract static 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) { - DataFolderAdapter adapter = new DataFolderAdapter(context, handlerFunc); - - if (adapter.getItemCount() == 0) { - new AlertDialog.Builder(context) - .setTitle(R.string.error_label) - .setMessage(R.string.external_storage_error_msg) - .setPositiveButton(android.R.string.ok, null) - .show(); - return; - } + public static void showDialog(final Context context, Consumer<String> handlerFunc) { View content = View.inflate(context, R.layout.choose_data_folder_dialog, null); AlertDialog dialog = new AlertDialog.Builder(context) @@ -43,9 +22,22 @@ public class ChooseDataFolderDialog { .setNegativeButton(R.string.cancel_label, null) .create(); ((RecyclerView) content.findViewById(R.id.recyclerView)).setLayoutManager(new LinearLayoutManager(context)); + + DataFolderAdapter adapter = new DataFolderAdapter(context, path -> { + dialog.dismiss(); + handlerFunc.accept(path); + }); ((RecyclerView) content.findViewById(R.id.recyclerView)).setAdapter(adapter); - adapter.setDialog(dialog); - dialog.show(); + + if (adapter.getItemCount() > 0) { + dialog.show(); + } else { + new AlertDialog.Builder(context) + .setTitle(R.string.error_label) + .setMessage(R.string.external_storage_error_msg) + .setPositiveButton(android.R.string.ok, null) + .show(); + } } }
\ No newline at end of file diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/StoragePreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/StoragePreferencesFragment.java index a94bb30f1..42b0cb96f 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/StoragePreferencesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/StoragePreferencesFragment.java @@ -36,7 +36,10 @@ public class StoragePreferencesFragment extends PreferenceFragmentCompat { private void setupStorageScreen() { findPreference(PREF_CHOOSE_DATA_DIR).setOnPreferenceClickListener( preference -> { - showChooseDataFolderDialog(); + ChooseDataFolderDialog.showDialog(getContext(), path -> { + UserPreferences.setDataFolder(path); + setDataFolderText(); + }); return true; } ); @@ -70,15 +73,4 @@ public class StoragePreferencesFragment extends PreferenceFragmentCompat { findPreference(PREF_CHOOSE_DATA_DIR).setSummary(f.getAbsolutePath()); } } - - private void showChooseDataFolderDialog() { - ChooseDataFolderDialog.showDialog( - getActivity(), new ChooseDataFolderDialog.RunnableWithString() { - @Override - public void run(final String folder) { - UserPreferences.setDataFolder(folder); - setDataFolderText(); - } - }); - } } |