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
This commit is contained in:
Weng Su
2022-12-23 18:34:10 +08:00
parent ee3c5500f6
commit fbe02cd543
2 changed files with 50 additions and 54 deletions

View File

@@ -82,7 +82,6 @@ public class WifiEntryPreference extends RestrictedPreference implements
super(context); super(context);
setLayoutResource(R.layout.preference_access_point); setLayoutResource(R.layout.preference_access_point);
setWidgetLayoutResource(R.layout.access_point_friction_widget);
mFrictionSld = getFrictionStateListDrawable(); mFrictionSld = getFrictionStateListDrawable();
mWifiEntry = wifiEntry; mWifiEntry = wifiEntry;
mWifiEntry.setListener(this); mWifiEntry.setListener(this);
@@ -280,6 +279,11 @@ public class WifiEntryPreference extends RestrictedPreference implements
notifyChanged(); notifyChanged();
} }
@Override
protected int getSecondTargetResId() {
return R.layout.access_point_friction_widget;
}
@Override @Override
public void onClick(View view) { public void onClick(View view) {
if (view.getId() == R.id.icon_button) { if (view.getId() == R.id.icon_button) {

View File

@@ -80,6 +80,8 @@ public class WifiEntryPreferenceTest {
private static final String MOCK_SUMMARY = "summary"; private static final String MOCK_SUMMARY = "summary";
private static final String FAKE_URI_STRING = "fakeuri"; private static final String FAKE_URI_STRING = "fakeuri";
WifiEntryPreference mPref;
@Before @Before
public void setUp() { public void setUp() {
mContext = RuntimeEnvironment.application; mContext = RuntimeEnvironment.application;
@@ -105,6 +107,8 @@ public class WifiEntryPreferenceTest {
.thenReturn(mMockShowXDrawable3); .thenReturn(mMockShowXDrawable3);
when(mMockIconInjector.getIcon(true /* showX */, 4)) when(mMockIconInjector.getIcon(true /* showX */, 4))
.thenReturn(mMockShowXDrawable4); .thenReturn(mMockShowXDrawable4);
mPref = new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
} }
@Test @Test
@@ -128,52 +132,46 @@ public class WifiEntryPreferenceTest {
@Test @Test
public void titleChanged_refresh_shouldUpdateTitle() { public void titleChanged_refresh_shouldUpdateTitle() {
final WifiEntryPreference pref =
new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
final String updatedTitle = "updated title"; final String updatedTitle = "updated title";
when(mMockWifiEntry.getTitle()).thenReturn(updatedTitle); when(mMockWifiEntry.getTitle()).thenReturn(updatedTitle);
pref.refresh(); mPref.refresh();
assertThat(pref.getTitle()).isEqualTo(updatedTitle); assertThat(mPref.getTitle().toString()).isEqualTo(updatedTitle);
} }
@Test @Test
public void summaryChanged_refresh_shouldUpdateSummary() { public void summaryChanged_refresh_shouldUpdateSummary() {
final WifiEntryPreference pref =
new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
final String updatedSummary = "updated summary"; final String updatedSummary = "updated summary";
when(mMockWifiEntry.getSummary(false /* concise */)).thenReturn(updatedSummary); when(mMockWifiEntry.getSummary(false /* concise */)).thenReturn(updatedSummary);
pref.refresh(); mPref.refresh();
assertThat(pref.getSummary()).isEqualTo(updatedSummary); assertThat(mPref.getSummary().toString()).isEqualTo(updatedSummary);
} }
@Test @Test
public void levelChanged_refresh_shouldUpdateLevelIcon() { public void levelChanged_refresh_shouldUpdateLevelIcon() {
final List<Drawable> iconList = new ArrayList<>(); final List<Drawable> iconList = new ArrayList<>();
final WifiEntryPreference pref =
new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
when(mMockWifiEntry.getLevel()).thenReturn(0); when(mMockWifiEntry.getLevel()).thenReturn(0);
pref.refresh(); mPref.refresh();
iconList.add(pref.getIcon()); iconList.add(mPref.getIcon());
when(mMockWifiEntry.getLevel()).thenReturn(1); when(mMockWifiEntry.getLevel()).thenReturn(1);
pref.refresh(); mPref.refresh();
iconList.add(pref.getIcon()); iconList.add(mPref.getIcon());
when(mMockWifiEntry.getLevel()).thenReturn(2); when(mMockWifiEntry.getLevel()).thenReturn(2);
pref.refresh(); mPref.refresh();
iconList.add(pref.getIcon()); iconList.add(mPref.getIcon());
when(mMockWifiEntry.getLevel()).thenReturn(3); when(mMockWifiEntry.getLevel()).thenReturn(3);
pref.refresh(); mPref.refresh();
iconList.add(pref.getIcon()); iconList.add(mPref.getIcon());
when(mMockWifiEntry.getLevel()).thenReturn(4); when(mMockWifiEntry.getLevel()).thenReturn(4);
pref.refresh(); mPref.refresh();
iconList.add(pref.getIcon()); iconList.add(mPref.getIcon());
when(mMockWifiEntry.getLevel()).thenReturn(-1); when(mMockWifiEntry.getLevel()).thenReturn(-1);
pref.refresh(); mPref.refresh();
iconList.add(pref.getIcon()); iconList.add(mPref.getIcon());
assertThat(iconList).containsExactly(mMockDrawable0, mMockDrawable1, assertThat(iconList).containsExactly(mMockDrawable0, mMockDrawable1,
mMockDrawable2, mMockDrawable3, mMockDrawable4, null); mMockDrawable2, mMockDrawable3, mMockDrawable4, null);
@@ -183,27 +181,25 @@ public class WifiEntryPreferenceTest {
public void levelChanged_showXWifiRefresh_shouldUpdateLevelIcon() { public void levelChanged_showXWifiRefresh_shouldUpdateLevelIcon() {
final List<Drawable> iconList = new ArrayList<>(); final List<Drawable> iconList = new ArrayList<>();
when(mMockWifiEntry.shouldShowXLevelIcon()).thenReturn(true); when(mMockWifiEntry.shouldShowXLevelIcon()).thenReturn(true);
final WifiEntryPreference pref =
new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
when(mMockWifiEntry.getLevel()).thenReturn(0); when(mMockWifiEntry.getLevel()).thenReturn(0);
pref.refresh(); mPref.refresh();
iconList.add(pref.getIcon()); iconList.add(mPref.getIcon());
when(mMockWifiEntry.getLevel()).thenReturn(1); when(mMockWifiEntry.getLevel()).thenReturn(1);
pref.refresh(); mPref.refresh();
iconList.add(pref.getIcon()); iconList.add(mPref.getIcon());
when(mMockWifiEntry.getLevel()).thenReturn(2); when(mMockWifiEntry.getLevel()).thenReturn(2);
pref.refresh(); mPref.refresh();
iconList.add(pref.getIcon()); iconList.add(mPref.getIcon());
when(mMockWifiEntry.getLevel()).thenReturn(3); when(mMockWifiEntry.getLevel()).thenReturn(3);
pref.refresh(); mPref.refresh();
iconList.add(pref.getIcon()); iconList.add(mPref.getIcon());
when(mMockWifiEntry.getLevel()).thenReturn(4); when(mMockWifiEntry.getLevel()).thenReturn(4);
pref.refresh(); mPref.refresh();
iconList.add(pref.getIcon()); iconList.add(mPref.getIcon());
when(mMockWifiEntry.getLevel()).thenReturn(-1); when(mMockWifiEntry.getLevel()).thenReturn(-1);
pref.refresh(); mPref.refresh();
iconList.add(pref.getIcon()); iconList.add(mPref.getIcon());
assertThat(iconList).containsExactly(mMockShowXDrawable0, mMockShowXDrawable1, assertThat(iconList).containsExactly(mMockShowXDrawable0, mMockShowXDrawable1,
mMockShowXDrawable2, mMockShowXDrawable3, mMockShowXDrawable4, null); mMockShowXDrawable2, mMockShowXDrawable3, mMockShowXDrawable4, null);
@@ -212,14 +208,12 @@ public class WifiEntryPreferenceTest {
@Test @Test
public void notNull_whenGetHelpUriString_shouldSetImageButtonVisible() { public void notNull_whenGetHelpUriString_shouldSetImageButtonVisible() {
when(mMockWifiEntry.getHelpUriString()).thenReturn(FAKE_URI_STRING); when(mMockWifiEntry.getHelpUriString()).thenReturn(FAKE_URI_STRING);
final WifiEntryPreference pref =
new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
final LayoutInflater inflater = LayoutInflater.from(mContext); 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); false);
final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(view); final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(view);
pref.onBindViewHolder(holder); mPref.onBindViewHolder(holder);
assertThat(view.findViewById(R.id.icon_button).getVisibility()).isEqualTo(View.VISIBLE); assertThat(view.findViewById(R.id.icon_button).getVisibility()).isEqualTo(View.VISIBLE);
} }
@@ -227,14 +221,12 @@ public class WifiEntryPreferenceTest {
@Test @Test
public void helpButton_whenGetHelpUriStringNotNull_shouldSetCorrectContentDescription() { public void helpButton_whenGetHelpUriStringNotNull_shouldSetCorrectContentDescription() {
when(mMockWifiEntry.getHelpUriString()).thenReturn(FAKE_URI_STRING); when(mMockWifiEntry.getHelpUriString()).thenReturn(FAKE_URI_STRING);
final WifiEntryPreference pref =
new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
final LayoutInflater inflater = LayoutInflater.from(mContext); 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); false);
final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(view); final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(view);
pref.onBindViewHolder(holder); mPref.onBindViewHolder(holder);
assertThat(view.findViewById(R.id.icon_button).getContentDescription()).isEqualTo( assertThat(view.findViewById(R.id.icon_button).getContentDescription()).isEqualTo(
mContext.getString(R.string.help_label)); mContext.getString(R.string.help_label));
@@ -243,25 +235,25 @@ public class WifiEntryPreferenceTest {
@Test @Test
public void subscriptionEntry_shouldSetImageButtonGone() { public void subscriptionEntry_shouldSetImageButtonGone() {
when(mMockWifiEntry.isSubscription()).thenReturn(true); when(mMockWifiEntry.isSubscription()).thenReturn(true);
final WifiEntryPreference pref =
new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
final LayoutInflater inflater = LayoutInflater.from(mContext); 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); false);
final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(view); final PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(view);
pref.onBindViewHolder(holder); mPref.onBindViewHolder(holder);
assertThat(view.findViewById(R.id.icon_button).getVisibility()).isEqualTo(View.GONE); assertThat(view.findViewById(R.id.icon_button).getVisibility()).isEqualTo(View.GONE);
} }
@Test @Test
public void updateIcon_ShouldSetTintListForDrawable() { public void updateIcon_shouldSetTintListForDrawable() {
WifiEntryPreference pref = mPref.updateIcon(false /* showX */, 4 /* level */);
new WifiEntryPreference(mContext, mMockWifiEntry, mMockIconInjector);
pref.updateIcon(false /* showX */, 4 /* level */);
verify(mMockDrawable4).setTintList(any()); verify(mMockDrawable4).setTintList(any());
} }
@Test
public void getSecondTargetResId_shouldNotReturnZero() {
assertThat(mPref.getSecondTargetResId()).isNotEqualTo(0);
}
} }