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);
+    }
 }