Skip to content

Commit c8ac08a

Browse files
committed
add additional hint to date selector
1 parent fcedf85 commit c8ac08a

File tree

11 files changed

+111
-8
lines changed

11 files changed

+111
-8
lines changed

app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsTest.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import com.example.util.simpletimetracker.utils.checkViewDoesNotExist
1414
import com.example.util.simpletimetracker.utils.checkViewIsDisplayed
1515
import com.example.util.simpletimetracker.utils.clickOnCurrentDate
1616
import com.example.util.simpletimetracker.utils.clickOnCurrentSelectedDate
17-
import com.example.util.simpletimetracker.utils.clickOnNextDate
1817
import com.example.util.simpletimetracker.utils.clickOnPrevDate
1918
import com.example.util.simpletimetracker.utils.clickOnView
2019
import com.example.util.simpletimetracker.utils.clickOnViewWithText

core/common/src/main/java/com/example/util/simpletimetracker/core/mapper/RangeTitleMapper.kt

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ class RangeTitleMapper @Inject constructor(
4646
fun mapToDateSelectorData(
4747
rangeLength: RangeLength,
4848
position: Int,
49+
isSelected: Boolean,
4950
startOfDayShift: Long,
5051
firstDayOfWeek: DayOfWeek,
5152
): DateSelectorData {
@@ -54,6 +55,11 @@ class RangeTitleMapper @Inject constructor(
5455
is RangeLength.Day -> {
5556
calendar.timeInMillis = timeMapper.toDayDateTimestamp(position, startOfDayShift)
5657
val data = DateSelectorData.Data(
58+
additionalHint = if (isSelected) {
59+
timeMapper.formatShortMonth(calendar.timeInMillis)
60+
} else {
61+
""
62+
},
5763
topText = calendar.get(Calendar.DAY_OF_WEEK)
5864
.let(timeMapper::toDayOfWeek)
5965
.let(timeMapper::toShortDayOfWeekName),
@@ -64,13 +70,24 @@ class RangeTitleMapper @Inject constructor(
6470
is RangeLength.Week -> {
6571
val (start, end) = timeMapper.toWeekDateTimestamp(position, startOfDayShift, firstDayOfWeek)
6672
DateSelectorData.Double(
67-
data1 = mapToDateSelectorDayOfMonthData(start),
68-
data2 = mapToDateSelectorDayOfMonthData(end),
73+
data1 = mapToDateSelectorDayOfMonthData(
74+
isSelected = isSelected,
75+
timestamp = start,
76+
),
77+
data2 = mapToDateSelectorDayOfMonthData(
78+
isSelected = isSelected,
79+
timestamp = end,
80+
),
6981
)
7082
}
7183
is RangeLength.Month -> {
7284
calendar.timeInMillis = timeMapper.toMonthDateTimestamp(position, startOfDayShift)
7385
val data = DateSelectorData.Data(
86+
additionalHint = if (isSelected) {
87+
calendar.get(Calendar.YEAR).toString()
88+
} else {
89+
""
90+
},
7491
topText = "",
7592
bottomText = timeMapper.formatShortMonth(calendar.timeInMillis),
7693
)
@@ -79,13 +96,15 @@ class RangeTitleMapper @Inject constructor(
7996
is RangeLength.Year -> {
8097
calendar.timeInMillis = timeMapper.toYearDateTimestamp(position, startOfDayShift)
8198
val data = DateSelectorData.Data(
99+
additionalHint = "",
82100
topText = "",
83101
bottomText = calendar.get(Calendar.YEAR).toString(),
84102
)
85103
DateSelectorData.Single(data)
86104
}
87105
is RangeLength.All -> {
88106
val data = DateSelectorData.Data(
107+
additionalHint = "",
89108
topText = "",
90109
bottomText = resourceRepo.getString(R.string.range_overall),
91110
)
@@ -111,18 +130,30 @@ class RangeTitleMapper @Inject constructor(
111130
startOfDayShift = startOfDayShift,
112131
)
113132
DateSelectorData.Double(
114-
data1 = mapToDateSelectorDayOfMonthData(shiftTimeStamp(range.timeStarted)),
115-
data2 = mapToDateSelectorDayOfMonthData(shiftTimeStamp(range.timeEnded - 1)),
133+
data1 = mapToDateSelectorDayOfMonthData(
134+
isSelected = isSelected,
135+
timestamp = shiftTimeStamp(range.timeStarted),
136+
),
137+
data2 = mapToDateSelectorDayOfMonthData(
138+
isSelected = isSelected,
139+
timestamp = shiftTimeStamp(range.timeEnded - 1),
140+
),
116141
)
117142
}
118143
}
119144
}
120145

121146
fun mapToDateSelectorDayOfMonthData(
147+
isSelected: Boolean,
122148
timestamp: Long,
123149
): DateSelectorData.Data {
124150
val calendar = Calendar.getInstance().apply { timeInMillis = timestamp }
125151
return DateSelectorData.Data(
152+
additionalHint = if (isSelected) {
153+
calendar.get(Calendar.YEAR).toString()
154+
} else {
155+
""
156+
},
126157
topText = timeMapper.formatShortMonth(calendar.timeInMillis),
127158
bottomText = calendar.get(Calendar.DAY_OF_MONTH).toString().padDuration(),
128159
)
@@ -164,6 +195,7 @@ class RangeTitleMapper @Inject constructor(
164195
data class Wide(val data: Data) : DateSelectorData
165196

166197
data class Data(
198+
val additionalHint: String,
167199
val topText: String,
168200
val bottomText: String,
169201
)

core/src/main/java/com/example/util/simpletimetracker/core/delegates/dateSelector/mapper/DateSelectorMapper.kt

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,15 @@ class DateSelectorMapper @Inject constructor(
5959
if (isCalendar) {
6060
getCalendarViewDataData(
6161
position = position,
62+
isSelected = isSelected(position),
6263
type = type,
6364
)
6465
} else {
6566
mapToViewData(
6667
data = rangeTitleMapper.mapToDateSelectorData(
6768
rangeLength = RangeLength.Day,
6869
position = position,
70+
isSelected = isSelected(position),
6971
startOfDayShift = setupData.startOfDayShift,
7072
firstDayOfWeek = setupData.firstDayOfWeek,
7173
),
@@ -78,6 +80,7 @@ class DateSelectorMapper @Inject constructor(
7880
data = rangeTitleMapper.mapToDateSelectorData(
7981
rangeLength = type.rangeLength,
8082
position = position,
83+
isSelected = isSelected(position),
8184
startOfDayShift = setupData.startOfDayShift,
8285
firstDayOfWeek = setupData.firstDayOfWeek,
8386
),
@@ -98,6 +101,7 @@ class DateSelectorMapper @Inject constructor(
98101

99102
private fun getCalendarViewDataData(
100103
position: Int,
104+
isSelected: Boolean,
101105
type: SetupData.Type.Records,
102106
): DateSelectorRangeViewData {
103107
val calendarRange = calendarToListShiftMapper.mapCalendarToListShift(
@@ -112,7 +116,10 @@ class DateSelectorMapper @Inject constructor(
112116
daysFromToday = position,
113117
startOfDayShift = setupData.startOfDayShift,
114118
)
115-
return rangeTitleMapper.mapToDateSelectorDayOfMonthData(timestamp)
119+
return rangeTitleMapper.mapToDateSelectorDayOfMonthData(
120+
isSelected = isSelected,
121+
timestamp = timestamp,
122+
)
116123
}
117124

118125
return DateSelectorRangeViewData(
@@ -128,7 +135,7 @@ class DateSelectorMapper @Inject constructor(
128135
): DateSelectorDayViewData.CardData {
129136
val isToday = position == 0
130137
val isFuture = position > 0
131-
val isSelected = position == currentSelectedPosition
138+
val isSelected = isSelected(position)
132139

133140
return DateSelectorDayViewData.CardData(
134141
isToday = isToday,
@@ -137,6 +144,12 @@ class DateSelectorMapper @Inject constructor(
137144
)
138145
}
139146

147+
private fun isSelected(
148+
position: Int,
149+
): Boolean {
150+
return position == currentSelectedPosition
151+
}
152+
140153
private fun mapToViewData(
141154
data: RangeTitleMapper.DateSelectorData,
142155
position: Int,
@@ -172,6 +185,7 @@ class DateSelectorMapper @Inject constructor(
172185
// TODO DATE backToToday not working while list is flung
173186
private fun RangeTitleMapper.DateSelectorData.Data.toViewData(): DateSelectorDayViewData.DayMonth {
174187
return DateSelectorDayViewData.DayMonth(
188+
additionalHint = this.additionalHint,
175189
topText = this.topText,
176190
bottomText = this.bottomText,
177191
)

features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/dateSelector/DateSelectorDayAdapterDelegate.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ fun createDateSelectorDayAdapterDelegate(
2525
item as ViewData
2626

2727
setTestTag(root, item)
28+
setAdditionalHint(
29+
dayMonth = item.dayMonth,
30+
additionalText = tvDateSelectorAdditionalHint,
31+
)
2832
setDayMoth(
2933
dayMonth = item.dayMonth,
3034
topText = tvDateSelectorTopText,
@@ -53,6 +57,14 @@ internal fun setTestTag(
5357
root.tag = InfiniteRecyclerAdapter.TEST_TAG + data.position
5458
}
5559

60+
internal fun setAdditionalHint(
61+
dayMonth: ViewData.DayMonth,
62+
additionalText: TextView,
63+
) {
64+
additionalText.text = dayMonth.additionalHint
65+
additionalText.isVisible = dayMonth.additionalHint.isNotEmpty()
66+
}
67+
5668
internal fun setDayMoth(
5769
dayMonth: ViewData.DayMonth,
5870
topText: TextView,
@@ -87,6 +99,7 @@ data class DateSelectorDayViewData(
8799
) : InfiniteRecyclerAdapter.Data {
88100

89101
data class DayMonth(
102+
val additionalHint: String,
90103
val topText: String,
91104
val bottomText: String,
92105
)

features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/dateSelector/DateSelectorRangeAdapterDelegate.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ fun createDateSelectorRangeAdapterDelegate(
1919
item as ViewData
2020

2121
setTestTag(root, item)
22+
setAdditionalHint(
23+
dayMonth = item.dayMonth1,
24+
additionalText = tvDateSelectorAdditionalHint,
25+
)
2226
setDayMoth(
2327
dayMonth = item.dayMonth1,
2428
topText = tvDateSelectorTopText1,

features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/dateSelector/DateSelectorSingleAdapterDelegate.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ fun createDateSelectorSingleAdapterDelegate(
2222
width = ViewGroup.LayoutParams.MATCH_PARENT
2323
}
2424
setTestTag(root, item)
25+
setAdditionalHint(
26+
dayMonth = item.dayMonth,
27+
additionalText = tvDateSelectorAdditionalHint,
28+
)
2529
setDayMoth(
2630
dayMonth = item.dayMonth,
2731
topText = tvDateSelectorTopText,

features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/optionsList/OptionsListAdapterDelegate.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import com.example.util.simpletimetracker.feature_base_adapter.createRecyclerBin
77
import com.example.util.simpletimetracker.feature_views.GoalCheckmarkView
88
import com.example.util.simpletimetracker.feature_views.extension.setMargins
99
import com.example.util.simpletimetracker.feature_views.extension.setOnClickWith
10-
import com.example.util.simpletimetracker.feature_views.extension.setRounded
1110
import com.example.util.simpletimetracker.feature_base_adapter.databinding.ItemOptionsListLayoutBinding as Binding
1211
import com.example.util.simpletimetracker.feature_base_adapter.optionsList.OptionsListViewData as ViewData
1312

features/feature_base_adapter/src/main/res/layout/item_date_day_selector.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,16 @@
7575
app:layout_constraintTop_toBottomOf="@id/tvDateSelectorTopText"
7676
tools:text="31" />
7777

78+
<androidx.appcompat.widget.AppCompatTextView
79+
android:id="@+id/tvDateSelectorAdditionalHint"
80+
style="@style/DateSelectorAdditionalHint"
81+
android:layout_width="wrap_content"
82+
android:layout_height="wrap_content"
83+
android:visibility="gone"
84+
app:layout_constraintEnd_toEndOf="parent"
85+
app:layout_constraintStart_toStartOf="parent"
86+
app:layout_constraintTop_toTopOf="parent"
87+
tools:text="Oct"
88+
tools:visibility="visible" />
89+
7890
</androidx.constraintlayout.widget.ConstraintLayout>

features/feature_base_adapter/src/main/res/layout/item_date_range_selector.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,4 +123,16 @@
123123

124124
</androidx.constraintlayout.widget.ConstraintLayout>
125125

126+
<androidx.appcompat.widget.AppCompatTextView
127+
android:id="@+id/tvDateSelectorAdditionalHint"
128+
style="@style/DateSelectorAdditionalHint"
129+
android:layout_width="wrap_content"
130+
android:layout_height="wrap_content"
131+
android:visibility="gone"
132+
app:layout_constraintEnd_toEndOf="parent"
133+
app:layout_constraintStart_toStartOf="parent"
134+
app:layout_constraintTop_toTopOf="parent"
135+
tools:text="2025"
136+
tools:visibility="visible" />
137+
126138
</androidx.constraintlayout.widget.ConstraintLayout>

features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/cardSize/viewModel/CardSizeViewModel.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class CardSizeViewModel @Inject constructor(
5353
}
5454
}
5555

56+
// TODO remove runBlocking
5657
private var numberOfCards: Int = runBlocking { prefsInteractor.getNumberOfCards() }
5758
private var types: List<RecordType> = emptyList()
5859

0 commit comments

Comments
 (0)