From 4e92c402101581f4a46c38b05afc97f73dbbadbf Mon Sep 17 00:00:00 2001 From: andrew Date: Wed, 31 May 2023 12:15:41 +0930 Subject: [PATCH] Remove BaseDialog and utilise dialog DSL --- .../securesms/SessionDialogBuilder.kt | 28 ++++++-- .../conversation/v2/ConversationActivityV2.kt | 5 +- .../conversation/v2/dialogs/BlockedDialog.kt | 27 ++++---- .../conversation/v2/dialogs/DownloadDialog.kt | 27 ++++---- .../v2/dialogs/JoinOpenGroupDialog.kt | 30 ++++---- .../v2/dialogs/LinkPreviewDialog.kt | 23 ++++--- .../conversation/v2/dialogs/SendSeedDialog.kt | 23 ++++--- .../conversation/v2/utilities/BaseDialog.kt | 26 ------- .../preferences/ClearAllDataDialog.kt | 18 +++-- .../securesms/preferences/SeedDialog.kt | 38 +++++----- .../securesms/preferences/ShareLogsDialog.kt | 26 +++---- .../securesms/util/ActivityUtilities.kt | 4 +- app/src/main/res/layout/dialog_blocked.xml | 57 --------------- app/src/main/res/layout/dialog_download.xml | 58 ---------------- .../res/layout/dialog_join_open_group.xml | 56 --------------- .../main/res/layout/dialog_link_preview.xml | 60 ---------------- app/src/main/res/layout/dialog_open_url.xml | 56 --------------- app/src/main/res/layout/dialog_seed.xml | 69 ------------------- app/src/main/res/layout/dialog_share_logs.xml | 63 ----------------- 19 files changed, 128 insertions(+), 566 deletions(-) delete mode 100644 app/src/main/java/org/thoughtcrime/securesms/conversation/v2/utilities/BaseDialog.kt delete mode 100644 app/src/main/res/layout/dialog_blocked.xml delete mode 100644 app/src/main/res/layout/dialog_download.xml delete mode 100644 app/src/main/res/layout/dialog_join_open_group.xml delete mode 100644 app/src/main/res/layout/dialog_link_preview.xml delete mode 100644 app/src/main/res/layout/dialog_open_url.xml delete mode 100644 app/src/main/res/layout/dialog_seed.xml delete mode 100644 app/src/main/res/layout/dialog_share_logs.xml diff --git a/app/src/main/java/org/thoughtcrime/securesms/SessionDialogBuilder.kt b/app/src/main/java/org/thoughtcrime/securesms/SessionDialogBuilder.kt index 195c45441d..8ed60cce1e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/SessionDialogBuilder.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/SessionDialogBuilder.kt @@ -17,6 +17,7 @@ import androidx.appcompat.app.AlertDialog import androidx.core.view.setMargins import androidx.core.view.setPadding import androidx.core.view.updateMargins +import androidx.fragment.app.Fragment import network.loki.messenger.R import org.thoughtcrime.securesms.util.toPx @@ -28,6 +29,9 @@ annotation class DialogDsl @DialogDsl class SessionDialogBuilder(val context: Context) { + val dp20 = toPx(20, context.resources) + val dp40 = toPx(40, context.resources) + private val dialogBuilder: AlertDialog.Builder = AlertDialog.Builder(context) private var dialog: AlertDialog? = null @@ -49,19 +53,19 @@ class SessionDialogBuilder(val context: Context) { fun title(text: CharSequence?) = title(text?.toString()) fun title(text: String?) { - text(text, R.style.TextAppearance_AppCompat_Title) { setPadding(toPx(20, resources)) } + text(text, R.style.TextAppearance_AppCompat_Title) { setPadding(dp20) } } fun text(@StringRes id: Int, style: Int = 0) = text(context.getString(id), style) - fun text(text: CharSequence?) = text(text?.toString()) - fun text(text: String?, @StyleRes style: Int = 0) { + fun text(text: CharSequence?, @StyleRes style: Int = 0) { text(text, style) { layoutParams = LinearLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT) - .apply { toPx(40, resources).let { updateMargins(it, 0, it, 0) } } + .apply { updateMargins(dp40, 0, dp40, dp20) } } } - private fun text(text: String?, @StyleRes style: Int, modify: TextView.() -> Unit) { + + private fun text(text: CharSequence?, @StyleRes style: Int, modify: TextView.() -> Unit) { text ?: return TextView(context, null, 0, style) .apply { @@ -77,9 +81,15 @@ class SessionDialogBuilder(val context: Context) { fun iconAttribute(@AttrRes icon: Int): AlertDialog.Builder = dialogBuilder.setIconAttribute(icon) + fun singleChoiceItems( + options: Collection, + currentSelected: Int = 0, + onSelect: (Int) -> Unit + ) = singleChoiceItems(options.toTypedArray(), currentSelected, onSelect) + fun singleChoiceItems( options: Array, - currentSelected: Int, + currentSelected: Int = 0, onSelect: (Int) -> Unit ): AlertDialog.Builder = dialogBuilder.setSingleChoiceItems( options, @@ -101,7 +111,7 @@ class SessionDialogBuilder(val context: Context) { fun button( @StringRes text: Int, - @StringRes contentDescriptionRes: Int = 0, + @StringRes contentDescriptionRes: Int = text, @StyleRes style: Int = R.style.Widget_Session_Button_Dialog_UnimportantText, listener: (() -> Unit) = {} ) = Button(context, null, 0, style).apply { @@ -115,8 +125,12 @@ class SessionDialogBuilder(val context: Context) { } }.let(buttonLayout::addView) + fun create(): AlertDialog = dialogBuilder.create() fun show(): AlertDialog = dialogBuilder.show() } fun Context.sessionDialog(build: SessionDialogBuilder.() -> Unit): AlertDialog = SessionDialogBuilder(this).apply { build() }.show() + +fun Fragment.sessionDialog(build: SessionDialogBuilder.() -> Unit): AlertDialog = + SessionDialogBuilder(requireContext()).apply { build() }.create() diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt index 1b126919a9..166c8f8267 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt @@ -22,6 +22,7 @@ import androidx.activity.viewModels import androidx.annotation.DimenRes import androidx.appcompat.app.AlertDialog import androidx.core.view.isVisible +import androidx.fragment.app.DialogFragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope @@ -405,8 +406,8 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe push(intent, false) } - override fun showDialog(baseDialog: BaseDialog, tag: String?) { - baseDialog.show(supportFragmentManager, tag) + override fun showDialog(dialogFragment: DialogFragment, tag: String?) { + dialogFragment.show(supportFragmentManager, tag) } override fun onCreateLoader(id: Int, bundle: Bundle?): Loader { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/dialogs/BlockedDialog.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/dialogs/BlockedDialog.kt index 39ca7c6913..e4a1c5fd9f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/dialogs/BlockedDialog.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/dialogs/BlockedDialog.kt @@ -1,41 +1,40 @@ package org.thoughtcrime.securesms.conversation.v2.dialogs +import android.app.Dialog import android.graphics.Typeface +import android.os.Bundle import android.text.Spannable import android.text.SpannableStringBuilder import android.text.style.StyleSpan -import android.view.LayoutInflater -import androidx.appcompat.app.AlertDialog +import androidx.fragment.app.DialogFragment import network.loki.messenger.R -import network.loki.messenger.databinding.DialogBlockedBinding import org.session.libsession.messaging.contacts.Contact import org.session.libsession.utilities.recipients.Recipient -import org.thoughtcrime.securesms.conversation.v2.utilities.BaseDialog import org.thoughtcrime.securesms.dependencies.DatabaseComponent +import org.thoughtcrime.securesms.sessionDialog /** Shown upon sending a message to a user that's blocked. */ -class BlockedDialog(private val recipient: Recipient) : BaseDialog() { +class BlockedDialog(private val recipient: Recipient) : DialogFragment() { - override fun setContentView(builder: AlertDialog.Builder) { - val binding = DialogBlockedBinding.inflate(LayoutInflater.from(requireContext())) + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = sessionDialog { val contactDB = DatabaseComponent.get(requireContext()).sessionContactDatabase() val sessionID = recipient.address.toString() val contact = contactDB.getContactWithSessionID(sessionID) val name = contact?.displayName(Contact.ContactContext.REGULAR) ?: sessionID - val title = resources.getString(R.string.dialog_blocked_title, name) - binding.blockedTitleTextView.text = title + val explanation = resources.getString(R.string.dialog_blocked_explanation, name) val spannable = SpannableStringBuilder(explanation) val startIndex = explanation.indexOf(name) spannable.setSpan(StyleSpan(Typeface.BOLD), startIndex, startIndex + name.count(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) - binding.blockedExplanationTextView.text = spannable - binding.cancelButton.setOnClickListener { dismiss() } - binding.unblockButton.setOnClickListener { unblock() } - builder.setView(binding.root) + + title(resources.getString(R.string.dialog_blocked_title, name)) + text(spannable) + button(R.string.ConversationActivity_unblock) { unblock() } + cancelButton { dismiss() } } private fun unblock() { DatabaseComponent.get(requireContext()).recipientDatabase().setBlocked(recipient, false) dismiss() } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/dialogs/DownloadDialog.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/dialogs/DownloadDialog.kt index 42cca1ad3e..ee1ef01f2b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/dialogs/DownloadDialog.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/dialogs/DownloadDialog.kt @@ -1,45 +1,44 @@ package org.thoughtcrime.securesms.conversation.v2.dialogs +import android.app.Dialog import android.graphics.Typeface +import android.os.Bundle import android.text.Spannable import android.text.SpannableStringBuilder import android.text.style.StyleSpan -import android.view.LayoutInflater -import androidx.appcompat.app.AlertDialog +import androidx.fragment.app.DialogFragment import dagger.hilt.android.AndroidEntryPoint import network.loki.messenger.R -import network.loki.messenger.databinding.DialogDownloadBinding import org.session.libsession.messaging.contacts.Contact import org.session.libsession.messaging.jobs.AttachmentDownloadJob import org.session.libsession.messaging.jobs.JobQueue import org.session.libsession.utilities.recipients.Recipient -import org.thoughtcrime.securesms.conversation.v2.utilities.BaseDialog import org.thoughtcrime.securesms.database.SessionContactDatabase import org.thoughtcrime.securesms.dependencies.DatabaseComponent +import org.thoughtcrime.securesms.sessionDialog import javax.inject.Inject /** Shown when receiving media from a contact for the first time, to confirm that * they are to be trusted and files sent by them are to be downloaded. */ @AndroidEntryPoint -class DownloadDialog(private val recipient: Recipient) : BaseDialog() { +class DownloadDialog(private val recipient: Recipient) : DialogFragment() { @Inject lateinit var contactDB: SessionContactDatabase - override fun setContentView(builder: AlertDialog.Builder) { - val binding = DialogDownloadBinding.inflate(LayoutInflater.from(requireContext())) + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = sessionDialog { val sessionID = recipient.address.toString() val contact = contactDB.getContactWithSessionID(sessionID) val name = contact?.displayName(Contact.ContactContext.REGULAR) ?: sessionID - val title = resources.getString(R.string.dialog_download_title, name) - binding.downloadTitleTextView.text = title + title(resources.getString(R.string.dialog_download_title, name)) + val explanation = resources.getString(R.string.dialog_download_explanation, name) val spannable = SpannableStringBuilder(explanation) val startIndex = explanation.indexOf(name) spannable.setSpan(StyleSpan(Typeface.BOLD), startIndex, startIndex + name.count(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) - binding.downloadExplanationTextView.text = spannable - binding.cancelButton.setOnClickListener { dismiss() } - binding.downloadButton.setOnClickListener { trust() } - builder.setView(binding.root) + text(spannable) + + button(R.string.dialog_download_button_title, R.string.AccessibilityId_download_media) { trust() } + cancelButton { dismiss() } } private fun trust() { @@ -50,4 +49,4 @@ class DownloadDialog(private val recipient: Recipient) : BaseDialog() { JobQueue.shared.resumePendingJobs(AttachmentDownloadJob.KEY) dismiss() } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/dialogs/JoinOpenGroupDialog.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/dialogs/JoinOpenGroupDialog.kt index 444c389e04..3d33f4fe87 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/dialogs/JoinOpenGroupDialog.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/dialogs/JoinOpenGroupDialog.kt @@ -1,45 +1,41 @@ package org.thoughtcrime.securesms.conversation.v2.dialogs +import android.app.Dialog import android.graphics.Typeface +import android.os.Bundle import android.text.Spannable import android.text.SpannableStringBuilder import android.text.style.StyleSpan -import android.view.LayoutInflater import android.widget.Toast -import androidx.appcompat.app.AlertDialog -import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.DialogFragment import network.loki.messenger.R -import network.loki.messenger.databinding.DialogJoinOpenGroupBinding import org.session.libsession.messaging.MessagingModuleConfiguration import org.session.libsession.utilities.OpenGroupUrlParser import org.session.libsignal.utilities.ThreadUtils -import org.thoughtcrime.securesms.conversation.v2.utilities.BaseDialog import org.thoughtcrime.securesms.groups.OpenGroupManager +import org.thoughtcrime.securesms.sessionDialog import org.thoughtcrime.securesms.util.ConfigurationMessageUtilities /** Shown upon tapping an open group invitation. */ -class JoinOpenGroupDialog(private val name: String, private val url: String) : BaseDialog() { +class JoinOpenGroupDialog(private val name: String, private val url: String) : DialogFragment() { - override fun setContentView(builder: AlertDialog.Builder) { - val binding = DialogJoinOpenGroupBinding.inflate(LayoutInflater.from(requireContext())) - val title = resources.getString(R.string.dialog_join_open_group_title, name) - binding.joinOpenGroupTitleTextView.text = title + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = sessionDialog { + title(resources.getString(R.string.dialog_join_open_group_title, name)) val explanation = resources.getString(R.string.dialog_join_open_group_explanation, name) val spannable = SpannableStringBuilder(explanation) val startIndex = explanation.indexOf(name) spannable.setSpan(StyleSpan(Typeface.BOLD), startIndex, startIndex + name.count(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) - binding.joinOpenGroupExplanationTextView.text = spannable - binding.cancelButton.setOnClickListener { dismiss() } - binding.joinButton.setOnClickListener { join() } - builder.setView(binding.root) + text(spannable) + cancelButton { dismiss() } + button(R.string.open_group_invitation_view__join_accessibility_description) { join() } } private fun join() { val openGroup = OpenGroupUrlParser.parseUrl(url) - val activity = requireContext() as AppCompatActivity + val activity = requireActivity() ThreadUtils.queue { try { - OpenGroupManager.add(openGroup.server, openGroup.room, openGroup.serverPublicKey, activity) + openGroup.apply { OpenGroupManager.add(server, room, serverPublicKey, activity) } MessagingModuleConfiguration.shared.storage.onOpenGroupAdded(openGroup.server) ConfigurationMessageUtilities.forceSyncConfigurationNowIfNeeded(activity) } catch (e: Exception) { @@ -48,4 +44,4 @@ class JoinOpenGroupDialog(private val name: String, private val url: String) : B } dismiss() } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/dialogs/LinkPreviewDialog.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/dialogs/LinkPreviewDialog.kt index a16ca86f79..f8eb7e4415 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/dialogs/LinkPreviewDialog.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/dialogs/LinkPreviewDialog.kt @@ -1,20 +1,21 @@ package org.thoughtcrime.securesms.conversation.v2.dialogs -import android.view.LayoutInflater -import androidx.appcompat.app.AlertDialog -import network.loki.messenger.databinding.DialogLinkPreviewBinding +import android.app.Dialog +import android.os.Bundle +import androidx.fragment.app.DialogFragment +import network.loki.messenger.R import org.session.libsession.utilities.TextSecurePreferences -import org.thoughtcrime.securesms.conversation.v2.utilities.BaseDialog +import org.thoughtcrime.securesms.sessionDialog /** Shown the first time the user inputs a URL that could generate a link preview, to * let them know that Session offers the ability to send and receive link previews. */ -class LinkPreviewDialog(private val onEnabled: () -> Unit) : BaseDialog() { +class LinkPreviewDialog(private val onEnabled: () -> Unit) : DialogFragment() { - override fun setContentView(builder: AlertDialog.Builder) { - val binding = DialogLinkPreviewBinding.inflate(LayoutInflater.from(requireContext())) - binding.cancelButton.setOnClickListener { dismiss() } - binding.enableLinkPreviewsButton.setOnClickListener { enable() } - builder.setView(binding.root) + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = sessionDialog { + title(R.string.dialog_link_preview_title) + text(R.string.dialog_link_preview_explanation) + button(R.string.dialog_link_preview_enable_button_title) { enable() } + cancelButton { dismiss() } } private fun enable() { @@ -22,4 +23,4 @@ class LinkPreviewDialog(private val onEnabled: () -> Unit) : BaseDialog() { dismiss() onEnabled() } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/dialogs/SendSeedDialog.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/dialogs/SendSeedDialog.kt index f51261d499..b030da29f0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/dialogs/SendSeedDialog.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/dialogs/SendSeedDialog.kt @@ -1,22 +1,23 @@ package org.thoughtcrime.securesms.conversation.v2.dialogs -import android.view.LayoutInflater -import androidx.appcompat.app.AlertDialog -import network.loki.messenger.databinding.DialogSendSeedBinding -import org.thoughtcrime.securesms.conversation.v2.utilities.BaseDialog +import android.app.Dialog +import android.os.Bundle +import androidx.fragment.app.DialogFragment +import network.loki.messenger.R +import org.thoughtcrime.securesms.sessionDialog /** Shown if the user is about to send their recovery phrase to someone. */ -class SendSeedDialog(private val proceed: (() -> Unit)? = null) : BaseDialog() { +class SendSeedDialog(private val proceed: (() -> Unit)? = null) : DialogFragment() { - override fun setContentView(builder: AlertDialog.Builder) { - val binding = DialogSendSeedBinding.inflate(LayoutInflater.from(requireContext())) - binding.cancelButton.setOnClickListener { dismiss() } - binding.sendSeedButton.setOnClickListener { send() } - builder.setView(binding.root) + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = sessionDialog { + title(R.string.dialog_send_seed_title) + text(R.string.dialog_send_seed_explanation) + button(R.string.dialog_send_seed_send_button_title) { send() } + cancelButton() } private fun send() { proceed?.invoke() dismiss() } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/utilities/BaseDialog.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/utilities/BaseDialog.kt deleted file mode 100644 index b38a627683..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/utilities/BaseDialog.kt +++ /dev/null @@ -1,26 +0,0 @@ -package org.thoughtcrime.securesms.conversation.v2.utilities - -import android.app.Dialog -import android.graphics.Color -import android.graphics.drawable.ColorDrawable -import android.os.Bundle -import androidx.appcompat.app.AlertDialog -import androidx.fragment.app.DialogFragment -import org.thoughtcrime.securesms.util.UiModeUtilities - -open class BaseDialog : DialogFragment() { - - override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - val builder = AlertDialog.Builder(requireContext()) - setContentView(builder) - val result = builder.create() - result.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) - val isLightMode = UiModeUtilities.isDayUiMode(requireContext()) - result.window?.setDimAmount(if (isLightMode) 0.1f else 0.75f) - return result - } - - open fun setContentView(builder: AlertDialog.Builder) { - // To be overridden by subclasses - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/ClearAllDataDialog.kt b/app/src/main/java/org/thoughtcrime/securesms/preferences/ClearAllDataDialog.kt index fa3be71307..17543f87d5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/ClearAllDataDialog.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/ClearAllDataDialog.kt @@ -1,9 +1,12 @@ package org.thoughtcrime.securesms.preferences +import android.app.Dialog +import android.os.Bundle import android.view.LayoutInflater -import androidx.appcompat.app.AlertDialog +import android.view.View import androidx.core.view.isGone import androidx.core.view.isVisible +import androidx.fragment.app.DialogFragment import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.DividerItemDecoration import kotlinx.coroutines.Dispatchers @@ -15,10 +18,10 @@ import network.loki.messenger.databinding.DialogClearAllDataBinding import org.session.libsession.snode.SnodeAPI import org.session.libsignal.utilities.Log import org.thoughtcrime.securesms.ApplicationContext -import org.thoughtcrime.securesms.conversation.v2.utilities.BaseDialog +import org.thoughtcrime.securesms.sessionDialog import org.thoughtcrime.securesms.util.ConfigurationMessageUtilities -class ClearAllDataDialog : BaseDialog() { +class ClearAllDataDialog : DialogFragment() { private lateinit var binding: DialogClearAllDataBinding enum class Steps { @@ -35,7 +38,11 @@ class ClearAllDataDialog : BaseDialog() { updateUI() } - override fun setContentView(builder: AlertDialog.Builder) { + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = sessionDialog { + view(createView()) + } + + private fun createView(): View { binding = DialogClearAllDataBinding.inflate(LayoutInflater.from(requireContext())) val device = RadioOption("deviceOnly", requireContext().getString(R.string.dialog_clear_all_data_clear_device_only)) val network = RadioOption("deviceAndNetwork", requireContext().getString(R.string.dialog_clear_all_data_clear_device_and_network)) @@ -62,8 +69,7 @@ class ClearAllDataDialog : BaseDialog() { Steps.DELETING -> { /* do nothing intentionally */ } } } - builder.setView(binding.root) - builder.setCancelable(false) + return binding.root } private fun updateUI() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/SeedDialog.kt b/app/src/main/java/org/thoughtcrime/securesms/preferences/SeedDialog.kt index e7bfd60d3f..d28027d72e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/SeedDialog.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/SeedDialog.kt @@ -1,38 +1,34 @@ package org.thoughtcrime.securesms.preferences +import android.app.Dialog import android.content.ClipData import android.content.ClipboardManager import android.content.Context -import android.view.LayoutInflater +import android.os.Bundle import android.widget.Toast -import androidx.appcompat.app.AlertDialog +import androidx.fragment.app.DialogFragment import network.loki.messenger.R -import network.loki.messenger.databinding.DialogSeedBinding import org.session.libsignal.crypto.MnemonicCodec import org.session.libsignal.utilities.hexEncodedPrivateKey import org.thoughtcrime.securesms.crypto.IdentityKeyUtil import org.thoughtcrime.securesms.crypto.MnemonicUtilities -import org.thoughtcrime.securesms.conversation.v2.utilities.BaseDialog - -class SeedDialog : BaseDialog() { +import org.thoughtcrime.securesms.sessionDialog +class SeedDialog: DialogFragment() { private val seed by lazy { - var hexEncodedSeed = IdentityKeyUtil.retrieve(requireContext(), IdentityKeyUtil.LOKI_SEED) - if (hexEncodedSeed == null) { - hexEncodedSeed = IdentityKeyUtil.getIdentityKeyPair(requireContext()).hexEncodedPrivateKey // Legacy account - } - val loadFileContents: (String) -> String = { fileName -> - MnemonicUtilities.loadFileContents(requireContext(), fileName) - } - MnemonicCodec(loadFileContents).encode(hexEncodedSeed!!, MnemonicCodec.Language.Configuration.english) + val hexEncodedSeed = IdentityKeyUtil.retrieve(requireContext(), IdentityKeyUtil.LOKI_SEED) + ?: IdentityKeyUtil.getIdentityKeyPair(requireContext()).hexEncodedPrivateKey // Legacy account + + MnemonicCodec { fileName -> MnemonicUtilities.loadFileContents(requireContext(), fileName) } + .encode(hexEncodedSeed, MnemonicCodec.Language.Configuration.english) } - override fun setContentView(builder: AlertDialog.Builder) { - val binding = DialogSeedBinding.inflate(LayoutInflater.from(requireContext())) - binding.seedTextView.text = seed - binding.closeButton.setOnClickListener { dismiss() } - binding.copyButton.setOnClickListener { copySeed() } - builder.setView(binding.root) + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = sessionDialog { + title(R.string.dialog_seed_title) + text(R.string.dialog_seed_explanation) + text(seed, R.style.SessionIDTextView) + button(R.string.copy, R.string.AccessibilityId_copy_recovery_phrase) { copySeed() } + button(R.string.close) { dismiss() } } private fun copySeed() { @@ -42,4 +38,4 @@ class SeedDialog : BaseDialog() { Toast.makeText(requireContext(), R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show() dismiss() } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/ShareLogsDialog.kt b/app/src/main/java/org/thoughtcrime/securesms/preferences/ShareLogsDialog.kt index 1bd8373247..71855bd1ee 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/ShareLogsDialog.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/ShareLogsDialog.kt @@ -1,17 +1,18 @@ package org.thoughtcrime.securesms.preferences +import android.app.Dialog import android.content.ContentResolver import android.content.ContentValues import android.content.Intent import android.media.MediaScannerConnection import android.net.Uri import android.os.Build +import android.os.Bundle import android.os.Environment import android.provider.MediaStore -import android.view.LayoutInflater import android.webkit.MimeTypeMap import android.widget.Toast -import androidx.appcompat.app.AlertDialog +import androidx.fragment.app.DialogFragment import androidx.lifecycle.lifecycleScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers.Main @@ -20,11 +21,10 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import network.loki.messenger.BuildConfig import network.loki.messenger.R -import network.loki.messenger.databinding.DialogShareLogsBinding import org.session.libsignal.utilities.ExternalStorageUtil import org.session.libsignal.utilities.Log import org.thoughtcrime.securesms.ApplicationContext -import org.thoughtcrime.securesms.conversation.v2.utilities.BaseDialog +import org.thoughtcrime.securesms.sessionDialog import org.thoughtcrime.securesms.util.FileProviderUtil import org.thoughtcrime.securesms.util.StreamUtil import java.io.File @@ -33,21 +33,15 @@ import java.io.IOException import java.util.Objects import java.util.concurrent.TimeUnit -class ShareLogsDialog : BaseDialog() { +class ShareLogsDialog : DialogFragment() { private var shareJob: Job? = null - override fun setContentView(builder: AlertDialog.Builder) { - val binding = DialogShareLogsBinding.inflate(LayoutInflater.from(requireContext())) - binding.cancelButton.setOnClickListener { - dismiss() - } - binding.shareButton.setOnClickListener { - // start the export and share - shareLogs() - } - builder.setView(binding.root) - builder.setCancelable(false) + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = sessionDialog { + title(R.string.dialog_share_logs_title) + text(R.string.dialog_share_logs_explanation) + button(R.string.share) { shareLogs() } + cancelButton { dismiss() } } private fun shareLogs() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/ActivityUtilities.kt b/app/src/main/java/org/thoughtcrime/securesms/util/ActivityUtilities.kt index d5b361ecd6..5ff823a15c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/ActivityUtilities.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/ActivityUtilities.kt @@ -7,10 +7,10 @@ import android.view.View import androidx.annotation.StyleRes import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.Toolbar +import androidx.fragment.app.DialogFragment import network.loki.messenger.R import org.session.libsession.utilities.TextSecurePreferences import org.thoughtcrime.securesms.BaseActionBarActivity -import org.thoughtcrime.securesms.conversation.v2.utilities.BaseDialog fun BaseActionBarActivity.setUpActionBarSessionLogo(hideBackButton: Boolean = false) { val actionbar = supportActionBar!! @@ -66,7 +66,7 @@ interface ActivityDispatcher { fun get(context: Context) = context.getSystemService(SERVICE) as? ActivityDispatcher } fun dispatchIntent(body: (Context)->Intent?) - fun showDialog(baseDialog: BaseDialog, tag: String? = null) + fun showDialog(dialogFragment: DialogFragment, tag: String? = null) } fun TextSecurePreferences.themeState(): ThemeState { diff --git a/app/src/main/res/layout/dialog_blocked.xml b/app/src/main/res/layout/dialog_blocked.xml deleted file mode 100644 index 4ad01ec8ee..0000000000 --- a/app/src/main/res/layout/dialog_blocked.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - -