diff options
5 files changed, 71 insertions, 38 deletions
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml index f9ea7735681f..49bd9d994088 100644 --- a/packages/SettingsLib/res/values/strings.xml +++ b/packages/SettingsLib/res/values/strings.xml @@ -345,6 +345,8 @@ <string name="accessibility_wifi_three_bars">Wifi three bars.</string> <!-- Content description of the WIFI signal when it is full for accessibility (not shown on the screen). [CHAR LIMIT=NONE] --> <string name="accessibility_wifi_signal_full">Wifi signal full.</string> + <!-- Content description of the WIFI signal when the WIFI is connected using the signal from a different device owned by the user. For accessibility (not shown on the screen) [CHAR LIMIT=NONE] --> + <string name="accessibility_wifi_other_device">Connected to your device.</string> <!-- Content description of the Wi-Fi security type. This message indicates this is an open Wi-Fi (no password needed) [CHAR LIMIT=NONE] --> <string name="accessibility_wifi_security_type_none">Open network</string> diff --git a/packages/SettingsLib/src/com/android/settingslib/AccessibilityContentDescriptions.java b/packages/SettingsLib/src/com/android/settingslib/AccessibilityContentDescriptions.java index ee65ef4e92b6..ce466dfbf19c 100644 --- a/packages/SettingsLib/src/com/android/settingslib/AccessibilityContentDescriptions.java +++ b/packages/SettingsLib/src/com/android/settingslib/AccessibilityContentDescriptions.java @@ -50,6 +50,7 @@ public class AccessibilityContentDescriptions { }; public static final int WIFI_NO_CONNECTION = R.string.accessibility_no_wifi; + public static final int WIFI_OTHER_DEVICE_CONNECTION = R.string.accessibility_wifi_other_device; public static final int NO_CALLING = R.string.accessibility_no_calling; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/model/WifiIcon.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/model/WifiIcon.kt index efa092bb3f40..250fe53a2df6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/model/WifiIcon.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/model/WifiIcon.kt @@ -22,11 +22,12 @@ import androidx.annotation.StringRes import androidx.annotation.VisibleForTesting import com.android.settingslib.AccessibilityContentDescriptions.WIFI_CONNECTION_STRENGTH import com.android.settingslib.AccessibilityContentDescriptions.WIFI_NO_CONNECTION -import com.android.systemui.res.R +import com.android.settingslib.AccessibilityContentDescriptions.WIFI_OTHER_DEVICE_CONNECTION import com.android.systemui.common.shared.model.ContentDescription import com.android.systemui.common.shared.model.Icon import com.android.systemui.log.table.Diffable import com.android.systemui.log.table.TableRowLogger +import com.android.systemui.res.R import com.android.systemui.statusbar.connectivity.WifiIcons import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel @@ -90,50 +91,56 @@ sealed interface WifiIcon : Diffable<WifiIcon> { )}" ) ) - is WifiNetworkModel.Active -> { - val levelDesc = context.getString(WIFI_CONNECTION_STRENGTH[model.level]) - val contentDescription = - ContentDescription.Loaded( - if (model.isValidated) { - (levelDesc) - } else { - "$levelDesc,${context.getString(NO_INTERNET)}" - } - ) - Visible(model.toIcon(showHotspotInfo), contentDescription) - } + is WifiNetworkModel.Active -> model.toIcon(showHotspotInfo, context) } - @DrawableRes - private fun WifiNetworkModel.Active.toIcon(showHotspotInfo: Boolean): Int { - return if (!showHotspotInfo) { - this.toBasicIcon() + private fun WifiNetworkModel.Active.toIcon( + showHotspotInfo: Boolean, + context: Context, + ): Visible { + return if ( + !showHotspotInfo || + this.hotspotDeviceType == WifiNetworkModel.HotspotDeviceType.NONE + ) { + this.toBasicIcon(context) } else { - when (this.hotspotDeviceType) { - WifiNetworkModel.HotspotDeviceType.NONE -> this.toBasicIcon() - WifiNetworkModel.HotspotDeviceType.TABLET -> - com.android.settingslib.R.drawable.ic_hotspot_tablet - WifiNetworkModel.HotspotDeviceType.LAPTOP -> - com.android.settingslib.R.drawable.ic_hotspot_laptop - WifiNetworkModel.HotspotDeviceType.WATCH -> - com.android.settingslib.R.drawable.ic_hotspot_watch - WifiNetworkModel.HotspotDeviceType.AUTO -> - com.android.settingslib.R.drawable.ic_hotspot_auto - // Use phone as the default drawable - WifiNetworkModel.HotspotDeviceType.PHONE, - WifiNetworkModel.HotspotDeviceType.UNKNOWN, - WifiNetworkModel.HotspotDeviceType.INVALID -> - com.android.settingslib.R.drawable.ic_hotspot_phone - } + val icon = + when (this.hotspotDeviceType) { + WifiNetworkModel.HotspotDeviceType.TABLET -> + com.android.settingslib.R.drawable.ic_hotspot_tablet + WifiNetworkModel.HotspotDeviceType.LAPTOP -> + com.android.settingslib.R.drawable.ic_hotspot_laptop + WifiNetworkModel.HotspotDeviceType.WATCH -> + com.android.settingslib.R.drawable.ic_hotspot_watch + WifiNetworkModel.HotspotDeviceType.AUTO -> + com.android.settingslib.R.drawable.ic_hotspot_auto + // Use phone as the default drawable + WifiNetworkModel.HotspotDeviceType.PHONE, + WifiNetworkModel.HotspotDeviceType.UNKNOWN, + WifiNetworkModel.HotspotDeviceType.INVALID -> + com.android.settingslib.R.drawable.ic_hotspot_phone + WifiNetworkModel.HotspotDeviceType.NONE -> + throw IllegalStateException("NONE checked earlier") + } + Visible( + icon, + ContentDescription.Loaded(context.getString(WIFI_OTHER_DEVICE_CONNECTION)), + ) } } - @DrawableRes - private fun WifiNetworkModel.Active.toBasicIcon(): Int { + private fun WifiNetworkModel.Active.toBasicIcon(context: Context): Visible { + val levelDesc = context.getString(WIFI_CONNECTION_STRENGTH[this.level]) return if (this.isValidated) { - WifiIcons.WIFI_FULL_ICONS[this.level] + Visible( + WifiIcons.WIFI_FULL_ICONS[this.level], + ContentDescription.Loaded(levelDesc), + ) } else { - WifiIcons.WIFI_NO_INTERNET_ICONS[this.level] + Visible( + WifiIcons.WIFI_NO_INTERNET_ICONS[this.level], + ContentDescription.Loaded("$levelDesc,${context.getString(NO_INTERNET)}"), + ) } } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/InternetTileViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/InternetTileViewModelTest.kt index 15b9d61fc96b..c935dbb0ca1c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/InternetTileViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/InternetTileViewModelTest.kt @@ -17,13 +17,14 @@ package com.android.systemui.statusbar.pipeline.shared.ui.viewmodel import androidx.test.filters.SmallTest -import com.android.systemui.res.R +import com.android.settingslib.AccessibilityContentDescriptions.WIFI_OTHER_DEVICE_CONNECTION import com.android.systemui.SysuiTestCase import com.android.systemui.common.shared.model.ContentDescription.Companion.loadContentDescription import com.android.systemui.common.shared.model.Text import com.android.systemui.coroutines.collectLastValue import com.android.systemui.log.table.TableLogBuffer import com.android.systemui.qs.tileimpl.QSTileImpl.ResourceIcon +import com.android.systemui.res.R import com.android.systemui.statusbar.connectivity.WifiIcons import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository import com.android.systemui.statusbar.pipeline.ethernet.domain.EthernetInteractor @@ -181,6 +182,8 @@ class InternetTileViewModelTest : SysuiTestCase() { assertThat(latest?.icon) .isEqualTo(ResourceIcon.get(WifiIcons.WIFI_NO_INTERNET_ICONS[4])) + assertThat(latest?.stateDescription.loadContentDescription(context)) + .doesNotContain(context.getString(WIFI_OTHER_DEVICE_CONNECTION)) } @Test @@ -192,6 +195,8 @@ class InternetTileViewModelTest : SysuiTestCase() { assertThat(latest?.icon) .isEqualTo(ResourceIcon.get(com.android.settingslib.R.drawable.ic_hotspot_tablet)) + assertThat(latest?.stateDescription.loadContentDescription(context)) + .isEqualTo(context.getString(WIFI_OTHER_DEVICE_CONNECTION)) } @Test @@ -203,6 +208,8 @@ class InternetTileViewModelTest : SysuiTestCase() { assertThat(latest?.icon) .isEqualTo(ResourceIcon.get(com.android.settingslib.R.drawable.ic_hotspot_laptop)) + assertThat(latest?.stateDescription.loadContentDescription(context)) + .isEqualTo(context.getString(WIFI_OTHER_DEVICE_CONNECTION)) } @Test @@ -214,6 +221,8 @@ class InternetTileViewModelTest : SysuiTestCase() { assertThat(latest?.icon) .isEqualTo(ResourceIcon.get(com.android.settingslib.R.drawable.ic_hotspot_watch)) + assertThat(latest?.stateDescription.loadContentDescription(context)) + .isEqualTo(context.getString(WIFI_OTHER_DEVICE_CONNECTION)) } @Test @@ -225,6 +234,8 @@ class InternetTileViewModelTest : SysuiTestCase() { assertThat(latest?.icon) .isEqualTo(ResourceIcon.get(com.android.settingslib.R.drawable.ic_hotspot_auto)) + assertThat(latest?.stateDescription.loadContentDescription(context)) + .isEqualTo(context.getString(WIFI_OTHER_DEVICE_CONNECTION)) } @Test @@ -236,6 +247,8 @@ class InternetTileViewModelTest : SysuiTestCase() { assertThat(latest?.icon) .isEqualTo(ResourceIcon.get(com.android.settingslib.R.drawable.ic_hotspot_phone)) + assertThat(latest?.stateDescription.loadContentDescription(context)) + .isEqualTo(context.getString(WIFI_OTHER_DEVICE_CONNECTION)) } @Test @@ -247,6 +260,8 @@ class InternetTileViewModelTest : SysuiTestCase() { assertThat(latest?.icon) .isEqualTo(ResourceIcon.get(com.android.settingslib.R.drawable.ic_hotspot_phone)) + assertThat(latest?.stateDescription.loadContentDescription(context)) + .isEqualTo(context.getString(WIFI_OTHER_DEVICE_CONNECTION)) } @Test @@ -258,6 +273,8 @@ class InternetTileViewModelTest : SysuiTestCase() { assertThat(latest?.icon) .isEqualTo(ResourceIcon.get(com.android.settingslib.R.drawable.ic_hotspot_phone)) + assertThat(latest?.stateDescription.loadContentDescription(context)) + .isEqualTo(context.getString(WIFI_OTHER_DEVICE_CONNECTION)) } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt index a520f6c109cc..49a2648a7cac 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt @@ -18,8 +18,10 @@ package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest +import com.android.settingslib.AccessibilityContentDescriptions.WIFI_OTHER_DEVICE_CONNECTION import com.android.systemui.RoboPilotTest import com.android.systemui.SysuiTestCase +import com.android.systemui.common.shared.model.ContentDescription.Companion.loadContentDescription import com.android.systemui.coroutines.collectLastValue import com.android.systemui.log.table.TableLogBuffer import com.android.systemui.statusbar.connectivity.WifiIcons @@ -136,6 +138,10 @@ class WifiViewModelTest : SysuiTestCase() { // is used instead assertThat(latest).isInstanceOf(WifiIcon.Visible::class.java) assertThat((latest as WifiIcon.Visible).res).isEqualTo(WifiIcons.WIFI_FULL_ICONS[1]) + assertThat( + (latest as WifiIcon.Visible).contentDescription.loadContentDescription(context) + ) + .doesNotContain(context.getString(WIFI_OTHER_DEVICE_CONNECTION)) } @Test |