Skip to content

Commit 020e092

Browse files
committed
add selectable stats to data distribution pie chart
1 parent 8560e7a commit 020e092

File tree

27 files changed

+275
-117
lines changed

27 files changed

+275
-117
lines changed

core/src/main/java/com/example/util/simpletimetracker/core/interactor/StatisticsChartViewDataInteractor.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,20 +82,23 @@ class StatisticsChartViewDataInteractor @Inject constructor(
8282
return when {
8383
statistics.id == UNTRACKED_ITEM_ID -> {
8484
PiePortion(
85+
id = statistics.id,
8586
value = statistics.data.duration,
8687
colorInt = colorMapper.toUntrackedColor(isDarkTheme),
8788
iconId = RecordTypeIcon.Image(R.drawable.unknown),
8889
)
8990
}
9091
statistics.id == UNCATEGORIZED_ITEM_ID -> {
9192
PiePortion(
93+
id = statistics.id,
9294
value = statistics.data.duration,
9395
colorInt = colorMapper.toUntrackedColor(isDarkTheme),
9496
iconId = RecordTypeIcon.Image(R.drawable.untagged),
9597
)
9698
}
9799
dataHolder != null -> {
98100
PiePortion(
101+
id = statistics.id,
99102
value = statistics.data.duration,
100103
colorInt = dataHolder.color
101104
.let { colorMapper.mapToColorInt(it, isDarkTheme) },

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

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,25 @@
55
android:layout_width="match_parent"
66
android:layout_height="wrap_content">
77

8-
<androidx.appcompat.widget.AppCompatImageView
8+
<androidx.cardview.widget.CardView
99
android:id="@+id/ivRecordSelectedItemCheck"
10-
android:layout_width="wrap_content"
11-
android:layout_height="match_parent"
10+
android:layout_width="24dp"
11+
android:layout_height="0dp"
1212
android:layout_marginStart="4dp"
13-
android:tint="?colorSecondary"
13+
app:cardBackgroundColor="?colorAccent"
14+
app:cardCornerRadius="@dimen/record_type_card_corner_radius"
15+
app:cardElevation="@dimen/record_type_card_elevation"
16+
app:cardPreventCornerOverlap="false"
17+
app:cardUseCompatPadding="true"
1418
app:layout_constraintBottom_toBottomOf="parent"
1519
app:layout_constraintStart_toStartOf="parent"
16-
app:layout_constraintTop_toTopOf="parent"
17-
app:srcCompat="@drawable/record_type_check_unmarked" />
18-
19-
<androidx.appcompat.widget.AppCompatImageView
20-
android:id="@+id/ivRecordSelectedItemCheckmark"
21-
android:layout_width="0dp"
22-
android:layout_height="0dp"
23-
android:tint="?appBackgroundColor"
24-
app:layout_constraintBottom_toBottomOf="@id/ivRecordSelectedItemCheck"
25-
app:layout_constraintEnd_toEndOf="@id/ivRecordSelectedItemCheck"
26-
app:layout_constraintStart_toStartOf="@id/ivRecordSelectedItemCheck"
27-
app:layout_constraintTop_toTopOf="@id/ivRecordSelectedItemCheck"
28-
app:srcCompat="@drawable/record_type_check_mark" />
20+
app:layout_constraintTop_toTopOf="parent" />
2921

3022
<com.example.util.simpletimetracker.feature_views.RecordView
3123
android:id="@+id/viewRecordItem"
3224
android:layout_width="0dp"
3325
android:layout_height="wrap_content"
26+
android:layout_marginStart="-4dp"
3427
android:layout_marginEnd="4dp"
3528
app:cardElevation="@dimen/record_type_card_elevation"
3629
app:itemTagColor="@color/white_alpha_60"

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

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,26 @@
55
android:layout_width="match_parent"
66
android:layout_height="wrap_content">
77

8-
<androidx.appcompat.widget.AppCompatImageView
8+
<androidx.cardview.widget.CardView
99
android:id="@+id/ivRecordSelectedItemCheck"
10-
android:layout_width="wrap_content"
11-
android:layout_height="match_parent"
10+
android:layout_width="24dp"
11+
android:layout_height="0dp"
1212
android:layout_marginStart="4dp"
13-
android:tint="?colorSecondary"
13+
app:cardBackgroundColor="?colorAccent"
14+
app:cardCornerRadius="@dimen/record_type_card_corner_radius"
15+
app:cardElevation="@dimen/record_type_card_elevation"
16+
app:cardPreventCornerOverlap="false"
17+
app:cardUseCompatPadding="true"
1418
app:layout_constraintBottom_toBottomOf="parent"
1519
app:layout_constraintStart_toStartOf="parent"
16-
app:layout_constraintTop_toTopOf="parent"
17-
app:srcCompat="@drawable/record_type_check_unmarked" />
18-
19-
<androidx.appcompat.widget.AppCompatImageView
20-
android:id="@+id/ivRecordSelectedItemCheckmark"
21-
android:layout_width="0dp"
22-
android:layout_height="0dp"
23-
android:tint="?appBackgroundColor"
24-
app:layout_constraintBottom_toBottomOf="@id/ivRecordSelectedItemCheck"
25-
app:layout_constraintEnd_toEndOf="@id/ivRecordSelectedItemCheck"
26-
app:layout_constraintStart_toStartOf="@id/ivRecordSelectedItemCheck"
27-
app:layout_constraintTop_toTopOf="@id/ivRecordSelectedItemCheck"
28-
app:srcCompat="@drawable/record_type_check_mark" />
20+
app:layout_constraintTop_toTopOf="parent" />
2921

3022
<com.example.util.simpletimetracker.feature_views.RunningRecordView
3123
android:id="@+id/viewRunningRecordItem"
3224
android:layout_width="0dp"
3325
android:layout_height="wrap_content"
3426
android:layout_marginEnd="4dp"
27+
android:layout_marginStart="-4dp"
3528
app:cardElevation="@dimen/record_type_card_elevation"
3629
app:itemTagColor="@color/white_alpha_60"
3730
app:layout_constraintEnd_toEndOf="parent"

features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/colorSelection/customView/ColorSelectionView.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ import android.util.AttributeSet
1212
import android.view.MotionEvent
1313
import android.view.View
1414
import androidx.annotation.FloatRange
15-
import com.example.util.simpletimetracker.core.utils.SingleTapDetector
16-
import com.example.util.simpletimetracker.core.utils.SwipeDetector
15+
import com.example.util.simpletimetracker.feature_views.SingleTapDetector
16+
import com.example.util.simpletimetracker.feature_views.SwipeDetector
1717
import com.example.util.simpletimetracker.feature_dialogs.R
1818

1919
class ColorSelectionView @JvmOverloads constructor(

features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/duration/customView/DurationView.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import android.util.AttributeSet
1111
import android.view.MotionEvent
1212
import android.view.View
1313
import androidx.core.animation.doOnEnd
14-
import com.example.util.simpletimetracker.core.utils.SwipeDetector
14+
import com.example.util.simpletimetracker.feature_views.SwipeDetector
1515
import com.example.util.simpletimetracker.domain.extension.orZero
1616
import com.example.util.simpletimetracker.domain.extension.toDuration
1717
import com.example.util.simpletimetracker.feature_dialogs.R

features/feature_records/src/main/java/com/example/util/simpletimetracker/feature_records/customView/RecordsCalendarView.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ import androidx.core.content.withStyledAttributes
2424
import androidx.core.graphics.drawable.toDrawable
2525
import androidx.core.graphics.withTranslation
2626
import com.example.util.simpletimetracker.core.utils.CalendarIntersectionCalculator
27-
import com.example.util.simpletimetracker.core.utils.ScaleDetector
28-
import com.example.util.simpletimetracker.core.utils.SingleTapDetector
29-
import com.example.util.simpletimetracker.core.utils.SwipeDetector
30-
import com.example.util.simpletimetracker.core.utils.isHorizontal
27+
import com.example.util.simpletimetracker.feature_views.ScaleDetector
28+
import com.example.util.simpletimetracker.feature_views.SingleTapDetector
29+
import com.example.util.simpletimetracker.feature_views.SwipeDetector
30+
import com.example.util.simpletimetracker.feature_views.isHorizontal
3131
import com.example.util.simpletimetracker.domain.extension.orZero
3232
import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
3333
import com.example.util.simpletimetracker.feature_base_adapter.record.RecordViewData

features/feature_statistics/src/main/java/com/example/util/simpletimetracker/feature_statistics/adapter/StatisticsChartAdapterDelegate.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ fun createStatisticsChartAdapterDelegate(
1515

1616
chartStatisticsItem.setSegments(
1717
data = item.data,
18+
selectedPiePosition = null,
19+
piesAreClickable = false,
1820
animateOpen = item.animatedOpen,
1921
)
2022
chartStatisticsItem.setAttachedListener(onChartAttached)

features/feature_statistics/src/main/java/com/example/util/simpletimetracker/feature_statistics/interactor/StatisticsViewDataInteractor.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ class StatisticsViewDataInteractor @Inject constructor(
9393
val data = it
9494
.takeUnless { it.isEmpty() }
9595
?: PiePortion(
96+
id = 0,
9697
value = 0,
9798
colorInt = colorMapper.toUntrackedColor(isDarkTheme),
9899
).let(::listOf)

features/feature_statistics/src/main/res/layout/item_statistics_chart_layout.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
app:layout_constraintStart_toStartOf="parent"
2323
app:layout_constraintTop_toTopOf="parent"
2424
app:layout_constraintWidth_percent="0.55"
25+
app:selectedPieColor="?appContrastColor"
2526
tools:segmentCount="5" />
2627

2728
</androidx.constraintlayout.widget.ConstraintLayout>

features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/adapter/StatisticsDetailPieChartAdapterDelegate.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ import com.example.util.simpletimetracker.feature_views.pieChart.PiePortion
88
import com.example.util.simpletimetracker.feature_statistics_detail.adapter.StatisticsDetailPieChartViewData as ViewData
99
import com.example.util.simpletimetracker.feature_statistics_detail.databinding.StatisticsDetailPieChartItemBinding as Binding
1010

11-
fun createStatisticsDetailPieChartAdapterDelegate() = createRecyclerBindingAdapterDelegate<ViewData, Binding>(
11+
fun createStatisticsDetailPieChartAdapterDelegate(
12+
onPieClick: (StatisticsDetailBlock, Long?) -> Unit,
13+
) = createRecyclerBindingAdapterDelegate<ViewData, Binding>(
1214
Binding::inflate,
1315
) { binding, item, _ ->
1416

@@ -19,14 +21,18 @@ fun createStatisticsDetailPieChartAdapterDelegate() = createRecyclerBindingAdapt
1921
resetAnimation()
2022
setSegments(
2123
data = item.data,
24+
selectedPiePosition = item.selectedPiePosition,
25+
piesAreClickable = true,
2226
animateOpen = item.animate.getValue().orFalse(),
2327
)
28+
setOnPieClickListener { onPieClick(item.block, it) }
2429
}
2530
}
2631

2732
data class StatisticsDetailPieChartViewData(
2833
val block: StatisticsDetailBlock,
2934
val data: List<PiePortion>,
35+
val selectedPiePosition: Int?,
3036
val animate: OneShotValue<Boolean>,
3137
) : ViewHolderType {
3238

0 commit comments

Comments
 (0)