From 6b1fc7575a8eeae5a22f89a4599de87dec6c67c5 Mon Sep 17 00:00:00 2001 From: tzugen Date: Thu, 18 Nov 2021 20:49:48 +0100 Subject: [PATCH 1/4] Use material icons for info and error dialogs --- .../moire/ultrasonic/fragment/PlaylistsFragment.java | 6 +++--- .../org/moire/ultrasonic/fragment/SharesFragment.java | 6 +++--- .../java/org/moire/ultrasonic/util/ErrorDialog.java | 2 +- .../org/moire/ultrasonic/util/ModalBackgroundTask.java | 2 +- .../moire/ultrasonic/activity/NavigationActivity.kt | 2 +- .../moire/ultrasonic/fragment/EditServerFragment.kt | 2 +- .../ultrasonic/fragment/ServerSelectorFragment.kt | 2 +- .../org/moire/ultrasonic/fragment/SettingsFragment.kt | 2 +- .../org/moire/ultrasonic/service/MediaPlayerService.kt | 2 +- .../org/moire/ultrasonic/util/CommunicationError.kt | 2 +- .../src/main/kotlin/org/moire/ultrasonic/util/Util.kt | 4 ++-- ...{ic_baseline_close_24.xml => ic_baseline_close.xml} | 0 ultrasonic/src/main/res/drawable/ic_baseline_info.xml | 10 ++++++++++ .../src/main/res/drawable/ic_baseline_warning.xml | 10 ++++++++++ 14 files changed, 36 insertions(+), 16 deletions(-) rename ultrasonic/src/main/res/drawable/{ic_baseline_close_24.xml => ic_baseline_close.xml} (100%) create mode 100644 ultrasonic/src/main/res/drawable/ic_baseline_info.xml create mode 100644 ultrasonic/src/main/res/drawable/ic_baseline_warning.xml diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/PlaylistsFragment.java b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/PlaylistsFragment.java index 5d11c45e..ba7e136e 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/PlaylistsFragment.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/PlaylistsFragment.java @@ -212,7 +212,7 @@ public class PlaylistsFragment extends Fragment { private void deletePlaylist(final Playlist playlist) { - new AlertDialog.Builder(getContext()).setIcon(android.R.drawable.ic_dialog_alert).setTitle(R.string.common_confirm).setMessage(getResources().getString(R.string.delete_playlist, playlist.getName())).setPositiveButton(R.string.common_ok, new DialogInterface.OnClickListener() + new AlertDialog.Builder(getContext()).setIcon(R.drawable.ic_baseline_warning).setTitle(R.string.common_confirm).setMessage(getResources().getString(R.string.delete_playlist, playlist.getName())).setPositiveButton(R.string.common_ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) @@ -263,7 +263,7 @@ public class PlaylistsFragment extends Fragment { textView.setText(message); textView.setMovementMethod(LinkMovementMethod.getInstance()); - new AlertDialog.Builder(getContext()).setTitle(playlist.getName()).setCancelable(true).setIcon(android.R.drawable.ic_dialog_info).setView(textView).show(); + new AlertDialog.Builder(getContext()).setTitle(playlist.getName()).setCancelable(true).setIcon(R.drawable.ic_baseline_info).setView(textView).show(); } private void updatePlaylistInfo(final Playlist playlist) @@ -294,7 +294,7 @@ public class PlaylistsFragment extends Fragment { AlertDialog.Builder alertDialog = new AlertDialog.Builder(getContext()); - alertDialog.setIcon(android.R.drawable.ic_dialog_alert); + alertDialog.setIcon(R.drawable.ic_baseline_warning); alertDialog.setTitle(R.string.playlist_update_info); alertDialog.setView(dialogView); alertDialog.setPositiveButton(R.string.common_ok, new DialogInterface.OnClickListener() diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SharesFragment.java b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SharesFragment.java index 958774bf..4abc6df6 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SharesFragment.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SharesFragment.java @@ -185,7 +185,7 @@ public class SharesFragment extends Fragment { private void deleteShare(final Share share) { - new AlertDialog.Builder(getContext()).setIcon(android.R.drawable.ic_dialog_alert).setTitle(R.string.common_confirm).setMessage(getResources().getString(R.string.delete_playlist, share.getName())).setPositiveButton(R.string.common_ok, new DialogInterface.OnClickListener() + new AlertDialog.Builder(getContext()).setIcon(R.drawable.ic_baseline_warning).setTitle(R.string.common_confirm).setMessage(getResources().getString(R.string.delete_playlist, share.getName())).setPositiveButton(R.string.common_ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) @@ -240,7 +240,7 @@ public class SharesFragment extends Fragment { textView.setText(message); textView.setMovementMethod(LinkMovementMethod.getInstance()); - new AlertDialog.Builder(getContext()).setTitle("Share Details").setCancelable(true).setIcon(android.R.drawable.ic_dialog_info).setView(textView).show(); + new AlertDialog.Builder(getContext()).setTitle("Share Details").setCancelable(true).setIcon(R.drawable.ic_baseline_info).setView(textView).show(); } private void updateShareInfo(final Share share) @@ -278,7 +278,7 @@ public class SharesFragment extends Fragment { AlertDialog.Builder alertDialog = new AlertDialog.Builder(getContext()); - alertDialog.setIcon(android.R.drawable.ic_dialog_alert); + alertDialog.setIcon(R.drawable.ic_baseline_warning); alertDialog.setTitle(R.string.playlist_update_info); alertDialog.setView(dialogView); alertDialog.setPositiveButton(R.string.common_ok, new DialogInterface.OnClickListener() diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/ErrorDialog.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/ErrorDialog.java index a2efddad..ff0fc891 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/ErrorDialog.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/ErrorDialog.java @@ -39,7 +39,7 @@ public class ErrorDialog { AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setIcon(android.R.drawable.ic_dialog_alert); + builder.setIcon(R.drawable.ic_baseline_warning); builder.setTitle(R.string.error_label); builder.setMessage(message); builder.setCancelable(true); diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/ModalBackgroundTask.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/ModalBackgroundTask.java index 258e5baa..c402c83c 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/ModalBackgroundTask.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/ModalBackgroundTask.java @@ -50,7 +50,7 @@ public abstract class ModalBackgroundTask extends BackgroundTask private AlertDialog createProgressDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - builder.setIcon(android.R.drawable.ic_dialog_info); + builder.setIcon(R.drawable.ic_baseline_info); builder.setTitle(R.string.background_task_wait); builder.setMessage(R.string.background_task_loading); builder.setCancelable(true); diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt index bbaea16b..0daa0989 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt @@ -353,7 +353,7 @@ class NavigationActivity : AppCompatActivity() { infoDialogDisplayed = true AlertDialog.Builder(this) - .setIcon(android.R.drawable.ic_dialog_info) + .setIcon(R.drawable.ic_baseline_info) .setTitle(R.string.main_welcome_title) .setMessage(R.string.main_welcome_text_demo) .setNegativeButton(R.string.main_welcome_cancel) { dialog, _ -> diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt index 48d75a62..76481cd3 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt @@ -509,7 +509,7 @@ class EditServerFragment : Fragment(), OnBackPressedHandler { private fun finishActivity() { if (areFieldsChanged()) { AlertDialog.Builder(context) - .setIcon(android.R.drawable.ic_dialog_alert) + .setIcon(R.drawable.ic_baseline_warning) .setTitle(R.string.common_confirm) .setMessage(R.string.server_editor_leave_confirmation) .setPositiveButton(R.string.common_ok) { dialog, _ -> diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ServerSelectorFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ServerSelectorFragment.kt index 9e1eeabe..61543264 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ServerSelectorFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ServerSelectorFragment.kt @@ -134,7 +134,7 @@ class ServerSelectorFragment : Fragment() { */ private fun onServerDeleted(index: Int) { AlertDialog.Builder(context) - .setIcon(android.R.drawable.ic_dialog_alert) + .setIcon(R.drawable.ic_baseline_warning) .setTitle(R.string.server_menu_delete) .setMessage(R.string.server_selector_delete_confirmation) .setPositiveButton(R.string.common_delete) { dialog, _ -> diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt index 5603aa82..62da5051 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt @@ -482,7 +482,7 @@ class SettingsFragment : val delete = R.string.settings_debug_log_delete AlertDialog.Builder(activity) .setMessage(message) - .setIcon(android.R.drawable.ic_dialog_info) + .setIcon(R.drawable.ic_baseline_info) .setNegativeButton(keep) { dIf: DialogInterface, _: Int -> dIf.cancel() } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt index 1f285916..24789e20 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MediaPlayerService.kt @@ -647,7 +647,7 @@ class MediaPlayerService : Service() { 4 -> { keycode = KeyEvent.KEYCODE_MEDIA_STOP label = getString(R.string.buttons_stop) - icon = R.drawable.ic_baseline_close_24 + icon = R.drawable.ic_baseline_close } else -> return null } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/CommunicationError.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/CommunicationError.kt index 2a722e26..dc7821a0 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/CommunicationError.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/CommunicationError.kt @@ -46,7 +46,7 @@ object CommunicationError { if (context == null) return AlertDialog.Builder(context) - .setIcon(android.R.drawable.ic_dialog_alert) + .setIcon(R.drawable.ic_baseline_warning) .setTitle(R.string.error_label) .setMessage(getErrorMessage(error!!, context)) .setCancelable(true) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt index 9df82e61..7b65b17e 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt @@ -368,7 +368,7 @@ object Util { // See https://stackoverflow.com/questions/5436822/ fun createDialog( context: Context?, - icon: Int = android.R.drawable.ic_dialog_info, + icon: Int = R.drawable.ic_baseline_info, title: String, message: String? ): AlertDialog.Builder { @@ -385,7 +385,7 @@ object Util { fun showDialog( context: Context, - icon: Int = android.R.drawable.ic_dialog_info, + icon: Int = R.drawable.ic_baseline_info, titleId: Int, message: String? ) { diff --git a/ultrasonic/src/main/res/drawable/ic_baseline_close_24.xml b/ultrasonic/src/main/res/drawable/ic_baseline_close.xml similarity index 100% rename from ultrasonic/src/main/res/drawable/ic_baseline_close_24.xml rename to ultrasonic/src/main/res/drawable/ic_baseline_close.xml diff --git a/ultrasonic/src/main/res/drawable/ic_baseline_info.xml b/ultrasonic/src/main/res/drawable/ic_baseline_info.xml new file mode 100644 index 00000000..17255b7a --- /dev/null +++ b/ultrasonic/src/main/res/drawable/ic_baseline_info.xml @@ -0,0 +1,10 @@ + + + diff --git a/ultrasonic/src/main/res/drawable/ic_baseline_warning.xml b/ultrasonic/src/main/res/drawable/ic_baseline_warning.xml new file mode 100644 index 00000000..a02bc138 --- /dev/null +++ b/ultrasonic/src/main/res/drawable/ic_baseline_warning.xml @@ -0,0 +1,10 @@ + + + From 5bfa0044ab896785ca5f6ece7f034de355a1112a Mon Sep 17 00:00:00 2001 From: tzugen Date: Thu, 18 Nov 2021 21:29:27 +0100 Subject: [PATCH 2/4] Introduce prepopulated Info and Error Dialog.Builders, and thereby unify dialog handling across the code base --- .../moire/ultrasonic/util/ErrorDialog.java | 71 ----------------- .../ultrasonic/util/ModalBackgroundTask.java | 37 ++------- .../ultrasonic/activity/NavigationActivity.kt | 11 ++- .../ultrasonic/fragment/EditServerFragment.kt | 23 +++--- .../fragment/ServerSelectorFragment.kt | 5 +- .../ultrasonic/fragment/SettingsFragment.kt | 4 +- .../ultrasonic/util/CommunicationError.kt | 12 +-- .../org/moire/ultrasonic/util/Dialogs.kt | 77 +++++++++++++++++++ .../kotlin/org/moire/ultrasonic/util/Util.kt | 30 -------- 9 files changed, 110 insertions(+), 160 deletions(-) delete mode 100644 ultrasonic/src/main/java/org/moire/ultrasonic/util/ErrorDialog.java create mode 100644 ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Dialogs.kt diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/ErrorDialog.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/ErrorDialog.java deleted file mode 100644 index ff0fc891..00000000 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/ErrorDialog.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - This file is part of Subsonic. - - Subsonic is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - Subsonic is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Subsonic. If not, see . - - Copyright 2009 (C) Sindre Mehus - */ -package org.moire.ultrasonic.util; - -import android.app.Activity; -import android.app.AlertDialog; -import android.content.DialogInterface; - -import org.moire.ultrasonic.R; - -/** - * @author Sindre Mehus - */ -public class ErrorDialog -{ - - public ErrorDialog(Activity activity, int messageId, boolean finishActivityOnCancel) - { - this(activity, activity.getResources().getString(messageId), finishActivityOnCancel); - } - - public ErrorDialog(final Activity activity, CharSequence message, final boolean finishActivityOnClose) - { - - AlertDialog.Builder builder = new AlertDialog.Builder(activity); - builder.setIcon(R.drawable.ic_baseline_warning); - builder.setTitle(R.string.error_label); - builder.setMessage(message); - builder.setCancelable(true); - builder.setOnCancelListener(new DialogInterface.OnCancelListener() - { - @Override - public void onCancel(DialogInterface dialogInterface) - { - if (finishActivityOnClose) - { - activity.finish(); - } - } - }); - builder.setPositiveButton(R.string.common_ok, new DialogInterface.OnClickListener() - { - @Override - public void onClick(DialogInterface dialogInterface, int i) - { - if (finishActivityOnClose) - { - activity.finish(); - } - } - }); - - builder.create().show(); - } -} diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/ModalBackgroundTask.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/ModalBackgroundTask.java index c402c83c..18c3bfa5 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/ModalBackgroundTask.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/ModalBackgroundTask.java @@ -20,11 +20,11 @@ package org.moire.ultrasonic.util; import android.app.Activity; import android.app.AlertDialog; -import android.content.DialogInterface; -import timber.log.Timber; import org.moire.ultrasonic.R; +import timber.log.Timber; + /** * @author Sindre Mehus */ @@ -49,27 +49,11 @@ public abstract class ModalBackgroundTask extends BackgroundTask private AlertDialog createProgressDialog() { - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - builder.setIcon(R.drawable.ic_baseline_info); + AlertDialog.Builder builder = new InfoDialog.Builder(getActivity()); builder.setTitle(R.string.background_task_wait); builder.setMessage(R.string.background_task_loading); - builder.setCancelable(true); - builder.setOnCancelListener(new DialogInterface.OnCancelListener() - { - @Override - public void onCancel(DialogInterface dialogInterface) - { - cancel(); - } - }); - builder.setPositiveButton(R.string.common_cancel, new DialogInterface.OnClickListener() - { - @Override - public void onClick(DialogInterface dialogInterface, int i) - { - cancel(); - } - }); + builder.setOnCancelListener(dialogInterface -> cancel()); + builder.setPositiveButton(R.string.common_cancel, (dialogInterface, i) -> cancel()); return builder.create(); } @@ -165,19 +149,12 @@ public abstract class ModalBackgroundTask extends BackgroundTask protected void error(Throwable error) { Timber.w(error); - new ErrorDialog(getActivity(), getErrorMessage(error), finishActivityOnCancel); + new ErrorDialog(getActivity(), getErrorMessage(error), getActivity(), finishActivityOnCancel); } @Override public void updateProgress(final String message) { - getHandler().post(new Runnable() - { - @Override - public void run() - { - progressDialog.setMessage(message); - } - }); + getHandler().post(() -> progressDialog.setMessage(message)); } } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt index 0daa0989..44b67078 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt @@ -1,6 +1,11 @@ +/* + * NavigationActivity.kt + * Copyright (C) 2009-2021 Ultrasonic developers + * + * Distributed under terms of the GNU GPLv3 license. + */ package org.moire.ultrasonic.activity -import android.app.AlertDialog import android.app.SearchManager import android.content.Intent import android.content.res.ColorStateList @@ -47,6 +52,7 @@ import org.moire.ultrasonic.service.MediaPlayerLifecycleSupport import org.moire.ultrasonic.service.RxBus import org.moire.ultrasonic.subsonic.ImageLoaderProvider import org.moire.ultrasonic.util.Constants +import org.moire.ultrasonic.util.InfoDialog import org.moire.ultrasonic.util.ServerColor import org.moire.ultrasonic.util.Settings import org.moire.ultrasonic.util.Storage @@ -352,8 +358,7 @@ class NavigationActivity : AppCompatActivity() { if (!infoDialogDisplayed) { infoDialogDisplayed = true - AlertDialog.Builder(this) - .setIcon(R.drawable.ic_baseline_info) + InfoDialog.Builder(this) .setTitle(R.string.main_welcome_title) .setMessage(R.string.main_welcome_text_demo) .setNegativeButton(R.string.main_welcome_cancel) { dialog, _ -> diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt index 76481cd3..29de1289 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/EditServerFragment.kt @@ -1,6 +1,5 @@ package org.moire.ultrasonic.fragment -import android.app.AlertDialog import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -37,6 +36,7 @@ import org.moire.ultrasonic.model.ServerSettingsModel import org.moire.ultrasonic.service.MusicServiceFactory import org.moire.ultrasonic.util.Constants import org.moire.ultrasonic.util.ErrorDialog +import org.moire.ultrasonic.util.InfoDialog import org.moire.ultrasonic.util.ModalBackgroundTask import org.moire.ultrasonic.util.ServerColor import org.moire.ultrasonic.util.Util @@ -470,24 +470,22 @@ class EditServerFragment : Fragment(), OnBackPressedHandler { ) } - Util.showDialog( - context = requireActivity(), - titleId = R.string.settings_testing_ok, - message = dialogText - ) + InfoDialog.Builder(requireActivity()) + .setTitle(R.string.settings_testing_ok) + .setMessage(dialogText) + .show() } override fun error(error: Throwable) { Timber.w(error) ErrorDialog( - activity, - String.format( + context = activity, + message = String.format( "%s %s", resources.getString(R.string.settings_connection_failure), getErrorMessage(error) - ), - false - ) + ) + ).show() } } task.execute() @@ -508,8 +506,7 @@ class EditServerFragment : Fragment(), OnBackPressedHandler { */ private fun finishActivity() { if (areFieldsChanged()) { - AlertDialog.Builder(context) - .setIcon(R.drawable.ic_baseline_warning) + ErrorDialog.Builder(context) .setTitle(R.string.common_confirm) .setMessage(R.string.server_editor_leave_confirmation) .setPositiveButton(R.string.common_ok) { dialog, _ -> diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ServerSelectorFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ServerSelectorFragment.kt index 61543264..f5827d1f 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ServerSelectorFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ServerSelectorFragment.kt @@ -1,6 +1,5 @@ package org.moire.ultrasonic.fragment -import android.app.AlertDialog import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -20,6 +19,7 @@ import org.moire.ultrasonic.data.ActiveServerProvider import org.moire.ultrasonic.fragment.EditServerFragment.Companion.EDIT_SERVER_INTENT_INDEX import org.moire.ultrasonic.model.ServerSettingsModel import org.moire.ultrasonic.service.MediaPlayerController +import org.moire.ultrasonic.util.ErrorDialog import org.moire.ultrasonic.util.Util import timber.log.Timber @@ -133,8 +133,7 @@ class ServerSelectorFragment : Fragment() { * This Callback handles the deletion of a Server Setting */ private fun onServerDeleted(index: Int) { - AlertDialog.Builder(context) - .setIcon(R.drawable.ic_baseline_warning) + ErrorDialog.Builder(context) .setTitle(R.string.server_menu_delete) .setMessage(R.string.server_selector_delete_confirmation) .setPositiveButton(R.string.common_delete) { dialog, _ -> diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt index 62da5051..9f3e5b79 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt @@ -42,6 +42,7 @@ import org.moire.ultrasonic.service.RxBus import org.moire.ultrasonic.util.Constants import org.moire.ultrasonic.util.FileUtil.defaultMusicDirectory import org.moire.ultrasonic.util.FileUtil.ultrasonicDirectory +import org.moire.ultrasonic.util.InfoDialog import org.moire.ultrasonic.util.MediaSessionHandler import org.moire.ultrasonic.util.Settings import org.moire.ultrasonic.util.Settings.preferences @@ -480,9 +481,8 @@ class SettingsFragment : ) val keep = R.string.settings_debug_log_keep val delete = R.string.settings_debug_log_delete - AlertDialog.Builder(activity) + InfoDialog.Builder(activity) .setMessage(message) - .setIcon(R.drawable.ic_baseline_info) .setNegativeButton(keep) { dIf: DialogInterface, _: Int -> dIf.cancel() } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/CommunicationError.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/CommunicationError.kt index dc7821a0..0bd4e0b9 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/CommunicationError.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/CommunicationError.kt @@ -6,7 +6,6 @@ */ package org.moire.ultrasonic.util -import android.app.AlertDialog import android.content.Context import android.os.Handler import android.os.Looper @@ -45,13 +44,10 @@ object CommunicationError { if (context == null) return - AlertDialog.Builder(context) - .setIcon(R.drawable.ic_baseline_warning) - .setTitle(R.string.error_label) - .setMessage(getErrorMessage(error!!, context)) - .setCancelable(true) - .setPositiveButton(R.string.common_ok) { _, _ -> } - .create().show() + ErrorDialog( + context = context, + message = getErrorMessage(error!!, context) + ).show() } @JvmStatic diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Dialogs.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Dialogs.kt new file mode 100644 index 00000000..af83d784 --- /dev/null +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Dialogs.kt @@ -0,0 +1,77 @@ +/* + * NavigationActivity.kt + * Copyright (C) 2009-2021 Ultrasonic developers + * + * Distributed under terms of the GNU GPLv3 license. + */ +package org.moire.ultrasonic.util + +import android.app.Activity +import android.app.AlertDialog +import android.content.Context +import org.moire.ultrasonic.R + +open class InfoDialog( + context: Context, + message: CharSequence?, + private val activity: Activity? = null, + private val finishActivityOnClose: Boolean = false +) { + + open var builder: AlertDialog.Builder = Builder(activity ?: context, message) + + fun show() { + builder.setOnCancelListener { + if (finishActivityOnClose) { + activity!!.finish() + } + } + builder.setPositiveButton(R.string.common_ok) { _, _ -> + if (finishActivityOnClose) { + activity!!.finish() + } + } + builder.create().show() + } + + class Builder(context: Context?) : AlertDialog.Builder(context) { + + constructor(context: Context, message: CharSequence?) : this(context) { + setMessage(message) + } + + init { + setIcon(R.drawable.ic_baseline_info) + setTitle(R.string.common_confirm) + setCancelable(true) + setPositiveButton(R.string.common_ok) { _, _ -> + // Just close it + } + } + } +} + +class ErrorDialog( + context: Context, + message: CharSequence?, + activity: Activity? = null, + finishActivityOnClose: Boolean = false +) : InfoDialog(context, message, activity, finishActivityOnClose) { + + override var builder: AlertDialog.Builder = Builder(activity ?: context, message) + + class Builder(context: Context?) : AlertDialog.Builder(context) { + constructor(context: Context, message: CharSequence?) : this(context) { + setMessage(message) + } + + init { + setIcon(R.drawable.ic_baseline_warning) + setTitle(R.string.error_label) + setCancelable(true) + setPositiveButton(R.string.common_ok) { _, _ -> + // Just close it + } + } + } +} diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt index 7b65b17e..89f6173d 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Util.kt @@ -9,11 +9,9 @@ package org.moire.ultrasonic.util import android.annotation.SuppressLint import android.app.Activity -import android.app.AlertDialog import android.app.PendingIntent import android.content.ContentResolver import android.content.Context -import android.content.DialogInterface import android.content.Intent import android.content.pm.PackageManager import android.graphics.Bitmap @@ -364,34 +362,6 @@ object Util { fun isExternalStoragePresent(): Boolean = Environment.MEDIA_MOUNTED == Environment.getExternalStorageState() - // The AlertDialog requires an Activity context, app context is not enough - // See https://stackoverflow.com/questions/5436822/ - fun createDialog( - context: Context?, - icon: Int = R.drawable.ic_baseline_info, - title: String, - message: String? - ): AlertDialog.Builder { - return AlertDialog.Builder(context) - .setIcon(icon) - .setTitle(title) - .setMessage(message) - .setPositiveButton(R.string.common_ok) { - dialog: DialogInterface, - _: Int -> - dialog.dismiss() - } - } - - fun showDialog( - context: Context, - icon: Int = R.drawable.ic_baseline_info, - titleId: Int, - message: String? - ) { - createDialog(context, icon, context.getString(titleId, ""), message).show() - } - @JvmStatic fun sleepQuietly(millis: Long) { try { From 3be480a9a2c20e04af9ab17d802f4f4987fd7578 Mon Sep 17 00:00:00 2001 From: tzugen Date: Sat, 18 Dec 2021 18:18:18 +0100 Subject: [PATCH 3/4] Add error message to cache location picker Fixes #643 --- .../org/moire/ultrasonic/fragment/SettingsFragment.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt index 9f3e5b79..e49a79fd 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/SettingsFragment.kt @@ -40,6 +40,7 @@ import org.moire.ultrasonic.provider.SearchSuggestionProvider import org.moire.ultrasonic.service.MediaPlayerController import org.moire.ultrasonic.service.RxBus import org.moire.ultrasonic.util.Constants +import org.moire.ultrasonic.util.ErrorDialog import org.moire.ultrasonic.util.FileUtil.defaultMusicDirectory import org.moire.ultrasonic.util.FileUtil.ultrasonicDirectory import org.moire.ultrasonic.util.InfoDialog @@ -183,8 +184,12 @@ class SettingsFragment : val write = (resultData.flags and Intent.FLAG_GRANT_WRITE_URI_PERMISSION) != 0 val persist = (resultData.flags and Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) != 0 - // TODO Should we show an error? - if (!read || !write || !persist) return + if (!read || !write || !persist) { + ErrorDialog.Builder(context) + .setMessage(R.string.settings_cache_location_error) + .show() + return + } // The result data contains a URI for the document or directory that // the user selected. From 505405e87fbf237ecd83c3c28dfb8b5c9ba18e23 Mon Sep 17 00:00:00 2001 From: Nite Date: Mon, 20 Dec 2021 09:33:50 +0100 Subject: [PATCH 4/4] Fixed comment --- .../src/main/kotlin/org/moire/ultrasonic/util/Dialogs.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Dialogs.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Dialogs.kt index af83d784..e7854751 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Dialogs.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/util/Dialogs.kt @@ -1,9 +1,10 @@ /* - * NavigationActivity.kt + * Dialogs.kt * Copyright (C) 2009-2021 Ultrasonic developers * * Distributed under terms of the GNU GPLv3 license. */ + package org.moire.ultrasonic.util import android.app.Activity