From 37c0ff2ac7950783caca3249d4bf6cfefab89914 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Tue, 30 Mar 2021 15:26:52 +0200 Subject: [PATCH] [UI] Migrate MaterialDialogs to material-components. --- app/build.gradle | 2 - .../edziennik/ui/dialogs/DialogExtensions.kt | 44 ++++ .../ui/dialogs/home/StudentNumberDialog.kt | 37 +-- .../announcements/AnnouncementsFragment.java | 12 +- .../ui/modules/base/CrashActivity.kt | 18 +- .../ui/modules/debug/DebugFragment.java | 10 +- .../ui/modules/debug/LabProfileFragment.kt | 87 +++---- .../grades/editor/GradesEditorFragment.kt | 46 ++-- .../ui/modules/views/SubjectDropdown.kt | 27 ++- .../ui/widgets/WidgetConfigActivity.java | 116 ++++++---- .../main/res/layout/dialog_announcement.xml | 14 +- .../main/res/layout/dialog_widget_config.xml | 213 +++++++++--------- .../main/res/layout/md_simplelist_item.xml | 45 ---- .../res/layout/widget_profile_dialog_item.xml | 44 ++++ app/src/main/res/values/styles.xml | 18 +- 15 files changed, 414 insertions(+), 319 deletions(-) create mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/DialogExtensions.kt delete mode 100644 app/src/main/res/layout/md_simplelist_item.xml create mode 100644 app/src/main/res/layout/widget_profile_dialog_item.xml diff --git a/app/build.gradle b/app/build.gradle index eadc01cc..302fb9b0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -134,8 +134,6 @@ dependencies { // Other dependencies implementation "cat.ereza:customactivityoncrash:2.3.0" - implementation "com.afollestad.material-dialogs:commons:0.9.6.0" - implementation "com.afollestad.material-dialogs:core:0.9.6.0" implementation "com.applandeo:material-calendar-view:1.5.0" implementation "com.daimajia.swipelayout:library:1.2.0@aar" implementation "com.github.antonKozyriatskyi:CircularProgressIndicator:1.2.2" diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/DialogExtensions.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/DialogExtensions.kt new file mode 100644 index 00000000..5bf46d16 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/DialogExtensions.kt @@ -0,0 +1,44 @@ +/* + * Copyright (c) Kuba Szczodrzyński 2021-3-30. + */ + +package pl.szczodrzynski.edziennik.ui.dialogs + +import android.text.InputType +import android.view.LayoutInflater +import androidx.core.view.isVisible +import androidx.core.widget.addTextChangedListener +import com.google.android.material.dialog.MaterialAlertDialogBuilder +import com.google.android.material.textfield.TextInputEditText +import pl.szczodrzynski.edziennik.databinding.DialogEditTextBinding +import pl.szczodrzynski.edziennik.isNotNullNorBlank + +fun MaterialAlertDialogBuilder.input( + message: CharSequence? = null, + type: Int = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_MULTI_LINE, + hint: CharSequence? = null, + value: CharSequence? = null, + changeListener: ((editText: TextInputEditText, input: String) -> Boolean)? = null, + positiveButton: Int? = null, + positiveListener: ((editText: TextInputEditText, input: String) -> Boolean)? = null +): MaterialAlertDialogBuilder { + val b = DialogEditTextBinding.inflate(LayoutInflater.from(context), null, false) + b.title.text = message + b.title.isVisible = message.isNotNullNorBlank() + b.text1.hint = hint + b.text1.inputType = type + b.text1.setText(value) + b.text1.addTextChangedListener { text -> + if (changeListener?.invoke(b.text1, text?.toString() ?: "") != false) + b.text1.error = null + } + if (positiveButton != null) { + setPositiveButton(positiveButton) { dialog, _ -> + if (positiveListener?.invoke(b.text1, b.text1.text?.toString() ?: "") != false) + dialog.dismiss() + } + } + setView(b.root) + + return this +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/home/StudentNumberDialog.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/home/StudentNumberDialog.kt index 265bd17b..3f3f8176 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/home/StudentNumberDialog.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/home/StudentNumberDialog.kt @@ -5,12 +5,11 @@ package pl.szczodrzynski.edziennik.ui.dialogs.home import android.text.InputType -import android.widget.Toast -import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity -import com.afollestad.materialdialogs.MaterialDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import pl.szczodrzynski.edziennik.R import pl.szczodrzynski.edziennik.data.db.entity.Profile +import pl.szczodrzynski.edziennik.ui.dialogs.input class StudentNumberDialog( val activity: AppCompatActivity, @@ -22,25 +21,27 @@ class StudentNumberDialog( private const val TAG = "StudentNumberDialog" } - private lateinit var dialog: AlertDialog - init { run { if (activity.isFinishing) return@run onShowListener?.invoke(TAG) - MaterialDialog.Builder(activity) - .title(R.string.card_lucky_number_set_title) - .content(R.string.card_lucky_number_set_text) - .inputType(InputType.TYPE_CLASS_NUMBER) - .input(null, if (profile.studentNumber == -1) "" else profile.studentNumber.toString()) { _: MaterialDialog?, input: CharSequence -> - try { - profile.studentNumber = input.toString().toInt() - } catch (e: Exception) { - Toast.makeText(activity, R.string.incorrect_format, Toast.LENGTH_SHORT).show() - } + MaterialAlertDialogBuilder(activity) + .setTitle(R.string.card_lucky_number_set_title) + .input( + message = activity.getString(R.string.card_lucky_number_set_text), + type = InputType.TYPE_CLASS_NUMBER, + hint = null, + value = if (profile.studentNumber == -1) null else profile.studentNumber.toString(), + positiveButton = R.string.ok, + positiveListener = { _, input -> + profile.studentNumber = input.toIntOrNull() ?: -1 + true } - .dismissListener { - onDismissListener?.invoke(TAG) - }.show() + ) + .setNegativeButton(R.string.cancel, null) + .setOnDismissListener { + onDismissListener?.invoke(TAG) + } + .show() }} } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/announcements/AnnouncementsFragment.java b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/announcements/AnnouncementsFragment.java index 717bcb64..d8cdbc2c 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/announcements/AnnouncementsFragment.java +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/announcements/AnnouncementsFragment.java @@ -14,7 +14,7 @@ import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import com.afollestad.materialdialogs.MaterialDialog; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial; import org.greenrobot.eventbus.EventBus; @@ -161,12 +161,12 @@ public class AnnouncementsFragment extends Fragment { } private void showAnnouncementDetailsDialog(AnnouncementFull announcement) { - MaterialDialog dialog = new MaterialDialog.Builder(activity) - .title(announcement.getSubject()) - .customView(R.layout.dialog_announcement, true) - .positiveText(R.string.ok) + DialogAnnouncementBinding b = DialogAnnouncementBinding.inflate(LayoutInflater.from(activity), null, false); + new MaterialAlertDialogBuilder(activity) + .setTitle(announcement.getSubject()) + .setView(b.getRoot()) + .setPositiveButton(R.string.ok, null) .show(); - DialogAnnouncementBinding b = DialogAnnouncementBinding.bind(dialog.getCustomView()); b.text.setText(announcement.getTeacherName() +"\n\n"+ (announcement.getStartDate() != null ? announcement.getStartDate().getFormattedString() : "-") + (announcement.getEndDate() != null ? " do " + announcement.getEndDate().getFormattedString() : "")+"\n\n" +announcement.getText()); if (!announcement.getSeen() && app.getProfile().getLoginStoreType() != LOGIN_TYPE_LIBRUS) { announcement.setSeen(true); diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/CrashActivity.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/CrashActivity.kt index 0004a1e2..0b39b913 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/CrashActivity.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/base/CrashActivity.kt @@ -12,7 +12,7 @@ import android.widget.Button import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import cat.ereza.customactivityoncrash.CustomActivityOnCrash -import com.afollestad.materialdialogs.MaterialDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import kotlinx.coroutines.* import pl.szczodrzynski.edziennik.App import pl.szczodrzynski.edziennik.BuildConfig @@ -87,15 +87,13 @@ class CrashActivity : AppCompatActivity(), CoroutineScope { } val moreInfoButton = findViewById