Fix the end-icon missing issue for Wi-Fi networks
- Because WifiEntryPreference needs to support policy transparency, the inherited class is changed from Preference to RestrictedPreference.
- The RestrictedPreference will hides the end icon as default, causing this issue to happen.
- Override the getSecondTargetResId() function with necessary resource id to avoid the end-icon being hidden.
- Remove the redundant setWidgetLayoutResource, because it will be initialized in the extended class.
Bug: 262456749
Test: manual test
make RunSettingsRoboTests ROBOTEST_FILTER=WifiEntryPreferenceTest
Change-Id: Ie3d3a649d3137dc705d7887c8e74592437d9ce61
diff --git a/src/com/android/settings/wifi/WifiEntryPreference.java b/src/com/android/settings/wifi/WifiEntryPreference.java
index 5187ee3..5b44887 100644
--- a/src/com/android/settings/wifi/WifiEntryPreference.java
+++ b/src/com/android/settings/wifi/WifiEntryPreference.java
@@ -82,7 +82,6 @@
super(context);
setLayoutResource(R.layout.preference_access_point);
- setWidgetLayoutResource(R.layout.access_point_friction_widget);
mFrictionSld = getFrictionStateListDrawable();
mWifiEntry = wifiEntry;
mWifiEntry.setListener(this);
@@ -281,6 +280,11 @@
}
@Override
+ protected int getSecondTargetResId() {
+ return R.layout.access_point_friction_widget;
+ }
+
+ @Override
public void onClick(View view) {
if (view.getId() == R.id.icon_button) {
if (mOnButtonClickListener != null) {
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiEntryPreferenceTest.java b/tests/robotests/src/com/android/settings/wifi/WifiEntryPreferenceTest.java
index a5d63db..a60b531 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiEntryPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiEntryPreferenceTest.java
@@ -80,6 +80,8 @@
private static final String MOCK_SUMMARY = "summary";
private static final String FAKE_URI_STRING = "fakeuri";
+ WifiEntryPreference mPref;
+
@Before
public void setUp() {
mContext = RuntimeEnvironment.application;
@@ -105,6 +107,8 @@
.thenReturn(mMockShowXDrawable3);
when(mMockIconInjector.getIcon(true /* showX */, 4))
.thenReturn(mMockShowXDrawable4);
+
+ mPref = new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
}
@Test
@@ -128,52 +132,46 @@
@Test
public void titleChanged_refresh_shouldUpdateTitle() {
- final WifiEntryPreference pref =
- new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
final String updatedTitle = "updated title";
when(mMockWifiEntry.getTitle()).thenReturn(updatedTitle);
- pref.refresh();
+ mPref.refresh();
- assertThat(pref.getTitle()).isEqualTo(updatedTitle);
+ assertThat(mPref.getTitle().toString()).isEqualTo(updatedTitle);
}
@Test
public void summaryChanged_refresh_shouldUpdateSummary() {
- final WifiEntryPreference pref =
- new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
final String updatedSummary = "updated summary";
when(mMockWifiEntry.getSummary(false /* concise */)).thenReturn(updatedSummary);
- pref.refresh();
+ mPref.refresh();
- assertThat(pref.getSummary()).isEqualTo(updatedSummary);
+ assertThat(mPref.getSummary().toString()).isEqualTo(updatedSummary);
}
@Test
public void levelChanged_refresh_shouldUpdateLevelIcon() {
final List<Drawable> iconList = new ArrayList<>();
- final WifiEntryPreference pref =
- new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
when(mMockWifiEntry.getLevel()).thenReturn(0);
- pref.refresh();
- iconList.add(pref.getIcon());
+ mPref.refresh();
+ iconList.add(mPref.getIcon());
when(mMockWifiEntry.getLevel()).thenReturn(1);
- pref.refresh();
- iconList.add(pref.getIcon());
+ mPref.refresh();
+ iconList.add(mPref.getIcon());
when(mMockWifiEntry.getLevel()).thenReturn(2);
- pref.refresh();
- iconList.add(pref.getIcon());
+ mPref.refresh();
+ iconList.add(mPref.getIcon());
when(mMockWifiEntry.getLevel()).thenReturn(3);
- pref.refresh();
- iconList.add(pref.getIcon());
+ mPref.refresh();
+ iconList.add(mPref.getIcon());
when(mMockWifiEntry.getLevel()).thenReturn(4);
- pref.refresh();
- iconList.add(pref.getIcon());
+ mPref.refresh();
+ iconList.add(mPref.getIcon());
when(mMockWifiEntry.getLevel()).thenReturn(-1);
- pref.refresh();
- iconList.add(pref.getIcon());
+ mPref.refresh();
+ iconList.add(mPref.getIcon());
assertThat(iconList).containsExactly(mMockDrawable0, mMockDrawable1,
mMockDrawable2, mMockDrawable3, mMockDrawable4, null);
@@ -183,27 +181,25 @@
public void levelChanged_showXWifiRefresh_shouldUpdateLevelIcon() {
final List<Drawable> iconList = new ArrayList<>();
when(mMockWifiEntry.shouldShowXLevelIcon()).thenReturn(true);
- final WifiEntryPreference pref =
- new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
when(mMockWifiEntry.getLevel()).thenReturn(0);
- pref.refresh();
- iconList.add(pref.getIcon());
+ mPref.refresh();
+ iconList.add(mPref.getIcon());
when(mMockWifiEntry.getLevel()).thenReturn(1);
- pref.refresh();
- iconList.add(pref.getIcon());
+ mPref.refresh();
+ iconList.add(mPref.getIcon());
when(mMockWifiEntry.getLevel()).thenReturn(2);
- pref.refresh();
- iconList.add(pref.getIcon());
+ mPref.refresh();
+ iconList.add(mPref.getIcon());
when(mMockWifiEntry.getLevel()).thenReturn(3);
- pref.refresh();
- iconList.add(pref.getIcon());
+ mPref.refresh();
+ iconList.add(mPref.getIcon());
when(mMockWifiEntry.getLevel()).thenReturn(4);
- pref.refresh();
- iconList.add(pref.getIcon());
+ mPref.refresh();
+ iconList.add(mPref.getIcon());
when(mMockWifiEntry.getLevel()).thenReturn(-1);
- pref.refresh();
- iconList.add(pref.getIcon());
+ mPref.refresh();
+ iconList.add(mPref.getIcon());
assertThat(iconList).containsExactly(mMockShowXDrawable0, mMockShowXDrawable1,
mMockShowXDrawable2, mMockShowXDrawable3, mMockShowXDrawable4, null);
@@ -212,14 +208,12 @@
@Test
public void notNull_whenGetHelpUriString_shouldSetImageButtonVisible() {
when(mMockWifiEntry.getHelpUriString()).thenReturn(FAKE_URI_STRING);
- final WifiEntryPreference pref =
- new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
final LayoutInflater inflater = LayoutInflater.from(mContext);
- final View view = inflater.inflate(pref.getLayoutResource(), new LinearLayout(mContext),
+ final View view = inflater.inflate(mPref.getLayoutResource(), new LinearLayout(mContext),
false);
final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(view);
- pref.onBindViewHolder(holder);
+ mPref.onBindViewHolder(holder);
assertThat(view.findViewById(R.id.icon_button).getVisibility()).isEqualTo(View.VISIBLE);
}
@@ -227,14 +221,12 @@
@Test
public void helpButton_whenGetHelpUriStringNotNull_shouldSetCorrectContentDescription() {
when(mMockWifiEntry.getHelpUriString()).thenReturn(FAKE_URI_STRING);
- final WifiEntryPreference pref =
- new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
final LayoutInflater inflater = LayoutInflater.from(mContext);
- final View view = inflater.inflate(pref.getLayoutResource(), new LinearLayout(mContext),
+ final View view = inflater.inflate(mPref.getLayoutResource(), new LinearLayout(mContext),
false);
final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(view);
- pref.onBindViewHolder(holder);
+ mPref.onBindViewHolder(holder);
assertThat(view.findViewById(R.id.icon_button).getContentDescription()).isEqualTo(
mContext.getString(R.string.help_label));
@@ -243,25 +235,25 @@
@Test
public void subscriptionEntry_shouldSetImageButtonGone() {
when(mMockWifiEntry.isSubscription()).thenReturn(true);
- final WifiEntryPreference pref =
- new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
final LayoutInflater inflater = LayoutInflater.from(mContext);
- final View view = inflater.inflate(pref.getLayoutResource(), new LinearLayout(mContext),
+ final View view = inflater.inflate(mPref.getLayoutResource(), new LinearLayout(mContext),
false);
final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(view);
- pref.onBindViewHolder(holder);
+ mPref.onBindViewHolder(holder);
assertThat(view.findViewById(R.id.icon_button).getVisibility()).isEqualTo(View.GONE);
}
@Test
- public void updateIcon_ShouldSetTintListForDrawable() {
- WifiEntryPreference pref =
- new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
-
- pref.updateIcon(false /* showX */, 4 /* level */);
+ public void updateIcon_shouldSetTintListForDrawable() {
+ mPref.updateIcon(false /* showX */, 4 /* level */);
verify(mMockDrawable4).setTintList(any());
}
+
+ @Test
+ public void getSecondTargetResId_shouldNotReturnZero() {
+ assertThat(mPref.getSecondTargetResId()).isNotEqualTo(0);
+ }
}