summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Walliser <mattwalliser@google.com>2023-11-30 21:28:31 +0000
committerMatt Walliser <mattwalliser@google.com>2023-12-01 23:54:40 +0000
commitb114787398edf5b0303c940d053bd9f4a0b752e6 (patch)
tree5a87d49f7d53af3837f81d65902b6b77d6772e60
parent842b89a9def5dad1fa5b52f218e0b50d720e2a8f (diff)
downloadwifi-b114787398edf5b0303c940d053bd9f4a0b752e6.tar.gz
Display error strings in wifi pickers.
Bug: 309968020 Test: atest com.android.wifitrackerlib.HotspotNetworkEntryTest Change-Id: Id2f3114da2dc0bfa9a60a5ce46bb9488dbc88105
-rw-r--r--libs/WifiTrackerLib/res/values/strings.xml19
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java45
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/HotspotNetworkEntryTest.java260
3 files changed, 319 insertions, 5 deletions
diff --git a/libs/WifiTrackerLib/res/values/strings.xml b/libs/WifiTrackerLib/res/values/strings.xml
index 39d0332bf..5be3c7d7c 100644
--- a/libs/WifiTrackerLib/res/values/strings.xml
+++ b/libs/WifiTrackerLib/res/values/strings.xml
@@ -131,6 +131,25 @@
other {{NETWORK_NAME} from your device}
}</string>
+ <!-- Summary for a hotspot network with generic error [CHAR LIMIT=NONE] -->
+ <string name="wifitrackerlib_hotspot_network_summary_error_generic">Can\'t connect. Try connecting again.</string>
+
+ <!-- Summary for a hotspot network with settings related error [CHAR LIMIT=NONE] -->
+ <string name="wifitrackerlib_hotspot_network_summary_error_settings">{DEVICE_TYPE, select,
+ PHONE {Can\'t connect. Check phone settings and try again.}
+ TABLET {Can\'t connect. Check tablet settings and try again.}
+ COMPUTER {Can\'t connect. Check computer settings and try again.}
+ WATCH {Can\'t connect. Check watch settings and try again.}
+ VEHICLE {Can\'t connect. Check vehicle settings and try again.}
+ other {Can\'t connect. Check device settings and try again.}
+ }</string>
+
+ <!-- Summary for a hotspot network with carrier entitlement block error [CHAR LIMIT=NONE] -->
+ <string name="wifitrackerlib_hotspot_network_summary_error_carrier_block"><xliff:g id="network name" example="Google Fi">%1$s</xliff:g> doesn\'t allow this connection</string>
+
+ <!-- Summary for a hotspot network with carrier entitlement incomplete error [CHAR LIMIT=NONE] -->
+ <string name="wifitrackerlib_hotspot_network_summary_error_carrier_incomplete">Can\'t connect. Contact <xliff:g id="network name" example="Google Fi">%1$s</xliff:g> for help.</string>
+
<!-- Alternate summary for a hotspot network (used on "Network & internet" page) [CHAR LIMIT=NONE] -->
<string name="wifitrackerlib_hotspot_network_alternate"><xliff:g id="network name" example="Google Fi">%1$s</xliff:g> from <xliff:g id="device name" example="Matt's Phone">%2$s</xliff:g></string>
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java
index cccb6dea7..67aca3dec 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/HotspotNetworkEntry.java
@@ -59,15 +59,20 @@ import java.util.Objects;
public class HotspotNetworkEntry extends WifiEntry {
static final String TAG = "HotspotNetworkEntry";
public static final String KEY_PREFIX = "HotspotNetworkEntry:";
-
public static final String EXTRA_KEY_IS_BATTERY_CHARGING = "is_battery_charging";
+ private static final String DEVICE_TYPE_KEY = "DEVICE_TYPE";
+ private static final String NETWORK_NAME_KEY = "NETWORK_NAME";
+
@NonNull private final WifiTrackerInjector mInjector;
@NonNull private final Context mContext;
@Nullable private final SharedConnectivityManager mSharedConnectivityManager;
@Nullable private HotspotNetwork mHotspotNetworkData;
@NonNull private HotspotNetworkEntryKey mKey;
+ @ConnectionStatus
+ private int mLastStatus = HotspotNetworkConnectionStatus.CONNECTION_STATUS_UNKNOWN;
+ private boolean mConnectionError = false;
/**
* If editing this IntDef also edit the definition in:
@@ -215,12 +220,41 @@ public class HotspotNetworkEntry extends WifiEntry {
if (mCalledConnect) {
return mContext.getString(R.string.wifitrackerlib_hotspot_network_connecting);
}
+ if (mConnectionError) {
+ switch (mLastStatus) {
+ case HotspotNetworkConnectionStatus.CONNECTION_STATUS_PROVISIONING_FAILED:
+ case HotspotNetworkConnectionStatus.CONNECTION_STATUS_TETHERING_TIMEOUT:
+ return mContext.getString(
+ R.string.wifitrackerlib_hotspot_network_summary_error_carrier_incomplete,
+ BidiFormatter.getInstance().unicodeWrap(
+ mHotspotNetworkData.getNetworkName()));
+ case HotspotNetworkConnectionStatus.CONNECTION_STATUS_TETHERING_UNSUPPORTED:
+ return mContext.getString(
+ R.string.wifitrackerlib_hotspot_network_summary_error_carrier_block,
+ BidiFormatter.getInstance().unicodeWrap(
+ mHotspotNetworkData.getNetworkName()));
+ case HotspotNetworkConnectionStatus.CONNECTION_STATUS_NO_CELL_DATA:
+ case HotspotNetworkConnectionStatus.CONNECTION_STATUS_ENABLING_HOTSPOT_FAILED:
+ case HotspotNetworkConnectionStatus.CONNECTION_STATUS_ENABLING_HOTSPOT_TIMEOUT:
+ case HotspotNetworkConnectionStatus.CONNECTION_STATUS_CONNECT_TO_HOTSPOT_FAILED:
+ MessageFormat msg = new MessageFormat(mContext.getString(
+ R.string.wifitrackerlib_hotspot_network_summary_error_settings));
+ Map<String, Object> args = new HashMap<>();
+ args.put(DEVICE_TYPE_KEY, getDeviceTypeId(
+ mHotspotNetworkData.getNetworkProviderInfo().getDeviceType()));
+ return msg.format(args);
+ case HotspotNetworkConnectionStatus.CONNECTION_STATUS_UNKNOWN_ERROR:
+ default:
+ return mContext.getString(
+ R.string.wifitrackerlib_hotspot_network_summary_error_generic);
+ }
+ }
MessageFormat msg = new MessageFormat(
mContext.getString(R.string.wifitrackerlib_hotspot_network_summary_new));
Map<String, Object> args = new HashMap<>();
- args.put("DEVICE_TYPE",
+ args.put(DEVICE_TYPE_KEY,
getDeviceTypeId(mHotspotNetworkData.getNetworkProviderInfo().getDeviceType()));
- args.put("NETWORK_NAME", mHotspotNetworkData.getNetworkName());
+ args.put(NETWORK_NAME_KEY, mHotspotNetworkData.getNetworkName());
return msg.format(args);
}
@@ -392,6 +426,7 @@ public class HotspotNetworkEntry extends WifiEntry {
@Override
public synchronized void disconnect(@Nullable DisconnectCallback callback) {
+ mCalledDisconnect = true;
mDisconnectCallback = callback;
if (mSharedConnectivityManager == null) {
if (callback != null) {
@@ -413,9 +448,11 @@ public class HotspotNetworkEntry extends WifiEntry {
* @param status HotspotNetworkConnectionStatus#ConnectionStatus enum.
*/
public void onConnectionStatusChanged(@ConnectionStatus int status) {
+ mLastStatus = status;
switch (status) {
case HotspotNetworkConnectionStatus.CONNECTION_STATUS_ENABLING_HOTSPOT:
mCalledConnect = true;
+ mConnectionError = false;
notifyOnUpdated();
break;
case HotspotNetworkConnectionStatus.CONNECTION_STATUS_UNKNOWN_ERROR:
@@ -434,6 +471,7 @@ public class HotspotNetworkEntry extends WifiEntry {
}
});
mCalledConnect = false;
+ mConnectionError = true;
notifyOnUpdated();
break;
case CONNECTION_STATUS_CONNECTED:
@@ -445,6 +483,7 @@ public class HotspotNetworkEntry extends WifiEntry {
}
});
mCalledConnect = false;
+ mConnectionError = false;
notifyOnUpdated();
break;
default:
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/HotspotNetworkEntryTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/HotspotNetworkEntryTest.java
index a664a92d2..dedf4af01 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/HotspotNetworkEntryTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/HotspotNetworkEntryTest.java
@@ -126,9 +126,31 @@ public class HotspotNetworkEntryTest {
+ "from your computer} WATCH {{NETWORK_NAME} from your watch} "
+ "VEHICLE {{NETWORK_NAME} from your vehicle} other "
+ "{{NETWORK_NAME} from your device}}");
+ when(mMockContext.getString(R.string.wifitrackerlib_hotspot_network_summary_error_generic))
+ .thenReturn("Can't connect. Try connecting again.");
+ when(mMockContext.getString(R.string.wifitrackerlib_hotspot_network_summary_error_settings))
+ .thenReturn(
+ "{DEVICE_TYPE, select, PHONE {Can't connect. Check phone settings and try"
+ + " again.} TABLET {Can't connect. Check tablet settings and try "
+ + "again.} COMPUTER {Can't connect. Check computer settings and "
+ + "try again.} WATCH {Can't connect. Check watch settings and try"
+ + " again.} VEHICLE {Can't connect. Check vehicle settings and "
+ + "try again.} other {Can't connect. Check device settings and "
+ + "try again.}}");
+ when(mMockContext.getString(
+ eq(R.string.wifitrackerlib_hotspot_network_summary_error_carrier_block),
+ anyString())).thenAnswer(invocation -> {
+ Object[] args = invocation.getArguments();
+ return args[1] + " doesn't allow this connection";
+ });
+ when(mMockContext.getString(
+ eq(R.string.wifitrackerlib_hotspot_network_summary_error_carrier_incomplete),
+ anyString())).thenAnswer(invocation -> {
+ Object[] args = invocation.getArguments();
+ return "Can't connect. Contact " + args[1] + " for help.";
+ });
when(mMockContext.getString(eq(R.string.wifitrackerlib_hotspot_network_alternate),
- anyString(), anyString()))
- .thenAnswer(invocation -> {
+ anyString(), anyString())).thenAnswer(invocation -> {
Object[] args = invocation.getArguments();
return args[1] + " from " + args[2];
});
@@ -845,4 +867,238 @@ public class HotspotNetworkEntryTest {
verify(mMockConnectCallback)
.onConnectResult(WifiEntry.ConnectCallback.CONNECT_STATUS_SUCCESS);
}
+
+ @Test
+ public void testGetSummary_connectionStatusFailureGeneric_displaysErrorInSummary() {
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager, TEST_HOTSPOT_NETWORK_DATA);
+ entry.setListener(mMockListener);
+
+ entry.onConnectionStatusChanged(
+ HotspotNetworkConnectionStatus.CONNECTION_STATUS_UNKNOWN_ERROR);
+ mTestLooper.dispatchAll();
+
+ assertThat(entry.getSummary()).isEqualTo("Can't connect. Try connecting again.");
+ }
+
+ @Test
+ public void testGetSummary_connectionStatusFailureSettings_phone_displaysErrorInSummary() {
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager, TEST_HOTSPOT_NETWORK_DATA);
+ entry.setListener(mMockListener);
+
+ entry.onConnectionStatusChanged(
+ HotspotNetworkConnectionStatus.CONNECTION_STATUS_CONNECT_TO_HOTSPOT_FAILED);
+ mTestLooper.dispatchAll();
+
+ assertThat(entry.getSummary()).isEqualTo(
+ "Can't connect. Check phone settings and try again.");
+ }
+
+ @Test
+ public void testGetSummary_connectionStatusFailureSettings_tablet_displaysErrorInSummary() {
+ HotspotNetwork testNetwork = new HotspotNetwork.Builder()
+ .setDeviceId(1)
+ .setNetworkProviderInfo(new NetworkProviderInfo
+ .Builder("My Pixel", "Pixel 7")
+ .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_TABLET)
+ .setBatteryPercentage(100)
+ .setConnectionStrength(3)
+ .build())
+ .setHostNetworkType(HotspotNetwork.NETWORK_TYPE_CELLULAR)
+ .setNetworkName("Google Fi")
+ .setHotspotSsid("Instant Hotspot abcde")
+ .addHotspotSecurityType(SECURITY_TYPE_PSK)
+ .build();
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager, testNetwork);
+ entry.setListener(mMockListener);
+
+ entry.onConnectionStatusChanged(
+ HotspotNetworkConnectionStatus.CONNECTION_STATUS_CONNECT_TO_HOTSPOT_FAILED);
+ mTestLooper.dispatchAll();
+
+ assertThat(entry.getSummary()).isEqualTo(
+ "Can't connect. Check tablet settings and try again.");
+ }
+
+ @Test
+ public void testGetSummary_connectionStatusFailureSettings_computer_displaysErrorInSummary() {
+ HotspotNetwork testNetwork = new HotspotNetwork.Builder()
+ .setDeviceId(1)
+ .setNetworkProviderInfo(new NetworkProviderInfo
+ .Builder("My Pixel", "Pixel 7")
+ .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_LAPTOP)
+ .setBatteryPercentage(100)
+ .setConnectionStrength(3)
+ .build())
+ .setHostNetworkType(HotspotNetwork.NETWORK_TYPE_CELLULAR)
+ .setNetworkName("Google Fi")
+ .setHotspotSsid("Instant Hotspot abcde")
+ .addHotspotSecurityType(SECURITY_TYPE_PSK)
+ .build();
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager, testNetwork);
+ entry.setListener(mMockListener);
+
+ entry.onConnectionStatusChanged(
+ HotspotNetworkConnectionStatus.CONNECTION_STATUS_CONNECT_TO_HOTSPOT_FAILED);
+ mTestLooper.dispatchAll();
+
+ assertThat(entry.getSummary()).isEqualTo(
+ "Can't connect. Check computer settings and try again.");
+ }
+
+ @Test
+ public void testGetSummary_connectionStatusFailureSettings_watch_displaysErrorInSummary() {
+ HotspotNetwork testNetwork = new HotspotNetwork.Builder()
+ .setDeviceId(1)
+ .setNetworkProviderInfo(new NetworkProviderInfo
+ .Builder("My Pixel", "Pixel 7")
+ .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_WATCH)
+ .setBatteryPercentage(100)
+ .setConnectionStrength(3)
+ .build())
+ .setHostNetworkType(HotspotNetwork.NETWORK_TYPE_CELLULAR)
+ .setNetworkName("Google Fi")
+ .setHotspotSsid("Instant Hotspot abcde")
+ .addHotspotSecurityType(SECURITY_TYPE_PSK)
+ .build();
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager, testNetwork);
+ entry.setListener(mMockListener);
+
+ entry.onConnectionStatusChanged(
+ HotspotNetworkConnectionStatus.CONNECTION_STATUS_CONNECT_TO_HOTSPOT_FAILED);
+ mTestLooper.dispatchAll();
+
+ assertThat(entry.getSummary()).isEqualTo(
+ "Can't connect. Check watch settings and try again.");
+ }
+
+ @Test
+ public void testGetSummary_connectionStatusFailureSettings_vehicle_displaysErrorInSummary() {
+ HotspotNetwork testNetwork = new HotspotNetwork.Builder()
+ .setDeviceId(1)
+ .setNetworkProviderInfo(new NetworkProviderInfo
+ .Builder("My Pixel", "Pixel 7")
+ .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_AUTO)
+ .setBatteryPercentage(100)
+ .setConnectionStrength(3)
+ .build())
+ .setHostNetworkType(HotspotNetwork.NETWORK_TYPE_CELLULAR)
+ .setNetworkName("Google Fi")
+ .setHotspotSsid("Instant Hotspot abcde")
+ .addHotspotSecurityType(SECURITY_TYPE_PSK)
+ .build();
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager, testNetwork);
+ entry.setListener(mMockListener);
+
+ entry.onConnectionStatusChanged(
+ HotspotNetworkConnectionStatus.CONNECTION_STATUS_CONNECT_TO_HOTSPOT_FAILED);
+ mTestLooper.dispatchAll();
+
+ assertThat(entry.getSummary()).isEqualTo(
+ "Can't connect. Check vehicle settings and try again.");
+ }
+
+ @Test
+ public void testGetSummary_connectionStatusFailureSettings_unknown_displaysErrorInSummary() {
+ HotspotNetwork testNetwork = new HotspotNetwork.Builder()
+ .setDeviceId(1)
+ .setNetworkProviderInfo(new NetworkProviderInfo
+ .Builder("My Pixel", "Pixel 7")
+ .setDeviceType(NetworkProviderInfo.DEVICE_TYPE_UNKNOWN)
+ .setBatteryPercentage(100)
+ .setConnectionStrength(3)
+ .build())
+ .setHostNetworkType(HotspotNetwork.NETWORK_TYPE_CELLULAR)
+ .setNetworkName("Google Fi")
+ .setHotspotSsid("Instant Hotspot abcde")
+ .addHotspotSecurityType(SECURITY_TYPE_PSK)
+ .build();
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager, testNetwork);
+ entry.setListener(mMockListener);
+
+ entry.onConnectionStatusChanged(
+ HotspotNetworkConnectionStatus.CONNECTION_STATUS_CONNECT_TO_HOTSPOT_FAILED);
+ mTestLooper.dispatchAll();
+
+ assertThat(entry.getSummary()).isEqualTo(
+ "Can't connect. Check device settings and try again.");
+ }
+
+ @Test
+ public void testGetSummary_connectionStatusFailureCarrierBlock_displaysErrorInSummary() {
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager, TEST_HOTSPOT_NETWORK_DATA);
+ entry.setListener(mMockListener);
+
+ entry.onConnectionStatusChanged(
+ HotspotNetworkConnectionStatus.CONNECTION_STATUS_TETHERING_UNSUPPORTED);
+ mTestLooper.dispatchAll();
+
+ assertThat(entry.getSummary()).isEqualTo("Google Fi doesn't allow this connection");
+ }
+
+ @Test
+ public void testGetSummary_connectionStatusFailureCarrierIncomplete_displaysErrorInSummary() {
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager, TEST_HOTSPOT_NETWORK_DATA);
+ entry.setListener(mMockListener);
+
+ entry.onConnectionStatusChanged(
+ HotspotNetworkConnectionStatus.CONNECTION_STATUS_TETHERING_TIMEOUT);
+ mTestLooper.dispatchAll();
+
+ assertThat(entry.getSummary()).isEqualTo("Can't connect. Contact Google Fi for help.");
+ }
+
+ @Test
+ public void testGetSummary_connectionStatusConnecting_resetsErrorString() {
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager, TEST_HOTSPOT_NETWORK_DATA);
+ entry.setListener(mMockListener);
+ entry.connect(mMockConnectCallback);
+ entry.onConnectionStatusChanged(
+ HotspotNetworkConnectionStatus.CONNECTION_STATUS_UNKNOWN_ERROR);
+ mTestLooper.dispatchAll();
+ assertThat(entry.getSummary()).isEqualTo("Can't connect. Try connecting again.");
+
+ entry.onConnectionStatusChanged(
+ HotspotNetworkConnectionStatus.CONNECTION_STATUS_ENABLING_HOTSPOT);
+ mTestLooper.dispatchAll();
+
+ assertThat(entry.getSummary()).isNotEqualTo("Can't connect. Try connecting again.");
+ }
+
+ @Test
+ public void testGetSummary_connectionStatusConnected_resetsErrorString() {
+ final HotspotNetworkEntry entry = new HotspotNetworkEntry(
+ mMockInjector, mMockContext, mTestHandler,
+ mMockWifiManager, mMockSharedConnectivityManager, TEST_HOTSPOT_NETWORK_DATA);
+ entry.setListener(mMockListener);
+ entry.connect(mMockConnectCallback);
+ entry.onConnectionStatusChanged(
+ HotspotNetworkConnectionStatus.CONNECTION_STATUS_UNKNOWN_ERROR);
+ mTestLooper.dispatchAll();
+ assertThat(entry.getSummary()).isEqualTo("Can't connect. Try connecting again.");
+
+ entry.onConnectionStatusChanged(HotspotNetworkEntry.CONNECTION_STATUS_CONNECTED);
+ mTestLooper.dispatchAll();
+
+ assertThat(entry.getSummary()).isNotEqualTo("Can't connect. Try connecting again.");
+ }
}