Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1c15ca32 authored by Weng Su's avatar Weng Su Committed by Android (Google) Code Review
Browse files

Merge changes from topic...

Merge changes from topic "sc-dev_WifiDialogActivity_permission-sc-qpr1-dev-sc-v2-dev" into sc-v2-dev

* changes:
  [RESTRICT AUTOMERGE] Revert "Add permission checking to WifiDialogActivity"
  [RESTRICT AUTOMERGE] Revert "Add SafetyNet logging"
parents f83531e0 34b57161
Loading
Loading
Loading
Loading
+13 −57
Original line number Diff line number Diff line
@@ -16,12 +16,8 @@

package com.android.settings.wifi;

import static android.Manifest.permission.ACCESS_COARSE_LOCATION;
import static android.Manifest.permission.ACCESS_FINE_LOCATION;

import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
@@ -33,7 +29,6 @@ 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 androidx.annotation.VisibleForTesting;
@@ -83,12 +78,10 @@ public class WifiDialogActivity extends ObservableActivity implements WifiDialog

    public static final String KEY_WIFI_CONFIGURATION = "wifi_configuration";

    @VisibleForTesting
    static final int RESULT_CONNECTED = RESULT_FIRST_USER;
    private static final int RESULT_CONNECTED = RESULT_FIRST_USER;
    private static final int RESULT_FORGET = RESULT_FIRST_USER + 1;

    @VisibleForTesting
    static final int REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER = 0;
    private static final int REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER = 0;

    // Max age of tracked WifiEntries.
    private static final long MAX_SCAN_AGE_MILLIS = 15_000;
@@ -263,7 +256,10 @@ public class WifiDialogActivity extends ObservableActivity implements WifiDialog
            }
        }

        Intent resultData = hasPermissionForResult() ? createResultData(config, null) : null;
        final Intent resultData = new Intent();
        if (config != null) {
            resultData.putExtra(KEY_WIFI_CONFIGURATION, config);
        }
        setResult(RESULT_CONNECTED, resultData);
        finish();
    }
@@ -291,22 +287,17 @@ public class WifiDialogActivity extends ObservableActivity implements WifiDialog
            }
        }

        Intent resultData = hasPermissionForResult() ? createResultData(config, accessPoint) : null;
        setResult(RESULT_CONNECTED, resultData);
        finish();
    }

    protected Intent createResultData(WifiConfiguration config, AccessPoint accessPoint) {
        Intent result = new Intent();
        Intent resultData = new Intent();
        if (accessPoint != null) {
            Bundle accessPointState = new Bundle();
            accessPoint.saveWifiState(accessPointState);
            result.putExtra(KEY_ACCESS_POINT_STATE, accessPointState);
            resultData.putExtra(KEY_ACCESS_POINT_STATE, accessPointState);
        }
        if (config != null) {
            result.putExtra(KEY_WIFI_CONFIGURATION, config);
            resultData.putExtra(KEY_WIFI_CONFIGURATION, config);
        }
        return result;
        setResult(RESULT_CONNECTED, resultData);
        finish();
    }

    @Override
@@ -342,44 +333,9 @@ public class WifiDialogActivity extends ObservableActivity implements WifiDialog
            if (resultCode != RESULT_OK) {
                return;
            }
            if (hasPermissionForResult()) {

            setResult(RESULT_CONNECTED, data);
            } else {
                setResult(RESULT_CONNECTED);
            }
            finish();
        }
    }

    protected boolean hasPermissionForResult() {
        final String callingPackage = getCallingPackage();
        if (callingPackage == null) {
            Log.d(TAG, "Failed to get the calling package, don't return the result.");
            EventLog.writeEvent(0x534e4554, "185126813", -1 /* UID */, "no calling package");
            return false;
        }

        if (getPackageManager().checkPermission(ACCESS_COARSE_LOCATION, callingPackage)
                == PackageManager.PERMISSION_GRANTED) {
            Log.d(TAG, "The calling package has ACCESS_COARSE_LOCATION permission for result.");
            return true;
        }

        if (getPackageManager().checkPermission(ACCESS_FINE_LOCATION, callingPackage)
                == PackageManager.PERMISSION_GRANTED) {
            Log.d(TAG, "The calling package has ACCESS_FINE_LOCATION permission for result.");
            return true;
        }

        Log.d(TAG, "The calling package does not have the necessary permissions for result.");
        try {
            EventLog.writeEvent(0x534e4554, "185126813",
                    getPackageManager().getPackageUid(callingPackage, 0 /* flags */),
                    "no permission");
        } catch (PackageManager.NameNotFoundException e) {
            EventLog.writeEvent(0x534e4554, "185126813", -1 /* UID */, "no permission");
            Log.w(TAG, "Cannot find the UID, calling package: " + callingPackage, e);
        }
        return false;
    }
}
+0 −175
Original line number Diff line number Diff line
@@ -16,25 +16,12 @@

package com.android.settings.wifi;

import static android.Manifest.permission.ACCESS_COARSE_LOCATION;
import static android.Manifest.permission.ACCESS_FINE_LOCATION;

import static com.android.settings.wifi.WifiDialogActivity.REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER;
import static com.android.settings.wifi.WifiDialogActivity.RESULT_CONNECTED;
import static com.android.settings.wifi.WifiDialogActivity.RESULT_OK;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;

import androidx.lifecycle.Lifecycle.State;
import androidx.test.core.app.ActivityScenario;
@@ -44,7 +31,6 @@ import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import com.android.settings.testutils.shadow.ShadowConnectivityManager;
import com.android.settings.testutils.shadow.ShadowNetworkDetailsTracker;
import com.android.settings.testutils.shadow.ShadowWifiManager;
import com.android.settingslib.wifi.AccessPoint;

import com.google.android.setupcompat.util.WizardManagerHelper;

@@ -69,25 +55,7 @@ import org.robolectric.util.ReflectionHelpers;
})
public class WifiDialogActivityTest {

    private static final String CALLING_PACKAGE = "calling_package";
    private static final String AP1_SSID = "\"ap1\"";

    @Mock
    PackageManager mPackageManager;
    @Mock
    WifiManager mWifiManager;
    @Mock
    WifiDialog mWifiDialog;
    @Mock
    WifiConfiguration mWifiConfiguration;
    @Mock
    AccessPoint mAccessPoint;
    @Mock
    WifiDialog2 mWifiDialog2;
    @Mock
    WifiConfigController2 mWifiConfiguration2;
    @Mock
    Intent mResultData;
    @Mock
    private WifiConfigController mController;
    @Mock
@@ -98,10 +66,6 @@ public class WifiDialogActivityTest {
    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        when(mWifiDialog.getController()).thenReturn(mController);
        when(mController.getConfig()).thenReturn(mWifiConfiguration);
        when(mController.getAccessPoint()).thenReturn(mAccessPoint);
        when(mWifiDialog2.getController()).thenReturn(mWifiConfiguration2);

        WifiConfiguration wifiConfig = new WifiConfiguration();
        wifiConfig.SSID = AP1_SSID;
@@ -133,52 +97,6 @@ public class WifiDialogActivityTest {
        assertThat(ShadowWifiManager.get().savedWifiConfig.SSID).isEqualTo(AP1_SSID);
    }

    @Test
    public void onSubmit_noPermissionForResult_setResultWithoutData() {
        WifiDialogActivity activity = spy(Robolectric.setupActivity(WifiDialogActivity.class));
        when(activity.hasPermissionForResult()).thenReturn(false);
        when(activity.getSystemService(WifiManager.class)).thenReturn(mWifiManager);

        activity.onSubmit(mWifiDialog);

        verify(activity).setResult(RESULT_CONNECTED, null);
    }

    @Test
    public void onSubmit_hasPermissionForResult_setResultWithData() {
        WifiDialogActivity activity = spy(Robolectric.setupActivity(WifiDialogActivity.class));
        when(activity.hasPermissionForResult()).thenReturn(true);
        when(activity.createResultData(any(), any())).thenReturn(mResultData);
        when(activity.getSystemService(WifiManager.class)).thenReturn(mWifiManager);

        activity.onSubmit(mWifiDialog);

        verify(activity).setResult(RESULT_CONNECTED, mResultData);
    }

    @Test
    public void onSubmit2_noPermissionForResult_setResultWithoutData() {
        WifiDialogActivity activity = spy(Robolectric.setupActivity(WifiDialogActivity.class));
        when(activity.hasPermissionForResult()).thenReturn(false);
        when(activity.getSystemService(WifiManager.class)).thenReturn(mWifiManager);

        activity.onSubmit(mWifiDialog2);

        verify(activity).setResult(RESULT_CONNECTED, null);
    }

    @Test
    public void onSubmit2_hasPermissionForResult_setResultWithData() {
        WifiDialogActivity activity = spy(Robolectric.setupActivity(WifiDialogActivity.class));
        when(activity.hasPermissionForResult()).thenReturn(true);
        when(activity.createResultData(any(), any())).thenReturn(mResultData);
        when(activity.getSystemService(WifiManager.class)).thenReturn(mWifiManager);

        activity.onSubmit(mWifiDialog2);

        verify(activity).setResult(RESULT_CONNECTED, mResultData);
    }

    @Test
    @Ignore
    public void onSubmit2_whenConnectForCallerIsTrue_shouldConnectToNetwork() {
@@ -260,97 +178,4 @@ public class WifiDialogActivityTest {
        assertThat(dialog.getContext().getThemeResId())
                .isEqualTo(R.style.SuwAlertDialogThemeCompat_Light);
    }

    @Test
    public void onActivityResult_noPermissionForResult_setResultWithoutData() {
        WifiDialogActivity activity = spy(Robolectric.setupActivity(WifiDialogActivity.class));
        when(activity.hasPermissionForResult()).thenReturn(false);
        final Intent data = new Intent();

        activity.onActivityResult(REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER, RESULT_OK,
                data);

        verify(activity).setResult(RESULT_CONNECTED);
    }

    @Test
    public void onActivityResult_hasPermissionForResult_setResultWithData() {
        WifiDialogActivity activity = spy(Robolectric.setupActivity(WifiDialogActivity.class));
        when(activity.hasPermissionForResult()).thenReturn(true);
        final Intent data = new Intent();

        activity.onActivityResult(REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER, RESULT_OK,
                data);

        verify(activity).setResult(RESULT_CONNECTED, data);
    }

    @Test
    public void hasPermissionForResult_noCallingPackage_returnFalse() {
        WifiDialogActivity activity = spy(Robolectric.setupActivity(WifiDialogActivity.class));
        when(activity.getCallingPackage()).thenReturn(null);

        final boolean result = activity.hasPermissionForResult();

        assertThat(result).isFalse();
    }

    @Test
    public void hasPermissionForResult_noPermission_returnFalse() {
        WifiDialogActivity activity = spy(Robolectric.setupActivity(WifiDialogActivity.class));
        when(activity.getCallingPackage()).thenReturn(null);
        when(mPackageManager.checkPermission(ACCESS_COARSE_LOCATION, CALLING_PACKAGE))
                .thenReturn(PackageManager.PERMISSION_DENIED);
        when(mPackageManager.checkPermission(ACCESS_FINE_LOCATION, CALLING_PACKAGE))
                .thenReturn(PackageManager.PERMISSION_DENIED);

        final boolean result = activity.hasPermissionForResult();

        assertThat(result).isFalse();
    }

    @Test
    public void hasPermissionForResult_hasCoarseLocationPermission_returnTrue() {
        WifiDialogActivity activity = spy(Robolectric.setupActivity(WifiDialogActivity.class));
        when(activity.getCallingPackage()).thenReturn(CALLING_PACKAGE);
        when(activity.getPackageManager()).thenReturn(mPackageManager);
        when(mPackageManager.checkPermission(ACCESS_COARSE_LOCATION, CALLING_PACKAGE))
                .thenReturn(PackageManager.PERMISSION_GRANTED);
        when(mPackageManager.checkPermission(ACCESS_FINE_LOCATION, CALLING_PACKAGE))
                .thenReturn(PackageManager.PERMISSION_DENIED);

        final boolean result = activity.hasPermissionForResult();

        assertThat(result).isTrue();
    }

    @Test
    public void hasPermissionForResult_hasFineLocationPermission_returnTrue() {
        WifiDialogActivity activity = spy(Robolectric.setupActivity(WifiDialogActivity.class));
        when(activity.getCallingPackage()).thenReturn(CALLING_PACKAGE);
        when(activity.getPackageManager()).thenReturn(mPackageManager);
        when(mPackageManager.checkPermission(ACCESS_COARSE_LOCATION, CALLING_PACKAGE))
                .thenReturn(PackageManager.PERMISSION_DENIED);
        when(mPackageManager.checkPermission(ACCESS_FINE_LOCATION, CALLING_PACKAGE))
                .thenReturn(PackageManager.PERMISSION_GRANTED);

        final boolean result = activity.hasPermissionForResult();

        assertThat(result).isTrue();
    }

    @Test
    public void hasPermissionForResult_haveBothLocationPermissions_returnTrue() {
        WifiDialogActivity activity = spy(Robolectric.setupActivity(WifiDialogActivity.class));
        when(activity.getCallingPackage()).thenReturn(CALLING_PACKAGE);
        when(activity.getPackageManager()).thenReturn(mPackageManager);
        when(mPackageManager.checkPermission(ACCESS_COARSE_LOCATION, CALLING_PACKAGE))
                .thenReturn(PackageManager.PERMISSION_GRANTED);
        when(mPackageManager.checkPermission(ACCESS_FINE_LOCATION, CALLING_PACKAGE))
                .thenReturn(PackageManager.PERMISSION_GRANTED);

        final boolean result = activity.hasPermissionForResult();

        assertThat(result).isTrue();
    }
}