Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit da993549 authored by Guillaume Jacquart's avatar Guillaume Jacquart
Browse files

feat(widget): #1965 Split “number + leaks” in two lines when needed

parent acc277cc
Loading
Loading
Loading
Loading
Loading
+28 −13
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@ import android.graphics.drawable.Icon
import android.text.Spannable
import android.text.SpannableString
import android.text.style.ForegroundColorSpan
import android.view.View.GONE
import android.view.View.VISIBLE
import android.widget.RemoteViews
import androidx.annotation.StringRes
import foundation.e.advancedprivacy.R
@@ -77,15 +79,21 @@ fun render(context: Context, state: State, appWidgetManager: AppWidgetManager, w
        setOnClickPendingIntent(R.id.settings_btn, openPIntent)
        setOnClickPendingIntent(R.id.widget_container, openPIntent)

        val leaksLabel = context.getString(R.string.widget_data_blocked_trackers_secondary)
        val countStr = numberFormatter.format(state.blockedCallsCount).toString()
        if (countStr.length > DATA_BLOCKED_TWO_LINES_DIGIT_THRESHOLD &&
            (countStr.length + leaksLabel.length) > DATA_BLOCKED_TWO_LINES_GLOBAL_THRESHOLD
        ) {
            setTextViewText(R.id.data_blocked_trackers_number, countStr)
            setTextViewText(R.id.data_blocked_trackers_secondary, leaksLabel)
            setViewVisibility(R.id.data_blocked_trackers_number, VISIBLE)
        } else {
            setViewVisibility(R.id.data_blocked_trackers_number, GONE)
            setTextViewText(
                R.id.data_blocked_trackers_secondary,
            buildDataSecondarySpan(
                context,
                isDarkText,
                numberFormatter.format(state.blockedCallsCount).toString(),
                R.string.widget_data_blocked_trackers_secondary
            )
                buildDataSecondarySpan(context, isDarkText, countStr, R.string.widget_data_blocked_trackers_secondary)
            )
        }

        setTextViewText(
            R.id.data_apps_secondary,
@@ -154,6 +162,10 @@ private const val REQUEST_CODE_TOGGLE_LOCATION = 5
private const val REQUEST_CODE_TOGGLE_IPSCRAMBLING = 6

private const val NARROW_MAXWIDTH_DP_BREAKPOINT = 240

private const val DATA_BLOCKED_TWO_LINES_DIGIT_THRESHOLD = 3
private const val DATA_BLOCKED_TWO_LINES_GLOBAL_THRESHOLD = 14

private fun buildLayout(context: Context, appWidgetManager: AppWidgetManager, widgetId: Int): RemoteViews {
    val width = appWidgetManager.getAppWidgetOptions(widgetId)
        .getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH)
@@ -182,15 +194,13 @@ private fun applyDarkText(context: Context, isDarkText: Boolean, views: RemoteVi
        listOf(
            R.id.widget_title,
            R.id.data_blocked_trackers_primary,
            R.id.data_blocked_trackers_number,
            R.id.data_apps_primary,
            R.id.trackers_control_label,
            R.id.fake_location_label,
            R.id.ipscrambling_label
        ).forEach {
            setTextColor(
                it,
                primaryColor
            )
            setTextColor(it, primaryColor)
        }

        listOf(
@@ -207,7 +217,12 @@ private fun applyDarkText(context: Context, isDarkText: Boolean, views: RemoteVi
        // FFFFFF %60
        val secondaryColor = context.getColor(if (isDarkText) R.color.on_surface_disabled_light else R.color.on_primary_medium_emphasis)

        setTextColor(R.id.period_label, secondaryColor)
        listOf(
            R.id.period_label,
            R.id.data_blocked_trackers_secondary
        ).forEach { id ->
            setTextColor(id, secondaryColor)
        }
    }
}

+15 −4
Original line number Diff line number Diff line
<!--
  ~ Copyright (C) 2023 MURENA SAS
  ~ Copyright (C) 2023-2024 MURENA SAS
  ~ Copyright (C) 2022 E FOUNDATION
  ~
  ~ This program is free software: you can redistribute it and/or modify
@@ -73,11 +73,12 @@
        <LinearLayout
            android:id="@+id/data_blocked_trackers"
            android:layout_width="0dp"
            android:layout_height="54dp"
            android:layout_height="60dp"
            android:layout_weight="1"
            android:orientation="horizontal"
            android:background="@drawable/bg_stroke_rounded_8"
            android:gravity="center"
            android:paddingHorizontal="2dp"
            >
            <!-- app:tint won't work, but tint an Icon() in render() will -->
            <ImageView
@@ -104,6 +105,16 @@
                    android:textAllCaps="true"
                    android:text="@string/widget_data_blocked_trackers_primary"
                    />
                <TextView
                    android:id="@+id/data_blocked_trackers_number"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="14sp"
                    android:lineHeight="22sp"
                    android:textFontWeight="400"
                    android:textColor="@color/on_primary_high_emphasis"
                    tools:text="2000"
                    />
                <TextView
                    android:id="@+id/data_blocked_trackers_secondary"
                    android:layout_width="wrap_content"
@@ -111,7 +122,7 @@
                    android:textSize="14sp"
                    android:lineHeight="20sp"
                    android:textFontWeight="400"
                    android:textColor="@color/on_primary_high_emphasis"
                    android:textColor="@color/on_primary_medium_emphasis"
                    tools:text="@string/widget_data_blocked_trackers_secondary"
                    />
            </LinearLayout>
@@ -119,7 +130,7 @@
        <LinearLayout
            android:id="@+id/data_apps"
            android:layout_width="0dp"
            android:layout_height="54dp"
            android:layout_height="60dp"
            android:layout_weight="1"
            android:orientation="horizontal"
            android:background="@drawable/bg_stroke_rounded_8"