Fix collapsing and sorting of collapsed groups

pull/2020/head
Dharanish 1 year ago
parent f5ca6b08af
commit 68b4bebca9

@ -25,6 +25,11 @@ class CollapseButtonView(
private var drawer = Drawer()
var collapsed = false
set(value) {
field = value
drawer.rotate()
invalidate()
}
init {
setOnClickListener(this)
@ -33,9 +38,8 @@ class CollapseButtonView(
override fun onClick(v: View) {
collapsed = !collapsed
habitGroup!!.collapsed = collapsed
drawer.rotate()
invalidate()
(context as ListHabitsActivity).component.listHabitsMenu.behavior.onPreferencesChanged()
invalidate()
}
override fun onDraw(canvas: Canvas) {
@ -66,7 +70,7 @@ class CollapseButtonView(
}
fun rotate() {
if (rotationAngle == 0f) {
if (collapsed) {
rotationAngle = 90f
offset_y = 0f
offset_x = -0.4f

@ -38,7 +38,6 @@ import org.isoron.platform.gui.toInt
import org.isoron.uhabits.R
import org.isoron.uhabits.activities.common.views.RingView
import org.isoron.uhabits.core.models.Habit
import org.isoron.uhabits.core.models.HabitGroup
import org.isoron.uhabits.core.models.ModelObservable
import org.isoron.uhabits.core.models.Timestamp
import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior
@ -267,16 +266,15 @@ class HabitCardView(
}
scoreRing.apply {
setColor(c)
if (h.isSubHabit()) {
// if (h.isSubHabit()) {
val rightMargin = dp(8f).toInt()
val ringSize = dp(15f).toInt()
val leftMargin =
if (habit?.isSubHabit() == true) dp(30f).toInt() else dp(8f).toInt()
val leftMargin = if (h.isSubHabit() == true) dp(30f).toInt() else dp(8f).toInt()
layoutParams = LinearLayout.LayoutParams(ringSize, ringSize).apply {
setMargins(leftMargin, 0, rightMargin, 0)
gravity = Gravity.CENTER
}
}
// }
}
checkmarkPanel.apply {
color = c
@ -297,32 +295,6 @@ class HabitCardView(
}
}
private fun copyAttributesFrom(hgr: HabitGroup) {
fun getActiveColor(habitGroup: HabitGroup): Int {
return when (habitGroup.isArchived) {
true -> sres.getColor(R.attr.contrast60)
false -> currentTheme().color(habitGroup.color).toInt()
}
}
val c = getActiveColor(hgr)
label.apply {
text = hgr.name
setTextColor(c)
}
scoreRing.apply {
setColor(c)
}
checkmarkPanel.apply {
color = c
visibility = View.GONE
}
numberPanel.apply {
color = c
visibility = View.GONE
}
}
private fun triggerRipple(x: Float, y: Float) {
val background = innerFrame.background
background.setHotspot(x, y)

@ -147,6 +147,8 @@ class HabitGroupCardView(
setColor(c)
}
collapseButtonView.collapsed = hgr.collapsed
if (collapseButtonView.collapsed) {
addButtonView.visibility = GONE
} else {

@ -34,7 +34,10 @@ data class HabitGroup(
parent.habitList.getFiltered(matcher),
parent.scores,
parent.streaks
)
) {
this.collapsed = parent.collapsed
this.parent = parent
}
init {
if (uuid == null) this.uuid = UUID.randomUUID().toString().replace("-", "")
@ -42,24 +45,27 @@ data class HabitGroup(
var observable = ModelObservable()
var parent: HabitGroup? = null
val uriString: String
get() = "content://org.isoron.uhabits/habitgroup/$id"
var collapsed = false
set(value) {
if (value != field) {
field = value
habitList.forEach { it.collapsed = value }
}
habitList.collapsed = value
if (parent != null) parent!!.collapsed = value
}
fun hasReminder(): Boolean = reminder != null
fun isCompletedToday(): Boolean {
if (habitList.isEmpty) return false
return habitList.all { it.isCompletedToday() }
}
fun isEnteredToday(): Boolean {
if (habitList.isEmpty) return false
return habitList.all { it.isEnteredToday() }
}

@ -34,6 +34,8 @@ abstract class HabitList : Iterable<Habit> {
@JvmField
protected val filter: HabitMatcher
abstract var collapsed: Boolean
var groupId: Long? = null
/**
@ -140,10 +142,6 @@ abstract class HabitList : Iterable<Habit> {
* Removes the reference to the habit from the list at the given position.
*
* Does not affect the repository or records
*
* If the given habit is not in the list, does nothing.
*
* @param h the habit to be removed.
*/
abstract fun removeAt(position: Int)

@ -51,6 +51,13 @@ class MemoryHabitList : HabitList {
getComposedComparatorByOrder(primaryOrder, secondaryOrder)
private var parent: MemoryHabitList? = null
override var collapsed: Boolean = false
set(value) {
field = value
val habits = parent?.list ?: list
habits.forEach { it.collapsed = value }
}
constructor() : super()
constructor(
matcher: HabitMatcher,

@ -144,6 +144,12 @@ class SQLiteHabitList @Inject constructor(private val modelFactory: ModelFactory
observable.notifyListeners()
}
override var collapsed: Boolean = list.collapsed
set(value) {
field = value
list.collapsed = value
}
@Synchronized
override fun indexOf(h: Habit): Int {
loadRecords()

@ -48,7 +48,7 @@ class SQLiteHabitListTest : BaseUnitTest() {
override fun setUp() {
super.setUp()
val db: Database = buildMemoryDatabase()
db.execute("PRAGMA foreign_keys = ON;")
db.execute("PRAGMA foreign_keys = OFF;")
modelFactory = SQLModelFactory(db)
habitList = SQLiteHabitList(modelFactory)
fixtures = HabitFixtures(modelFactory, habitList)

Loading…
Cancel
Save