diff --git a/app/src/main/java/eu/faircode/netguard/ActivityMain.java b/app/src/main/java/eu/faircode/netguard/ActivityMain.java
index af7bd1744..30e9826dc 100644
--- a/app/src/main/java/eu/faircode/netguard/ActivityMain.java
+++ b/app/src/main/java/eu/faircode/netguard/ActivityMain.java
@@ -246,6 +246,8 @@ protected void onCreate(Bundle savedInstanceState) {
ivQueue = actionView.findViewById(R.id.ivQueue);
swEnabled = actionView.findViewById(R.id.swEnabled);
ivMetered = actionView.findViewById(R.id.ivMetered);
+ ivQueue.setContentDescription(getString(R.string.msg_queue));
+ ivMetered.setContentDescription(getString(R.string.msg_metered));
// Get daily changing title
if (!Util.isPlayStoreInstall())
diff --git a/app/src/main/java/eu/faircode/netguard/AdapterAccess.java b/app/src/main/java/eu/faircode/netguard/AdapterAccess.java
index eb10e16c6..f89ce90d2 100644
--- a/app/src/main/java/eu/faircode/netguard/AdapterAccess.java
+++ b/app/src/main/java/eu/faircode/netguard/AdapterAccess.java
@@ -121,10 +121,12 @@ public void bindView(final View view, final Context context, final Cursor cursor
// Set values
tvTime.setText(new SimpleDateFormat("dd HH:mm").format(time));
- if (block < 0)
+ if (block < 0) {
ivBlock.setImageDrawable(null);
- else {
+ ivBlock.setContentDescription(null);
+ } else {
ivBlock.setImageResource(block > 0 ? R.drawable.host_blocked : R.drawable.host_allowed);
+ ivBlock.setContentDescription(context.getString(block > 0 ? R.string.blocked : R.string.allowed));
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
Drawable wrap = DrawableCompat.wrap(ivBlock.getDrawable());
DrawableCompat.setTint(wrap, block > 0 ? colorOff : colorOn);
diff --git a/app/src/main/java/eu/faircode/netguard/WidgetMain.java b/app/src/main/java/eu/faircode/netguard/WidgetMain.java
index 3b7c84e71..8c3c22f0a 100644
--- a/app/src/main/java/eu/faircode/netguard/WidgetMain.java
+++ b/app/src/main/java/eu/faircode/netguard/WidgetMain.java
@@ -55,6 +55,9 @@ private static void update(int[] appWidgetIds, AppWidgetManager appWidgetManager
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widgetmain);
views.setOnClickPendingIntent(R.id.ivEnabled, pi);
views.setImageViewResource(R.id.ivEnabled, enabled ? R.drawable.ic_rocket_colour : R.drawable.ic_rocket_white_60);
+ views.setContentDescription(R.id.ivEnabled, context.getString(
+ enabled ? R.string.widget_toggle_disable_description
+ : R.string.widget_toggle_enable_description));
appWidgetManager.updateAppWidget(id, views);
}
} catch (Throwable ex) {
diff --git a/app/src/main/java/net/kollnig/missioncontrol/InsightsHeaderAdapter.java b/app/src/main/java/net/kollnig/missioncontrol/InsightsHeaderAdapter.java
index b11931f1b..69b34e8f3 100644
--- a/app/src/main/java/net/kollnig/missioncontrol/InsightsHeaderAdapter.java
+++ b/app/src/main/java/net/kollnig/missioncontrol/InsightsHeaderAdapter.java
@@ -108,12 +108,27 @@ public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
}
NumberFormat nf = NumberFormat.getNumberInstance(Locale.getDefault());
- holder.tvBlocked.setText(nf.format(data.getTotalTrackingAttempts()));
- holder.tvCompanies.setText(String.valueOf(data.getUniqueTrackerCompanies()));
+ String blockedText = nf.format(data.getTotalTrackingAttempts());
+ String companiesText = String.valueOf(data.getUniqueTrackerCompanies());
+ holder.tvBlocked.setText(blockedText);
+ holder.tvCompanies.setText(companiesText);
// Protection percentage + bar (weights divide the bar into blocked/allowed)
int pct = data.getBlockedPercentage();
- holder.tvBlockedPct.setText(pct + "%");
+ String pctText = pct + "%";
+ holder.tvBlockedPct.setText(pctText);
+
+ // Group each stat number + label so TalkBack announces them as a
+ // single unit instead of two separate reads.
+ holder.llBlockedStat.setContentDescription(
+ context.getString(R.string.accessibility_stat_description, blockedText,
+ context.getString(R.string.insights_tracking_attempts)));
+ holder.llCompaniesStat.setContentDescription(
+ context.getString(R.string.accessibility_stat_description, companiesText,
+ context.getString(R.string.insights_tracker_companies)));
+ holder.llBlockedPctStat.setContentDescription(
+ context.getString(R.string.accessibility_stat_description, pctText,
+ context.getString(R.string.insights_blocked)));
LinearLayout.LayoutParams blockedLp =
(LinearLayout.LayoutParams) holder.vBlockedProgress.getLayoutParams();
blockedLp.weight = pct;
@@ -280,6 +295,9 @@ static class ViewHolder extends RecyclerView.ViewHolder {
TextView tvBlockedPct;
View vBlockedProgress;
View vAllowedProgress;
+ View llBlockedStat;
+ View llCompaniesStat;
+ View llBlockedPctStat;
ViewHolder(View itemView) {
super(itemView);
@@ -292,6 +310,9 @@ static class ViewHolder extends RecyclerView.ViewHolder {
tvBlockedPct = itemView.findViewById(R.id.tvHeroBlockedPct);
vBlockedProgress = itemView.findViewById(R.id.vBlockedProgress);
vAllowedProgress = itemView.findViewById(R.id.vAllowedProgress);
+ llBlockedStat = itemView.findViewById(R.id.llHeroBlockedStat);
+ llCompaniesStat = itemView.findViewById(R.id.llHeroCompaniesStat);
+ llBlockedPctStat = itemView.findViewById(R.id.llHeroBlockedPctStat);
}
}
}
diff --git a/app/src/main/res/layout/activity_insights.xml b/app/src/main/res/layout/activity_insights.xml
index 95782d28c..25da0504d 100644
--- a/app/src/main/res/layout/activity_insights.xml
+++ b/app/src/main/res/layout/activity_insights.xml
@@ -399,6 +399,7 @@
diff --git a/app/src/main/res/layout/item_insights_header.xml b/app/src/main/res/layout/item_insights_header.xml
index 49be3e2f5..b1752a14f 100644
--- a/app/src/main/res/layout/item_insights_header.xml
+++ b/app/src/main/res/layout/item_insights_header.xml
@@ -52,7 +52,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
- android:alpha="0.9"
+ android:alpha="0.95"
android:text="@string/insights_subtitle_7days"
android:textColor="@android:color/white"
android:textSize="13sp"
@@ -92,15 +92,18 @@
@@ -108,7 +111,8 @@
@@ -117,15 +121,18 @@
@@ -133,7 +140,8 @@
@@ -142,8 +150,10 @@
@@ -152,7 +162,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
- android:textColor="#A5D6A7"
+ android:importantForAccessibility="no"
+ android:textColor="#F1F8E9"
android:textSize="36sp"
android:textStyle="bold" />
@@ -160,7 +171,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
- android:alpha="0.85"
+ android:alpha="0.95"
+ android:importantForAccessibility="no"
android:text="@string/insights_blocked"
android:textColor="@android:color/white"
android:textSize="11sp" />
diff --git a/app/src/main/res/layout/item_onboarding.xml b/app/src/main/res/layout/item_onboarding.xml
index ccc800576..0febe431e 100644
--- a/app/src/main/res/layout/item_onboarding.xml
+++ b/app/src/main/res/layout/item_onboarding.xml
@@ -18,6 +18,7 @@
android:layout_height="120dp"
android:layout_marginBottom="24dp"
android:layout_gravity="start"
+ android:importantForAccessibility="no"
android:src="@drawable/ic_rocket2"
app:tint="?attr/colorAccent" />
diff --git a/app/src/main/res/layout/item_onboarding_blocking_mode.xml b/app/src/main/res/layout/item_onboarding_blocking_mode.xml
index daf202f1c..7e990b395 100644
--- a/app/src/main/res/layout/item_onboarding_blocking_mode.xml
+++ b/app/src/main/res/layout/item_onboarding_blocking_mode.xml
@@ -18,6 +18,7 @@
android:layout_height="80dp"
android:layout_marginBottom="16dp"
android:layout_gravity="start"
+ android:importantForAccessibility="no"
android:src="@drawable/ic_rocket2"
app:tint="?attr/colorAccent" />
diff --git a/app/src/main/res/layout/legend.xml b/app/src/main/res/layout/legend.xml
index d309a87dc..85929c8de 100644
--- a/app/src/main/res/layout/legend.xml
+++ b/app/src/main/res/layout/legend.xml
@@ -18,7 +18,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
- android:src="@drawable/ic_rocket_colour"/>
+ android:src="@drawable/ic_rocket_colour"
+ android:importantForAccessibility="no"/>
+ android:src="@drawable/ic_rocket_white_60"
+ android:importantForAccessibility="no"/>
+ android:src="?attr/iconQueue"
+ android:importantForAccessibility="no"/>
+ android:src="?attr/iconMetered"
+ android:importantForAccessibility="no"/>
+ android:src="@drawable/wifi_on"
+ android:importantForAccessibility="no"/>
+ android:src="@drawable/wifi_off"
+ android:importantForAccessibility="no"/>
+ android:src="@drawable/wifi_off_disabled"
+ android:importantForAccessibility="no"/>
+ android:src="@drawable/other_on"
+ android:importantForAccessibility="no"/>
+ android:src="@drawable/other_off"
+ android:importantForAccessibility="no"/>
+ android:src="@drawable/other_off_disabled"
+ android:importantForAccessibility="no"/>
+ android:src="@drawable/screen_on"
+ android:importantForAccessibility="no"/>
+ android:src="@drawable/host_allowed"
+ android:importantForAccessibility="no"/>
+ android:src="@drawable/host_blocked"
+ android:importantForAccessibility="no"/>
Internet access control unavailable for %1$s
Tracker blocking for category %1$s
+
+ Enable tracker blocking
+ Disable tracker blocking
+ %1$s, %2$s
- contacted %d company last week
- contacted %d companies last week