Fix Wi-Fi QR code scanning icon disappears problem

Should not do one time initialization for the View in
Preference#onBindViewHolder. Because A view setup in
PreferenceViewHolder may be recycled.

Bug: 127502788
Test: manual
Change-Id: Iedf023fa00d2745a02521b65e5c12165c2bc025b
diff --git a/src/com/android/settings/wifi/AddWifiNetworkPreference.java b/src/com/android/settings/wifi/AddWifiNetworkPreference.java
index e49f2ab..03a80a4 100644
--- a/src/com/android/settings/wifi/AddWifiNetworkPreference.java
+++ b/src/com/android/settings/wifi/AddWifiNetworkPreference.java
@@ -36,7 +36,7 @@
 
     private static final String TAG = "AddWifiNetworkPreference";
 
-    private boolean mInitialized;
+    private final Drawable mScanIconDrawable;
 
     public AddWifiNetworkPreference(Context context) {
         super(context);
@@ -45,24 +45,22 @@
         setWidgetLayoutResource(R.layout.wifi_button_preference_widget);
         setIcon(R.drawable.ic_menu_add);
         setTitle(R.string.wifi_add_network);
+
+        mScanIconDrawable = getDrawable(R.drawable.ic_scan_24dp);
     }
 
     @Override
     public void onBindViewHolder(PreferenceViewHolder holder) {
         super.onBindViewHolder(holder);
 
-        if (!mInitialized) {
-            mInitialized = true;
-
-            final ImageButton imageButton = (ImageButton) holder.findViewById(R.id.button_icon);
-            imageButton.setImageDrawable(getDrawable(R.drawable.ic_scan_24dp));
-            imageButton.setContentDescription(
-                    getContext().getString(R.string.wifi_dpp_scan_qr_code));
-            imageButton.setOnClickListener(view -> {
-                getContext().startActivity(
-                    WifiDppUtils.getEnrolleeQrCodeScannerIntent(/* ssid */ null));
-            });
-        }
+        final ImageButton scanButton = (ImageButton) holder.findViewById(R.id.button_icon);
+        scanButton.setImageDrawable(mScanIconDrawable);
+        scanButton.setContentDescription(
+                getContext().getString(R.string.wifi_dpp_scan_qr_code));
+        scanButton.setOnClickListener(view -> {
+            getContext().startActivity(
+                WifiDppUtils.getEnrolleeQrCodeScannerIntent(/* ssid */ null));
+        });
     }
 
     private Drawable getDrawable(@DrawableRes int iconResId) {
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSsidPreference.java b/src/com/android/settings/wifi/tether/WifiTetherSsidPreference.java
index 7d4ebec..4343fcc 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSsidPreference.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSsidPreference.java
@@ -37,9 +37,7 @@
 public class WifiTetherSsidPreference extends ValidatedEditTextPreference {
     private static final String TAG = "WifiTetherSsidPreference";
 
-    private ImageButton mImageButton;
-    private Drawable mButtonIcon;
-    private View mDivider;
+    private Drawable mShareIconDrawable;
     private View.OnClickListener mClickListener;
     private boolean mVisible;
 
@@ -72,30 +70,29 @@
         // TODO(b/129019971): use methods of divider line in parent object
         setLayoutResource(com.android.settingslib.R.layout.preference_two_target);
         setWidgetLayoutResource(R.layout.wifi_button_preference_widget);
+
+        mShareIconDrawable = getDrawable(R.drawable.ic_qrcode_24dp);
     }
 
     @Override
     public void onBindViewHolder(PreferenceViewHolder holder) {
         super.onBindViewHolder(holder);
 
-        if (mImageButton == null) {
-            mImageButton = (ImageButton) holder.findViewById(R.id.button_icon);
-
-            mImageButton.setContentDescription(
-                    getContext().getString(R.string.wifi_dpp_share_hotspot));
-            setButtonIcon(R.drawable.ic_qrcode_24dp);
-            mImageButton.setImageDrawable(mButtonIcon);
-
-            mDivider = holder.findViewById(R.id.two_target_divider);
-        }
+        final ImageButton shareButton = (ImageButton) holder.findViewById(R.id.button_icon);
+        final View dividerView = holder.findViewById(R.id.two_target_divider);
 
         if (mVisible) {
-            mImageButton.setOnClickListener(mClickListener);
-            mImageButton.setVisibility(View.VISIBLE);
-            mDivider.setVisibility(View.VISIBLE);
+            shareButton.setOnClickListener(mClickListener);
+            shareButton.setVisibility(View.VISIBLE);
+            shareButton.setContentDescription(
+                    getContext().getString(R.string.wifi_dpp_share_hotspot));
+            shareButton.setImageDrawable(mShareIconDrawable);
+
+            dividerView.setVisibility(View.VISIBLE);
         } else {
-            mImageButton.setVisibility(View.GONE);
-            mDivider.setVisibility(View.GONE);
+            shareButton.setVisibility(View.GONE);
+
+            dividerView.setVisibility(View.GONE);
         }
     }
 
@@ -107,12 +104,15 @@
         mVisible = visible;
     }
 
-    private void setButtonIcon(@DrawableRes int iconResId) {
+    private Drawable getDrawable(@DrawableRes int iconResId) {
+        Drawable buttonIcon = null;
+
         try {
-            mButtonIcon = getContext().getDrawable(iconResId);
+            buttonIcon = getContext().getDrawable(iconResId);
         } catch (Resources.NotFoundException exception) {
             Log.e(TAG, "Resource does not exist: " + iconResId);
         }
+        return buttonIcon;
     }
 
     @VisibleForTesting