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