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

@ -38,7 +38,6 @@ import org.isoron.platform.gui.toInt
import org.isoron.uhabits.R import org.isoron.uhabits.R
import org.isoron.uhabits.activities.common.views.RingView import org.isoron.uhabits.activities.common.views.RingView
import org.isoron.uhabits.core.models.Habit 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.ModelObservable
import org.isoron.uhabits.core.models.Timestamp import org.isoron.uhabits.core.models.Timestamp
import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior
@ -267,16 +266,15 @@ class HabitCardView(
} }
scoreRing.apply { scoreRing.apply {
setColor(c) setColor(c)
if (h.isSubHabit()) { // if (h.isSubHabit()) {
val rightMargin = dp(8f).toInt() val rightMargin = dp(8f).toInt()
val ringSize = dp(15f).toInt() val ringSize = dp(15f).toInt()
val leftMargin = val leftMargin = if (h.isSubHabit() == true) dp(30f).toInt() else dp(8f).toInt()
if (habit?.isSubHabit() == true) dp(30f).toInt() else dp(8f).toInt()
layoutParams = LinearLayout.LayoutParams(ringSize, ringSize).apply { layoutParams = LinearLayout.LayoutParams(ringSize, ringSize).apply {
setMargins(leftMargin, 0, rightMargin, 0) setMargins(leftMargin, 0, rightMargin, 0)
gravity = Gravity.CENTER gravity = Gravity.CENTER
} }
} // }
} }
checkmarkPanel.apply { checkmarkPanel.apply {
color = c 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) { private fun triggerRipple(x: Float, y: Float) {
val background = innerFrame.background val background = innerFrame.background
background.setHotspot(x, y) background.setHotspot(x, y)

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

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

@ -34,6 +34,8 @@ abstract class HabitList : Iterable<Habit> {
@JvmField @JvmField
protected val filter: HabitMatcher protected val filter: HabitMatcher
abstract var collapsed: Boolean
var groupId: Long? = null 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. * Removes the reference to the habit from the list at the given position.
* *
* Does not affect the repository or records * 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) abstract fun removeAt(position: Int)

@ -51,6 +51,13 @@ class MemoryHabitList : HabitList {
getComposedComparatorByOrder(primaryOrder, secondaryOrder) getComposedComparatorByOrder(primaryOrder, secondaryOrder)
private var parent: MemoryHabitList? = null 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() : super()
constructor( constructor(
matcher: HabitMatcher, matcher: HabitMatcher,

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

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

Loading…
Cancel
Save