diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 83e1544112564..9b982efb6a674 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -5106,6 +5106,21 @@ public final class Settings { public static final String WIFI_DISPLAY_CERTIFICATION_ON = "wifi_display_certification_on"; + /** + * WPS Configuration method used by Wifi display, this setting only + * takes effect when WIFI_DISPLAY_CERTIFICATION_ON is 1 (enabled). + * + * Possible values are: + * + * WpsInfo.INVALID: use default WPS method chosen by framework + * WpsInfo.PBC : use Push button + * WpsInfo.KEYPAD : use Keypad + * WpsInfo.DISPLAY: use Display + * @hide + */ + public static final String WIFI_DISPLAY_WPS_CONFIG = + "wifi_display_wps_config"; + /** * Whether to notify the user of open networks. *
diff --git a/services/java/com/android/server/display/WifiDisplayController.java b/services/java/com/android/server/display/WifiDisplayController.java index 40ada4e12a9d2..9a4cfb77775ae 100644 --- a/services/java/com/android/server/display/WifiDisplayController.java +++ b/services/java/com/android/server/display/WifiDisplayController.java @@ -150,6 +150,8 @@ final class WifiDisplayController implements DumpUtils.Dump { // Certification private boolean mWifiDisplayCertMode; + private int mWifiDisplayWpsConfig = WpsInfo.INVALID; + private WifiP2pDevice mThisDevice; public WifiDisplayController(Context context, Handler handler, Listener listener) { @@ -179,6 +181,8 @@ final class WifiDisplayController implements DumpUtils.Dump { Settings.Global.WIFI_DISPLAY_ON), false, settingsObserver); resolver.registerContentObserver(Settings.Global.getUriFor( Settings.Global.WIFI_DISPLAY_CERTIFICATION_ON), false, settingsObserver); + resolver.registerContentObserver(Settings.Global.getUriFor( + Settings.Global.WIFI_DISPLAY_WPS_CONFIG), false, settingsObserver); updateSettings(); } @@ -189,6 +193,12 @@ final class WifiDisplayController implements DumpUtils.Dump { mWifiDisplayCertMode = Settings.Global.getInt(resolver, Settings.Global.WIFI_DISPLAY_CERTIFICATION_ON, 0) != 0; + mWifiDisplayWpsConfig = WpsInfo.INVALID; + if (mWifiDisplayCertMode) { + mWifiDisplayWpsConfig = Settings.Global.getInt(resolver, + Settings.Global.WIFI_DISPLAY_WPS_CONFIG, WpsInfo.INVALID); + } + updateWfdEnableState(); } @@ -608,7 +618,9 @@ final class WifiDisplayController implements DumpUtils.Dump { mConnectingDevice = mDesiredDevice; WifiP2pConfig config = new WifiP2pConfig(); WpsInfo wps = new WpsInfo(); - if (mConnectingDevice.wpsPbcSupported()) { + if (mWifiDisplayWpsConfig != WpsInfo.INVALID) { + wps.setup = mWifiDisplayWpsConfig; + } else if (mConnectingDevice.wpsPbcSupported()) { wps.setup = WpsInfo.PBC; } else if (mConnectingDevice.wpsDisplaySupported()) { // We do keypad if peer does display