Utilise dialog dsl in PrivacySettingsPreferenceFragment

This commit is contained in:
andrew 2023-05-31 23:23:53 +09:30
parent 80f21aeb41
commit 72c07f4b99
11 changed files with 46 additions and 74 deletions

View File

@ -140,5 +140,7 @@ class SessionDialogBuilder(val context: Context) {
fun Context.sessionDialog(build: SessionDialogBuilder.() -> Unit): AlertDialog = fun Context.sessionDialog(build: SessionDialogBuilder.() -> Unit): AlertDialog =
SessionDialogBuilder(this).apply { build() }.show() SessionDialogBuilder(this).apply { build() }.show()
fun Fragment.sessionDialog(build: SessionDialogBuilder.() -> Unit): AlertDialog = fun Fragment.showSessionDialog(build: SessionDialogBuilder.() -> Unit): AlertDialog =
SessionDialogBuilder(requireContext()).apply { build() }.show()
fun Fragment.createSessionDialog(build: SessionDialogBuilder.() -> Unit): AlertDialog =
SessionDialogBuilder(requireContext()).apply { build() }.create() SessionDialogBuilder(requireContext()).apply { build() }.create()

View File

@ -10,13 +10,13 @@ import androidx.fragment.app.DialogFragment
import network.loki.messenger.R import network.loki.messenger.R
import org.session.libsession.messaging.contacts.Contact import org.session.libsession.messaging.contacts.Contact
import org.session.libsession.utilities.recipients.Recipient import org.session.libsession.utilities.recipients.Recipient
import org.thoughtcrime.securesms.createSessionDialog
import org.thoughtcrime.securesms.dependencies.DatabaseComponent import org.thoughtcrime.securesms.dependencies.DatabaseComponent
import org.thoughtcrime.securesms.sessionDialog
/** Shown upon sending a message to a user that's blocked. */ /** Shown upon sending a message to a user that's blocked. */
class BlockedDialog(private val recipient: Recipient) : DialogFragment() { class BlockedDialog(private val recipient: Recipient) : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = sessionDialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = createSessionDialog {
val contactDB = DatabaseComponent.get(requireContext()).sessionContactDatabase() val contactDB = DatabaseComponent.get(requireContext()).sessionContactDatabase()
val sessionID = recipient.address.toString() val sessionID = recipient.address.toString()
val contact = contactDB.getContactWithSessionID(sessionID) val contact = contactDB.getContactWithSessionID(sessionID)

View File

@ -13,9 +13,9 @@ import org.session.libsession.messaging.contacts.Contact
import org.session.libsession.messaging.jobs.AttachmentDownloadJob import org.session.libsession.messaging.jobs.AttachmentDownloadJob
import org.session.libsession.messaging.jobs.JobQueue import org.session.libsession.messaging.jobs.JobQueue
import org.session.libsession.utilities.recipients.Recipient import org.session.libsession.utilities.recipients.Recipient
import org.thoughtcrime.securesms.createSessionDialog
import org.thoughtcrime.securesms.database.SessionContactDatabase import org.thoughtcrime.securesms.database.SessionContactDatabase
import org.thoughtcrime.securesms.dependencies.DatabaseComponent import org.thoughtcrime.securesms.dependencies.DatabaseComponent
import org.thoughtcrime.securesms.sessionDialog
import javax.inject.Inject import javax.inject.Inject
/** Shown when receiving media from a contact for the first time, to confirm that /** Shown when receiving media from a contact for the first time, to confirm that
@ -25,7 +25,7 @@ class DownloadDialog(private val recipient: Recipient) : DialogFragment() {
@Inject lateinit var contactDB: SessionContactDatabase @Inject lateinit var contactDB: SessionContactDatabase
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = sessionDialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = createSessionDialog {
val sessionID = recipient.address.toString() val sessionID = recipient.address.toString()
val contact = contactDB.getContactWithSessionID(sessionID) val contact = contactDB.getContactWithSessionID(sessionID)
val name = contact?.displayName(Contact.ContactContext.REGULAR) ?: sessionID val name = contact?.displayName(Contact.ContactContext.REGULAR) ?: sessionID

View File

@ -12,14 +12,14 @@ import network.loki.messenger.R
import org.session.libsession.messaging.MessagingModuleConfiguration import org.session.libsession.messaging.MessagingModuleConfiguration
import org.session.libsession.utilities.OpenGroupUrlParser import org.session.libsession.utilities.OpenGroupUrlParser
import org.session.libsignal.utilities.ThreadUtils import org.session.libsignal.utilities.ThreadUtils
import org.thoughtcrime.securesms.createSessionDialog
import org.thoughtcrime.securesms.groups.OpenGroupManager import org.thoughtcrime.securesms.groups.OpenGroupManager
import org.thoughtcrime.securesms.sessionDialog
import org.thoughtcrime.securesms.util.ConfigurationMessageUtilities import org.thoughtcrime.securesms.util.ConfigurationMessageUtilities
/** Shown upon tapping an open group invitation. */ /** Shown upon tapping an open group invitation. */
class JoinOpenGroupDialog(private val name: String, private val url: String) : DialogFragment() { class JoinOpenGroupDialog(private val name: String, private val url: String) : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = sessionDialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = createSessionDialog {
title(resources.getString(R.string.dialog_join_open_group_title, name)) title(resources.getString(R.string.dialog_join_open_group_title, name))
val explanation = resources.getString(R.string.dialog_join_open_group_explanation, name) val explanation = resources.getString(R.string.dialog_join_open_group_explanation, name)
val spannable = SpannableStringBuilder(explanation) val spannable = SpannableStringBuilder(explanation)

View File

@ -5,13 +5,13 @@ import android.os.Bundle
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import network.loki.messenger.R import network.loki.messenger.R
import org.session.libsession.utilities.TextSecurePreferences import org.session.libsession.utilities.TextSecurePreferences
import org.thoughtcrime.securesms.sessionDialog import org.thoughtcrime.securesms.createSessionDialog
/** Shown the first time the user inputs a URL that could generate a link preview, to /** 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. */ * let them know that Session offers the ability to send and receive link previews. */
class LinkPreviewDialog(private val onEnabled: () -> Unit) : DialogFragment() { class LinkPreviewDialog(private val onEnabled: () -> Unit) : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = sessionDialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = createSessionDialog {
title(R.string.dialog_link_preview_title) title(R.string.dialog_link_preview_title)
text(R.string.dialog_link_preview_explanation) text(R.string.dialog_link_preview_explanation)
button(R.string.dialog_link_preview_enable_button_title) { enable() } button(R.string.dialog_link_preview_enable_button_title) { enable() }

View File

@ -4,12 +4,12 @@ import android.app.Dialog
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import network.loki.messenger.R import network.loki.messenger.R
import org.thoughtcrime.securesms.sessionDialog import org.thoughtcrime.securesms.createSessionDialog
/** Shown if the user is about to send their recovery phrase to someone. */ /** Shown if the user is about to send their recovery phrase to someone. */
class SendSeedDialog(private val proceed: (() -> Unit)? = null) : DialogFragment() { class SendSeedDialog(private val proceed: (() -> Unit)? = null) : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = sessionDialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = createSessionDialog {
title(R.string.dialog_send_seed_title) title(R.string.dialog_send_seed_title)
text(R.string.dialog_send_seed_explanation) text(R.string.dialog_send_seed_explanation)
button(R.string.dialog_send_seed_send_button_title) { send() } button(R.string.dialog_send_seed_send_button_title) { send() }

View File

@ -6,8 +6,10 @@ import androidx.preference.Preference
import network.loki.messenger.R import network.loki.messenger.R
import org.session.libsession.utilities.TextSecurePreferences import org.session.libsession.utilities.TextSecurePreferences
import org.session.libsession.utilities.TextSecurePreferences.Companion.setBooleanPreference import org.session.libsession.utilities.TextSecurePreferences.Companion.setBooleanPreference
import org.thoughtcrime.securesms.createSessionDialog
import org.thoughtcrime.securesms.permissions.Permissions import org.thoughtcrime.securesms.permissions.Permissions
import org.thoughtcrime.securesms.sessionDialog import org.thoughtcrime.securesms.sessionDialog
import org.thoughtcrime.securesms.showSessionDialog
internal class CallToggleListener( internal class CallToggleListener(
private val context: Fragment, private val context: Fragment,
@ -18,7 +20,7 @@ internal class CallToggleListener(
if (newValue == false) return true if (newValue == false) return true
// check if we've shown the info dialog and check for microphone permissions // check if we've shown the info dialog and check for microphone permissions
context.sessionDialog { context.showSessionDialog {
title(R.string.dialog_voice_video_title) title(R.string.dialog_voice_video_title)
text(R.string.dialog_voice_video_message) text(R.string.dialog_voice_video_message)
button(R.string.dialog_link_preview_enable_button_title, R.string.AccessibilityId_enable) { requestMicrophonePermission() } button(R.string.dialog_link_preview_enable_button_title, R.string.AccessibilityId_enable) { requestMicrophonePermission() }

View File

@ -18,7 +18,7 @@ import network.loki.messenger.databinding.DialogClearAllDataBinding
import org.session.libsession.snode.SnodeAPI import org.session.libsession.snode.SnodeAPI
import org.session.libsignal.utilities.Log import org.session.libsignal.utilities.Log
import org.thoughtcrime.securesms.ApplicationContext import org.thoughtcrime.securesms.ApplicationContext
import org.thoughtcrime.securesms.sessionDialog import org.thoughtcrime.securesms.createSessionDialog
import org.thoughtcrime.securesms.util.ConfigurationMessageUtilities import org.thoughtcrime.securesms.util.ConfigurationMessageUtilities
class ClearAllDataDialog : DialogFragment() { class ClearAllDataDialog : DialogFragment() {
@ -38,7 +38,7 @@ class ClearAllDataDialog : DialogFragment() {
updateUI() updateUI()
} }
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = sessionDialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = createSessionDialog {
view(createView()) view(createView())
} }

View File

@ -1,15 +1,12 @@
package org.thoughtcrime.securesms.preferences package org.thoughtcrime.securesms.preferences
import android.app.AlertDialog
import android.app.KeyguardManager import android.app.KeyguardManager
import android.content.Context import android.content.Context
import android.content.DialogInterface
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.provider.Settings import android.provider.Settings
import androidx.appcompat.view.ContextThemeWrapper
import androidx.preference.Preference import androidx.preference.Preference
import network.loki.messenger.BuildConfig import network.loki.messenger.BuildConfig
import network.loki.messenger.R import network.loki.messenger.R
@ -20,22 +17,19 @@ import org.thoughtcrime.securesms.ApplicationContext
import org.thoughtcrime.securesms.components.SwitchPreferenceCompat import org.thoughtcrime.securesms.components.SwitchPreferenceCompat
import org.thoughtcrime.securesms.permissions.Permissions import org.thoughtcrime.securesms.permissions.Permissions
import org.thoughtcrime.securesms.service.KeyCachingService import org.thoughtcrime.securesms.service.KeyCachingService
import org.thoughtcrime.securesms.showSessionDialog
import org.thoughtcrime.securesms.util.CallNotificationBuilder.Companion.areNotificationsEnabled import org.thoughtcrime.securesms.util.CallNotificationBuilder.Companion.areNotificationsEnabled
import org.thoughtcrime.securesms.util.IntentUtils import org.thoughtcrime.securesms.util.IntentUtils
class PrivacySettingsPreferenceFragment : ListSummaryPreferenceFragment() { class PrivacySettingsPreferenceFragment : ListSummaryPreferenceFragment() {
override fun onCreate(paramBundle: Bundle?) { override fun onCreate(paramBundle: Bundle?) {
super.onCreate(paramBundle) super.onCreate(paramBundle)
findPreference<Preference>(TextSecurePreferences.SCREEN_LOCK)!!.onPreferenceChangeListener = findPreference<Preference>(TextSecurePreferences.SCREEN_LOCK)!!
ScreenLockListener() .onPreferenceChangeListener = ScreenLockListener()
findPreference<Preference>(TextSecurePreferences.READ_RECEIPTS_PREF)!!.onPreferenceChangeListener = findPreference<Preference>(TextSecurePreferences.TYPING_INDICATORS)!!
ReadReceiptToggleListener() .onPreferenceChangeListener = TypingIndicatorsToggleListener()
findPreference<Preference>(TextSecurePreferences.TYPING_INDICATORS)!!.onPreferenceChangeListener = findPreference<Preference>(TextSecurePreferences.CALL_NOTIFICATIONS_ENABLED)!!
TypingIndicatorsToggleListener() .onPreferenceChangeListener = CallToggleListener(this) { setCall(it) }
findPreference<Preference>(TextSecurePreferences.LINK_PREVIEWS)!!.onPreferenceChangeListener =
LinkPreviewToggleListener()
findPreference<Preference>(TextSecurePreferences.CALL_NOTIFICATIONS_ENABLED)!!.onPreferenceChangeListener =
CallToggleListener(this) { setCall(it) }
initializeVisibility() initializeVisibility()
} }
@ -44,37 +38,24 @@ class PrivacySettingsPreferenceFragment : ListSummaryPreferenceFragment() {
isEnabled isEnabled
if (isEnabled && !areNotificationsEnabled(requireActivity())) { if (isEnabled && !areNotificationsEnabled(requireActivity())) {
// show a dialog saying that calls won't work properly if you don't have notifications on at a system level // show a dialog saying that calls won't work properly if you don't have notifications on at a system level
AlertDialog.Builder( showSessionDialog {
ContextThemeWrapper( title(R.string.CallNotificationBuilder_system_notification_title)
requireActivity(), text(R.string.CallNotificationBuilder_system_notification_message)
R.style.ThemeOverlay_Session_AlertDialog button(R.string.activity_notification_settings_title) {
)
)
.setTitle(R.string.CallNotificationBuilder_system_notification_title)
.setMessage(R.string.CallNotificationBuilder_system_notification_message)
.setPositiveButton(R.string.activity_notification_settings_title) { d: DialogInterface, w: Int ->
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val settingsIntent = Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS) Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra(Settings.EXTRA_APP_PACKAGE, BuildConfig.APPLICATION_ID) .putExtra(Settings.EXTRA_APP_PACKAGE, BuildConfig.APPLICATION_ID)
if (IntentUtils.isResolvable(requireContext(), settingsIntent)) {
startActivity(settingsIntent)
}
} else { } else {
val settingsIntent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.setData(Uri.parse("package:" + BuildConfig.APPLICATION_ID)) .setData(Uri.parse("package:" + BuildConfig.APPLICATION_ID))
if (IntentUtils.isResolvable(requireContext(), settingsIntent)) {
startActivity(settingsIntent)
}
} }
d.dismiss() .apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) }
.takeIf { IntentUtils.isResolvable(requireContext(), it) }.let {
startActivity(it)
}
} }
.setNeutralButton(R.string.dismiss) { d: DialogInterface, w: Int -> button(R.string.dismiss)
// do nothing, user might have broken notifications }
d.dismiss()
}
.show()
} }
} }
@ -96,19 +77,16 @@ class PrivacySettingsPreferenceFragment : ListSummaryPreferenceFragment() {
} }
private fun initializeVisibility() { private fun initializeVisibility() {
if (isPasswordDisabled(context!!)) { if (isPasswordDisabled(requireContext())) {
val keyguardManager = val keyguardManager =
context!!.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager requireContext().getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
if (!keyguardManager.isKeyguardSecure) { if (!keyguardManager.isKeyguardSecure) {
(findPreference<Preference>(TextSecurePreferences.SCREEN_LOCK) as SwitchPreferenceCompat?)!!.isChecked = findPreference<SwitchPreferenceCompat>(TextSecurePreferences.SCREEN_LOCK)!!.isChecked = false
false findPreference<Preference>(TextSecurePreferences.SCREEN_LOCK)!!.isEnabled = false
findPreference<Preference>(TextSecurePreferences.SCREEN_LOCK)!!.isEnabled =
false
} }
} else { } else {
findPreference<Preference>(TextSecurePreferences.SCREEN_LOCK)!!.isVisible = false findPreference<Preference>(TextSecurePreferences.SCREEN_LOCK)!!.isVisible = false
findPreference<Preference>(TextSecurePreferences.SCREEN_LOCK_TIMEOUT)!!.isVisible = findPreference<Preference>(TextSecurePreferences.SCREEN_LOCK_TIMEOUT)!!.isVisible = false
false
} }
} }
@ -123,12 +101,6 @@ class PrivacySettingsPreferenceFragment : ListSummaryPreferenceFragment() {
} }
} }
private inner class ReadReceiptToggleListener : Preference.OnPreferenceChangeListener {
override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
return true
}
}
private inner class TypingIndicatorsToggleListener : Preference.OnPreferenceChangeListener { private inner class TypingIndicatorsToggleListener : Preference.OnPreferenceChangeListener {
override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean { override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
val enabled = newValue as Boolean val enabled = newValue as Boolean
@ -139,9 +111,4 @@ class PrivacySettingsPreferenceFragment : ListSummaryPreferenceFragment() {
} }
} }
private inner class LinkPreviewToggleListener : Preference.OnPreferenceChangeListener {
override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
return true
}
}
} }

View File

@ -10,6 +10,7 @@ import androidx.fragment.app.DialogFragment
import network.loki.messenger.R import network.loki.messenger.R
import org.session.libsignal.crypto.MnemonicCodec import org.session.libsignal.crypto.MnemonicCodec
import org.session.libsignal.utilities.hexEncodedPrivateKey import org.session.libsignal.utilities.hexEncodedPrivateKey
import org.thoughtcrime.securesms.createSessionDialog
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
import org.thoughtcrime.securesms.crypto.MnemonicUtilities import org.thoughtcrime.securesms.crypto.MnemonicUtilities
import org.thoughtcrime.securesms.sessionDialog import org.thoughtcrime.securesms.sessionDialog
@ -23,7 +24,7 @@ class SeedDialog: DialogFragment() {
.encode(hexEncodedSeed, MnemonicCodec.Language.Configuration.english) .encode(hexEncodedSeed, MnemonicCodec.Language.Configuration.english)
} }
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = sessionDialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = createSessionDialog {
title(R.string.dialog_seed_title) title(R.string.dialog_seed_title)
text(R.string.dialog_seed_explanation) text(R.string.dialog_seed_explanation)
text(seed, R.style.SessionIDTextView) text(seed, R.style.SessionIDTextView)

View File

@ -24,7 +24,7 @@ import network.loki.messenger.R
import org.session.libsignal.utilities.ExternalStorageUtil import org.session.libsignal.utilities.ExternalStorageUtil
import org.session.libsignal.utilities.Log import org.session.libsignal.utilities.Log
import org.thoughtcrime.securesms.ApplicationContext import org.thoughtcrime.securesms.ApplicationContext
import org.thoughtcrime.securesms.sessionDialog import org.thoughtcrime.securesms.createSessionDialog
import org.thoughtcrime.securesms.util.FileProviderUtil import org.thoughtcrime.securesms.util.FileProviderUtil
import org.thoughtcrime.securesms.util.StreamUtil import org.thoughtcrime.securesms.util.StreamUtil
import java.io.File import java.io.File
@ -37,7 +37,7 @@ class ShareLogsDialog : DialogFragment() {
private var shareJob: Job? = null private var shareJob: Job? = null
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = sessionDialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = createSessionDialog {
title(R.string.dialog_share_logs_title) title(R.string.dialog_share_logs_title)
text(R.string.dialog_share_logs_explanation) text(R.string.dialog_share_logs_explanation)
button(R.string.share) { shareLogs() } button(R.string.share) { shareLogs() }