From f89974b5615ff14feb29e70368b5de984a163f66 Mon Sep 17 00:00:00 2001 From: Jonas L Date: Wed, 30 Jan 2019 13:58:46 +0100 Subject: [PATCH] Add introduction at time limit rule screen --- .../android/data/model/ConfigurationItem.kt | 1 + .../category/timelimit_rules/Adapter.kt | 22 +++++++- .../CategoryTimeLimitRulesFragment.kt | 30 ++++++++--- .../timelimit_rules/TimeLimitRuleItem.kt | 1 + .../layout/time_limit_rule_introduction.xml | 51 +++++++++++++++++++ .../strings-category-time-limit-rules.xml | 7 +++ .../strings-category-time-limit-rules.xml | 7 +++ 7 files changed, 112 insertions(+), 7 deletions(-) create mode 100644 app/src/main/res/layout/time_limit_rule_introduction.xml diff --git a/app/src/main/java/io/timelimit/android/data/model/ConfigurationItem.kt b/app/src/main/java/io/timelimit/android/data/model/ConfigurationItem.kt index 5935721..e6a5d28 100644 --- a/app/src/main/java/io/timelimit/android/data/model/ConfigurationItem.kt +++ b/app/src/main/java/io/timelimit/android/data/model/ConfigurationItem.kt @@ -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 } diff --git a/app/src/main/java/io/timelimit/android/ui/manage/category/timelimit_rules/Adapter.kt b/app/src/main/java/io/timelimit/android/ui/manage/category/timelimit_rules/Adapter.kt index 68b9742..138678a 100644 --- a/app/src/main/java/io/timelimit/android/ui/manage/category/timelimit_rules/Adapter.kt +++ b/app/src/main/java/io/timelimit/android/ui/manage/category/timelimit_rules/Adapter.kt @@ -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() { companion object { private const val TYPE_ITEM = 1 private const val TYPE_ADD = 2 + private const val TYPE_INTRO = 3 } var data: List by Delegates.observable(emptyList()) { _, _, _ -> notifyDataSetChanged() } @@ -58,6 +60,7 @@ class Adapter: RecyclerView.Adapter() { 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() { }.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() { 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() { 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() } diff --git a/app/src/main/java/io/timelimit/android/ui/manage/category/timelimit_rules/CategoryTimeLimitRulesFragment.kt b/app/src/main/java/io/timelimit/android/ui/manage/category/timelimit_rules/CategoryTimeLimitRulesFragment.kt index 6686f7b..a3923e9 100644 --- a/app/src/main/java/io/timelimit/android/ui/manage/category/timelimit_rules/CategoryTimeLimitRulesFragment.kt +++ b/app/src/main/java/io/timelimit/android/ui/manage/category/timelimit_rules/CategoryTimeLimitRulesFragment.kt @@ -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) + } + } } } diff --git a/app/src/main/java/io/timelimit/android/ui/manage/category/timelimit_rules/TimeLimitRuleItem.kt b/app/src/main/java/io/timelimit/android/ui/manage/category/timelimit_rules/TimeLimitRuleItem.kt index 5d930b4..369a2de 100644 --- a/app/src/main/java/io/timelimit/android/ui/manage/category/timelimit_rules/TimeLimitRuleItem.kt +++ b/app/src/main/java/io/timelimit/android/ui/manage/category/timelimit_rules/TimeLimitRuleItem.kt @@ -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() \ No newline at end of file diff --git a/app/src/main/res/layout/time_limit_rule_introduction.xml b/app/src/main/res/layout/time_limit_rule_introduction.xml new file mode 100644 index 0000000..e02673c --- /dev/null +++ b/app/src/main/res/layout/time_limit_rule_introduction.xml @@ -0,0 +1,51 @@ + + + + + + + + + + +