Refine Wi-Fi DPP fragments.

1. WifiDppQrCodeBaseFragment only declairs common UI components between fragments.
2. Initiate UI components in onViewCreated of each View.
3. Remove the only one usage of @NonNull since it should be used consistently
   throughout the class if we want to use it.
4. Use android.R.id for icon/title/summary

Bug: 120645817
Test: atest WifiDppConfiguratorActivityTest
      atest WifiDppEnrolleeActivityTest
      atest WifiDppQrCodeGeneratorFragmentTest
      atest WifiDppQrCodeScannerFragmentTest

Change-Id: I54f99a3072533cec46f0e47753ee0331fecf2ada
diff --git a/res/layout/wifi_dpp_fragment_header.xml b/res/layout/wifi_dpp_fragment_header.xml
index 266a3e8..20bcd7d 100644
--- a/res/layout/wifi_dpp_fragment_header.xml
+++ b/res/layout/wifi_dpp_fragment_header.xml
@@ -27,13 +27,13 @@
     android:paddingEnd="16dp">
 
     <ImageView
-        android:id="@+id/header_icon"
+        android:id="@android:id/icon"
         android:layout_width="48dp"
         android:layout_height="48dp"
         android:scaleType="fitCenter"/>
 
     <TextView
-        android:id="@+id/title"
+        android:id="@android:id/title"
         style="@style/TextAppearance.EntityHeaderTitle"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
@@ -44,7 +44,7 @@
         android:paddingEnd="32dp"/>
 
     <TextView
-        android:id="@+id/description"
+        android:id="@android:id/summary"
         style="@style/TextAppearance.EntityHeaderSummary"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
diff --git a/res/layout/wifi_dpp_qrcode_scanner_fragment.xml b/res/layout/wifi_dpp_qrcode_scanner_fragment.xml
index 93fd1eb..f09fc69 100644
--- a/res/layout/wifi_dpp_qrcode_scanner_fragment.xml
+++ b/res/layout/wifi_dpp_qrcode_scanner_fragment.xml
@@ -45,6 +45,8 @@
         android:layout_height="wrap_content"
         android:layout_gravity="center"
         android:layout_marginTop="8dp"
+        android:text="@string/wifi_dpp_could_not_detect_valid_qr_code"
+        android:visibility="invisible"
         android:textColor="?android:attr/colorError"/>
 
 </LinearLayout>
diff --git a/src/com/android/settings/wifi/dpp/WifiDppAddDeviceFragment.java b/src/com/android/settings/wifi/dpp/WifiDppAddDeviceFragment.java
index 8d6aa68..90fb850 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppAddDeviceFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppAddDeviceFragment.java
@@ -17,6 +17,13 @@
 package com.android.settings.wifi.dpp;
 
 import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.ProgressBar;
+import android.widget.TextView;
 
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
@@ -26,10 +33,11 @@
  * to the Wi-Fi network.
  */
 public class WifiDppAddDeviceFragment extends WifiDppQrCodeBaseFragment {
-    @Override
-    protected int getLayout() {
-        return R.layout.wifi_dpp_add_device_fragment;
-    }
+    private ProgressBar mProgressBar;
+    private ImageView mWifiApPictureView;
+    private TextView mChooseDifferentNetwork;
+    private Button mButtonLeft;
+    private Button mButtonRight;
 
     @Override
     public int getMetricsCategory() {
@@ -37,7 +45,20 @@
     }
 
     @Override
-    public void onActivityCreated (Bundle savedInstanceState) {
-        super.onActivityCreated(savedInstanceState);
+    public final View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+        return inflater.inflate(R.layout.wifi_dpp_add_device_fragment, container,
+                /* attachToRoot */ false);
+    }
+
+    @Override
+    public void onViewCreated(View view, Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+
+        mProgressBar = view.findViewById(R.id.progress_bar);
+        mWifiApPictureView = view.findViewById(R.id.wifi_ap_picture_view);
+        mChooseDifferentNetwork = view.findViewById(R.id.choose_different_network);
+        mButtonLeft = view.findViewById(R.id.button_left);
+        mButtonRight = view.findViewById(R.id.button_right);
     }
 }
diff --git a/src/com/android/settings/wifi/dpp/WifiDppChooseSavedWifiNetworkFragment.java b/src/com/android/settings/wifi/dpp/WifiDppChooseSavedWifiNetworkFragment.java
index 66bc349..a3e6db3 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppChooseSavedWifiNetworkFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppChooseSavedWifiNetworkFragment.java
@@ -17,6 +17,11 @@
 package com.android.settings.wifi.dpp;
 
 import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.ListView;
 
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
@@ -26,10 +31,9 @@
  * {@code WifiDppConfiguratorActivity} to start with this fragment to choose a saved Wi-Fi network.
  */
 public class WifiDppChooseSavedWifiNetworkFragment extends WifiDppQrCodeBaseFragment {
-    @Override
-    protected int getLayout() {
-        return R.layout.wifi_dpp_choose_saved_wifi_network_fragment;
-    }
+    private ListView mSavedWifiNetworkList;
+    private Button mButtonLeft;
+    private Button mButtonRight;
 
     @Override
     public int getMetricsCategory() {
@@ -37,7 +41,18 @@
     }
 
     @Override
-    public void onActivityCreated (Bundle savedInstanceState) {
-        super.onActivityCreated(savedInstanceState);
+    public final View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+        return inflater.inflate(R.layout.wifi_dpp_choose_saved_wifi_network_fragment, container,
+                /* attachToRoot */ false);
+    }
+
+    @Override
+    public void onViewCreated(View view, Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+
+        mSavedWifiNetworkList = view.findViewById(R.id.saved_wifi_network_list);
+        mButtonLeft = view.findViewById(R.id.button_left);
+        mButtonRight = view.findViewById(R.id.button_right);
     }
 }
diff --git a/src/com/android/settings/wifi/dpp/WifiDppQrCodeBaseFragment.java b/src/com/android/settings/wifi/dpp/WifiDppQrCodeBaseFragment.java
index 50e3ee5..4ac5850 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppQrCodeBaseFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppQrCodeBaseFragment.java
@@ -17,25 +17,16 @@
 package com.android.settings.wifi.dpp;
 
 import android.os.Bundle;
-import android.view.LayoutInflater;
 import android.view.View;
-import android.view.ViewGroup;
-import android.widget.Button;
 import android.widget.ImageView;
-import android.widget.ListView;
-import android.widget.ProgressBar;
 import android.widget.TextView;
 
 import com.android.settings.core.InstrumentedFragment;
 import com.android.settings.R;
 
 /**
- * TODO: b/120645817 should refine code to only initiate UI component in each child fragment.
- */
-
-/**
  * There are below 4 fragments for Wi-Fi DPP UI flow, to reduce redundant code of UI components,
- * this parent fragment instantiates all UI components and provides setting APIs for them.
+ * this parent fragment instantiates common UI components
  *
  * {@code WifiDppQrCodeScannerFragment}
  * {@code WifiDppQrCodeGeneratorFragment}
@@ -43,135 +34,16 @@
  * {@code WifiDppAddDeviceFragment}
  */
 public abstract class WifiDppQrCodeBaseFragment extends InstrumentedFragment {
-    private ImageView mHeaderIcon;
-    private TextView mTitle;
-    private TextView mDescription;
-
-    private TextView mErrorMessage;         //optional, for WifiDppQrCodeScannerFragment
-    private ListView mSavedWifiNetworkList; //optional, for WifiDppChooseSavedWifiNetworkFragment
-    private ProgressBar mProgressBar;       //optional, for WifiDppAddDeviceFragment
-    private ImageView mWifiApPictureView;   //optional, for WifiDppAddDeviceFragment
-    private TextView mChooseDifferentNetwork;//optional, for WifiDppAddDeviceFragment
-
-    private Button mButtonLeft;             //optional, for WifiDppChooseSavedWifiNetworkFragment,
-                                            //              WifiDppAddDeviceFragment
-    private Button mButtonRight;            //optional, for WifiDppChooseSavedWifiNetworkFragment,
-                                            //              WifiDppAddDeviceFragment
-
-    abstract protected int getLayout();
+    protected ImageView mHeaderIcon;
+    protected TextView mTitle;
+    protected TextView mSummary;
 
     @Override
-    public final void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-    }
+    public void onViewCreated(View view, Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
 
-    @Override
-    public final View onCreateView(LayoutInflater inflater, ViewGroup container,
-            Bundle savedInstanceState) {
-        View view = inflater.inflate(getLayout(), container, false);
-        initView(view);
-        return view;
-    }
-
-    private void initView(View view) {
-        mHeaderIcon = view.findViewById(R.id.header_icon);
-        mTitle = view.findViewById(R.id.title);
-        mDescription = view.findViewById(R.id.description);
-        mErrorMessage = view.findViewById(R.id.error_message);
-
-        mSavedWifiNetworkList = view.findViewById(R.id.saved_wifi_network_list);
-
-        mProgressBar = view.findViewById(R.id.progress_bar);
-        mWifiApPictureView = view.findViewById(R.id.wifi_ap_picture_view);
-        mChooseDifferentNetwork = view.findViewById(R.id.choose_different_network);
-
-        mButtonLeft = view.findViewById(R.id.button_left);
-        mButtonRight = view.findViewById(R.id.button_right);
-    }
-
-    protected void setHeaderIconImageResource(int resId) {
-        mHeaderIcon.setImageResource(resId);
-    }
-
-    protected void setTitle(String title) {
-        mTitle.setText(title);
-    }
-
-    protected void setDescription(String description) {
-        mDescription.setText(description);
-    }
-
-    /** optional, for WifiDppQrCodeScannerFragment */
-    protected void showErrorMessage(boolean show) {
-        if (mErrorMessage != null) {
-            mErrorMessage.setVisibility(show ? View.VISIBLE : View.INVISIBLE);
-        }
-    }
-
-    /** optional, for WifiDppQrCodeScannerFragment */
-    protected void setErrorMessage(String errorMessage) {
-        if (mErrorMessage != null) {
-            mErrorMessage.setText(errorMessage);
-        }
-    }
-
-    /**
-     * optional, for WifiDppChooseSavedWifiNetworkFragment,
-     *               WifiDppAddDeviceFragment
-     */
-    protected void setLeftButtonText(String text) {
-        if (mButtonLeft != null) {
-            mButtonLeft.setText(text);
-        }
-    }
-
-    /**
-     * optional, for WifiDppChooseSavedWifiNetworkFragment,
-     *               WifiDppAddDeviceFragment
-     */
-    protected void setRightButtonText(String text) {
-        if (mButtonRight != null) {
-            mButtonRight.setText(text);
-        }
-    }
-
-    /**
-     * optional, for WifiDppChooseSavedWifiNetworkFragment,
-     *               WifiDppAddDeviceFragment
-     */
-    protected void hideLeftButton() {
-        if (mButtonLeft != null) {
-            mButtonLeft.setVisibility(View.INVISIBLE);
-        }
-    }
-
-    /**
-     * optional, for WifiDppChooseSavedWifiNetworkFragment,
-     *               WifiDppAddDeviceFragment
-     */
-    protected void hideRightButton() {
-        if (mButtonRight != null) {
-            mButtonRight.setVisibility(View.INVISIBLE);
-        }
-    }
-
-    /**
-     * optional, for WifiDppChooseSavedWifiNetworkFragment,
-     *               WifiDppAddDeviceFragment
-     */
-    protected void setLeftButtonOnClickListener(View.OnClickListener listener) {
-        if (mButtonLeft != null) {
-            mButtonLeft.setOnClickListener(listener);
-        }
-    }
-
-    /**
-     * optional, for WifiDppChooseSavedWifiNetworkFragment,
-     *               WifiDppAddDeviceFragment
-     */
-    protected void setRightButtonOnClickListener(View.OnClickListener listener) {
-        if (mButtonRight != null) {
-            mButtonRight.setOnClickListener(listener);
-        }
+        mHeaderIcon = view.findViewById(android.R.id.icon);
+        mTitle = view.findViewById(android.R.id.title);
+        mSummary = view.findViewById(android.R.id.summary);
     }
 }
diff --git a/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java b/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java
index 02ebffc..f4bbcc1 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java
@@ -21,10 +21,12 @@
 import android.graphics.Bitmap;
 import android.os.Bundle;
 import android.util.Log;
+import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
+import android.view.ViewGroup;
 import android.widget.ImageView;
 
 import com.android.internal.logging.nano.MetricsProto;
@@ -44,11 +46,6 @@
     private String mQrCode;
 
     @Override
-    protected int getLayout() {
-        return R.layout.wifi_dpp_qrcode_generator_fragment;
-    }
-
-    @Override
     public int getMetricsCategory() {
         return MetricsProto.MetricsEvent.SETTINGS_WIFI_DPP_CONFIGURATOR;
     }
@@ -63,25 +60,12 @@
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
 
-        setHeaderIconImageResource(R.drawable.ic_qrcode_24dp);
-        WifiNetworkConfig wifiNetworkConfig = ((WifiNetworkConfig.Retriever) getActivity())
-                .getWifiNetworkConfig();
-        if (!WifiNetworkConfig.isValidConfig(wifiNetworkConfig)) {
-            throw new IllegalArgumentException("Invalid Wi-Fi network for configuring");
-        }
-        setTitle(getString(R.string.wifi_dpp_share_wifi));
-        setDescription(getString(R.string.wifi_dpp_scan_qr_code_with_another_device,
-                wifiNetworkConfig.getSsid()));
-
         setHasOptionsMenu(true);
-        ActionBar actionBar = getActivity().getActionBar();
+        final ActionBar actionBar = getActivity().getActionBar();
         if (actionBar != null) {
             actionBar.setDisplayHomeAsUpEnabled(true);
             actionBar.show();
         }
-
-        mQrCode = wifiNetworkConfig.getQrCode();
-        setQrCode();
     }
 
     @Override
@@ -119,9 +103,30 @@
     }
 
     @Override
+    public final View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+        return inflater.inflate(R.layout.wifi_dpp_qrcode_generator_fragment, container,
+                /* attachToRoot */ false);
+    }
+
+    @Override
     public void onViewCreated(View view, Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
+
         mQrCodeView = view.findViewById(R.id.qrcode_view);
+
+        mHeaderIcon.setImageResource(R.drawable.ic_qrcode_24dp);
+        WifiNetworkConfig wifiNetworkConfig = ((WifiNetworkConfig.Retriever) getActivity())
+                .getWifiNetworkConfig();
+        if (!WifiNetworkConfig.isValidConfig(wifiNetworkConfig)) {
+            throw new IllegalStateException("Invalid Wi-Fi network for configuring");
+        }
+        mTitle.setText(R.string.wifi_dpp_share_wifi);
+        mSummary.setText(getString(R.string.wifi_dpp_scan_qr_code_with_another_device,
+                wifiNetworkConfig.getSsid()));
+
+        mQrCode = wifiNetworkConfig.getQrCode();
+        setQrCode();
     }
 
     private void setQrCode() {
diff --git a/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java b/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
index 4ec19a6..c7c1461 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java
@@ -16,7 +16,6 @@
 
 package com.android.settings.wifi.dpp;
 
-import android.annotation.Nullable;
 import android.app.ActionBar;
 import android.app.Activity;
 import android.content.Context;
@@ -29,11 +28,14 @@
 import android.os.Message;
 import android.text.TextUtils;
 import android.util.Size;
+import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.TextureView;
 import android.view.TextureView.SurfaceTextureListener;
 import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
 
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
@@ -67,6 +69,7 @@
     private QrCamera mCamera;
     private TextureView mTextureView;
     private QrDecorateView mDecorateView;
+    private TextView mErrorMessage;
 
     /** true if the fragment working for configurator, false enrollee*/
     private final boolean mIsConfiguratorMode;
@@ -78,11 +81,6 @@
     private WifiQrCode mWifiQrCode;
 
     @Override
-    protected int getLayout() {
-        return R.layout.wifi_dpp_qrcode_scanner_fragment;
-    }
-
-    @Override
     public int getMetricsCategory() {
         if (mIsConfiguratorMode) {
             return MetricsProto.MetricsEvent.SETTINGS_WIFI_DPP_CONFIGURATOR;
@@ -127,37 +125,11 @@
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
 
-        setHeaderIconImageResource(R.drawable.ic_scan_24dp);
-
-        if (mIsConfiguratorMode) {
-            setTitle(getString(R.string.wifi_dpp_add_device_to_network));
-
-            WifiNetworkConfig wifiNetworkConfig = ((WifiNetworkConfig.Retriever) getActivity())
-                .getWifiNetworkConfig();
-            if (!WifiNetworkConfig.isValidConfig(wifiNetworkConfig)) {
-                throw new IllegalArgumentException("Invalid Wi-Fi network for configuring");
-            }
-            setDescription(getString(R.string.wifi_dpp_center_qr_code, wifiNetworkConfig.getSsid()));
-        } else {
-            setTitle(getString(R.string.wifi_dpp_scan_qr_code));
-
-            String description;
-            if (TextUtils.isEmpty(mSsid)) {
-                description = getString(R.string.wifi_dpp_scan_qr_code_join_unknown_network, mSsid);
-            } else {
-                description = getString(R.string.wifi_dpp_scan_qr_code_join_network, mSsid);
-            }
-            setDescription(description);
-        }
-
         final ActionBar actionBar = getActivity().getActionBar();
         if (actionBar != null) {
             actionBar.setDisplayHomeAsUpEnabled(true);
             actionBar.show();
         }
-
-        setErrorMessage(getString(R.string.wifi_dpp_could_not_detect_valid_qr_code));
-        showErrorMessage(false);
     }
 
     @Override
@@ -177,13 +149,45 @@
     }
 
     @Override
-    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+    public final View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+        return inflater.inflate(R.layout.wifi_dpp_qrcode_scanner_fragment, container,
+                /* attachToRoot */ false);
+    }
+
+    @Override
+    public void onViewCreated(View view, Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
 
         mTextureView = (TextureView) view.findViewById(R.id.preview_view);
         mTextureView.setSurfaceTextureListener(this);
 
         mDecorateView = (QrDecorateView) view.findViewById(R.id.decorate_view);
+
+        mHeaderIcon.setImageResource(R.drawable.ic_scan_24dp);
+        if (mIsConfiguratorMode) {
+            mTitle.setText(R.string.wifi_dpp_add_device_to_network);
+
+            WifiNetworkConfig wifiNetworkConfig = ((WifiNetworkConfig.Retriever) getActivity())
+                .getWifiNetworkConfig();
+            if (!WifiNetworkConfig.isValidConfig(wifiNetworkConfig)) {
+                throw new IllegalStateException("Invalid Wi-Fi network for configuring");
+            }
+            mSummary.setText(getString(R.string.wifi_dpp_center_qr_code,
+                    wifiNetworkConfig.getSsid()));
+        } else {
+            mTitle.setText(R.string.wifi_dpp_scan_qr_code);
+
+            String description;
+            if (TextUtils.isEmpty(mSsid)) {
+                description = getString(R.string.wifi_dpp_scan_qr_code_join_unknown_network, mSsid);
+            } else {
+                description = getString(R.string.wifi_dpp_scan_qr_code_join_network, mSsid);
+            }
+            mSummary.setText(description);
+        }
+
+        mErrorMessage = view.findViewById(R.id.error_message);
     }
 
     @Override
@@ -321,9 +325,8 @@
         }
     }
 
-    @Override
     public void showErrorMessage(boolean show) {
-        super.showErrorMessage(show);
+        mErrorMessage.setVisibility(show ? View.VISIBLE : View.INVISIBLE);
 
         if (show) {
             mHandler.removeMessages(MESSAGE_HIDE_ERROR_MESSAGE);