aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/foundation/e/privacycentralapp/widget
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/foundation/e/privacycentralapp/widget')
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/widget/WidgetUI.kt51
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
+)