From bdf9198bb069f2ab9619cb4d3a85f5c2cbf9f0cd Mon Sep 17 00:00:00 2001 From: jacquarg Date: Tue, 5 Apr 2022 18:53:40 +0200 Subject: 5217 - Display blocked trackers, 5216 : add leaks in tooltips --- .../e/privacycentralapp/common/GraphHolder.kt | 67 ++++++++++++++++++---- .../privacycentralapp/common/NavToolbarFragment.kt | 1 - 2 files changed, 55 insertions(+), 13 deletions(-) (limited to 'app/src/main/java/foundation/e/privacycentralapp/common') diff --git a/app/src/main/java/foundation/e/privacycentralapp/common/GraphHolder.kt b/app/src/main/java/foundation/e/privacycentralapp/common/GraphHolder.kt index 929d838..aba3a95 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/common/GraphHolder.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/common/GraphHolder.kt @@ -19,9 +19,14 @@ package foundation.e.privacycentralapp.common import android.content.Context import android.graphics.Canvas +import android.text.Spannable +import android.text.SpannableStringBuilder +import android.text.style.DynamicDrawableSpan +import android.text.style.ImageSpan import android.view.View import android.widget.TextView import androidx.core.content.ContextCompat +import androidx.core.text.toSpannable import androidx.core.view.isVisible import com.github.mikephil.charting.charts.BarChart import com.github.mikephil.charting.components.MarkerView @@ -37,7 +42,7 @@ import foundation.e.privacycentralapp.R import foundation.e.privacycentralapp.extensions.dpToPxF class GraphHolder(val barChart: BarChart, val context: Context, val isMarkerAbove: Boolean = true) { - var data = emptyList() + var data = emptyList>() set(value) { field = value refreshDataSet() @@ -80,7 +85,17 @@ class GraphHolder(val barChart: BarChart, val context: Context, val isMarkerAbov setOnChartValueSelectedListener(object : OnChartValueSelectedListener { override fun onValueSelected(e: Entry?, h: Highlight?) { - h?.let { periodMarker.setLabel(labels.getOrNull(it.x.toInt())) } + h?.let { + val index = it.x.toInt() + if (index > 0 && + index < labels.size && + index < this@GraphHolder.data.size + ) { + val period = labels[index] + val (blocked, leaked) = this@GraphHolder.data[index] + periodMarker.setLabel(period, blocked, leaked) + } + } isHighlighted = true refreshDataSet() } @@ -95,18 +110,31 @@ class GraphHolder(val barChart: BarChart, val context: Context, val isMarkerAbov private fun refreshDataSet() { val trackersDataSet = BarDataSet( - data.mapIndexed { index, value -> BarEntry(index.toFloat(), value.toFloat()) }, + data.mapIndexed { index, value -> + BarEntry( + index.toFloat(), + floatArrayOf(value.first.toFloat(), value.second.toFloat()) + ) + }, "" ).apply { - color = ContextCompat.getColor( - context, - if (isHighlighted) R.color.blue_unselected else R.color.accent + + val blockedColor = ContextCompat.getColor(context, R.color.accent) + val leakedColor = ContextCompat.getColor(context, R.color.red_off) + + // ColorUtils.setAlphaComponent() + colors = listOf( + blockedColor, + // if (isHighlighted) R.color.blue_unselected else R.color.accent + leakedColor ) + setDrawValues(false) - highLightColor = ContextCompat.getColor( - context, R.color.accent - ) - highLightAlpha = 255 + + // highLightColor = ContextCompat.getColor( + // context, R.color.accent + // ) + // highLightAlpha = 255 } barChart.data = BarData(trackersDataSet) @@ -162,8 +190,23 @@ class PeriodMarkerView(context: Context, private val isMarkerAbove: Boolean = tr } } - fun setLabel(label: String?) { - findViewById(R.id.label).text = label + fun setLabel(period: String, blocked: Int, leaked: Int) { + val span = SpannableStringBuilder(period) + span.append(": $blocked ") + span.setSpan( + ImageSpan(context, R.drawable.ic_legend_blocked, DynamicDrawableSpan.ALIGN_BASELINE), + span.length - 1, + span.length, + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE + ) + span.append(" $leaked ") + span.setSpan( + ImageSpan(context, R.drawable.ic_legend_leaked, DynamicDrawableSpan.ALIGN_BASELINE), + span.length - 1, + span.length, + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE + ) + findViewById(R.id.label).text = span.toSpannable() } override fun refreshContent(e: Entry?, highlight: Highlight?) { diff --git a/app/src/main/java/foundation/e/privacycentralapp/common/NavToolbarFragment.kt b/app/src/main/java/foundation/e/privacycentralapp/common/NavToolbarFragment.kt index c28c871..6955405 100644 --- a/app/src/main/java/foundation/e/privacycentralapp/common/NavToolbarFragment.kt +++ b/app/src/main/java/foundation/e/privacycentralapp/common/NavToolbarFragment.kt @@ -19,7 +19,6 @@ package foundation.e.privacycentralapp.common import androidx.annotation.LayoutRes import com.google.android.material.appbar.MaterialToolbar -import foundation.e.privacycentralapp.R abstract class NavToolbarFragment(@LayoutRes contentLayoutId: Int) : ToolbarFragment(contentLayoutId) { -- cgit v1.2.3