Merge "Check Wi-Fi permissions for QrCode scanner" into tm-dev
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user