Merge "Refersh saved Wi-Fi networks" into main
This commit is contained in:
committed by
Android (Google) Code Review
commit
cee9631614
@@ -86,9 +86,18 @@ public class WifiEntryPreference extends RestrictedPreference implements
|
||||
|
||||
setLayoutResource(R.layout.preference_access_point);
|
||||
mFrictionSld = getFrictionStateListDrawable();
|
||||
mIconInjector = iconInjector;
|
||||
setWifiEntry(wifiEntry);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set updated {@link WifiEntry} to refresh the preference
|
||||
*
|
||||
* @param wifiEntry An instance of {@link WifiEntry}
|
||||
*/
|
||||
public void setWifiEntry(@NonNull WifiEntry wifiEntry) {
|
||||
mWifiEntry = wifiEntry;
|
||||
mWifiEntry.setListener(this);
|
||||
mIconInjector = iconInjector;
|
||||
refresh();
|
||||
}
|
||||
|
||||
@@ -151,14 +160,9 @@ public class WifiEntryPreference extends RestrictedPreference implements
|
||||
if (mWifiEntry instanceof HotspotNetworkEntry) {
|
||||
updateHotspotIcon(((HotspotNetworkEntry) mWifiEntry).getDeviceType());
|
||||
} else {
|
||||
int level = mWifiEntry.getLevel();
|
||||
boolean showX = mWifiEntry.shouldShowXLevelIcon();
|
||||
|
||||
if (level != mLevel || showX != mShowX) {
|
||||
mLevel = level;
|
||||
mShowX = showX;
|
||||
updateIcon(mShowX, mLevel);
|
||||
}
|
||||
mLevel = mWifiEntry.getLevel();
|
||||
mShowX = mWifiEntry.shouldShowXLevelIcon();
|
||||
updateIcon(mShowX, mLevel);
|
||||
}
|
||||
|
||||
setSummary(mWifiEntry.getSummary(false /* concise */));
|
||||
|
@@ -66,6 +66,7 @@ public class SavedAccessPointsPreferenceController2 extends BasePreferenceContro
|
||||
super.displayPreference(screen);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void displayPreference(PreferenceScreen screen, List<WifiEntry> wifiEntries) {
|
||||
if (wifiEntries == null || wifiEntries.isEmpty()) {
|
||||
mWifiEntries.clear();
|
||||
@@ -89,28 +90,32 @@ public class SavedAccessPointsPreferenceController2 extends BasePreferenceContro
|
||||
* mPreferenceGroup.removeAll() then mPreferenceGroup.addPreference for mWifiEntries.
|
||||
*/
|
||||
private void updatePreference() {
|
||||
// Remove the Preference of removed WifiEntry.
|
||||
final List<String> removedPreferenceKeys = new ArrayList<>();
|
||||
final int preferenceCount = mPreferenceGroup.getPreferenceCount();
|
||||
// Update WifiEntry to existing preference and find out which WifiEntry was removed by key.
|
||||
List<String> removedKeys = new ArrayList<>();
|
||||
int preferenceCount = mPreferenceGroup.getPreferenceCount();
|
||||
for (int i = 0; i < preferenceCount; i++) {
|
||||
final String key = mPreferenceGroup.getPreference(i).getKey();
|
||||
if (mWifiEntries.stream().filter(wifiEntry ->
|
||||
TextUtils.equals(key, wifiEntry.getKey())).count() == 0) {
|
||||
removedPreferenceKeys.add(key);
|
||||
WifiEntryPreference pref = (WifiEntryPreference) mPreferenceGroup.getPreference(i);
|
||||
WifiEntry wifiEntry = mWifiEntries.stream()
|
||||
.filter(entry -> TextUtils.equals(pref.getKey(), entry.getKey()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
if (wifiEntry != null) {
|
||||
pref.setWifiEntry(wifiEntry);
|
||||
} else {
|
||||
removedKeys.add(pref.getKey());
|
||||
}
|
||||
}
|
||||
for (String removedPreferenceKey : removedPreferenceKeys) {
|
||||
mPreferenceGroup.removePreference(
|
||||
mPreferenceGroup.findPreference(removedPreferenceKey));
|
||||
// Remove preference by WifiEntry's key.
|
||||
for (String removedKey : removedKeys) {
|
||||
mPreferenceGroup.removePreference(mPreferenceGroup.findPreference(removedKey));
|
||||
}
|
||||
|
||||
// Add the Preference of new added WifiEntry.
|
||||
for (WifiEntry wifiEntry : mWifiEntries) {
|
||||
if (mPreferenceGroup.findPreference(wifiEntry.getKey()) == null) {
|
||||
final WifiEntryPreference preference = new WifiEntryPreference(mContext, wifiEntry);
|
||||
WifiEntryPreference preference = new WifiEntryPreference(mContext, wifiEntry);
|
||||
preference.setKey(wifiEntry.getKey());
|
||||
preference.setOnPreferenceClickListener(this);
|
||||
|
||||
mPreferenceGroup.addPreference(preference);
|
||||
}
|
||||
}
|
||||
|
@@ -19,7 +19,9 @@ import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.reset;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
@@ -97,6 +99,9 @@ public class WifiEntryPreferenceTest {
|
||||
|
||||
when(mMockWifiEntry.getTitle()).thenReturn(MOCK_TITLE);
|
||||
when(mMockWifiEntry.getSummary(false /* concise */)).thenReturn(MOCK_SUMMARY);
|
||||
when(mMockWifiEntry.getLevel()).thenReturn(0);
|
||||
when(mMockWifiEntry.shouldShowXLevelIcon()).thenReturn(false);
|
||||
when(mMockWifiEntry.getConnectedState()).thenReturn(WifiEntry.CONNECTED_STATE_DISCONNECTED);
|
||||
|
||||
when(mMockIconInjector.getIcon(false /* showX */, 0)).thenReturn(mMockDrawable0);
|
||||
when(mMockIconInjector.getIcon(false /* showX */, 1)).thenReturn(mMockDrawable1);
|
||||
@@ -115,7 +120,7 @@ public class WifiEntryPreferenceTest {
|
||||
when(mMockIconInjector.getIcon(true /* showX */, 4))
|
||||
.thenReturn(mMockShowXDrawable4);
|
||||
|
||||
mPref = new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
|
||||
mPref = spy(new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -137,6 +142,27 @@ public class WifiEntryPreferenceTest {
|
||||
assertThat(pref.getIcon()).isEqualTo(mMockDrawable0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setWifiEntry_connectedStateChanged_setIconAndSummary() {
|
||||
when(mMockWifiEntry.getLevel()).thenReturn(4);
|
||||
when(mMockWifiEntry.getConnectedState()).thenReturn(WifiEntry.CONNECTED_STATE_CONNECTED);
|
||||
|
||||
mPref.setWifiEntry(mMockWifiEntry);
|
||||
|
||||
verify(mPref).setIcon(any());
|
||||
verify(mPref).setSummary(anyString());
|
||||
|
||||
// Only the connection state changes.
|
||||
when(mMockWifiEntry.getConnectedState()).thenReturn(WifiEntry.CONNECTED_STATE_DISCONNECTED);
|
||||
reset(mPref);
|
||||
|
||||
mPref.setWifiEntry(mMockWifiEntry);
|
||||
|
||||
// The icon and summary should be set in case.
|
||||
verify(mPref).setIcon(any());
|
||||
verify(mPref).setSummary(anyString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void titleChanged_refresh_shouldUpdateTitle() {
|
||||
final String updatedTitle = "updated title";
|
||||
@@ -254,6 +280,8 @@ public class WifiEntryPreferenceTest {
|
||||
|
||||
@Test
|
||||
public void updateIcon_shouldSetTintListForDrawable() {
|
||||
reset(mMockDrawable4);
|
||||
|
||||
mPref.updateIcon(false /* showX */, 4 /* level */);
|
||||
|
||||
verify(mMockDrawable4).setTintList(any());
|
||||
|
@@ -24,29 +24,29 @@ import static com.google.common.truth.Truth.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.doNothing;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.preference.PreferenceCategory;
|
||||
import androidx.preference.PreferenceGroup;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
|
||||
import com.android.settings.wifi.WifiEntryPreference;
|
||||
import com.android.wifitrackerlib.WifiEntry;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.mockito.Spy;
|
||||
import org.mockito.junit.MockitoJUnit;
|
||||
import org.mockito.junit.MockitoRule;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@@ -55,26 +55,38 @@ import java.util.List;
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class SavedAccessPointsPreferenceController2Test {
|
||||
|
||||
private static final String PREFERENCE_KEY = "preference_key";
|
||||
private static final String TEST_KEY = "key";
|
||||
private static final String TEST_TITLE = "ssid_title";
|
||||
|
||||
@Rule
|
||||
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
|
||||
@Spy
|
||||
private Context mContext = ApplicationProvider.getApplicationContext();
|
||||
@Mock
|
||||
private PreferenceScreen mPreferenceScreen;
|
||||
@Mock
|
||||
private PreferenceCategory mPreferenceCategory;
|
||||
private PreferenceGroup mPreferenceGroup;
|
||||
@Mock
|
||||
private WifiEntryPreference mWifiEntryPreference;
|
||||
@Mock
|
||||
private WifiEntry mWifiEntry;
|
||||
|
||||
private Context mContext;
|
||||
private SavedAccessPointsWifiSettings2 mSettings;
|
||||
private SavedAccessPointsPreferenceController2 mController;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = RuntimeEnvironment.application;
|
||||
mSettings = spy(new SavedAccessPointsWifiSettings2());
|
||||
mController = spy(new SavedAccessPointsPreferenceController2(mContext, "test_key"));
|
||||
mController.setHost(mSettings);
|
||||
when(mPreferenceScreen.findPreference(PREFERENCE_KEY)).thenReturn(mPreferenceGroup);
|
||||
when(mPreferenceGroup.getContext()).thenReturn(mContext);
|
||||
when(mWifiEntryPreference.getKey()).thenReturn(TEST_KEY);
|
||||
when(mWifiEntryPreference.getTitle()).thenReturn(TEST_TITLE);
|
||||
when(mWifiEntry.getKey()).thenReturn(TEST_KEY);
|
||||
when(mWifiEntry.getTitle()).thenReturn(TEST_TITLE);
|
||||
|
||||
when(mPreferenceScreen.findPreference(mController.getPreferenceKey()))
|
||||
.thenReturn(mPreferenceCategory);
|
||||
when(mPreferenceCategory.getContext()).thenReturn(mContext);
|
||||
mSettings = spy(new SavedAccessPointsWifiSettings2());
|
||||
mController = spy(new SavedAccessPointsPreferenceController2(mContext, PREFERENCE_KEY));
|
||||
mController.setHost(mSettings);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -86,64 +98,52 @@ public class SavedAccessPointsPreferenceController2Test {
|
||||
|
||||
@Test
|
||||
public void getAvailability_oneSavedAccessPoint_shouldAvailable() {
|
||||
final WifiEntry mockWifiEntry = mock(WifiEntry.class);
|
||||
mController.mWifiEntries = Arrays.asList(mockWifiEntry);
|
||||
mController.mWifiEntries = Arrays.asList(mWifiEntry);
|
||||
|
||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void displayPreference_oneAccessPoint_shouldListIt() {
|
||||
final String title = "ssid_title";
|
||||
final WifiEntry mockWifiEntry = mock(WifiEntry.class);
|
||||
when(mockWifiEntry.getTitle()).thenReturn(title);
|
||||
final ArgumentCaptor<WifiEntryPreference> captor =
|
||||
public void displayPreference_newWifiEntry_addPreference() {
|
||||
when(mPreferenceGroup.getPreferenceCount()).thenReturn(0);
|
||||
|
||||
mController.displayPreference(mPreferenceScreen, Arrays.asList(mWifiEntry));
|
||||
|
||||
ArgumentCaptor<WifiEntryPreference> captor =
|
||||
ArgumentCaptor.forClass(WifiEntryPreference.class);
|
||||
|
||||
mController.displayPreference(mPreferenceScreen, Arrays.asList(mockWifiEntry));
|
||||
|
||||
verify(mPreferenceCategory).addPreference(captor.capture());
|
||||
|
||||
final List<WifiEntryPreference> prefs = captor.getAllValues();
|
||||
verify(mPreferenceGroup).addPreference(captor.capture());
|
||||
List<WifiEntryPreference> prefs = captor.getAllValues();
|
||||
assertThat(prefs.size()).isEqualTo(1);
|
||||
assertThat(prefs.get(0).getTitle()).isEqualTo(title);
|
||||
assertThat(prefs.get(0).getTitle()).isEqualTo(TEST_TITLE);
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void displayPreference_noAccessPoint_shouldRemoveIt() {
|
||||
final String title = "ssid_title";
|
||||
final String key = "key";
|
||||
final WifiEntry mockWifiEntry = mock(WifiEntry.class);
|
||||
when(mockWifiEntry.getTitle()).thenReturn(title);
|
||||
when(mockWifiEntry.getKey()).thenReturn(key);
|
||||
final WifiEntryPreference preference = new WifiEntryPreference(mContext, mockWifiEntry);
|
||||
preference.setKey(key);
|
||||
mPreferenceCategory.addPreference(preference);
|
||||
public void displayPreference_sameWifiEntry_preferenceSetWifiEntry() {
|
||||
when(mPreferenceGroup.getPreferenceCount()).thenReturn(1);
|
||||
when(mPreferenceGroup.getPreference(0)).thenReturn(mWifiEntryPreference);
|
||||
|
||||
mController.displayPreference(mPreferenceScreen, Arrays.asList(mWifiEntry));
|
||||
|
||||
verify(mWifiEntryPreference).setWifiEntry(mWifiEntry);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void displayPreference_removedWifiEntry_removePreference() {
|
||||
when(mPreferenceGroup.getPreferenceCount()).thenReturn(1);
|
||||
when(mPreferenceGroup.getPreference(0)).thenReturn(mWifiEntryPreference);
|
||||
|
||||
mController.displayPreference(mPreferenceScreen, new ArrayList<>());
|
||||
|
||||
assertThat(mPreferenceCategory.getPreferenceCount()).isEqualTo(0);
|
||||
verify(mPreferenceGroup).removePreference(any());
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void onPreferenceClick_shouldCallShowWifiPage() {
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
doNothing().when(mContext).startActivity(any());
|
||||
doReturn(mContext).when(mSettings).getContext();
|
||||
|
||||
final String title = "ssid_title";
|
||||
final String key = "key";
|
||||
final WifiEntry mockWifiEntry = mock(WifiEntry.class);
|
||||
when(mockWifiEntry.getTitle()).thenReturn(title);
|
||||
when(mockWifiEntry.getKey()).thenReturn(key);
|
||||
final WifiEntryPreference preference = new WifiEntryPreference(mContext, mockWifiEntry);
|
||||
preference.setKey(key);
|
||||
mController.onPreferenceClick(mWifiEntryPreference);
|
||||
|
||||
mController.onPreferenceClick(preference);
|
||||
|
||||
verify(mSettings, times(1)).showWifiPage(key, title);
|
||||
verify(mSettings).showWifiPage(TEST_KEY, TEST_TITLE);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user