Restrict secondary users to share Wi-Fi network

- Remove "Share" and "Forget" options from the long press menu

- Add SafetyNet Logging for security report

Bug: 206986392
Test: manual test
make RunSettingsRoboTests \
  ROBOTEST_FILTER=NetworkProviderSettingsTest

Change-Id: Ic434f0583cba557228c72508a501347ffa3141e1
Merged-In: Ic434f0583cba557228c72508a501347ffa3141e1
This commit is contained in:
Weng Su
2022-03-25 21:39:02 +08:00
parent f48ae98972
commit 4c4a1f58c1
2 changed files with 127 additions and 7 deletions

View File

@@ -15,6 +15,9 @@
*/
package com.android.settings.network;
import static com.android.settings.network.NetworkProviderSettings.MENU_ID_DISCONNECT;
import static com.android.settings.network.NetworkProviderSettings.MENU_ID_FORGET;
import static com.android.settings.network.NetworkProviderSettings.MENU_ID_SHARE;
import static com.android.settings.wifi.WifiConfigUiBase2.MODE_CONNECT;
import static com.android.settings.wifi.WifiConfigUiBase2.MODE_MODIFY;
@@ -76,6 +79,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
@@ -105,6 +109,8 @@ public class NetworkProviderSettingsTest {
@Mock
private WifiPickerTracker mMockWifiPickerTracker;
@Mock
private WifiEntry mWifiEntry;
@Mock
private PreferenceManager mPreferenceManager;
@Mock
private InternetResetHelper mInternetResetHelper;
@@ -113,6 +119,8 @@ public class NetworkProviderSettingsTest {
@Mock
private LayoutPreference mResetInternetPreference;
@Mock
private ContextMenu mContextMenu;
@Mock
private MenuItem mMenuItem;
@Mock
InternetUpdater mInternetUpdater;
@@ -317,12 +325,54 @@ public class NetworkProviderSettingsTest {
final View view = mock(View.class);
when(view.getTag()).thenReturn(connectedWifiEntryPreference);
final ContextMenu menu = mock(ContextMenu.class);
mNetworkProviderSettings.onCreateContextMenu(menu, view, null /* info */);
mNetworkProviderSettings.onCreateContextMenu(mContextMenu, view, null /* info */);
verify(menu).add(anyInt(), eq(NetworkProviderSettings.MENU_ID_FORGET), anyInt(), anyInt());
verify(menu).add(anyInt(), eq(NetworkProviderSettings.MENU_ID_DISCONNECT), anyInt(),
anyInt());
verify(mContextMenu).add(anyInt(), eq(MENU_ID_FORGET), anyInt(), anyInt());
verify(mContextMenu).add(anyInt(), eq(MENU_ID_DISCONNECT), anyInt(), anyInt());
}
@Test
public void onCreateContextMenu_canShare_shouldHaveShareMenuForConnectedWifiEntry() {
final FragmentActivity activity = mock(FragmentActivity.class);
when(activity.getApplicationContext()).thenReturn(mContext);
when(mNetworkProviderSettings.getActivity()).thenReturn(activity);
when(mWifiEntry.canDisconnect()).thenReturn(true);
when(mWifiEntry.canShare()).thenReturn(true);
when(mWifiEntry.canForget()).thenReturn(true);
when(mWifiEntry.isSaved()).thenReturn(true);
when(mWifiEntry.getConnectedState()).thenReturn(WifiEntry.CONNECTED_STATE_CONNECTED);
final LongPressWifiEntryPreference connectedWifiEntryPreference =
mNetworkProviderSettings.createLongPressWifiEntryPreference(mWifiEntry);
final View view = mock(View.class);
when(view.getTag()).thenReturn(connectedWifiEntryPreference);
mNetworkProviderSettings.onCreateContextMenu(mContextMenu, view, null /* info */);
verify(mContextMenu).add(anyInt(), eq(MENU_ID_SHARE), anyInt(), anyInt());
}
@Test
public void onCreateContextMenu_canNotShare_shouldDisappearShareMenuForConnectedWifiEntry() {
final FragmentActivity activity = mock(FragmentActivity.class);
when(activity.getApplicationContext()).thenReturn(mContext);
when(mNetworkProviderSettings.getActivity()).thenReturn(activity);
when(mWifiEntry.canDisconnect()).thenReturn(true);
when(mWifiEntry.canShare()).thenReturn(false);
when(mWifiEntry.canForget()).thenReturn(true);
when(mWifiEntry.isSaved()).thenReturn(true);
when(mWifiEntry.getConnectedState()).thenReturn(WifiEntry.CONNECTED_STATE_CONNECTED);
final LongPressWifiEntryPreference connectedWifiEntryPreference =
mNetworkProviderSettings.createLongPressWifiEntryPreference(mWifiEntry);
final View view = mock(View.class);
when(view.getTag()).thenReturn(connectedWifiEntryPreference);
mNetworkProviderSettings.onCreateContextMenu(mContextMenu, view, null /* info */);
verify(mContextMenu, never()).add(anyInt(), eq(MENU_ID_SHARE), anyInt(), anyInt());
}
@Test
@@ -546,6 +596,46 @@ public class NetworkProviderSettingsTest {
verify(mAirplaneModeEnabler).stop();
}
@Test
public void addShareMenuIfSuitable_isAdmin_addMenu() {
mNetworkProviderSettings.mIsAdmin = true;
Mockito.reset(mContextMenu);
mNetworkProviderSettings.addShareMenuIfSuitable(mContextMenu);
verify(mContextMenu).add(anyInt(), eq(MENU_ID_SHARE), anyInt(), anyInt());
}
@Test
public void addShareMenuIfSuitable_isNotAdmin_notAddMenu() {
mNetworkProviderSettings.mIsAdmin = false;
Mockito.reset(mContextMenu);
mNetworkProviderSettings.addShareMenuIfSuitable(mContextMenu);
verify(mContextMenu, never()).add(anyInt(), eq(MENU_ID_SHARE), anyInt(), anyInt());
}
@Test
public void addForgetMenuIfSuitable_isAdmin_addMenu() {
mNetworkProviderSettings.mIsAdmin = true;
Mockito.reset(mContextMenu);
mNetworkProviderSettings.addForgetMenuIfSuitable(mContextMenu);
verify(mContextMenu).add(anyInt(), eq(MENU_ID_FORGET), anyInt(), anyInt());
}
@Test
public void addForgetMenuIfSuitable_isNotAdmin_notAddMenu() {
mNetworkProviderSettings.mIsAdmin = false;
Mockito.reset(mContextMenu);
mNetworkProviderSettings.addForgetMenuIfSuitable(mContextMenu);
verify(mContextMenu, never()).add(anyInt(), eq(MENU_ID_FORGET), anyInt(), anyInt());
}
@Implements(PreferenceFragmentCompat.class)
public static class ShadowPreferenceFragmentCompat {