diff options
| author | Guillaume Jacquart <guillaume.jacquart@hoodbrains.com> | 2022-02-24 07:40:37 +0000 |
|---|---|---|
| committer | Guillaume Jacquart <guillaume.jacquart@hoodbrains.com> | 2022-02-24 07:40:37 +0000 |
| commit | 6abf3b8bbcec463dcea8acbba63872d587ff2779 (patch) | |
| tree | 3aea080c86ba2f51c6cb8ad4302765d1ddf5b3a6 /app/src/main/java/foundation/e/privacycentralapp/features | |
| parent | ac0f57662d5c953f73c0561edc11e0ae8c9a0404 (diff) | |
| parent | 8d669755396a58eb3894144b25631ff7577954be (diff) | |
| download | advanced-privacy-6abf3b8bbcec463dcea8acbba63872d587ff2779.tar.gz | |
Merge branch 'update_graphs' into 'main'
Update graph UI, #4582
See merge request e/privacy-central/privacycentralapp!16
Diffstat (limited to 'app/src/main/java/foundation/e/privacycentralapp/features')
4 files changed, 52 insertions, 65 deletions
diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardFeature.kt b/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardFeature.kt index 5a37246..b434bb4 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardFeature.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardFeature.kt @@ -57,7 +57,8 @@ class DashboardFeature( // val graphData val trackersCount: Int? = null, val activeTrackersCount: Int? = null, - val dayStatistics: List<Int>? = null + val dayStatistics: List<Int>? = null, + val dayLabels: List<String>? = null ) sealed class SingleEvent { @@ -84,6 +85,7 @@ class DashboardFeature( data class IpScramblingModeUpdatedEffect(val mode: InternetPrivacyMode) : Effect() data class TrackersStatisticsUpdatedEffect( val dayStatistics: List<Int>, + val dayLabels: List<String>, val dayTrackersCount: Int, val trackersCount: Int ) : Effect() @@ -114,6 +116,7 @@ class DashboardFeature( is Effect.IpScramblingModeUpdatedEffect -> state.copy(internetPrivacyMode = effect.mode) is Effect.TrackersStatisticsUpdatedEffect -> state.copy( dayStatistics = effect.dayStatistics, + dayLabels = effect.dayLabels, activeTrackersCount = effect.dayTrackersCount, trackersCount = effect.trackersCount ) @@ -147,11 +150,12 @@ class DashboardFeature( flowOf<Effect>( // trackersStatisticsUseCase.listenDayStatistics().map { trackersStatisticsUseCase.getDayStatistics().let { - (dayStatistics, dayTrackersCount, trackersCount) -> + (dayStatistics, trackersCount) -> Effect.TrackersStatisticsUpdatedEffect( - dayStatistics, - dayTrackersCount, - trackersCount + dayStatistics = dayStatistics.calls, + dayLabels = dayStatistics.periods, + dayTrackersCount = dayStatistics.trackersCount, + trackersCount = trackersCount ) } ), @@ -171,11 +175,12 @@ class DashboardFeature( Action.FetchStatistics -> flowOf<Effect>( // trackersStatisticsUseCase.listenDayStatistics().map { trackersStatisticsUseCase.getDayStatistics().let { - (dayStatistics, dayTrackersCount, trackersCount) -> + (dayStatistics, trackersCount) -> Effect.TrackersStatisticsUpdatedEffect( - dayStatistics, - dayTrackersCount, - trackersCount + dayStatistics = dayStatistics.calls, + dayLabels = dayStatistics.periods, + dayTrackersCount = dayStatistics.trackersCount, + trackersCount = trackersCount ) } ) diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardFragment.kt b/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardFragment.kt index 441f3d6..e60243d 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardFragment.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/features/dashboard/DashboardFragment.kt @@ -29,9 +29,8 @@ import foundation.e.flowmvi.MVIView import foundation.e.privacycentralapp.DependencyContainer import foundation.e.privacycentralapp.PrivacyCentralApplication import foundation.e.privacycentralapp.R +import foundation.e.privacycentralapp.common.GraphHolder import foundation.e.privacycentralapp.common.NavToolbarFragment -import foundation.e.privacycentralapp.common.customizeBarChart -import foundation.e.privacycentralapp.common.updateGraphData import foundation.e.privacycentralapp.databinding.FragmentDashboardBinding import foundation.e.privacycentralapp.domain.entities.InternetPrivacyMode import foundation.e.privacycentralapp.domain.entities.LocationMode @@ -55,6 +54,7 @@ class DashboardFragment : viewModelProviderFactoryOf { dependencyContainer.dashBoardViewModelFactory.create() } } + private lateinit var graphHolder: GraphHolder private lateinit var binding: FragmentDashboardBinding override fun onCreate(savedInstanceState: Bundle?) { @@ -105,7 +105,7 @@ class DashboardFragment : super.onViewCreated(view, savedInstanceState) binding = FragmentDashboardBinding.bind(view) - customizeBarChart(binding.graph) + graphHolder = GraphHolder(binding.graph, requireContext()) binding.togglePrivacyCentral.setOnClickListener { viewModel.submitAction(DashboardFeature.Action.TogglePrivacyAction) @@ -205,9 +205,8 @@ class DashboardFragment : ) ) - state.dayStatistics?.let { - updateGraphData(it, binding.graph, getColor(requireContext(), R.color.e_blue2)) - } + state.dayStatistics?.let { graphHolder.data = it } + state.dayLabels?.let { graphHolder.labels = it } binding.graphLegend.text = getString(R.string.dashboard_graph_trackers_legend, state.activeTrackersCount?.toString() ?: "No") diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/trackers/TrackersFeature.kt b/app/src/main/java/foundation/e/privacycentralapp/features/trackers/TrackersFeature.kt index d061c4a..f38e50f 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/features/trackers/TrackersFeature.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/features/trackers/TrackersFeature.kt @@ -24,6 +24,7 @@ import foundation.e.flowmvi.SingleEventProducer import foundation.e.flowmvi.feature.BaseFeature import foundation.e.privacycentralapp.domain.usecases.AppListUseCase import foundation.e.privacycentralapp.domain.usecases.GetQuickPrivacyStateUseCase +import foundation.e.privacycentralapp.domain.usecases.TrackersPeriodicStatistics import foundation.e.privacycentralapp.domain.usecases.TrackersStatisticsUseCase import foundation.e.privacymodules.permissions.data.ApplicationDescription import foundation.e.privacymodules.trackers.Tracker @@ -49,16 +50,11 @@ class TrackersFeature( singleEventProducer ) { data class State( - val dayStatistics: List<Int>? = null, - val dayTrackersCount: Int? = null, - val monthStatistics: List<Int>? = null, - val monthTrackersCount: Int? = null, - val yearStatistics: List<Int>? = null, - val yearTrackersCount: Int? = null, + val dayStatistics: TrackersPeriodicStatistics? = null, + val monthStatistics: TrackersPeriodicStatistics? = null, + val yearStatistics: TrackersPeriodicStatistics? = null, val apps: List<ApplicationDescription>? = null, - - val trackers: List<Tracker> = emptyList(), - val currentSelectedTracker: Tracker? = null + val trackers: List<Tracker> = emptyList() ) sealed class SingleEvent { @@ -75,12 +71,9 @@ class TrackersFeature( sealed class Effect { data class TrackersStatisticsLoadedEffect( - val dayStatistics: List<Int>? = null, - val dayTrackersCount: Int? = null, - val monthStatistics: List<Int>? = null, - val monthTrackersCount: Int? = null, - val yearStatistics: List<Int>? = null, - val yearTrackersCount: Int? = null + val dayStatistics: TrackersPeriodicStatistics? = null, + val monthStatistics: TrackersPeriodicStatistics? = null, + val yearStatistics: TrackersPeriodicStatistics? = null ) : Effect() data class AvailableAppsListEffect( val apps: List<ApplicationDescription> @@ -104,11 +97,8 @@ class TrackersFeature( when (effect) { is Effect.TrackersStatisticsLoadedEffect -> state.copy( dayStatistics = effect.dayStatistics, - dayTrackersCount = effect.dayTrackersCount, monthStatistics = effect.monthStatistics, - monthTrackersCount = effect.monthTrackersCount, yearStatistics = effect.yearStatistics, - yearTrackersCount = effect.yearTrackersCount ) is Effect.AvailableAppsListEffect -> state.copy(apps = effect.apps) @@ -124,12 +114,9 @@ class TrackersFeature( .let { (day, month, year) -> emit( Effect.TrackersStatisticsLoadedEffect( - dayStatistics = day.first, - dayTrackersCount = day.second, - monthStatistics = month.first, - monthTrackersCount = month.second, - yearStatistics = year.first, - yearTrackersCount = year.second + dayStatistics = day, + monthStatistics = month, + yearStatistics = year ) ) } @@ -154,12 +141,9 @@ class TrackersFeature( .let { (day, month, year) -> emit( Effect.TrackersStatisticsLoadedEffect( - dayStatistics = day.first, - dayTrackersCount = day.second, - monthStatistics = month.first, - monthTrackersCount = month.second, - yearStatistics = year.first, - yearTrackersCount = year.second + dayStatistics = day, + monthStatistics = month, + yearStatistics = year, ) ) } diff --git a/app/src/main/java/foundation/e/privacycentralapp/features/trackers/TrackersFragment.kt b/app/src/main/java/foundation/e/privacycentralapp/features/trackers/TrackersFragment.kt index c017abd..088787c 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/features/trackers/TrackersFragment.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/features/trackers/TrackersFragment.kt @@ -20,7 +20,6 @@ package foundation.e.privacycentralapp.features.trackers import android.os.Bundle import android.view.View import android.widget.Toast -import androidx.core.content.ContextCompat import androidx.fragment.app.add import androidx.fragment.app.commit import androidx.fragment.app.viewModels @@ -31,11 +30,11 @@ import foundation.e.privacycentralapp.DependencyContainer import foundation.e.privacycentralapp.PrivacyCentralApplication import foundation.e.privacycentralapp.R import foundation.e.privacycentralapp.common.AppsAdapter +import foundation.e.privacycentralapp.common.GraphHolder import foundation.e.privacycentralapp.common.NavToolbarFragment -import foundation.e.privacycentralapp.common.customizeBarChart -import foundation.e.privacycentralapp.common.updateGraphData import foundation.e.privacycentralapp.databinding.FragmentTrackersBinding import foundation.e.privacycentralapp.databinding.TrackersItemGraphBinding +import foundation.e.privacycentralapp.domain.usecases.TrackersPeriodicStatistics import foundation.e.privacycentralapp.extensions.viewModelProviderFactoryOf import foundation.e.privacycentralapp.features.trackers.apptrackers.AppTrackersFragment import kotlinx.coroutines.flow.Flow @@ -54,6 +53,9 @@ class TrackersFragment : } private lateinit var binding: FragmentTrackersBinding + private lateinit var dayGraphHolder: GraphHolder + private lateinit var monthGraphHolder: GraphHolder + private lateinit var yearGraphHolder: GraphHolder override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -95,9 +97,9 @@ class TrackersFragment : binding = FragmentTrackersBinding.bind(view) - listOf(binding.graphDay, binding.graphMonth, binding.graphYear).forEach { - customizeBarChart(it.graph) - } + dayGraphHolder = GraphHolder(binding.graphDay.graph, requireContext(), false) + monthGraphHolder = GraphHolder(binding.graphMonth.graph, requireContext(), false) + yearGraphHolder = GraphHolder(binding.graphYear.graph, requireContext(), false) binding.apps.apply { layoutManager = LinearLayoutManager(requireContext()) @@ -118,17 +120,9 @@ class TrackersFragment : override fun getTitle() = getString(R.string.trackers_title) override fun render(state: TrackersFeature.State) { - if (state.dayStatistics != null && state.dayTrackersCount != null) { - renderGraph(state.dayTrackersCount, state.dayStatistics, binding.graphDay) - } - - if (state.monthStatistics != null && state.monthTrackersCount != null) { - renderGraph(state.monthTrackersCount, state.monthStatistics, binding.graphMonth) - } - - if (state.yearStatistics != null && state.yearTrackersCount != null) { - renderGraph(state.yearTrackersCount, state.yearStatistics, binding.graphYear) - } + state.dayStatistics?.let { renderGraph(it, dayGraphHolder, binding.graphDay) } + state.monthStatistics?.let { renderGraph(it, monthGraphHolder, binding.graphMonth) } + state.yearStatistics?.let { renderGraph(it, yearGraphHolder, binding.graphYear) } state.apps?.let { binding.apps.post { @@ -137,9 +131,14 @@ class TrackersFragment : } } - private fun renderGraph(trackersCount: Int, data: List<Int>, graphBinding: TrackersItemGraphBinding) { - updateGraphData(data, graphBinding.graph, ContextCompat.getColor(requireContext(), R.color.e_blue2)) - graphBinding.trackersCountLabel.text = getString(R.string.trackers_count_label, trackersCount) + private fun renderGraph( + statistics: TrackersPeriodicStatistics, + graphHolder: GraphHolder, + graphBinding: TrackersItemGraphBinding + ) { + graphHolder.data = statistics.calls + graphHolder.labels = statistics.periods + graphBinding.trackersCountLabel.text = getString(R.string.trackers_count_label, statistics.trackersCount) } override fun actions(): Flow<TrackersFeature.Action> = viewModel.actions |
