From 38ab4d342bd4706f1fbdc9a568b2b56e25ac18da Mon Sep 17 00:00:00 2001 From: Hai Shalom Date: Wed, 11 Dec 2019 14:01:08 -0800 Subject: [PATCH] [DPP R2] Added support for DPP R2 events Added support for DPP R2 events that provide additional details about the onboarding process of a remote enrollee. Specifically, DPP R2 configurator waits for response from the enrollee, which reports back the SSID, tried channels and band support in case it cannot find the AP. When it reports success, then it means that it is acutally connected. Bug: 139381558 Test: Manual tests with DPP R1 and R2 enrollees Test: atest DppManagerTest Test: act.py -c ../WifiDppConfig.json -tc WifiDppTest Change-Id: If19fc6906ec5abbdceef0742dc52b42c7d0acfe0 --- res/values/strings.xml | 6 ++++ .../wifi/dpp/WifiDppAddDeviceFragment.java | 36 +++++++++++++++++-- .../wifi/dpp/WifiDppInitiatorViewModel.java | 24 +++++++++++-- 3 files changed, 61 insertions(+), 5 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 621d364b275..c911e6f5b74 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2056,6 +2056,12 @@ Make sure the device has been plugged in, charged, and turned on. If the issue continues, contact the device manufacturer Adding \u201c%1$s\u201d isn\u2019t supported by this device + + Try moving the device closer to your Wi\u2011Fi access point/router + + Check the password and try again + + Contact the device manufacturer Check connection and try again diff --git a/src/com/android/settings/wifi/dpp/WifiDppAddDeviceFragment.java b/src/com/android/settings/wifi/dpp/WifiDppAddDeviceFragment.java index f7e89362c25..caba227777a 100644 --- a/src/com/android/settings/wifi/dpp/WifiDppAddDeviceFragment.java +++ b/src/com/android/settings/wifi/dpp/WifiDppAddDeviceFragment.java @@ -24,6 +24,7 @@ import android.net.wifi.WifiManager; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; +import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -61,8 +62,22 @@ public class WifiDppAddDeviceFragment extends WifiDppQrCodeBaseFragment { } @Override - public void onFailure(int code) { - Log.d(TAG, "EasyConnectConfiguratorStatusCallback.onFailure " + code); + public void onFailure(int code, String ssid, SparseArray channelListArray, + int[] operatingClassArray) { + Log.d(TAG, "EasyConnectConfiguratorStatusCallback.onFailure: " + code); + if (!TextUtils.isEmpty(ssid)) { + Log.d(TAG, "Tried SSID: " + ssid); + } + if (channelListArray.size() != 0) { + Log.d(TAG, "Tried channels: " + channelListArray); + } + if (operatingClassArray != null && operatingClassArray.length > 0) { + StringBuilder sb = new StringBuilder("Supported bands: "); + for (int i = 0; i < operatingClassArray.length; i++) { + sb.append(operatingClassArray[i] + " "); + } + Log.d(TAG, sb.toString()); + } showErrorUi(code, /* isConfigurationChange */ false); } @@ -150,6 +165,20 @@ public class WifiDppAddDeviceFragment extends WifiDppQrCodeBaseFragment { throw(new IllegalStateException("Wi-Fi DPP configurator used a non-PSK/non-SAE" + "network to handshake")); + case EasyConnectStatusCallback.EASY_CONNECT_EVENT_FAILURE_CANNOT_FIND_NETWORK: + summaryCharSequence = getText(R.string.wifi_dpp_failure_cannot_find_network); + break; + + case EasyConnectStatusCallback.EASY_CONNECT_EVENT_FAILURE_ENROLLEE_AUTHENTICATION: + summaryCharSequence = getText(R.string.wifi_dpp_failure_enrollee_authentication); + break; + + case EasyConnectStatusCallback + .EASY_CONNECT_EVENT_FAILURE_ENROLLEE_REJECTED_CONFIGURATION: + summaryCharSequence = + getText(R.string.wifi_dpp_failure_enrollee_rejected_configuration); + break; + default: throw(new IllegalStateException("Unexpected Wi-Fi DPP error")); } @@ -218,7 +247,8 @@ public class WifiDppAddDeviceFragment extends WifiDppQrCodeBaseFragment { if (code == WifiDppUtils.EASY_CONNECT_EVENT_SUCCESS) { new EasyConnectConfiguratorStatusCallback().onConfiguratorSuccess(code); } else { - new EasyConnectConfiguratorStatusCallback().onFailure(code); + new EasyConnectConfiguratorStatusCallback().onFailure(code, model.getTriedSsid(), + model.getTriedChannels(), model.getBandArray()); } }); } diff --git a/src/com/android/settings/wifi/dpp/WifiDppInitiatorViewModel.java b/src/com/android/settings/wifi/dpp/WifiDppInitiatorViewModel.java index f48ec7c3fe3..05febc510f0 100644 --- a/src/com/android/settings/wifi/dpp/WifiDppInitiatorViewModel.java +++ b/src/com/android/settings/wifi/dpp/WifiDppInitiatorViewModel.java @@ -19,14 +19,18 @@ package com.android.settings.wifi.dpp; import android.app.Application; import android.net.wifi.EasyConnectStatusCallback; import android.net.wifi.WifiManager; +import android.util.SparseArray; -import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.AndroidViewModel; +import androidx.lifecycle.MutableLiveData; public class WifiDppInitiatorViewModel extends AndroidViewModel { private MutableLiveData mEnrolleeSuccessNetworkId; private MutableLiveData mStatusCode; private boolean mIsWifiDppHandshaking; + private String mTriedSsid; + private SparseArray mTriedChannels; + private int[] mBandArray; public WifiDppInitiatorViewModel(Application application) { super(application); @@ -48,6 +52,18 @@ public class WifiDppInitiatorViewModel extends AndroidViewModel { return mStatusCode; } + String getTriedSsid() { + return mTriedSsid; + } + + SparseArray getTriedChannels() { + return mTriedChannels; + } + + int[] getBandArray() { + return mBandArray; + } + boolean isWifiDppHandshaking() { return mIsWifiDppHandshaking; } @@ -83,8 +99,12 @@ public class WifiDppInitiatorViewModel extends AndroidViewModel { } @Override - public void onFailure(int code) { + public void onFailure(int code, String ssid, SparseArray channelListArray, + int[] operatingClassArray) { mIsWifiDppHandshaking = false; + mTriedSsid = ssid; + mTriedChannels = channelListArray; + mBandArray = operatingClassArray; mStatusCode.setValue(code); }