mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 00:59:49 +01:00
Show conversation settings in the detail pane on large screens.
This commit is contained in:
committed by
Cody Henthorne
parent
9941b2d123
commit
4d301a4f66
@@ -30,6 +30,8 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import io.reactivex.rxjava3.kotlin.subscribeBy
|
||||
import kotlinx.coroutines.launch
|
||||
import org.signal.core.ui.getWindowSizeClass
|
||||
import org.signal.core.ui.isSplitPane
|
||||
import org.signal.core.ui.permissions.Permissions
|
||||
import org.signal.core.util.DimensionUnit
|
||||
import org.signal.core.util.Result
|
||||
@@ -117,6 +119,7 @@ import org.thoughtcrime.securesms.util.ExpirationUtil
|
||||
import org.thoughtcrime.securesms.util.Material3OnScrollHelper
|
||||
import org.thoughtcrime.securesms.util.RemoteConfig
|
||||
import org.thoughtcrime.securesms.util.ViewUtil
|
||||
import org.thoughtcrime.securesms.util.WindowUtil
|
||||
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
|
||||
import org.thoughtcrime.securesms.util.navigation.safeNavigate
|
||||
import org.thoughtcrime.securesms.util.views.SimpleProgressDialog
|
||||
@@ -261,8 +264,25 @@ class ConversationSettingsFragment :
|
||||
}
|
||||
}
|
||||
|
||||
private fun goToConversationList() {
|
||||
if (mainNavRouter != null) {
|
||||
mainNavRouter?.goTo(MainNavigationDetailLocation.Empty)
|
||||
} else {
|
||||
startActivity(MainActivity.clearTopAndOpenDetail(requireContext(), MainNavigationDetailLocation.Empty))
|
||||
}
|
||||
}
|
||||
|
||||
override fun getMaterial3OnScrollHelper(toolbar: Toolbar?): Material3OnScrollHelper {
|
||||
return object : Material3OnScrollHelper(activity = requireActivity(), views = listOf(toolbar!!), lifecycleOwner = viewLifecycleOwner) {
|
||||
return object : Material3OnScrollHelper(
|
||||
activity = requireActivity(),
|
||||
views = listOf(toolbar!!),
|
||||
lifecycleOwner = viewLifecycleOwner,
|
||||
setStatusBarColor = { color ->
|
||||
if (!resources.getWindowSizeClass().isSplitPane() || activity is ConversationSettingsActivity) {
|
||||
WindowUtil.setStatusBarColor(requireActivity().window, color)
|
||||
}
|
||||
}
|
||||
) {
|
||||
override val inactiveColorSet = ColorSet(
|
||||
toolbarColorRes = CoreUiR.color.signal_colorBackground_0,
|
||||
statusBarColorRes = CoreUiR.color.signal_colorBackground
|
||||
@@ -972,7 +992,7 @@ class ConversationSettingsFragment :
|
||||
icon = DSLSettingsIcon.from(R.drawable.symbol_archive_24),
|
||||
onClick = {
|
||||
viewModel.toggleArchive()
|
||||
onToolbarNavigationClicked()
|
||||
goToConversationList()
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -986,11 +1006,7 @@ class ConversationSettingsFragment :
|
||||
lifecycleScope.launch {
|
||||
viewModel.deleteChat()
|
||||
progressDialog.dismissAllowingStateLoss()
|
||||
if (mainNavRouter != null) {
|
||||
mainNavRouter?.goTo(MainNavigationDetailLocation.Empty)
|
||||
} else {
|
||||
startActivity(MainActivity.clearTopAndOpenDetail(requireContext(), MainNavigationDetailLocation.Empty))
|
||||
}
|
||||
goToConversationList()
|
||||
}
|
||||
}
|
||||
)
|
||||
@@ -1059,7 +1075,7 @@ class ConversationSettingsFragment :
|
||||
.onReportSpam()
|
||||
.subscribeBy {
|
||||
Toast.makeText(requireContext(), R.string.ConversationFragment_reported_as_spam, Toast.LENGTH_SHORT).show()
|
||||
onToolbarNavigationClicked()
|
||||
goToConversationList()
|
||||
}
|
||||
.addTo(lifecycleDisposable)
|
||||
},
|
||||
@@ -1073,7 +1089,7 @@ class ConversationSettingsFragment :
|
||||
when (result) {
|
||||
is Result.Success -> {
|
||||
Toast.makeText(requireContext(), R.string.ConversationFragment_reported_as_spam_and_blocked, Toast.LENGTH_SHORT).show()
|
||||
onToolbarNavigationClicked()
|
||||
goToConversationList()
|
||||
}
|
||||
|
||||
is Result.Failure -> {
|
||||
@@ -1108,7 +1124,7 @@ class ConversationSettingsFragment :
|
||||
.onReportSpam()
|
||||
.subscribeBy {
|
||||
Toast.makeText(requireContext(), R.string.ConversationFragment_reported_as_spam, Toast.LENGTH_SHORT).show()
|
||||
onToolbarNavigationClicked()
|
||||
goToConversationList()
|
||||
}
|
||||
.addTo(lifecycleDisposable)
|
||||
},
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright 2026 Signal Messenger, LLC
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
package org.thoughtcrime.securesms.components.settings.conversation
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.navigation.fragment.NavHostFragment
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.components.settings.DSLSettingsActivity
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
|
||||
class ConversationSettingsNavHostFragment : NavHostFragment() {
|
||||
|
||||
companion object {
|
||||
suspend fun createArgs(recipientId: RecipientId): Bundle {
|
||||
val recipient = withContext(Dispatchers.IO) { Recipient.resolved(recipientId) }
|
||||
|
||||
val args = if (recipient.isGroup) {
|
||||
ConversationSettingsFragmentArgs.Builder(null, recipient.requireGroupId(), null)
|
||||
} else {
|
||||
ConversationSettingsFragmentArgs.Builder(recipientId, null, null)
|
||||
}.build()
|
||||
|
||||
return bundleOf(DSLSettingsActivity.ARG_START_BUNDLE to args.toBundle())
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
val args = requireArguments().getBundle(DSLSettingsActivity.ARG_START_BUNDLE)
|
||||
navController.setGraph(R.navigation.conversation_settings, args)
|
||||
super.onCreate(savedInstanceState)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user