From edb440a5a9a05e24c344a71b272b9238217e9c55 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sun, 31 Mar 2024 18:40:15 +0200 Subject: Restructure related UI classes together (#7044) --- .../preferences/DownloadsPreferencesFragment.java | 108 ------ .../ImportExportPreferencesFragment.java | 413 --------------------- .../preferences/MainPreferencesFragment.java | 157 -------- .../preferences/PlaybackPreferencesFragment.java | 128 ------- .../preferences/SwipePreferencesFragment.java | 59 --- .../UserInterfacePreferencesFragment.java | 171 --------- .../preferences/dialog/PreferenceListDialog.java | 49 --- .../preferences/dialog/PreferenceSwitchDialog.java | 57 --- 8 files changed, 1142 deletions(-) delete mode 100644 app/src/main/java/de/danoeh/antennapod/fragment/preferences/DownloadsPreferencesFragment.java delete mode 100644 app/src/main/java/de/danoeh/antennapod/fragment/preferences/ImportExportPreferencesFragment.java delete mode 100644 app/src/main/java/de/danoeh/antennapod/fragment/preferences/MainPreferencesFragment.java delete mode 100644 app/src/main/java/de/danoeh/antennapod/fragment/preferences/PlaybackPreferencesFragment.java delete mode 100644 app/src/main/java/de/danoeh/antennapod/fragment/preferences/SwipePreferencesFragment.java delete mode 100644 app/src/main/java/de/danoeh/antennapod/fragment/preferences/UserInterfacePreferencesFragment.java delete mode 100644 app/src/main/java/de/danoeh/antennapod/fragment/preferences/dialog/PreferenceListDialog.java delete mode 100644 app/src/main/java/de/danoeh/antennapod/fragment/preferences/dialog/PreferenceSwitchDialog.java (limited to 'app/src/main/java/de/danoeh/antennapod/fragment/preferences') diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/DownloadsPreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/DownloadsPreferencesFragment.java deleted file mode 100644 index 58e968155..000000000 --- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/DownloadsPreferencesFragment.java +++ /dev/null @@ -1,108 +0,0 @@ -package de.danoeh.antennapod.fragment.preferences; - -import android.content.SharedPreferences; -import android.os.Bundle; - -import androidx.preference.PreferenceFragmentCompat; -import androidx.preference.PreferenceManager; -import androidx.preference.TwoStatePreference; - -import com.google.android.material.dialog.MaterialAlertDialogBuilder; -import de.danoeh.antennapod.R; -import de.danoeh.antennapod.activity.PreferenceActivity; -import de.danoeh.antennapod.net.download.serviceinterface.FeedUpdateManager; -import de.danoeh.antennapod.ui.preferences.screen.downloads.ChooseDataFolderDialog; -import de.danoeh.antennapod.dialog.ProxyDialog; -import de.danoeh.antennapod.storage.preferences.UserPreferences; - -import java.io.File; - - -public class DownloadsPreferencesFragment extends PreferenceFragmentCompat - implements SharedPreferences.OnSharedPreferenceChangeListener { - private static final String PREF_SCREEN_AUTODL = "prefAutoDownloadSettings"; - private static final String PREF_AUTO_DELETE_LOCAL = "prefAutoDeleteLocal"; - private static final String PREF_PROXY = "prefProxy"; - private static final String PREF_CHOOSE_DATA_DIR = "prefChooseDataDir"; - - private boolean blockAutoDeleteLocal = true; - - @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - addPreferencesFromResource(R.xml.preferences_downloads); - setupNetworkScreen(); - } - - @Override - public void onStart() { - super.onStart(); - ((PreferenceActivity) getActivity()).getSupportActionBar().setTitle(R.string.downloads_pref); - PreferenceManager.getDefaultSharedPreferences(getContext()).registerOnSharedPreferenceChangeListener(this); - } - - @Override - public void onStop() { - super.onStop(); - PreferenceManager.getDefaultSharedPreferences(getContext()).unregisterOnSharedPreferenceChangeListener(this); - } - - @Override - public void onResume() { - super.onResume(); - setDataFolderText(); - } - - private void setupNetworkScreen() { - findPreference(PREF_SCREEN_AUTODL).setOnPreferenceClickListener(preference -> { - ((PreferenceActivity) getActivity()).openScreen(R.xml.preferences_autodownload); - return true; - }); - // validate and set correct value: number of downloads between 1 and 50 (inclusive) - findPreference(PREF_PROXY).setOnPreferenceClickListener(preference -> { - ProxyDialog dialog = new ProxyDialog(getActivity()); - dialog.show(); - return true; - }); - findPreference(PREF_CHOOSE_DATA_DIR).setOnPreferenceClickListener(preference -> { - ChooseDataFolderDialog.showDialog(getContext(), path -> { - UserPreferences.setDataFolder(path); - setDataFolderText(); - }); - return true; - }); - findPreference(PREF_AUTO_DELETE_LOCAL).setOnPreferenceChangeListener((preference, newValue) -> { - if (blockAutoDeleteLocal && newValue == Boolean.TRUE) { - showAutoDeleteEnableDialog(); - return false; - } else { - return true; - } - }); - } - - private void setDataFolderText() { - File f = UserPreferences.getDataFolder(null); - if (f != null) { - findPreference(PREF_CHOOSE_DATA_DIR).setSummary(f.getAbsolutePath()); - } - } - - @Override - public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - if (UserPreferences.PREF_UPDATE_INTERVAL.equals(key)) { - FeedUpdateManager.getInstance().restartUpdateAlarm(getContext(), true); - } - } - - private void showAutoDeleteEnableDialog() { - new MaterialAlertDialogBuilder(requireContext()) - .setMessage(R.string.pref_auto_local_delete_dialog_body) - .setPositiveButton(R.string.yes, (dialog, which) -> { - blockAutoDeleteLocal = false; - ((TwoStatePreference) findPreference(PREF_AUTO_DELETE_LOCAL)).setChecked(true); - blockAutoDeleteLocal = true; - }) - .setNegativeButton(R.string.cancel_label, null) - .show(); - } -} diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/ImportExportPreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/ImportExportPreferencesFragment.java deleted file mode 100644 index 7c607c242..000000000 --- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/ImportExportPreferencesFragment.java +++ /dev/null @@ -1,413 +0,0 @@ -package de.danoeh.antennapod.fragment.preferences; - -import android.app.Activity; -import android.app.ProgressDialog; -import android.content.ActivityNotFoundException; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.net.Uri; -import android.os.Bundle; -import android.util.Log; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.activity.result.contract.ActivityResultContracts.GetContent; -import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.StringRes; -import androidx.documentfile.provider.DocumentFile; -import androidx.preference.SwitchPreferenceCompat; -import com.google.android.material.dialog.MaterialAlertDialogBuilder; -import androidx.core.app.ShareCompat; -import androidx.core.content.FileProvider; -import androidx.preference.PreferenceFragmentCompat; -import com.google.android.material.snackbar.Snackbar; -import de.danoeh.antennapod.R; -import de.danoeh.antennapod.activity.OpmlImportActivity; -import de.danoeh.antennapod.activity.PreferenceActivity; -import de.danoeh.antennapod.storage.database.DBReader; -import de.danoeh.antennapod.model.feed.FeedItem; -import de.danoeh.antennapod.model.feed.FeedItemFilter; -import de.danoeh.antennapod.model.feed.SortOrder; -import de.danoeh.antennapod.storage.importexport.AutomaticDatabaseExportWorker; -import de.danoeh.antennapod.storage.importexport.DatabaseExporter; -import de.danoeh.antennapod.storage.importexport.FavoritesWriter; -import de.danoeh.antennapod.storage.importexport.HtmlWriter; -import de.danoeh.antennapod.storage.importexport.OpmlWriter; -import de.danoeh.antennapod.storage.preferences.UserPreferences; -import io.reactivex.Completable; -import io.reactivex.Observable; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.disposables.Disposable; -import io.reactivex.schedulers.Schedulers; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.nio.charset.Charset; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; -import java.util.Locale; - -public class ImportExportPreferencesFragment extends PreferenceFragmentCompat { - private static final String TAG = "ImportExPrefFragment"; - private static final String PREF_OPML_EXPORT = "prefOpmlExport"; - private static final String PREF_OPML_IMPORT = "prefOpmlImport"; - private static final String PREF_HTML_EXPORT = "prefHtmlExport"; - private static final String PREF_DATABASE_IMPORT = "prefDatabaseImport"; - private static final String PREF_DATABASE_EXPORT = "prefDatabaseExport"; - private static final String PREF_AUTOMATIC_DATABASE_EXPORT = "prefAutomaticDatabaseExport"; - private static final String PREF_FAVORITE_EXPORT = "prefFavoritesExport"; - private static final String DEFAULT_OPML_OUTPUT_NAME = "antennapod-feeds-%s.opml"; - private static final String CONTENT_TYPE_OPML = "text/x-opml"; - private static final String DEFAULT_HTML_OUTPUT_NAME = "antennapod-feeds-%s.html"; - private static final String CONTENT_TYPE_HTML = "text/html"; - private static final String DEFAULT_FAVORITES_OUTPUT_NAME = "antennapod-favorites-%s.html"; - private static final String DATABASE_EXPORT_FILENAME = "AntennaPodBackup-%s.db"; - - private final ActivityResultLauncher chooseOpmlExportPathLauncher = - registerForActivityResult(new StartActivityForResult(), - result -> exportToDocument(result, Export.OPML)); - private final ActivityResultLauncher chooseHtmlExportPathLauncher = - registerForActivityResult(new StartActivityForResult(), - result -> exportToDocument(result, Export.HTML)); - private final ActivityResultLauncher chooseFavoritesExportPathLauncher = - registerForActivityResult(new StartActivityForResult(), - result -> exportToDocument(result, Export.FAVORITES)); - private final ActivityResultLauncher restoreDatabaseLauncher = - registerForActivityResult(new StartActivityForResult(), this::restoreDatabaseResult); - private final ActivityResultLauncher backupDatabaseLauncher = - registerForActivityResult(new BackupDatabase(), this::backupDatabaseResult); - private final ActivityResultLauncher chooseOpmlImportPathLauncher = - registerForActivityResult(new GetContent(), uri -> { - if (uri != null) { - final Intent intent = new Intent(getContext(), OpmlImportActivity.class); - intent.setData(uri); - startActivity(intent); - } - }); - private final ActivityResultLauncher automaticBackupLauncher = - registerForActivityResult(new PickWritableFolder(), this::setupAutomaticBackup); - - private Disposable disposable; - private ProgressDialog progressDialog; - - @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - addPreferencesFromResource(R.xml.preferences_import_export); - setupStorageScreen(); - progressDialog = new ProgressDialog(getContext()); - progressDialog.setIndeterminate(true); - progressDialog.setMessage(getContext().getString(R.string.please_wait)); - } - - @Override - public void onStart() { - super.onStart(); - ((PreferenceActivity) getActivity()).getSupportActionBar().setTitle(R.string.import_export_pref); - } - - @Override - public void onStop() { - super.onStop(); - if (disposable != null) { - disposable.dispose(); - } - } - - private void setupStorageScreen() { - findPreference(PREF_OPML_EXPORT).setOnPreferenceClickListener( - preference -> { - openExportPathPicker(Export.OPML, chooseOpmlExportPathLauncher); - return true; - } - ); - findPreference(PREF_HTML_EXPORT).setOnPreferenceClickListener( - preference -> { - openExportPathPicker(Export.HTML, chooseHtmlExportPathLauncher); - return true; - }); - findPreference(PREF_OPML_IMPORT).setOnPreferenceClickListener( - preference -> { - try { - chooseOpmlImportPathLauncher.launch("*/*"); - } catch (ActivityNotFoundException e) { - Log.e(TAG, "No activity found. Should never happen..."); - } - return true; - }); - findPreference(PREF_DATABASE_IMPORT).setOnPreferenceClickListener( - preference -> { - importDatabase(); - return true; - }); - findPreference(PREF_DATABASE_EXPORT).setOnPreferenceClickListener( - preference -> { - backupDatabaseLauncher.launch(dateStampFilename(DATABASE_EXPORT_FILENAME)); - return true; - }); - ((SwitchPreferenceCompat) findPreference(PREF_AUTOMATIC_DATABASE_EXPORT)) - .setChecked(UserPreferences.getAutomaticExportFolder() != null); - findPreference(PREF_AUTOMATIC_DATABASE_EXPORT).setOnPreferenceChangeListener( - (preference, newValue) -> { - if (Boolean.TRUE.equals(newValue)) { - try { - automaticBackupLauncher.launch(null); - } catch (ActivityNotFoundException e) { - e.printStackTrace(); - Snackbar.make(getView(), R.string.unable_to_start_system_file_manager, Snackbar.LENGTH_LONG) - .show(); - } - return false; - } else { - UserPreferences.setAutomaticExportFolder(null); - AutomaticDatabaseExportWorker.enqueueIfNeeded(getContext(), false); - } - return true; - }); - findPreference(PREF_FAVORITE_EXPORT).setOnPreferenceClickListener( - preference -> { - openExportPathPicker(Export.FAVORITES, chooseFavoritesExportPathLauncher); - return true; - }); - } - - private String dateStampFilename(String fname) { - return String.format(fname, new SimpleDateFormat("yyyy-MM-dd", Locale.US).format(new Date())); - } - - private void importDatabase() { - // setup the alert builder - MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getActivity()); - builder.setTitle(R.string.database_import_label); - builder.setMessage(R.string.database_import_warning); - - // add a button - builder.setNegativeButton(R.string.no, null); - builder.setPositiveButton(R.string.confirm_label, (dialog, which) -> { - Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); - intent.setType("*/*"); - restoreDatabaseLauncher.launch(intent); - }); - - // create and show the alert dialog - builder.show(); - } - - private void showDatabaseImportSuccessDialog() { - MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getContext()); - builder.setTitle(R.string.successful_import_label); - builder.setMessage(R.string.import_ok); - builder.setCancelable(false); - builder.setPositiveButton(android.R.string.ok, (dialogInterface, i) -> forceRestart()); - builder.show(); - } - - void showExportSuccessSnackbar(Uri uri, String mimeType) { - Snackbar.make(getView(), R.string.export_success_title, Snackbar.LENGTH_LONG) - .setAction(R.string.share_label, v -> - new ShareCompat.IntentBuilder(getContext()) - .setType(mimeType) - .addStream(uri) - .setChooserTitle(R.string.share_label) - .startChooser()) - .show(); - } - - private void showExportErrorDialog(final Throwable error) { - progressDialog.dismiss(); - final MaterialAlertDialogBuilder alert = new MaterialAlertDialogBuilder(getContext()); - alert.setPositiveButton(android.R.string.ok, (dialog, which) -> dialog.dismiss()); - alert.setTitle(R.string.export_error_label); - alert.setMessage(error.getMessage()); - alert.show(); - } - - private void restoreDatabaseResult(final ActivityResult result) { - if (result.getResultCode() != Activity.RESULT_OK || result.getData() == null) { - return; - } - final Uri uri = result.getData().getData(); - progressDialog.show(); - disposable = Completable.fromAction(() -> DatabaseExporter.importBackup(uri, getContext())) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(() -> { - showDatabaseImportSuccessDialog(); - progressDialog.dismiss(); - }, this::showExportErrorDialog); - } - - private void backupDatabaseResult(final Uri uri) { - if (uri == null) { - return; - } - progressDialog.show(); - disposable = Completable.fromAction(() -> DatabaseExporter.exportToDocument(uri, getContext())) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(() -> { - showExportSuccessSnackbar(uri, "application/x-sqlite3"); - progressDialog.dismiss(); - }, this::showExportErrorDialog); - } - - private void openExportPathPicker(Export exportType, ActivityResultLauncher result) { - String title = dateStampFilename(exportType.outputNameTemplate); - - Intent intentPickAction = new Intent(Intent.ACTION_CREATE_DOCUMENT) - .addCategory(Intent.CATEGORY_OPENABLE) - .setType(exportType.contentType) - .putExtra(Intent.EXTRA_TITLE, title); - - // Creates an implicit intent to launch a file manager which lets - // the user choose a specific directory to export to. - try { - result.launch(intentPickAction); - return; - } catch (ActivityNotFoundException e) { - Log.e(TAG, "No activity found. Should never happen..."); - } - - // If we are using a SDK lower than API 21 or the implicit intent failed - // fallback to the legacy export process - File output = new File(UserPreferences.getDataFolder("export/"), title); - exportToFile(exportType, output); - } - - private void exportToFile(Export exportType, File output) { - progressDialog.show(); - disposable = Observable.create( - subscriber -> { - if (output.exists()) { - boolean success = output.delete(); - Log.w(TAG, "Overwriting previously exported file: " + success); - } - try (FileOutputStream fileOutputStream = new FileOutputStream(output)) { - writeToStream(fileOutputStream, exportType); - subscriber.onNext(output); - } catch (IOException e) { - subscriber.onError(e); - } - }) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(outputFile -> { - progressDialog.dismiss(); - Uri fileUri = FileProvider.getUriForFile(getActivity().getApplicationContext(), - getString(R.string.provider_authority), output); - showExportSuccessSnackbar(fileUri, exportType.contentType); - }, this::showExportErrorDialog, progressDialog::dismiss); - } - - private void exportToDocument(final ActivityResult result, Export exportType) { - if (result.getResultCode() != Activity.RESULT_OK || result.getData() == null) { - return; - } - progressDialog.show(); - DocumentFile output = DocumentFile.fromSingleUri(getContext(), result.getData().getData()); - disposable = Observable.create( - subscriber -> { - try (OutputStream outputStream = getContext().getContentResolver() - .openOutputStream(output.getUri(), "wt")) { - writeToStream(outputStream, exportType); - subscriber.onNext(output); - } catch (IOException e) { - subscriber.onError(e); - } - }) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(ignore -> { - progressDialog.dismiss(); - showExportSuccessSnackbar(output.getUri(), exportType.contentType); - }, this::showExportErrorDialog, progressDialog::dismiss); - } - - private void writeToStream(OutputStream outputStream, Export type) throws IOException { - try (OutputStreamWriter writer = new OutputStreamWriter(outputStream, Charset.forName("UTF-8"))) { - switch (type) { - case HTML: - HtmlWriter.writeDocument(DBReader.getFeedList(), writer, getContext()); - break; - case OPML: - OpmlWriter.writeDocument(DBReader.getFeedList(), writer); - break; - case FAVORITES: - List allFavorites = DBReader.getEpisodes(0, Integer.MAX_VALUE, - new FeedItemFilter(FeedItemFilter.IS_FAVORITE), SortOrder.DATE_NEW_OLD); - FavoritesWriter.writeDocument(allFavorites, writer, getContext()); - break; - default: - showExportErrorDialog(new Exception("Invalid export type")); - break; - } - } - } - - private void setupAutomaticBackup(Uri uri) { - if (uri == null) { - return; - } - getActivity().getContentResolver().takePersistableUriPermission(uri, - Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); - UserPreferences.setAutomaticExportFolder(uri.toString()); - AutomaticDatabaseExportWorker.enqueueIfNeeded(getContext(), true); - ((SwitchPreferenceCompat) findPreference(PREF_AUTOMATIC_DATABASE_EXPORT)).setChecked(true); - } - - private void forceRestart() { - PackageManager pm = getContext().getPackageManager(); - Intent intent = pm.getLaunchIntentForPackage(getContext().getPackageName()); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - getContext().getApplicationContext().startActivity(intent); - Runtime.getRuntime().exit(0); - } - - private static class BackupDatabase extends ActivityResultContracts.CreateDocument { - - BackupDatabase() { - super("application/x-sqlite3"); - } - - @NonNull - @Override - public Intent createIntent(@NonNull final Context context, @NonNull final String input) { - return super.createIntent(context, input) - .addCategory(Intent.CATEGORY_OPENABLE) - .setType("application/x-sqlite3"); - } - } - - private static class PickWritableFolder extends ActivityResultContracts.OpenDocumentTree { - @NonNull - @Override - public Intent createIntent(@NonNull final Context context, @Nullable final Uri input) { - return super.createIntent(context, input) - .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); - } - } - - private enum Export { - OPML(CONTENT_TYPE_OPML, DEFAULT_OPML_OUTPUT_NAME, R.string.opml_export_label), - HTML(CONTENT_TYPE_HTML, DEFAULT_HTML_OUTPUT_NAME, R.string.html_export_label), - FAVORITES(CONTENT_TYPE_HTML, DEFAULT_FAVORITES_OUTPUT_NAME, R.string.favorites_export_label); - - final String contentType; - final String outputNameTemplate; - @StringRes - final int labelResId; - - Export(String contentType, String outputNameTemplate, int labelResId) { - this.contentType = contentType; - this.outputNameTemplate = outputNameTemplate; - this.labelResId = labelResId; - } - } -} diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/MainPreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/MainPreferencesFragment.java deleted file mode 100644 index 50d201f39..000000000 --- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/MainPreferencesFragment.java +++ /dev/null @@ -1,157 +0,0 @@ -package de.danoeh.antennapod.fragment.preferences; - -import android.content.Intent; -import android.graphics.PorterDuff; -import android.graphics.PorterDuffColorFilter; -import android.os.Bundle; - -import androidx.appcompat.app.AppCompatActivity; -import androidx.preference.Preference; -import androidx.preference.PreferenceFragmentCompat; - -import com.bytehamster.lib.preferencesearch.SearchConfiguration; -import com.bytehamster.lib.preferencesearch.SearchPreference; - -import de.danoeh.antennapod.R; -import de.danoeh.antennapod.activity.BugReportActivity; -import de.danoeh.antennapod.activity.PreferenceActivity; -import de.danoeh.antennapod.core.util.IntentUtils; -import de.danoeh.antennapod.ui.preferences.screen.about.AboutFragment; - -public class MainPreferencesFragment extends PreferenceFragmentCompat { - - private static final String PREF_SCREEN_USER_INTERFACE = "prefScreenInterface"; - private static final String PREF_SCREEN_PLAYBACK = "prefScreenPlayback"; - private static final String PREF_SCREEN_DOWNLOADS = "prefScreenDownloads"; - private static final String PREF_SCREEN_IMPORT_EXPORT = "prefScreenImportExport"; - private static final String PREF_SCREEN_SYNCHRONIZATION = "prefScreenSynchronization"; - private static final String PREF_DOCUMENTATION = "prefDocumentation"; - private static final String PREF_VIEW_FORUM = "prefViewForum"; - private static final String PREF_SEND_BUG_REPORT = "prefSendBugReport"; - private static final String PREF_CATEGORY_PROJECT = "project"; - private static final String PREF_ABOUT = "prefAbout"; - private static final String PREF_NOTIFICATION = "notifications"; - private static final String PREF_CONTRIBUTE = "prefContribute"; - - @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - addPreferencesFromResource(R.xml.preferences); - setupMainScreen(); - setupSearch(); - - // If you are writing a spin-off, please update the details on screens like "About" and "Report bug" - // and afterwards remove the following lines. Please keep in mind that AntennaPod is licensed under the GPL. - // This means that your application needs to be open-source under the GPL, too. - // It must also include a prominent copyright notice. - int packageHash = getContext().getPackageName().hashCode(); - if (packageHash != 1790437538 && packageHash != -1190467065) { - findPreference(PREF_CATEGORY_PROJECT).setVisible(false); - Preference copyrightNotice = new Preference(getContext()); - copyrightNotice.setIcon(R.drawable.ic_info_white); - copyrightNotice.getIcon().mutate() - .setColorFilter(new PorterDuffColorFilter(0xffcc0000, PorterDuff.Mode.MULTIPLY)); - copyrightNotice.setSummary("This application is based on AntennaPod." - + " The AntennaPod team does NOT provide support for this unofficial version." - + " If you can read this message, the developers of this modification" - + " violate the GNU General Public License (GPL)."); - findPreference(PREF_CATEGORY_PROJECT).getParent().addPreference(copyrightNotice); - } else if (packageHash == -1190467065) { - Preference debugNotice = new Preference(getContext()); - debugNotice.setIcon(R.drawable.ic_info_white); - debugNotice.getIcon().mutate() - .setColorFilter(new PorterDuffColorFilter(0xffcc0000, PorterDuff.Mode.MULTIPLY)); - debugNotice.setOrder(-1); - debugNotice.setSummary("This is a development version of AntennaPod and not meant for daily use"); - findPreference(PREF_CATEGORY_PROJECT).getParent().addPreference(debugNotice); - } - } - - @Override - public void onStart() { - super.onStart(); - ((PreferenceActivity) getActivity()).getSupportActionBar().setTitle(R.string.settings_label); - } - - private void setupMainScreen() { - findPreference(PREF_SCREEN_USER_INTERFACE).setOnPreferenceClickListener(preference -> { - ((PreferenceActivity) getActivity()).openScreen(R.xml.preferences_user_interface); - return true; - }); - findPreference(PREF_SCREEN_PLAYBACK).setOnPreferenceClickListener(preference -> { - ((PreferenceActivity) getActivity()).openScreen(R.xml.preferences_playback); - return true; - }); - findPreference(PREF_SCREEN_DOWNLOADS).setOnPreferenceClickListener(preference -> { - ((PreferenceActivity) getActivity()).openScreen(R.xml.preferences_downloads); - return true; - }); - findPreference(PREF_SCREEN_SYNCHRONIZATION).setOnPreferenceClickListener(preference -> { - ((PreferenceActivity) getActivity()).openScreen(R.xml.preferences_synchronization); - return true; - }); - findPreference(PREF_SCREEN_IMPORT_EXPORT).setOnPreferenceClickListener(preference -> { - ((PreferenceActivity) getActivity()).openScreen(R.xml.preferences_import_export); - return true; - }); - findPreference(PREF_NOTIFICATION).setOnPreferenceClickListener(preference -> { - ((PreferenceActivity) getActivity()).openScreen(R.xml.preferences_notifications); - return true; - }); - findPreference(PREF_ABOUT).setOnPreferenceClickListener( - preference -> { - getParentFragmentManager().beginTransaction() - .replace(R.id.settingsContainer, new AboutFragment()) - .addToBackStack(getString(R.string.about_pref)).commit(); - return true; - } - ); - findPreference(PREF_DOCUMENTATION).setOnPreferenceClickListener(preference -> { - IntentUtils.openInBrowser(getContext(), - IntentUtils.getLocalizedWebsiteLink(getContext()) + "/documentation/"); - return true; - }); - findPreference(PREF_VIEW_FORUM).setOnPreferenceClickListener(preference -> { - IntentUtils.openInBrowser(getContext(), "https://forum.antennapod.org/"); - return true; - }); - findPreference(PREF_CONTRIBUTE).setOnPreferenceClickListener(preference -> { - IntentUtils.openInBrowser(getContext(), - IntentUtils.getLocalizedWebsiteLink(getContext()) + "/contribute/"); - return true; - }); - findPreference(PREF_SEND_BUG_REPORT).setOnPreferenceClickListener(preference -> { - startActivity(new Intent(getActivity(), BugReportActivity.class)); - return true; - }); - } - - private void setupSearch() { - SearchPreference searchPreference = findPreference("searchPreference"); - SearchConfiguration config = searchPreference.getSearchConfiguration(); - config.setActivity((AppCompatActivity) getActivity()); - config.setFragmentContainerViewId(R.id.settingsContainer); - config.setBreadcrumbsEnabled(true); - - config.index(R.xml.preferences_user_interface) - .addBreadcrumb(PreferenceActivity.getTitleOfPage(R.xml.preferences_user_interface)); - config.index(R.xml.preferences_playback) - .addBreadcrumb(PreferenceActivity.getTitleOfPage(R.xml.preferences_playback)); - config.index(R.xml.preferences_downloads) - .addBreadcrumb(PreferenceActivity.getTitleOfPage(R.xml.preferences_downloads)); - config.index(R.xml.preferences_import_export) - .addBreadcrumb(PreferenceActivity.getTitleOfPage(R.xml.preferences_import_export)); - config.index(R.xml.preferences_autodownload) - .addBreadcrumb(PreferenceActivity.getTitleOfPage(R.xml.preferences_downloads)) - .addBreadcrumb(R.string.automation) - .addBreadcrumb(PreferenceActivity.getTitleOfPage(R.xml.preferences_autodownload)); - config.index(R.xml.preferences_synchronization) - .addBreadcrumb(PreferenceActivity.getTitleOfPage(R.xml.preferences_synchronization)); - config.index(R.xml.preferences_notifications) - .addBreadcrumb(PreferenceActivity.getTitleOfPage(R.xml.preferences_notifications)); - config.index(R.xml.feed_settings) - .addBreadcrumb(PreferenceActivity.getTitleOfPage(R.xml.feed_settings)); - config.index(R.xml.preferences_swipe) - .addBreadcrumb(PreferenceActivity.getTitleOfPage(R.xml.preferences_user_interface)) - .addBreadcrumb(PreferenceActivity.getTitleOfPage(R.xml.preferences_swipe)); - } -} diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/PlaybackPreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/PlaybackPreferencesFragment.java deleted file mode 100644 index dcbd96d5b..000000000 --- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/PlaybackPreferencesFragment.java +++ /dev/null @@ -1,128 +0,0 @@ -package de.danoeh.antennapod.fragment.preferences; - -import android.app.Activity; -import android.content.res.Resources; -import android.os.Build; -import android.os.Bundle; -import androidx.annotation.NonNull; -import androidx.collection.ArrayMap; -import androidx.preference.ListPreference; -import androidx.preference.Preference; -import androidx.preference.PreferenceFragmentCompat; -import de.danoeh.antennapod.R; -import de.danoeh.antennapod.activity.PreferenceActivity; -import de.danoeh.antennapod.event.UnreadItemsUpdateEvent; -import de.danoeh.antennapod.storage.preferences.UsageStatistics; -import de.danoeh.antennapod.storage.preferences.UserPreferences; -import de.danoeh.antennapod.dialog.SkipPreferenceDialog; -import de.danoeh.antennapod.dialog.VariableSpeedDialog; -import java.util.Map; -import org.greenrobot.eventbus.EventBus; - -public class PlaybackPreferencesFragment extends PreferenceFragmentCompat { - private static final String PREF_PLAYBACK_SPEED_LAUNCHER = "prefPlaybackSpeedLauncher"; - private static final String PREF_PLAYBACK_REWIND_DELTA_LAUNCHER = "prefPlaybackRewindDeltaLauncher"; - private static final String PREF_PLAYBACK_FAST_FORWARD_DELTA_LAUNCHER = "prefPlaybackFastForwardDeltaLauncher"; - private static final String PREF_PLAYBACK_PREFER_STREAMING = "prefStreamOverDownload"; - - @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - addPreferencesFromResource(R.xml.preferences_playback); - - setupPlaybackScreen(); - buildSmartMarkAsPlayedPreference(); - } - - @Override - public void onStart() { - super.onStart(); - ((PreferenceActivity) getActivity()).getSupportActionBar().setTitle(R.string.playback_pref); - } - - private void setupPlaybackScreen() { - final Activity activity = getActivity(); - - findPreference(PREF_PLAYBACK_SPEED_LAUNCHER).setOnPreferenceClickListener(preference -> { - new VariableSpeedDialog().show(getChildFragmentManager(), null); - return true; - }); - findPreference(PREF_PLAYBACK_REWIND_DELTA_LAUNCHER).setOnPreferenceClickListener(preference -> { - SkipPreferenceDialog.showSkipPreference(activity, SkipPreferenceDialog.SkipDirection.SKIP_REWIND, null); - return true; - }); - findPreference(PREF_PLAYBACK_FAST_FORWARD_DELTA_LAUNCHER).setOnPreferenceClickListener(preference -> { - SkipPreferenceDialog.showSkipPreference(activity, SkipPreferenceDialog.SkipDirection.SKIP_FORWARD, null); - return true; - }); - findPreference(PREF_PLAYBACK_PREFER_STREAMING).setOnPreferenceChangeListener((preference, newValue) -> { - // Update all visible lists to reflect new streaming action button - EventBus.getDefault().post(new UnreadItemsUpdateEvent()); - // User consciously decided whether to prefer the streaming button, disable suggestion to change that - UsageStatistics.doNotAskAgain(UsageStatistics.ACTION_STREAM); - return true; - }); - if (Build.VERSION.SDK_INT >= 31) { - findPreference(UserPreferences.PREF_UNPAUSE_ON_HEADSET_RECONNECT).setVisible(false); - findPreference(UserPreferences.PREF_UNPAUSE_ON_BLUETOOTH_RECONNECT).setVisible(false); - } - - buildEnqueueLocationPreference(); - } - - private void buildEnqueueLocationPreference() { - final Resources res = requireActivity().getResources(); - final Map options = new ArrayMap<>(); - { - String[] keys = res.getStringArray(R.array.enqueue_location_values); - String[] values = res.getStringArray(R.array.enqueue_location_options); - for (int i = 0; i < keys.length; i++) { - options.put(keys[i], values[i]); - } - } - - ListPreference pref = requirePreference(UserPreferences.PREF_ENQUEUE_LOCATION); - pref.setSummary(res.getString(R.string.pref_enqueue_location_sum, options.get(pref.getValue()))); - - pref.setOnPreferenceChangeListener((preference, newValue) -> { - if (!(newValue instanceof String)) { - return false; - } - String newValStr = (String)newValue; - pref.setSummary(res.getString(R.string.pref_enqueue_location_sum, options.get(newValStr))); - return true; - }); - } - - @NonNull - private T requirePreference(@NonNull CharSequence key) { - // Possibly put it to a common method in abstract base class - T result = findPreference(key); - if (result == null) { - throw new IllegalArgumentException("Preference with key '" + key + "' is not found"); - - } - return result; - } - - private void buildSmartMarkAsPlayedPreference() { - final Resources res = getActivity().getResources(); - - ListPreference pref = findPreference(UserPreferences.PREF_SMART_MARK_AS_PLAYED_SECS); - String[] values = res.getStringArray(R.array.smart_mark_as_played_values); - String[] entries = new String[values.length]; - for (int x = 0; x < values.length; x++) { - if(x == 0) { - entries[x] = res.getString(R.string.pref_smart_mark_as_played_disabled); - } else { - int v = Integer.parseInt(values[x]); - if(v < 60) { - entries[x] = res.getQuantityString(R.plurals.time_seconds_quantified, v, v); - } else { - v /= 60; - entries[x] = res.getQuantityString(R.plurals.time_minutes_quantified, v, v); - } - } - } - pref.setEntries(entries); - } -} diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/SwipePreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/SwipePreferencesFragment.java deleted file mode 100644 index 5b81ff7a5..000000000 --- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/SwipePreferencesFragment.java +++ /dev/null @@ -1,59 +0,0 @@ -package de.danoeh.antennapod.fragment.preferences; - -import android.os.Bundle; -import androidx.preference.PreferenceFragmentCompat; -import de.danoeh.antennapod.R; -import de.danoeh.antennapod.activity.PreferenceActivity; -import de.danoeh.antennapod.dialog.SwipeActionsDialog; -import de.danoeh.antennapod.fragment.AllEpisodesFragment; -import de.danoeh.antennapod.fragment.CompletedDownloadsFragment; -import de.danoeh.antennapod.fragment.FeedItemlistFragment; -import de.danoeh.antennapod.fragment.InboxFragment; -import de.danoeh.antennapod.fragment.PlaybackHistoryFragment; -import de.danoeh.antennapod.fragment.QueueFragment; - -public class SwipePreferencesFragment extends PreferenceFragmentCompat { - private static final String PREF_SWIPE_QUEUE = "prefSwipeQueue"; - private static final String PREF_SWIPE_INBOX = "prefSwipeInbox"; - private static final String PREF_SWIPE_EPISODES = "prefSwipeEpisodes"; - private static final String PREF_SWIPE_DOWNLOADS = "prefSwipeDownloads"; - private static final String PREF_SWIPE_FEED = "prefSwipeFeed"; - private static final String PREF_SWIPE_HISTORY = "prefSwipeHistory"; - - @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - addPreferencesFromResource(R.xml.preferences_swipe); - - findPreference(PREF_SWIPE_QUEUE).setOnPreferenceClickListener(preference -> { - new SwipeActionsDialog(requireContext(), QueueFragment.TAG).show(() -> { }); - return true; - }); - findPreference(PREF_SWIPE_INBOX).setOnPreferenceClickListener(preference -> { - new SwipeActionsDialog(requireContext(), InboxFragment.TAG).show(() -> { }); - return true; - }); - findPreference(PREF_SWIPE_EPISODES).setOnPreferenceClickListener(preference -> { - new SwipeActionsDialog(requireContext(), AllEpisodesFragment.TAG).show(() -> { }); - return true; - }); - findPreference(PREF_SWIPE_DOWNLOADS).setOnPreferenceClickListener(preference -> { - new SwipeActionsDialog(requireContext(), CompletedDownloadsFragment.TAG).show(() -> { }); - return true; - }); - findPreference(PREF_SWIPE_FEED).setOnPreferenceClickListener(preference -> { - new SwipeActionsDialog(requireContext(), FeedItemlistFragment.TAG).show(() -> { }); - return true; - }); - findPreference(PREF_SWIPE_HISTORY).setOnPreferenceClickListener(preference -> { - new SwipeActionsDialog(requireContext(), PlaybackHistoryFragment.TAG).show(() -> { }); - return true; - }); - } - - @Override - public void onStart() { - super.onStart(); - ((PreferenceActivity) getActivity()).getSupportActionBar().setTitle(R.string.swipeactions_label); - } - -} diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/UserInterfacePreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/UserInterfacePreferencesFragment.java deleted file mode 100644 index af48c705d..000000000 --- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/UserInterfacePreferencesFragment.java +++ /dev/null @@ -1,171 +0,0 @@ -package de.danoeh.antennapod.fragment.preferences; - -import android.content.Context; -import android.content.DialogInterface; -import android.os.Build; -import android.os.Bundle; -import android.widget.Button; -import android.widget.ListView; - -import androidx.appcompat.app.AlertDialog; -import androidx.core.app.ActivityCompat; -import androidx.preference.Preference; -import androidx.preference.PreferenceFragmentCompat; - -import com.google.android.material.dialog.MaterialAlertDialogBuilder; -import com.google.android.material.snackbar.Snackbar; - -import org.greenrobot.eventbus.EventBus; - -import java.util.List; - -import de.danoeh.antennapod.R; -import de.danoeh.antennapod.activity.PreferenceActivity; -import de.danoeh.antennapod.dialog.DrawerPreferencesDialog; -import de.danoeh.antennapod.dialog.FeedSortDialog; -import de.danoeh.antennapod.dialog.SubscriptionsFilterDialog; -import de.danoeh.antennapod.event.PlayerStatusEvent; -import de.danoeh.antennapod.event.UnreadItemsUpdateEvent; -import de.danoeh.antennapod.storage.preferences.UserPreferences; - -public class UserInterfacePreferencesFragment extends PreferenceFragmentCompat { - private static final String PREF_SWIPE = "prefSwipe"; - - @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - addPreferencesFromResource(R.xml.preferences_user_interface); - setupInterfaceScreen(); - } - - @Override - public void onStart() { - super.onStart(); - ((PreferenceActivity) getActivity()).getSupportActionBar().setTitle(R.string.user_interface_label); - } - - private void setupInterfaceScreen() { - Preference.OnPreferenceChangeListener restartApp = (preference, newValue) -> { - ActivityCompat.recreate(getActivity()); - return true; - }; - findPreference(UserPreferences.PREF_THEME).setOnPreferenceChangeListener(restartApp); - findPreference(UserPreferences.PREF_THEME_BLACK).setOnPreferenceChangeListener(restartApp); - findPreference(UserPreferences.PREF_TINTED_COLORS).setOnPreferenceChangeListener(restartApp); - if (Build.VERSION.SDK_INT < 31) { - findPreference(UserPreferences.PREF_TINTED_COLORS).setVisible(false); - } - - findPreference(UserPreferences.PREF_SHOW_TIME_LEFT) - .setOnPreferenceChangeListener( - (preference, newValue) -> { - UserPreferences.setShowRemainTimeSetting((Boolean) newValue); - EventBus.getDefault().post(new UnreadItemsUpdateEvent()); - EventBus.getDefault().post(new PlayerStatusEvent()); - return true; - }); - - findPreference(UserPreferences.PREF_HIDDEN_DRAWER_ITEMS) - .setOnPreferenceClickListener(preference -> { - DrawerPreferencesDialog.show(getContext(), null); - return true; - }); - - findPreference(UserPreferences.PREF_FULL_NOTIFICATION_BUTTONS) - .setOnPreferenceClickListener(preference -> { - showFullNotificationButtonsDialog(); - return true; - }); - findPreference(UserPreferences.PREF_FILTER_FEED) - .setOnPreferenceClickListener((preference -> { - new SubscriptionsFilterDialog().show(getChildFragmentManager(), "filter"); - return true; - })); - - findPreference(UserPreferences.PREF_DRAWER_FEED_ORDER) - .setOnPreferenceClickListener((preference -> { - FeedSortDialog.showDialog(requireContext()); - return true; - })); - findPreference(PREF_SWIPE) - .setOnPreferenceClickListener(preference -> { - ((PreferenceActivity) getActivity()).openScreen(R.xml.preferences_swipe); - return true; - }); - - if (Build.VERSION.SDK_INT >= 26) { - findPreference(UserPreferences.PREF_EXPANDED_NOTIFICATION).setVisible(false); - } - } - - private void showFullNotificationButtonsDialog() { - final Context context = getActivity(); - - final List preferredButtons = UserPreferences.getFullNotificationButtons(); - final String[] allButtonNames = context.getResources().getStringArray( - R.array.full_notification_buttons_options); - final int[] buttonIds = { - UserPreferences.NOTIFICATION_BUTTON_SKIP, - UserPreferences.NOTIFICATION_BUTTON_NEXT_CHAPTER, - UserPreferences.NOTIFICATION_BUTTON_PLAYBACK_SPEED, - UserPreferences.NOTIFICATION_BUTTON_SLEEP_TIMER, - }; - final DialogInterface.OnClickListener completeListener = (dialog, which) -> - UserPreferences.setFullNotificationButtons(preferredButtons); - final String title = context.getResources().getString(R.string.pref_full_notification_buttons_title); - - boolean[] checked = new boolean[allButtonNames.length]; // booleans default to false in java - - // Clear buttons that are not part of the setting anymore - for (int i = preferredButtons.size() - 1; i >= 0; i--) { - boolean isValid = false; - for (int j = 0; j < checked.length; j++) { - if (buttonIds[j] == preferredButtons.get(i)) { - isValid = true; - break; - } - } - - if (!isValid) { - preferredButtons.remove(i); - } - } - - for (int i = 0; i < checked.length; i++) { - if (preferredButtons.contains(buttonIds[i])) { - checked[i] = true; - } - } - - MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(context); - builder.setTitle(title); - builder.setMultiChoiceItems(allButtonNames, checked, (dialog, which, isChecked) -> { - checked[which] = isChecked; - if (isChecked) { - preferredButtons.add(buttonIds[which]); - } else { - preferredButtons.remove((Integer) buttonIds[which]); - } - }); - builder.setPositiveButton(R.string.confirm_label, null); - builder.setNegativeButton(R.string.cancel_label, null); - final AlertDialog dialog = builder.create(); - - dialog.show(); - - Button positiveButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE); - - positiveButton.setOnClickListener(v -> { - if (preferredButtons.size() != 2) { - ListView selectionView = dialog.getListView(); - Snackbar.make( - selectionView, - context.getResources().getString(R.string.pref_compact_notification_buttons_dialog_error_exact), - Snackbar.LENGTH_SHORT).show(); - - } else { - completeListener.onClick(dialog, AlertDialog.BUTTON_POSITIVE); - dialog.cancel(); - } - }); - } -} diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/dialog/PreferenceListDialog.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/dialog/PreferenceListDialog.java deleted file mode 100644 index b6a11c001..000000000 --- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/dialog/PreferenceListDialog.java +++ /dev/null @@ -1,49 +0,0 @@ -package de.danoeh.antennapod.fragment.preferences.dialog; - -import android.content.Context; - -import com.google.android.material.dialog.MaterialAlertDialogBuilder; - -import de.danoeh.antennapod.R; - -public class PreferenceListDialog { - protected Context context; - private String title; - private OnPreferenceChangedListener onPreferenceChangedListener; - private int selectedPos = 0; - - public PreferenceListDialog(Context context, String title) { - this.context = context; - this.title = title; - } - - public interface OnPreferenceChangedListener { - /** - * Notified when user confirms preference - * - * @param pos The index of the item that was selected - */ - - void preferenceChanged(int pos); - } - - public void openDialog(String[] items) { - - MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(context); - builder.setTitle(title); - builder.setSingleChoiceItems(items, selectedPos, (dialog, which) -> { - selectedPos = which; - }); - builder.setPositiveButton(R.string.confirm_label, (dialog, which) -> { - if (onPreferenceChangedListener != null && selectedPos >= 0) { - onPreferenceChangedListener.preferenceChanged(selectedPos); - } - }); - builder.setNegativeButton(R.string.cancel_label, null); - builder.create().show(); - } - - public void setOnPreferenceChangedListener(OnPreferenceChangedListener onPreferenceChangedListener) { - this.onPreferenceChangedListener = onPreferenceChangedListener; - } -} diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/dialog/PreferenceSwitchDialog.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/dialog/PreferenceSwitchDialog.java deleted file mode 100644 index 10fbe6137..000000000 --- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/dialog/PreferenceSwitchDialog.java +++ /dev/null @@ -1,57 +0,0 @@ -package de.danoeh.antennapod.fragment.preferences.dialog; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; - -import com.google.android.material.dialog.MaterialAlertDialogBuilder; -import com.google.android.material.materialswitch.MaterialSwitch; - -import de.danoeh.antennapod.R; - -public class PreferenceSwitchDialog { - protected Context context; - private String title; - private String text; - private OnPreferenceChangedListener onPreferenceChangedListener; - - public PreferenceSwitchDialog(Context context, String title, String text) { - this.context = context; - this.title = title; - this.text = text; - } - - public interface OnPreferenceChangedListener { - /** - * Notified when user confirms preference - * - * @param enabled The preference - */ - - void preferenceChanged(boolean enabled); - } - - public void openDialog() { - - MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(context); - builder.setTitle(title); - - LayoutInflater inflater = LayoutInflater.from(this.context); - View layout = inflater.inflate(R.layout.dialog_switch_preference, null, false); - MaterialSwitch switchButton = layout.findViewById(R.id.dialogSwitch); - switchButton.setText(text); - builder.setView(layout); - - builder.setPositiveButton(R.string.confirm_label, (dialog, which) -> { - if (onPreferenceChangedListener != null) { - onPreferenceChangedListener.preferenceChanged(switchButton.isChecked()); - } - }); - builder.setNegativeButton(R.string.cancel_label, null); - builder.create().show(); - } - - public void setOnPreferenceChangedListener(OnPreferenceChangedListener onPreferenceChangedListener) { - this.onPreferenceChangedListener = onPreferenceChangedListener; - } -} -- cgit v1.2.3