Merge "Check Wi-Fi permissions for QrCode scanner" into tm-dev

This commit is contained in:
Weng Su
2022-04-27 09:33:26 +00:00
committed by Android (Google) Code Review
2 changed files with 97 additions and 4 deletions

View File

@@ -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;
@@ -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;
@@ -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
@@ -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.
@@ -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();
}

View File

@@ -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;
@@ -49,6 +57,10 @@ public class WifiDppQrCodeScannerFragmentTest {
WifiPickerTracker mWifiPickerTracker;
@Mock
WifiEntry mWifiEntry;
@Mock
WifiPermissionChecker mWifiPermissionChecker;
@Mock
FragmentActivity mActivity;
WifiDppQrCodeScannerFragment mFragment;
@@ -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
@@ -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();
}
}