kopia lustrzana https://github.com/ryukoposting/Signal-Android
88 wiersze
3.6 KiB
Kotlin
88 wiersze
3.6 KiB
Kotlin
package org.thoughtcrime.securesms.components.settings.app.notifications.manual
|
|
|
|
import androidx.fragment.app.FragmentManager
|
|
import androidx.fragment.app.viewModels
|
|
import org.signal.core.util.DimensionUnit
|
|
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.DSLSettingsBottomSheetFragment
|
|
import org.thoughtcrime.securesms.components.settings.DSLSettingsText
|
|
import org.thoughtcrime.securesms.components.settings.app.AppSettingsActivity
|
|
import org.thoughtcrime.securesms.components.settings.app.notifications.manual.models.NotificationProfileSelection
|
|
import org.thoughtcrime.securesms.components.settings.app.notifications.profiles.NotificationProfilesRepository
|
|
import org.thoughtcrime.securesms.components.settings.configure
|
|
import org.thoughtcrime.securesms.notifications.profiles.NotificationProfile
|
|
import org.thoughtcrime.securesms.notifications.profiles.NotificationProfiles
|
|
import org.thoughtcrime.securesms.util.BottomSheetUtil
|
|
|
|
/**
|
|
* BottomSheetDialogFragment that allows a user to select a notification profile to manually enable/disable.
|
|
*/
|
|
class NotificationProfileSelectionFragment : DSLSettingsBottomSheetFragment() {
|
|
|
|
private val viewModel: NotificationProfileSelectionViewModel by viewModels(
|
|
factoryProducer = {
|
|
NotificationProfileSelectionViewModel.Factory(NotificationProfilesRepository())
|
|
}
|
|
)
|
|
|
|
override fun bindAdapter(adapter: DSLSettingsAdapter) {
|
|
NotificationProfileSelection.register(adapter)
|
|
|
|
recyclerView.itemAnimator = null
|
|
|
|
viewModel.state.observe(viewLifecycleOwner) {
|
|
adapter.submitList(getConfiguration(it).toMappingModelList())
|
|
}
|
|
}
|
|
|
|
private fun getConfiguration(state: NotificationProfileSelectionState): DSLConfiguration {
|
|
val activeProfile: NotificationProfile? = NotificationProfiles.getActiveProfile(state.notificationProfiles)
|
|
|
|
return configure {
|
|
|
|
state.notificationProfiles.forEach { profile ->
|
|
customPref(
|
|
NotificationProfileSelection.Entry(
|
|
isOn = profile == activeProfile,
|
|
summary = if (profile == activeProfile) DSLSettingsText.from(NotificationProfiles.getActiveProfileDescription(requireContext(), profile)) else DSLSettingsText.from(R.string.NotificationProfileDetails__off),
|
|
notificationProfile = profile,
|
|
isExpanded = profile.id == state.expandedId,
|
|
timeSlotB = state.timeSlotB,
|
|
onRowClick = viewModel::toggleEnabled,
|
|
onTimeSlotAClick = viewModel::enableForOneHour,
|
|
onTimeSlotBClick = viewModel::enableUntil,
|
|
onToggleClick = viewModel::setExpanded,
|
|
onViewSettingsClick = { navigateToSettings(it) }
|
|
)
|
|
)
|
|
space(DimensionUnit.DP.toPixels(16f).toInt())
|
|
}
|
|
|
|
customPref(
|
|
NotificationProfileSelection.New(
|
|
onClick = {
|
|
startActivity(AppSettingsActivity.createNotificationProfile(requireContext()))
|
|
dismissAllowingStateLoss()
|
|
}
|
|
)
|
|
)
|
|
|
|
space(DimensionUnit.DP.toPixels(20f).toInt())
|
|
}
|
|
}
|
|
|
|
private fun navigateToSettings(notificationProfile: NotificationProfile) {
|
|
startActivity(AppSettingsActivity.notificationProfileDetails(requireContext(), notificationProfile.id))
|
|
dismissAllowingStateLoss()
|
|
}
|
|
|
|
companion object {
|
|
@JvmStatic
|
|
fun show(fragmentManager: FragmentManager) {
|
|
NotificationProfileSelectionFragment().show(fragmentManager, BottomSheetUtil.STANDARD_BOTTOM_SHEET_FRAGMENT_TAG)
|
|
}
|
|
}
|
|
}
|