Add introduction at time limit rule screen

This commit is contained in:
Jonas L 2019-01-30 13:58:46 +01:00
parent 2913a72217
commit f89974b561
7 changed files with 112 additions and 7 deletions

View file

@ -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
}

View file

@ -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()
}

View file

@ -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)
}
}
}
}

View file

@ -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()