Sort categories in the category screen

This commit is contained in:
Jonas Lochmann 2020-02-03 01:00:00 +01:00
parent 9fda41a006
commit 412966df26
No known key found for this signature in database
GPG key ID: 8B8C9AEE10FA5B36
3 changed files with 90 additions and 55 deletions

View file

@ -1,5 +1,5 @@
/* /*
* TimeLimit Copyright <C> 2019 Jonas Lochmann * TimeLimit Copyright <C> 2019 - 2020 Jonas Lochmann
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -126,6 +126,7 @@ class Adapter: RecyclerView.Adapter<ViewHolder>() {
} }
binding.usedForAppsWithoutCategory = item.usedForNotAssignedApps binding.usedForAppsWithoutCategory = item.usedForNotAssignedApps
binding.parentCategoryTitle = item.parentCategoryTitle binding.parentCategoryTitle = item.parentCategoryTitle
binding.isChildCategory = item.parentCategoryTitle != null
binding.card.setOnClickListener { handlers?.onCategoryClicked(item.category) } binding.card.setOnClickListener { handlers?.onCategoryClicked(item.category) }

View file

@ -1,5 +1,5 @@
/* /*
* TimeLimit Copyright <C> 2019 Jonas Lochmann * TimeLimit Copyright <C> 2019 - 2020 Jonas Lochmann
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -20,6 +20,7 @@ import android.util.SparseLongArray
import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import io.timelimit.android.data.extensions.mapToTimezone import io.timelimit.android.data.extensions.mapToTimezone
import io.timelimit.android.data.model.Category
import io.timelimit.android.data.model.HintsToShow import io.timelimit.android.data.model.HintsToShow
import io.timelimit.android.date.DateInTimezone import io.timelimit.android.date.DateInTimezone
import io.timelimit.android.date.getMinuteOfWeek import io.timelimit.android.date.getMinuteOfWeek
@ -29,6 +30,7 @@ import io.timelimit.android.livedata.map
import io.timelimit.android.livedata.switchMap import io.timelimit.android.livedata.switchMap
import io.timelimit.android.logic.DefaultAppLogic import io.timelimit.android.logic.DefaultAppLogic
import io.timelimit.android.logic.RemainingTime import io.timelimit.android.logic.RemainingTime
import java.util.*
class ManageChildCategoriesModel(application: Application): AndroidViewModel(application) { class ManageChildCategoriesModel(application: Application): AndroidViewModel(application) {
private val logic = DefaultAppLogic.with(application) private val logic = DefaultAppLogic.with(application)
@ -76,8 +78,25 @@ class ManageChildCategoriesModel(application: Application): AndroidViewModel(app
) )
} }
private val sortedCategories = categories.map { categories ->
val categoryById = categories.associateBy { it.id }
val sortedCategories = mutableListOf<Category>()
val childCategories = categories.filter { categoryById.containsKey(it.parentCategoryId) }.groupBy { it.parentCategoryId }
categories.filterNot { categoryById.containsKey(it.parentCategoryId) }.sortedBy { it.title.toLowerCase(Locale.getDefault()) }.forEach { category ->
sortedCategories.add(category)
childCategories[category.id]?.sortedBy { it.title.toLowerCase(Locale.getDefault()) }?.let { items ->
sortedCategories.addAll(items)
}
}
sortedCategories.toList()
}
private val categoryItems = categoryForUnassignedAppsLive.switchMap { categoryForUnassignedApps -> private val categoryItems = categoryForUnassignedAppsLive.switchMap { categoryForUnassignedApps ->
categories.switchMap { categories -> sortedCategories.switchMap { categories ->
timeLimitRules.switchMap { timeLimitRules -> timeLimitRules.switchMap { timeLimitRules ->
childDate.switchMap { childDate -> childDate.switchMap { childDate ->
usedTimeItemsForWeek.switchMap { usedTimeItemsForWeek -> usedTimeItemsForWeek.switchMap { usedTimeItemsForWeek ->

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
TimeLimit Copyright <C> 2019 Jonas Lochmann TimeLimit Copyright <C> 2019 - 2020 Jonas Lochmann
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation version 3 of the License. the Free Software Foundation version 3 of the License.
@ -42,10 +42,24 @@
name="parentCategoryTitle" name="parentCategoryTitle"
type="String" /> type="String" />
<variable
name="isChildCategory"
type="boolean" />
<import type="android.text.TextUtils" /> <import type="android.text.TextUtils" />
<import type="android.view.View" /> <import type="android.view.View" />
</data> </data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<View
android:visibility="@{isChildCategory ? View.VISIBLE : View.GONE}"
android:layout_width="32dp"
android:layout_height="wrap_content" />
<androidx.cardview.widget.CardView <androidx.cardview.widget.CardView
android:foreground="?selectableItemBackground" android:foreground="?selectableItemBackground"
android:id="@+id/card" android:id="@+id/card"
@ -107,4 +121,5 @@
</LinearLayout> </LinearLayout>
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>
</LinearLayout>
</layout> </layout>