diff options
Diffstat (limited to 'app/src/main/java/foundation/e/privacycentralapp/widget')
| -rw-r--r-- | app/src/main/java/foundation/e/privacycentralapp/widget/WidgetUI.kt | 51 |
1 files changed, 44 insertions, 7 deletions
diff --git a/app/src/main/java/foundation/e/privacycentralapp/widget/WidgetUI.kt b/app/src/main/java/foundation/e/privacycentralapp/widget/WidgetUI.kt index 443683a..2529f6c 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/widget/WidgetUI.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/widget/WidgetUI.kt @@ -39,7 +39,7 @@ data class State( val isAllTrackersBlocked: Boolean = false, val locationMode: LocationMode = LocationMode.REAL_LOCATION, val internetPrivacyMode: InternetPrivacyMode = InternetPrivacyMode.REAL_IP, - val dayStatistics: List<Int> = emptyList(), + val dayStatistics: List<Pair<Int, Int>> = emptyList(), val activeTrackersCount: Int = 0, ) { val isTrackersDenied get() = isQuickPrivacyEnabled && isAllTrackersBlocked @@ -123,23 +123,33 @@ fun render( setViewVisibility(R.id.state_ip_address_loader, if (loading) View.VISIBLE else View.GONE) - if (state.dayStatistics.all { it == 0 }) { + if (state.dayStatistics.all { it.first == 0 && it.second == 0 }) { setViewVisibility(R.id.graph, View.GONE) setViewVisibility(R.id.graph_legend, View.GONE) setViewVisibility(R.id.graph_empty, View.VISIBLE) + setViewVisibility(R.id.graph_legend_values, View.GONE) } else { setViewVisibility(R.id.graph, View.VISIBLE) setViewVisibility(R.id.graph_legend, View.VISIBLE) setViewVisibility(R.id.graph_empty, View.GONE) + setViewVisibility(R.id.graph_legend_values, View.VISIBLE) val graphHeightPx = 26.dpToPxF(context) val maxValue = - state.dayStatistics.maxOrNull().let { if (it == null || it == 0) 1 else it } + state.dayStatistics + .map { it.first + it.second } + .maxOrNull() + .let { if (it == null || it == 0) 1 else it } val ratio = graphHeightPx / maxValue - state.dayStatistics.zip(barIds).forEach { (value, viewId) -> - val topPadding = graphHeightPx - value * ratio - setViewPadding(viewId, 0, topPadding.toInt(), 0, 0) + state.dayStatistics.forEachIndexed { index, (blocked, leaked) -> + // blocked (the bar below) + val middlePadding = graphHeightPx - blocked * ratio + setViewPadding(blockedBarIds[index], 0, middlePadding.toInt(), 0, 0) + + // leacked (the bar above) + val topPadding = graphHeightPx - (blocked + leaked) * ratio + setViewPadding(leakedBarIds[index], 0, topPadding.toInt(), 0, 0) } setTextViewText( @@ -155,7 +165,7 @@ fun render( appWidgetManager.updateAppWidget(ComponentName(context, Widget::class.java), views) } -private val barIds = listOf( +private val blockedBarIds = listOf( R.id.widget_graph_bar_0, R.id.widget_graph_bar_1, R.id.widget_graph_bar_2, @@ -181,3 +191,30 @@ private val barIds = listOf( R.id.widget_graph_bar_22, R.id.widget_graph_bar_23 ) + +private val leakedBarIds = listOf( + R.id.widget_leaked_graph_bar_0, + R.id.widget_leaked_graph_bar_1, + R.id.widget_leaked_graph_bar_2, + R.id.widget_leaked_graph_bar_3, + R.id.widget_leaked_graph_bar_4, + R.id.widget_leaked_graph_bar_5, + R.id.widget_leaked_graph_bar_6, + R.id.widget_leaked_graph_bar_7, + R.id.widget_leaked_graph_bar_8, + R.id.widget_leaked_graph_bar_9, + R.id.widget_leaked_graph_bar_10, + R.id.widget_leaked_graph_bar_11, + R.id.widget_leaked_graph_bar_12, + R.id.widget_leaked_graph_bar_13, + R.id.widget_leaked_graph_bar_14, + R.id.widget_leaked_graph_bar_15, + R.id.widget_leaked_graph_bar_16, + R.id.widget_leaked_graph_bar_17, + R.id.widget_leaked_graph_bar_18, + R.id.widget_leaked_graph_bar_19, + R.id.widget_leaked_graph_bar_20, + R.id.widget_leaked_graph_bar_21, + R.id.widget_leaked_graph_bar_22, + R.id.widget_leaked_graph_bar_23 +) |
