mirror of
https://codeberg.org/timelimit/opentimelimit-android.git
synced 2025-10-05 02:39:34 +02:00
Add introduction at time limit rule screen
This commit is contained in:
parent
2913a72217
commit
f89974b561
7 changed files with 112 additions and 7 deletions
|
@ -117,4 +117,5 @@ object HintsToShow {
|
|||
const val OVERVIEW_INTRODUCTION = 1L
|
||||
const val DEVICE_SCREEN_INTRODUCTION = 2L
|
||||
const val CATEGORIES_INTRODUCTION = 4L
|
||||
const val TIME_LIMIT_RULE_INTRODUCTION = 8L
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ import io.timelimit.android.R
|
|||
import io.timelimit.android.data.model.TimeLimitRule
|
||||
import io.timelimit.android.databinding.AddItemViewBinding
|
||||
import io.timelimit.android.databinding.FragmentCategoryTimeLimitRuleItemBinding
|
||||
import io.timelimit.android.databinding.TimeLimitRuleIntroductionBinding
|
||||
import io.timelimit.android.util.JoinUtil
|
||||
import io.timelimit.android.util.TimeTextUtil
|
||||
import kotlin.properties.Delegates
|
||||
|
@ -31,6 +32,7 @@ class Adapter: RecyclerView.Adapter<ViewHolder>() {
|
|||
companion object {
|
||||
private const val TYPE_ITEM = 1
|
||||
private const val TYPE_ADD = 2
|
||||
private const val TYPE_INTRO = 3
|
||||
}
|
||||
|
||||
var data: List<TimeLimitRuleItem> by Delegates.observable(emptyList()) { _, _, _ -> notifyDataSetChanged() }
|
||||
|
@ -58,6 +60,7 @@ class Adapter: RecyclerView.Adapter<ViewHolder>() {
|
|||
override fun getItemViewType(position: Int) = when (getItem(position)) {
|
||||
AddTimeLimitRuleItem -> TYPE_ADD
|
||||
is TimeLimitRuleRuleItem -> TYPE_ITEM
|
||||
TimeLimitRuleIntroductionItem -> TYPE_INTRO
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = when (viewType) {
|
||||
|
@ -82,6 +85,19 @@ class Adapter: RecyclerView.Adapter<ViewHolder>() {
|
|||
}.root
|
||||
)
|
||||
}
|
||||
TYPE_INTRO -> {
|
||||
ViewHolder(
|
||||
TimeLimitRuleIntroductionBinding.inflate(
|
||||
LayoutInflater.from(parent.context),
|
||||
parent,
|
||||
false
|
||||
).apply {
|
||||
okButton.setOnClickListener {
|
||||
handlers?.onConfirmIntroduction()
|
||||
}
|
||||
}.root
|
||||
)
|
||||
}
|
||||
else -> throw IllegalStateException()
|
||||
}
|
||||
|
||||
|
@ -92,6 +108,9 @@ class Adapter: RecyclerView.Adapter<ViewHolder>() {
|
|||
AddTimeLimitRuleItem -> {
|
||||
// nothing to do
|
||||
}
|
||||
is TimeLimitRuleIntroductionItem -> {
|
||||
// nothing to do
|
||||
}
|
||||
is TimeLimitRuleRuleItem -> {
|
||||
val rule = item.rule
|
||||
val binding = (holder as ItemViewHolder).view
|
||||
|
@ -119,7 +138,7 @@ class Adapter: RecyclerView.Adapter<ViewHolder>() {
|
|||
|
||||
binding.executePendingBindings()
|
||||
}
|
||||
}
|
||||
}.let { /* require handling all paths */ }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -129,4 +148,5 @@ class ItemViewHolder(val view: FragmentCategoryTimeLimitRuleItemBinding): ViewHo
|
|||
interface Handlers {
|
||||
fun onTimeLimitRuleClicked(rule: TimeLimitRule)
|
||||
fun onAddTimeLimitRuleClicked()
|
||||
fun onConfirmIntroduction()
|
||||
}
|
||||
|
|
|
@ -25,8 +25,10 @@ import androidx.lifecycle.Observer
|
|||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import io.timelimit.android.R
|
||||
import io.timelimit.android.async.Threads
|
||||
import io.timelimit.android.data.Database
|
||||
import io.timelimit.android.data.extensions.getDateLive
|
||||
import io.timelimit.android.data.model.HintsToShow
|
||||
import io.timelimit.android.data.model.TimeLimitRule
|
||||
import io.timelimit.android.livedata.map
|
||||
import io.timelimit.android.livedata.switchMap
|
||||
|
@ -79,13 +81,23 @@ class CategoryTimeLimitRulesFragment : Fragment(), EditTimeLimitRuleDialogFragme
|
|||
)
|
||||
}
|
||||
|
||||
rules
|
||||
.map { rules ->
|
||||
rules.sortedBy { it.dayMask }.map { TimeLimitRuleRuleItem(it) }
|
||||
val hasHiddenIntro = database.config().wereHintsShown(HintsToShow.TIME_LIMIT_RULE_INTRODUCTION)
|
||||
|
||||
rules.map { rules ->
|
||||
rules.sortedBy { it.dayMask }.map { TimeLimitRuleRuleItem(it) }
|
||||
}.switchMap {
|
||||
val baseList = it + listOf(AddTimeLimitRuleItem)
|
||||
|
||||
hasHiddenIntro.map { hasHiddenIntro ->
|
||||
if (hasHiddenIntro) {
|
||||
baseList
|
||||
} else {
|
||||
listOf(TimeLimitRuleIntroductionItem) + baseList
|
||||
}
|
||||
.observe(this, Observer {
|
||||
adapter.data = it + listOf(AddTimeLimitRuleItem)
|
||||
})
|
||||
}
|
||||
}.observe(this, Observer {
|
||||
adapter.data = it
|
||||
})
|
||||
|
||||
usedTimeItems.observe(this, Observer {
|
||||
usedTimes ->
|
||||
|
@ -105,6 +117,12 @@ class CategoryTimeLimitRulesFragment : Fragment(), EditTimeLimitRuleDialogFragme
|
|||
EditTimeLimitRuleDialogFragment.newInstance(params.categoryId, this@CategoryTimeLimitRulesFragment).show(fragmentManager!!)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onConfirmIntroduction() {
|
||||
Threads.database.execute {
|
||||
database.config().setHintsShownSync(HintsToShow.TIME_LIMIT_RULE_INTRODUCTION)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -4,4 +4,5 @@ import io.timelimit.android.data.model.TimeLimitRule
|
|||
|
||||
sealed class TimeLimitRuleItem
|
||||
object AddTimeLimitRuleItem: TimeLimitRuleItem()
|
||||
object TimeLimitRuleIntroductionItem: TimeLimitRuleItem()
|
||||
data class TimeLimitRuleRuleItem(val rule: TimeLimitRule): TimeLimitRuleItem()
|
Loading…
Add table
Add a link
Reference in a new issue