Loading app/src/main/java/foundation/e/advancedprivacy/widget/WidgetUI.kt +28 −13 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, Loading Loading @@ -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) Loading Loading @@ -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( Loading @@ -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) } } } Loading app/src/main/res/layout/widget_large.xml +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 Loading Loading @@ -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 Loading @@ -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" Loading @@ -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> Loading @@ -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" Loading Loading
app/src/main/java/foundation/e/advancedprivacy/widget/WidgetUI.kt +28 −13 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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, Loading Loading @@ -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) Loading Loading @@ -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( Loading @@ -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) } } } Loading
app/src/main/res/layout/widget_large.xml +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 Loading Loading @@ -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 Loading @@ -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" Loading @@ -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> Loading @@ -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" Loading