Connectivity User Interface

In Android 12 or higher, device manufacturers can optionally adopt a simplified connectivity experience that helps users better understand their network connections, switch between internet providers, and troubleshoot network connectivity issues. These changes in user experience as compared to Android 11 or lower, are reflected in user interface, iconography, and API changes for Quick Settings and Settings. All of these changes are available in AOSP for device manufacturers to enable as is or to customize.

Simplified connectivity experience overview

This section describes the major user interface changes of the simplified connectivity experience in AOSP starting in Android 12.

Internet tile in Quick Settings

The Quick Settings menu includes an Internet tile that opens up an Internet panel where users can switch between Wi-Fi and cellular connections. The Internet tile combines the Wi-Fi and Mobile Data tiles used in Android 11 or lower.

Internet tile in the Quick Settings menu

Figure 1. Internet tile in Quick Settings

Calls & SMS section in Settings

The Settings app includes a Calls & SMS section under Network & Internet that displays availability status and Wi-Fi calling options.

Calls & SMS section in Settings

Figure 2. Calls & SMS section in Settings

Reset button in Settings

In the Settings app, Network & Internet > Internet includes a reset button that lets users reset the telephony and Wi-Fi modems on the device, which may be useful when troubleshooting network connectivity issues.

Reset button in Settings to troubleshoot connectivity issues

Figure 3. Reset button for troubleshooting connectivity issues

Implementation

To enable the simplified connectivity experience on your device, use the following global settings flag:

  • Name: persist.sys.fflag.override.settings_provider_model
  • Type: Boolean
  • Value: Set to true to enable the connectivity simplification behavior, false to disable it and use the legacy behavior. Starting in Android 12, the codepath for false is no longer actively maintained.

Additionally, you can configure the following modes of the user interface for individual carriers using carrier configuration. The configuration keys are:

  • CarrierConfigManager#KEY_CARRIER_PROVISIONS_WIFI_MERGED_NETWORKS_BOOL: A boolean indicating whether the carrier configures Wi-Fi networks that are part of its core network and are displayed as part of the cellular network. This works in tandem with the WifiNetworkSuggestion.Builder#setCarrierMerged(booleanisCarrierMerged) method.
  • CarrierConfigManager#KEY_USE_IP_FOR_CALLING_INDICATOR_BOOL: A boolean indicating whether data network (IP) connectivity is used as a supplemental condition to gate display of the no calling icon.
  • CarrierConfigManager#KEY_DISPLAY_CALL_STRENGTH_INDICATOR_BOOL: A boolean indicating whether the call strength icon is displayed in the system UI.

Framework APIs

To temporarily disable nearby Wi-Fi networks, use the following APIs:

  • WifiManager#startRestrictingAutoJoinToSubscriptionId(int subscriptionId): Allows the user to select a carrier network without disabling Wi-Fi. Disables all currently visible Wi-Fi networks for a minimum duration of 30 minutes (controlled through the config_wifiAllNonCarrierMergedWifiMinDisableDurationMinutes overlay), and a maximum duration of 6 hours (controlled through the config_wifiAllNonCarrierMergedWifiMaxDisableDurationMinutes overlay). Wi-Fi networks are reenabled whenever Wi-Fi is toggled, the device is rebooted, if the user selects a Wi-Fi network (in which case the stopRestrictingAutoJoinToSubscriptionId() API is executed by Settings), or if the network isn't visible for 60 minutes.
  • WifiManager#stopRestrictingAutoJoinToSubscriptionId(): Restores normal operation.

To support the reset button and troubleshooting user interface, which is implemented in the com.android.settingslib.connectivity.ConnectivitySubsystemsRecoveryManager class, use the following APIs:

  • WifiManager#restartWifiSubsystem(String reason): Restarts the Wi-Fi subsystem.
  • TelephonyManager#rebootRadio(): Resets radio modem.

Working with multiple carriers

If you adopt the simplified connectivity experience for certain carriers but not others, be aware of the multi-SIM scenario, where a user uses two SIMs, one from a carrier partner that has opted for the UI changes while the other hasn't. In this scenario, make sure to decide which UI the users see and to thoroughly test the behavior on your devices.