From 17581a7a5ebb81efd3df300a2b61b8fae7ebace5 Mon Sep 17 00:00:00 2001 From: Nicholas Tinsley Date: Wed, 29 May 2024 13:43:16 -0400 Subject: [PATCH] Update SignalProgressDialog. Fixes #12949. --- .../components/SignalProgressDialog.kt | 66 +++++++++++++++++-- .../util/views/SimpleProgressDialog.java | 3 +- .../res/layout/signal_progress_dialog.xml | 42 ++++++++++++ 3 files changed, 104 insertions(+), 7 deletions(-) create mode 100644 app/src/main/res/layout/signal_progress_dialog.xml diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/SignalProgressDialog.kt b/app/src/main/java/org/thoughtcrime/securesms/components/SignalProgressDialog.kt index 272787e15c..00ded55dd7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/SignalProgressDialog.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/SignalProgressDialog.kt @@ -2,24 +2,54 @@ package org.thoughtcrime.securesms.components -import android.app.ProgressDialog import android.content.Context import android.content.DialogInterface +import android.os.Build +import android.view.LayoutInflater +import android.view.WindowManager +import android.widget.TextView +import androidx.appcompat.app.AlertDialog +import androidx.constraintlayout.widget.ConstraintLayout +import com.google.android.material.dialog.MaterialAlertDialogBuilder +import com.google.android.material.progressindicator.CircularProgressIndicator +import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.util.ViewUtil /** * Wraps a normal progress dialog for showing blocking in-progress UI. */ -class SignalProgressDialog private constructor(val progressDialog: ProgressDialog) { +class SignalProgressDialog private constructor( + private val dialog: AlertDialog, + private val titleView: TextView, + private val messageView: TextView, + private val progressBar: CircularProgressIndicator +) { val isShowing: Boolean - get() = progressDialog.isShowing + get() = dialog.isShowing + + var isIndeterminate: Boolean + get() = progressBar.isIndeterminate + set(value) = progressBar.setIndeterminate(value) + + var progress: Int + get() = progressBar.progress + set(value) = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + progressBar.setProgress(value, true) + } else { + progressBar.setProgress(value) + } + + fun setMessage(message: CharSequence?) { + messageView.text = message + } fun hide() { - progressDialog.hide() + dialog.hide() } fun dismiss() { - progressDialog.dismiss() + dialog.dismiss() } companion object { @@ -33,7 +63,31 @@ class SignalProgressDialog private constructor(val progressDialog: ProgressDialo cancelable: Boolean = false, cancelListener: DialogInterface.OnCancelListener? = null ): SignalProgressDialog { - return SignalProgressDialog(ProgressDialog.show(context, title, message, indeterminate, cancelable, cancelListener)) + val builder = MaterialAlertDialogBuilder(context).apply { + setTitle(null) + setMessage(null) + setCancelable(cancelable) + setOnCancelListener(cancelListener) + } + + val customView = LayoutInflater.from(context).inflate(R.layout.signal_progress_dialog, null) as ConstraintLayout + val titleView: TextView = customView.findViewById(R.id.progress_dialog_title) + val messageView: TextView = customView.findViewById(R.id.progress_dialog_message) + val progressView: CircularProgressIndicator = customView.findViewById(R.id.progress_dialog_progressbar) + + titleView.text = title + messageView.text = message + progressView.isIndeterminate = indeterminate + + builder.setView(customView) + val dialog = builder.show() + + val layoutParams = WindowManager.LayoutParams() + layoutParams.copyFrom(dialog.window?.attributes) + layoutParams.width = ViewUtil.dpToPx(context, 260) + dialog.window?.attributes = layoutParams + + return SignalProgressDialog(dialog, titleView, messageView, progressView) } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/views/SimpleProgressDialog.java b/app/src/main/java/org/thoughtcrime/securesms/util/views/SimpleProgressDialog.java index a5e4e872e7..b051316a46 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/views/SimpleProgressDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/views/SimpleProgressDialog.java @@ -18,8 +18,9 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; /** - * Helper class to show a fullscreen blocking indeterminate progress dialog. + * @deprecated Replaced by {@link org.thoughtcrime.securesms.components.SignalProgressDialog} */ +@Deprecated public final class SimpleProgressDialog { private static final String TAG = Log.tag(SimpleProgressDialog.class); diff --git a/app/src/main/res/layout/signal_progress_dialog.xml b/app/src/main/res/layout/signal_progress_dialog.xml new file mode 100644 index 0000000000..484f9b9682 --- /dev/null +++ b/app/src/main/res/layout/signal_progress_dialog.xml @@ -0,0 +1,42 @@ + + + + + + + + + \ No newline at end of file