mirror of
https://github.com/TeamNewPipe/NewPipe
synced 2025-02-02 12:19:16 +00:00
Simplify screen handling in feed group dialog
This commit is contained in:
parent
d8b9d353aa
commit
f01e40e671
@ -27,11 +27,12 @@ import org.schabi.newpipe.R
|
|||||||
import org.schabi.newpipe.database.feed.model.FeedGroupEntity
|
import org.schabi.newpipe.database.feed.model.FeedGroupEntity
|
||||||
import org.schabi.newpipe.database.subscription.SubscriptionEntity
|
import org.schabi.newpipe.database.subscription.SubscriptionEntity
|
||||||
import org.schabi.newpipe.local.subscription.FeedGroupIcon
|
import org.schabi.newpipe.local.subscription.FeedGroupIcon
|
||||||
import org.schabi.newpipe.local.subscription.dialog.FeedGroupDialogViewModel.DialogEvent.*
|
import org.schabi.newpipe.local.subscription.dialog.FeedGroupDialog.ScreenState.*
|
||||||
|
import org.schabi.newpipe.local.subscription.dialog.FeedGroupDialogViewModel.DialogEvent.ProcessingEvent
|
||||||
|
import org.schabi.newpipe.local.subscription.dialog.FeedGroupDialogViewModel.DialogEvent.SuccessEvent
|
||||||
import org.schabi.newpipe.local.subscription.item.EmptyPlaceholderItem
|
import org.schabi.newpipe.local.subscription.item.EmptyPlaceholderItem
|
||||||
import org.schabi.newpipe.local.subscription.item.PickerIconItem
|
import org.schabi.newpipe.local.subscription.item.PickerIconItem
|
||||||
import org.schabi.newpipe.local.subscription.item.PickerSubscriptionItem
|
import org.schabi.newpipe.local.subscription.item.PickerSubscriptionItem
|
||||||
import org.schabi.newpipe.util.AnimationUtils.animateView
|
|
||||||
import org.schabi.newpipe.util.ThemeHelper
|
import org.schabi.newpipe.util.ThemeHelper
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
||||||
@ -43,14 +44,14 @@ class FeedGroupDialog : DialogFragment() {
|
|||||||
|
|
||||||
sealed class ScreenState : Serializable {
|
sealed class ScreenState : Serializable {
|
||||||
object InitialScreen : ScreenState()
|
object InitialScreen : ScreenState()
|
||||||
object SubscriptionsPicker : ScreenState()
|
object IconPickerScreen : ScreenState()
|
||||||
object IconPickerList : ScreenState()
|
object SubscriptionsPickerScreen : ScreenState()
|
||||||
object DeleteScreen : ScreenState()
|
object DeleteScreen : ScreenState()
|
||||||
}
|
}
|
||||||
|
|
||||||
@State @JvmField var selectedIcon: FeedGroupIcon? = null
|
@State @JvmField var selectedIcon: FeedGroupIcon? = null
|
||||||
@State @JvmField var selectedSubscriptions: HashSet<Long> = HashSet()
|
@State @JvmField var selectedSubscriptions: HashSet<Long> = HashSet()
|
||||||
@State @JvmField var currentScreen: ScreenState = ScreenState.InitialScreen
|
@State @JvmField var currentScreen: ScreenState = InitialScreen
|
||||||
|
|
||||||
@State @JvmField var subscriptionsListState: Parcelable? = null
|
@State @JvmField var subscriptionsListState: Parcelable? = null
|
||||||
@State @JvmField var iconsListState: Parcelable? = null
|
@State @JvmField var iconsListState: Parcelable? = null
|
||||||
@ -70,8 +71,8 @@ class FeedGroupDialog : DialogFragment() {
|
|||||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||||
return object : Dialog(requireActivity(), theme) {
|
return object : Dialog(requireActivity(), theme) {
|
||||||
override fun onBackPressed() {
|
override fun onBackPressed() {
|
||||||
if (currentScreen !is ScreenState.InitialScreen) {
|
if (currentScreen !is InitialScreen) {
|
||||||
showInitialScreen()
|
showScreen(InitialScreen)
|
||||||
} else {
|
} else {
|
||||||
super.onBackPressed()
|
super.onBackPressed()
|
||||||
}
|
}
|
||||||
@ -104,14 +105,22 @@ class FeedGroupDialog : DialogFragment() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
setupIconPicker()
|
setupIconPicker()
|
||||||
|
setupListeners()
|
||||||
|
|
||||||
delete_button.setOnClickListener { showDeleteScreen() }
|
showScreen(currentScreen)
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
// Setup
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
private fun setupListeners() {
|
||||||
|
delete_button.setOnClickListener { showScreen(DeleteScreen) }
|
||||||
|
|
||||||
cancel_button.setOnClickListener {
|
cancel_button.setOnClickListener {
|
||||||
if (currentScreen !is ScreenState.InitialScreen) {
|
when (currentScreen) {
|
||||||
showInitialScreen()
|
InitialScreen -> dismiss()
|
||||||
} else {
|
else -> showScreen(InitialScreen)
|
||||||
dismiss()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,46 +137,37 @@ class FeedGroupDialog : DialogFragment() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
confirm_button.setOnClickListener {
|
confirm_button.setOnClickListener {
|
||||||
if (currentScreen is ScreenState.InitialScreen) {
|
when (currentScreen) {
|
||||||
val name = group_name_input.text.toString().trim()
|
InitialScreen -> handlePositiveButtonInitialScreen()
|
||||||
val icon = selectedIcon ?: groupIcon ?: FeedGroupIcon.ALL
|
DeleteScreen -> viewModel.deleteGroup()
|
||||||
|
else -> showScreen(InitialScreen)
|
||||||
if (name.isBlank()) {
|
|
||||||
group_name_input_container.error = getString(R.string.feed_group_dialog_empty_name)
|
|
||||||
group_name_input.text = null
|
|
||||||
group_name_input.requestFocus()
|
|
||||||
return@setOnClickListener
|
|
||||||
} else {
|
|
||||||
group_name_input_container.error = null
|
|
||||||
}
|
|
||||||
|
|
||||||
if (selectedSubscriptions.isEmpty()) {
|
|
||||||
Toast.makeText(requireContext(), getString(R.string.feed_group_dialog_empty_selection), Toast.LENGTH_SHORT).show()
|
|
||||||
return@setOnClickListener
|
|
||||||
}
|
|
||||||
|
|
||||||
when (groupId) {
|
|
||||||
NO_GROUP_SELECTED -> viewModel.createGroup(name, icon, selectedSubscriptions)
|
|
||||||
else -> viewModel.updateGroup(name, icon, selectedSubscriptions, groupSortOrder)
|
|
||||||
}
|
|
||||||
} else if (currentScreen is ScreenState.DeleteScreen) {
|
|
||||||
viewModel.deleteGroup()
|
|
||||||
} else {
|
|
||||||
showInitialScreen()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
when (currentScreen) {
|
|
||||||
is ScreenState.InitialScreen -> showInitialScreen()
|
|
||||||
is ScreenState.IconPickerList -> showIconPicker()
|
|
||||||
is ScreenState.SubscriptionsPicker -> showSubscriptionsPicker()
|
|
||||||
is ScreenState.DeleteScreen -> showDeleteScreen()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
private fun handlePositiveButtonInitialScreen() {
|
||||||
// Setup
|
val name = group_name_input.text.toString().trim()
|
||||||
///////////////////////////////////////////////////////////////////////////
|
val icon = selectedIcon ?: groupIcon ?: FeedGroupIcon.ALL
|
||||||
|
|
||||||
|
if (name.isBlank()) {
|
||||||
|
group_name_input_container.error = getString(R.string.feed_group_dialog_empty_name)
|
||||||
|
group_name_input.text = null
|
||||||
|
group_name_input.requestFocus()
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
group_name_input_container.error = null
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selectedSubscriptions.isEmpty()) {
|
||||||
|
Toast.makeText(requireContext(), getString(R.string.feed_group_dialog_empty_selection), Toast.LENGTH_SHORT).show()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
when (groupId) {
|
||||||
|
NO_GROUP_SELECTED -> viewModel.createGroup(name, icon, selectedSubscriptions)
|
||||||
|
else -> viewModel.updateGroup(name, icon, selectedSubscriptions, groupSortOrder)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun handleGroup(feedGroupEntity: FeedGroupEntity? = null) {
|
private fun handleGroup(feedGroupEntity: FeedGroupEntity? = null) {
|
||||||
val icon = feedGroupEntity?.icon ?: FeedGroupIcon.ALL
|
val icon = feedGroupEntity?.icon ?: FeedGroupIcon.ALL
|
||||||
@ -243,7 +243,7 @@ class FeedGroupDialog : DialogFragment() {
|
|||||||
|
|
||||||
select_channel_button.setOnClickListener {
|
select_channel_button.setOnClickListener {
|
||||||
subscriptions_selector_list.scrollToPosition(0)
|
subscriptions_selector_list.scrollToPosition(0)
|
||||||
showSubscriptionsPicker()
|
showScreen(SubscriptionsPickerScreen)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -267,13 +267,13 @@ class FeedGroupDialog : DialogFragment() {
|
|||||||
selectedIcon = item.icon
|
selectedIcon = item.icon
|
||||||
icon_preview.setImageResource(item.iconRes)
|
icon_preview.setImageResource(item.iconRes)
|
||||||
|
|
||||||
showInitialScreen()
|
showScreen(InitialScreen)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
icon_preview.setOnClickListener {
|
icon_preview.setOnClickListener {
|
||||||
icon_selector.scrollToPosition(0)
|
icon_selector.scrollToPosition(0)
|
||||||
showIconPicker()
|
showScreen(IconPickerScreen)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (groupId == NO_GROUP_SELECTED) {
|
if (groupId == NO_GROUP_SELECTED) {
|
||||||
@ -286,62 +286,36 @@ class FeedGroupDialog : DialogFragment() {
|
|||||||
// Screen Selector
|
// Screen Selector
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
private fun showInitialScreen() {
|
private fun showScreen(screen: ScreenState) {
|
||||||
currentScreen = ScreenState.InitialScreen
|
currentScreen = screen
|
||||||
animateView(icon_selector, false, 0)
|
|
||||||
animateView(subscriptions_selector, false, 0)
|
|
||||||
animateView(options_root, true, 250)
|
|
||||||
animateView(delete_screen_message, false, 0)
|
|
||||||
|
|
||||||
separator.visibility = View.GONE
|
options_root.onlyVisibleIn(InitialScreen)
|
||||||
confirm_button.setText(if (groupId == NO_GROUP_SELECTED) R.string.create else android.R.string.ok)
|
icon_selector.onlyVisibleIn(IconPickerScreen)
|
||||||
delete_button.visibility = if (groupId == NO_GROUP_SELECTED) View.GONE else View.VISIBLE
|
subscriptions_selector.onlyVisibleIn(SubscriptionsPickerScreen)
|
||||||
cancel_button.visibility = View.VISIBLE
|
delete_screen_message.onlyVisibleIn(DeleteScreen)
|
||||||
|
|
||||||
|
separator.onlyVisibleIn(SubscriptionsPickerScreen, IconPickerScreen)
|
||||||
|
cancel_button.onlyVisibleIn(InitialScreen, DeleteScreen)
|
||||||
|
|
||||||
|
confirm_button.setText(when {
|
||||||
|
currentScreen == InitialScreen && groupId == NO_GROUP_SELECTED -> R.string.create
|
||||||
|
else -> android.R.string.ok
|
||||||
|
})
|
||||||
|
|
||||||
|
delete_button.visibility = when {
|
||||||
|
currentScreen != InitialScreen -> View.GONE
|
||||||
|
groupId == NO_GROUP_SELECTED -> View.GONE
|
||||||
|
else -> View.VISIBLE
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentScreen != InitialScreen) hideKeyboard()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showIconPicker() {
|
private fun View.onlyVisibleIn(vararg screens: ScreenState) {
|
||||||
currentScreen = ScreenState.IconPickerList
|
visibility = when (currentScreen) {
|
||||||
animateView(icon_selector, true, 250)
|
in screens -> View.VISIBLE
|
||||||
animateView(subscriptions_selector, false, 0)
|
else -> View.GONE
|
||||||
animateView(options_root, false, 0)
|
}
|
||||||
animateView(delete_screen_message, false, 0)
|
|
||||||
|
|
||||||
separator.visibility = View.VISIBLE
|
|
||||||
confirm_button.setText(android.R.string.ok)
|
|
||||||
delete_button.visibility = View.GONE
|
|
||||||
cancel_button.visibility = View.GONE
|
|
||||||
|
|
||||||
hideKeyboard()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun showSubscriptionsPicker() {
|
|
||||||
currentScreen = ScreenState.SubscriptionsPicker
|
|
||||||
animateView(icon_selector, false, 0)
|
|
||||||
animateView(subscriptions_selector, true, 250)
|
|
||||||
animateView(options_root, false, 0)
|
|
||||||
animateView(delete_screen_message, false, 0)
|
|
||||||
|
|
||||||
separator.visibility = View.VISIBLE
|
|
||||||
confirm_button.setText(android.R.string.ok)
|
|
||||||
delete_button.visibility = View.GONE
|
|
||||||
cancel_button.visibility = View.GONE
|
|
||||||
|
|
||||||
hideKeyboard()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun showDeleteScreen() {
|
|
||||||
currentScreen = ScreenState.DeleteScreen
|
|
||||||
animateView(icon_selector, false, 0)
|
|
||||||
animateView(subscriptions_selector, false, 0)
|
|
||||||
animateView(options_root, false, 0)
|
|
||||||
animateView(delete_screen_message, true, 250)
|
|
||||||
|
|
||||||
separator.visibility = View.GONE
|
|
||||||
confirm_button.setText(android.R.string.ok)
|
|
||||||
delete_button.visibility = View.GONE
|
|
||||||
cancel_button.visibility = View.VISIBLE
|
|
||||||
|
|
||||||
hideKeyboard()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
Loading…
Reference in New Issue
Block a user