diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt index a142e3044..604c5720b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt @@ -71,7 +71,7 @@ class CheckmarkButtonView( invalidate() } - var hasNotes = false + var notes = "" set(value) { field = value invalidate() @@ -179,7 +179,7 @@ class CheckmarkButtonView( canvas.drawText(label, rect.centerX(), rect.centerY(), paint) } - drawNotesIndicator(canvas, color, em, hasNotes) + drawNotesIndicator(canvas, color, em, notes) } } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt index 859cf734d..76df675ec 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelView.kt @@ -54,7 +54,7 @@ class CheckmarkPanelView( setupButtons() } - var notesIndicators = BooleanArray(0) + var notes = arrayOf() set(values) { field = values setupButtons() @@ -84,9 +84,9 @@ class CheckmarkPanelView( index + dataOffset < values.size -> values[index + dataOffset] else -> UNKNOWN } - button.hasNotes = when { - index + dataOffset < notesIndicators.size -> notesIndicators[index + dataOffset] - else -> false + button.notes = when { + index + dataOffset < notes.size -> notes[index + dataOffset] + else -> "" } button.color = color button.onToggle = { value -> onToggle(timestamp, value) } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListAdapter.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListAdapter.kt index b8770d0cb..06412103b 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListAdapter.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListAdapter.kt @@ -124,9 +124,9 @@ class HabitCardListAdapter @Inject constructor( val habit = cache.getHabitByPosition(position) val score = cache.getScore(habit!!.id!!) val checkmarks = cache.getCheckmarks(habit.id!!) - val notesIndicators = cache.getNoteIndicators(habit.id!!) + val notes = cache.getNotes(habit.id!!) val selected = selected.contains(habit) - listView!!.bindCardView(holder, habit, score, checkmarks, notesIndicators, selected) + listView!!.bindCardView(holder, habit, score, checkmarks, notes, selected) } override fun onViewAttachedToWindow(holder: HabitCardViewHolder) { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.kt index 8ce805098..fd6df425f 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardListView.kt @@ -87,7 +87,7 @@ class HabitCardListView( habit: Habit, score: Double, checkmarks: IntArray, - notesIndicators: BooleanArray, + notes: Array, selected: Boolean ): View { val cardView = holder.itemView as HabitCardView @@ -99,7 +99,7 @@ class HabitCardListView( cardView.score = score cardView.unit = habit.unit cardView.threshold = habit.targetValue / habit.frequency.denominator - cardView.notesIndicators = notesIndicators + cardView.notes = notes val detector = GestureDetector(context, CardViewGestureDetector(holder)) cardView.setOnTouchListener { _, ev -> diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt index c901dc92f..040e36b68 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt @@ -121,11 +121,11 @@ class HabitCardView( numberPanel.threshold = value } - var notesIndicators - get() = checkmarkPanel.notesIndicators + var notes + get() = checkmarkPanel.notes set(values) { - checkmarkPanel.notesIndicators = values - numberPanel.notesIndicators = values + checkmarkPanel.notes = values + numberPanel.notes = values } var checkmarkPanel: CheckmarkPanelView diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt index ed00049ee..4d8bdda05 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt @@ -102,7 +102,7 @@ class NumberButtonView( field = value invalidate() } - var hasNotes = false + var notes = "" set(value) { field = value invalidate() @@ -221,7 +221,7 @@ class NumberButtonView( canvas.drawText(units, rect.centerX(), rect.centerY(), pUnit) } - drawNotesIndicator(canvas, color, em, hasNotes) + drawNotesIndicator(canvas, color, em, notes) } } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.kt index 520401f65..b9be8c820 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelView.kt @@ -72,7 +72,7 @@ class NumberPanelView( setupButtons() } - var notesIndicators = BooleanArray(0) + var notes = arrayOf() set(values) { field = values setupButtons() @@ -96,9 +96,9 @@ class NumberPanelView( index + dataOffset < values.size -> values[index + dataOffset] else -> 0.0 } - button.hasNotes = when { - index + dataOffset < notesIndicators.size -> notesIndicators[index + dataOffset] - else -> false + button.notes = when { + index + dataOffset < notes.size -> notes[index + dataOffset] + else -> "" } button.color = color button.targetType = targetType diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt b/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt index b6903b3b0..f406635cd 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt @@ -202,10 +202,10 @@ fun View.sp(value: Float) = InterfaceUtils.spToPixels(context, value) fun View.dp(value: Float) = InterfaceUtils.dpToPixels(context, value) fun View.str(id: Int) = resources.getString(id) -fun View.drawNotesIndicator(canvas: Canvas, color: Int, size: Float, hasNotes: Boolean) { +fun View.drawNotesIndicator(canvas: Canvas, color: Int, size: Float, notes: String) { val pNotesIndicator = Paint() pNotesIndicator.color = color - if (hasNotes) { + if (notes.isNotBlank()) { val cy = 0.8f * size canvas.drawCircle(width.toFloat() - cy, cy, 8f, pNotesIndicator) } diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCache.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCache.kt index f1e306758..606f1cb09 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCache.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/screens/habits/list/HabitCardListCache.kt @@ -79,8 +79,8 @@ class HabitCardListCache @Inject constructor( } @Synchronized - fun getNoteIndicators(habitId: Long): BooleanArray { - return data.notesIndicators[habitId]!! + fun getNotes(habitId: Long): Array { + return data.notes[habitId]!! } @Synchronized @@ -168,7 +168,7 @@ class HabitCardListCache @Inject constructor( data.habits.removeAt(position) data.idToHabit.remove(id) data.checkmarks.remove(id) - data.notesIndicators.remove(id) + data.notes.remove(id) data.scores.remove(id) listener.onItemRemoved(position) } @@ -213,7 +213,7 @@ class HabitCardListCache @Inject constructor( val habits: MutableList val checkmarks: HashMap val scores: HashMap - val notesIndicators: HashMap + val notes: HashMap> @Synchronized fun copyCheckmarksFrom(oldData: CacheData) { @@ -226,10 +226,10 @@ class HabitCardListCache @Inject constructor( @Synchronized fun copyNoteIndicatorsFrom(oldData: CacheData) { - val empty = BooleanArray(checkmarkCount) + val empty = (0..checkmarkCount).map { "" }.toTypedArray() for (id in idToHabit.keys) { - if (oldData.notesIndicators.containsKey(id)) notesIndicators[id] = - oldData.notesIndicators[id]!! else notesIndicators[id] = empty + if (oldData.notes.containsKey(id)) notes[id] = + oldData.notes[id]!! else notes[id] = empty } } @@ -257,7 +257,7 @@ class HabitCardListCache @Inject constructor( habits = LinkedList() checkmarks = HashMap() scores = HashMap() - notesIndicators = HashMap() + notes = HashMap() } } @@ -298,14 +298,14 @@ class HabitCardListCache @Inject constructor( if (targetId != null && targetId != habit.id) continue newData.scores[habit.id] = habit.scores[today].value val list: MutableList = ArrayList() - val notesIndicators: MutableList = ArrayList() + val notes: MutableList = ArrayList() for ((_, value, note) in habit.computedEntries.getByInterval(dateFrom, today)) { list.add(value) - notesIndicators.add(note.isNotEmpty()) + notes.add(note) } val entries = list.toTypedArray() newData.checkmarks[habit.id] = ArrayUtils.toPrimitive(entries) - newData.notesIndicators[habit.id] = notesIndicators.toBooleanArray() + newData.notes[habit.id] = notes.toTypedArray() runner!!.publishProgress(this, position) } } @@ -333,7 +333,7 @@ class HabitCardListCache @Inject constructor( data.idToHabit[id] = habit data.scores[id] = newData.scores[id]!! data.checkmarks[id] = newData.checkmarks[id]!! - data.notesIndicators[id] = newData.notesIndicators[id]!! + data.notes[id] = newData.notes[id]!! listener.onItemInserted(position) } @@ -361,10 +361,10 @@ class HabitCardListCache @Inject constructor( private fun performUpdate(id: Long, position: Int) { val oldScore = data.scores[id]!! val oldCheckmarks = data.checkmarks[id] - val oldNoteIndicators = data.notesIndicators[id] + val oldNoteIndicators = data.notes[id] val newScore = newData.scores[id]!! val newCheckmarks = newData.checkmarks[id]!! - val newNoteIndicators = newData.notesIndicators[id]!! + val newNoteIndicators = newData.notes[id]!! var unchanged = true if (oldScore != newScore) unchanged = false if (!Arrays.equals(oldCheckmarks, newCheckmarks)) unchanged = false @@ -372,7 +372,7 @@ class HabitCardListCache @Inject constructor( if (unchanged) return data.scores[id] = newScore data.checkmarks[id] = newCheckmarks - data.notesIndicators[id] = newNoteIndicators + data.notes[id] = newNoteIndicators listener.onItemChanged(position) }