kopia lustrzana https://github.com/ryukoposting/Signal-Android
107 wiersze
4.4 KiB
Kotlin
107 wiersze
4.4 KiB
Kotlin
package org.thoughtcrime.securesms.components.settings.app.notifications.profiles
|
|
|
|
import android.graphics.Color
|
|
import android.os.Bundle
|
|
import android.view.View
|
|
import androidx.core.content.ContextCompat
|
|
import androidx.fragment.app.viewModels
|
|
import androidx.navigation.fragment.findNavController
|
|
import com.dd.CircularProgressButton
|
|
import com.google.android.material.snackbar.Snackbar
|
|
import io.reactivex.rxjava3.kotlin.subscribeBy
|
|
import org.thoughtcrime.securesms.R
|
|
import org.thoughtcrime.securesms.components.settings.DSLConfiguration
|
|
import org.thoughtcrime.securesms.components.settings.DSLSettingsAdapter
|
|
import org.thoughtcrime.securesms.components.settings.DSLSettingsFragment
|
|
import org.thoughtcrime.securesms.components.settings.app.notifications.profiles.models.NotificationProfileAddMembers
|
|
import org.thoughtcrime.securesms.components.settings.app.notifications.profiles.models.NotificationProfileRecipient
|
|
import org.thoughtcrime.securesms.components.settings.configure
|
|
import org.thoughtcrime.securesms.components.settings.conversation.preferences.RecipientPreference
|
|
import org.thoughtcrime.securesms.notifications.profiles.NotificationProfile
|
|
import org.thoughtcrime.securesms.recipients.Recipient
|
|
import org.thoughtcrime.securesms.recipients.RecipientId
|
|
import org.thoughtcrime.securesms.util.LifecycleDisposable
|
|
|
|
/**
|
|
* Show and allow addition of recipients to a profile during the create flow.
|
|
*/
|
|
class AddAllowedMembersFragment : DSLSettingsFragment(layoutId = R.layout.fragment_add_allowed_members) {
|
|
|
|
private val viewModel: AddAllowedMembersViewModel by viewModels(factoryProducer = { AddAllowedMembersViewModel.Factory(profileId) })
|
|
private val lifecycleDisposable = LifecycleDisposable()
|
|
private val profileId: Long by lazy { AddAllowedMembersFragmentArgs.fromBundle(requireArguments()).profileId }
|
|
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
super.onViewCreated(view, savedInstanceState)
|
|
|
|
lifecycleDisposable.bindTo(viewLifecycleOwner.lifecycle)
|
|
|
|
view.findViewById<CircularProgressButton>(R.id.add_allowed_members_profile_next).apply {
|
|
setOnClickListener {
|
|
findNavController().navigate(AddAllowedMembersFragmentDirections.actionAddAllowedMembersFragmentToEditNotificationProfileScheduleFragment(profileId, true))
|
|
}
|
|
}
|
|
}
|
|
|
|
override fun bindAdapter(adapter: DSLSettingsAdapter) {
|
|
NotificationProfileAddMembers.register(adapter)
|
|
NotificationProfileRecipient.register(adapter)
|
|
|
|
lifecycleDisposable += viewModel.getProfile()
|
|
.subscribeBy(
|
|
onNext = { (profile, recipients) ->
|
|
adapter.submitList(getConfiguration(profile, recipients).toMappingModelList())
|
|
}
|
|
)
|
|
}
|
|
|
|
private fun getConfiguration(profile: NotificationProfile, recipients: List<Recipient>): DSLConfiguration {
|
|
return configure {
|
|
sectionHeaderPref(R.string.AddAllowedMembers__allowed_notifications)
|
|
|
|
customPref(
|
|
NotificationProfileAddMembers.Model(
|
|
onClick = { id, currentSelection ->
|
|
findNavController().navigate(
|
|
AddAllowedMembersFragmentDirections.actionAddAllowedMembersFragmentToSelectRecipientsFragment(id)
|
|
.setCurrentSelection(currentSelection.toTypedArray())
|
|
)
|
|
},
|
|
profileId = profile.id,
|
|
currentSelection = profile.allowedMembers
|
|
)
|
|
)
|
|
|
|
for (member in recipients) {
|
|
customPref(
|
|
NotificationProfileRecipient.Model(
|
|
recipientModel = RecipientPreference.Model(
|
|
recipient = member,
|
|
onClick = {}
|
|
),
|
|
onRemoveClick = { id ->
|
|
lifecycleDisposable += viewModel.removeMember(id)
|
|
.subscribeBy(
|
|
onSuccess = { removed ->
|
|
view?.let { view ->
|
|
Snackbar.make(view, getString(R.string.NotificationProfileDetails__s_removed, removed.getDisplayName(requireContext())), Snackbar.LENGTH_LONG)
|
|
.setAction(R.string.NotificationProfileDetails__undo) { undoRemove(id) }
|
|
.setActionTextColor(ContextCompat.getColor(requireContext(), R.color.core_ultramarine_light))
|
|
.setTextColor(Color.WHITE)
|
|
.show()
|
|
}
|
|
}
|
|
)
|
|
}
|
|
)
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun undoRemove(id: RecipientId) {
|
|
lifecycleDisposable += viewModel.addMember(id)
|
|
.subscribe()
|
|
}
|
|
}
|