Loading src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java +35 −2 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.os.Process; import android.os.SimpleClock; import android.os.SystemClock; import android.text.TextUtils; import android.util.EventLog; import android.util.Log; import android.util.Size; import android.view.LayoutInflater; Loading @@ -58,6 +59,7 @@ import com.android.settings.R; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.qrcode.QrCamera; import com.android.settingslib.qrcode.QrDecorateView; import com.android.settingslib.wifi.WifiPermissionChecker; import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiPickerTracker; Loading Loading @@ -117,9 +119,9 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl private int mLatestStatusCode = WifiDppUtils.EASY_CONNECT_EVENT_FAILURE_NONE; @VisibleForTesting WifiPickerTracker mWifiPickerTracker; private WifiPickerTracker mWifiPickerTracker; private HandlerThread mWorkerThread; private WifiPermissionChecker mWifiPermissionChecker; private final Handler mHandler = new Handler() { @Override Loading Loading @@ -363,6 +365,15 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl mIsConfiguratorMode = true; } public WifiDppQrCodeScannerFragment(WifiPickerTracker wifiPickerTracker, WifiPermissionChecker wifiPermissionChecker) { super(); mIsConfiguratorMode = true; mWifiPickerTracker = wifiPickerTracker; mWifiPermissionChecker = wifiPermissionChecker; } /** * Enrollee container activity of the fragment should create instance with this constructor and * specify the SSID string of the WI-Fi network to be provisioned. Loading Loading @@ -719,6 +730,28 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl resultIntent.putExtra(KEY_WIFI_CONFIGURATION, mEnrolleeWifiConfiguration); final Activity hostActivity = getActivity(); if (hostActivity == null) return; if (mWifiPermissionChecker == null) { mWifiPermissionChecker = new WifiPermissionChecker(hostActivity); } if (!mWifiPermissionChecker.canAccessWifiState()) { Log.w(TAG, "Calling package does not have ACCESS_WIFI_STATE permission for result."); EventLog.writeEvent(0x534e4554, "187176859", mWifiPermissionChecker.getLaunchedPackage(), "no ACCESS_WIFI_STATE permission"); hostActivity.finish(); return; } if (!mWifiPermissionChecker.canAccessFineLocation()) { Log.w(TAG, "Calling package does not have ACCESS_FINE_LOCATION permission for result."); EventLog.writeEvent(0x534e4554, "187176859", mWifiPermissionChecker.getLaunchedPackage(), "no ACCESS_FINE_LOCATION permission"); hostActivity.finish(); return; } hostActivity.setResult(Activity.RESULT_OK, resultIntent); hostActivity.finish(); } Loading tests/robotests/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragmentTest.java +62 −2 Original line number Diff line number Diff line Loading @@ -19,11 +19,19 @@ package com.android.settings.wifi.dpp; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.Activity; import androidx.fragment.app.FragmentActivity; import com.android.settingslib.wifi.WifiPermissionChecker; import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiPickerTracker; Loading @@ -49,6 +57,10 @@ public class WifiDppQrCodeScannerFragmentTest { WifiPickerTracker mWifiPickerTracker; @Mock WifiEntry mWifiEntry; @Mock WifiPermissionChecker mWifiPermissionChecker; @Mock FragmentActivity mActivity; WifiDppQrCodeScannerFragment mFragment; Loading @@ -57,8 +69,8 @@ public class WifiDppQrCodeScannerFragmentTest { when(mWifiEntry.getSsid()).thenReturn(WIFI_SSID); when(mWifiPickerTracker.getWifiEntries()).thenReturn(Arrays.asList(mWifiEntry)); mFragment = spy(new WifiDppQrCodeScannerFragment()); mFragment.mWifiPickerTracker = mWifiPickerTracker; mFragment = spy( new WifiDppQrCodeScannerFragment(mWifiPickerTracker, mWifiPermissionChecker)); } @Test Loading @@ -84,4 +96,52 @@ public class WifiDppQrCodeScannerFragmentTest { assertThat(mFragment.canConnectWifi(WIFI_SSID)).isFalse(); verify(mFragment).showErrorMessageAndRestartCamera(anyInt()); } @Test public void onSuccess_noWifiPermission_finishActivityWithoutSetResult() { when(mFragment.getActivity()).thenReturn(mActivity); when(mWifiPermissionChecker.canAccessWifiState()).thenReturn(false); when(mWifiPermissionChecker.canAccessFineLocation()).thenReturn(false); mFragment.onSuccess(); verify(mActivity).finish(); verify(mActivity, never()).setResult(eq(Activity.RESULT_OK), any()); } @Test public void onSuccess_hasAccessWifiStatePermissionOnly_finishActivityWithoutSetResult() { when(mFragment.getActivity()).thenReturn(mActivity); when(mWifiPermissionChecker.canAccessWifiState()).thenReturn(true); when(mWifiPermissionChecker.canAccessFineLocation()).thenReturn(false); mFragment.onSuccess(); verify(mActivity).finish(); verify(mActivity, never()).setResult(eq(Activity.RESULT_OK), any()); } @Test public void onSuccess_hasAccessFineLocationPermissionOnly_finishActivityWithoutSetResult() { when(mFragment.getActivity()).thenReturn(mActivity); when(mWifiPermissionChecker.canAccessWifiState()).thenReturn(false); when(mWifiPermissionChecker.canAccessFineLocation()).thenReturn(true); mFragment.onSuccess(); verify(mActivity).finish(); verify(mActivity, never()).setResult(eq(Activity.RESULT_OK), any()); } @Test public void onSuccess_hasRequiredPermissions_finishActivityWithSetResult() { when(mFragment.getActivity()).thenReturn(mActivity); when(mWifiPermissionChecker.canAccessWifiState()).thenReturn(true); when(mWifiPermissionChecker.canAccessFineLocation()).thenReturn(true); mFragment.onSuccess(); verify(mActivity).setResult(eq(Activity.RESULT_OK), any()); verify(mActivity).finish(); } } Loading
src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java +35 −2 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.os.Process; import android.os.SimpleClock; import android.os.SystemClock; import android.text.TextUtils; import android.util.EventLog; import android.util.Log; import android.util.Size; import android.view.LayoutInflater; Loading @@ -58,6 +59,7 @@ import com.android.settings.R; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.qrcode.QrCamera; import com.android.settingslib.qrcode.QrDecorateView; import com.android.settingslib.wifi.WifiPermissionChecker; import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiPickerTracker; Loading Loading @@ -117,9 +119,9 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl private int mLatestStatusCode = WifiDppUtils.EASY_CONNECT_EVENT_FAILURE_NONE; @VisibleForTesting WifiPickerTracker mWifiPickerTracker; private WifiPickerTracker mWifiPickerTracker; private HandlerThread mWorkerThread; private WifiPermissionChecker mWifiPermissionChecker; private final Handler mHandler = new Handler() { @Override Loading Loading @@ -363,6 +365,15 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl mIsConfiguratorMode = true; } public WifiDppQrCodeScannerFragment(WifiPickerTracker wifiPickerTracker, WifiPermissionChecker wifiPermissionChecker) { super(); mIsConfiguratorMode = true; mWifiPickerTracker = wifiPickerTracker; mWifiPermissionChecker = wifiPermissionChecker; } /** * Enrollee container activity of the fragment should create instance with this constructor and * specify the SSID string of the WI-Fi network to be provisioned. Loading Loading @@ -719,6 +730,28 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl resultIntent.putExtra(KEY_WIFI_CONFIGURATION, mEnrolleeWifiConfiguration); final Activity hostActivity = getActivity(); if (hostActivity == null) return; if (mWifiPermissionChecker == null) { mWifiPermissionChecker = new WifiPermissionChecker(hostActivity); } if (!mWifiPermissionChecker.canAccessWifiState()) { Log.w(TAG, "Calling package does not have ACCESS_WIFI_STATE permission for result."); EventLog.writeEvent(0x534e4554, "187176859", mWifiPermissionChecker.getLaunchedPackage(), "no ACCESS_WIFI_STATE permission"); hostActivity.finish(); return; } if (!mWifiPermissionChecker.canAccessFineLocation()) { Log.w(TAG, "Calling package does not have ACCESS_FINE_LOCATION permission for result."); EventLog.writeEvent(0x534e4554, "187176859", mWifiPermissionChecker.getLaunchedPackage(), "no ACCESS_FINE_LOCATION permission"); hostActivity.finish(); return; } hostActivity.setResult(Activity.RESULT_OK, resultIntent); hostActivity.finish(); } Loading
tests/robotests/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragmentTest.java +62 −2 Original line number Diff line number Diff line Loading @@ -19,11 +19,19 @@ package com.android.settings.wifi.dpp; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.Activity; import androidx.fragment.app.FragmentActivity; import com.android.settingslib.wifi.WifiPermissionChecker; import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiPickerTracker; Loading @@ -49,6 +57,10 @@ public class WifiDppQrCodeScannerFragmentTest { WifiPickerTracker mWifiPickerTracker; @Mock WifiEntry mWifiEntry; @Mock WifiPermissionChecker mWifiPermissionChecker; @Mock FragmentActivity mActivity; WifiDppQrCodeScannerFragment mFragment; Loading @@ -57,8 +69,8 @@ public class WifiDppQrCodeScannerFragmentTest { when(mWifiEntry.getSsid()).thenReturn(WIFI_SSID); when(mWifiPickerTracker.getWifiEntries()).thenReturn(Arrays.asList(mWifiEntry)); mFragment = spy(new WifiDppQrCodeScannerFragment()); mFragment.mWifiPickerTracker = mWifiPickerTracker; mFragment = spy( new WifiDppQrCodeScannerFragment(mWifiPickerTracker, mWifiPermissionChecker)); } @Test Loading @@ -84,4 +96,52 @@ public class WifiDppQrCodeScannerFragmentTest { assertThat(mFragment.canConnectWifi(WIFI_SSID)).isFalse(); verify(mFragment).showErrorMessageAndRestartCamera(anyInt()); } @Test public void onSuccess_noWifiPermission_finishActivityWithoutSetResult() { when(mFragment.getActivity()).thenReturn(mActivity); when(mWifiPermissionChecker.canAccessWifiState()).thenReturn(false); when(mWifiPermissionChecker.canAccessFineLocation()).thenReturn(false); mFragment.onSuccess(); verify(mActivity).finish(); verify(mActivity, never()).setResult(eq(Activity.RESULT_OK), any()); } @Test public void onSuccess_hasAccessWifiStatePermissionOnly_finishActivityWithoutSetResult() { when(mFragment.getActivity()).thenReturn(mActivity); when(mWifiPermissionChecker.canAccessWifiState()).thenReturn(true); when(mWifiPermissionChecker.canAccessFineLocation()).thenReturn(false); mFragment.onSuccess(); verify(mActivity).finish(); verify(mActivity, never()).setResult(eq(Activity.RESULT_OK), any()); } @Test public void onSuccess_hasAccessFineLocationPermissionOnly_finishActivityWithoutSetResult() { when(mFragment.getActivity()).thenReturn(mActivity); when(mWifiPermissionChecker.canAccessWifiState()).thenReturn(false); when(mWifiPermissionChecker.canAccessFineLocation()).thenReturn(true); mFragment.onSuccess(); verify(mActivity).finish(); verify(mActivity, never()).setResult(eq(Activity.RESULT_OK), any()); } @Test public void onSuccess_hasRequiredPermissions_finishActivityWithSetResult() { when(mFragment.getActivity()).thenReturn(mActivity); when(mWifiPermissionChecker.canAccessWifiState()).thenReturn(true); when(mWifiPermissionChecker.canAccessFineLocation()).thenReturn(true); mFragment.onSuccess(); verify(mActivity).setResult(eq(Activity.RESULT_OK), any()); verify(mActivity).finish(); } }