1 /*
2  * Copyright (C) 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.settings.wifi;
18 
19 import android.app.Activity;
20 import android.app.settings.SettingsEnums;
21 import android.content.Intent;
22 import android.net.wifi.WifiConfiguration;
23 import android.os.Bundle;
24 import android.view.LayoutInflater;
25 import android.view.View;
26 import android.view.ViewGroup;
27 import android.widget.Button;
28 import android.widget.ImageButton;
29 import android.widget.TextView;
30 
31 import androidx.annotation.VisibleForTesting;
32 
33 import com.android.settings.R;
34 import com.android.settings.core.InstrumentedFragment;
35 import com.android.settings.wifi.dpp.WifiDppUtils;
36 
37 public class AddNetworkFragment extends InstrumentedFragment implements WifiConfigUiBase,
38         View.OnClickListener {
39 
40     final static String WIFI_CONFIG_KEY = "wifi_config_key";
41     @VisibleForTesting
42     final static int SUBMIT_BUTTON_ID = android.R.id.button1;
43     @VisibleForTesting
44     final static int CANCEL_BUTTON_ID = android.R.id.button2;
45     final static int SSID_SCANNER_BUTTON_ID = R.id.ssid_scanner_button;
46 
47     private static final int REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER = 0;
48 
49     private WifiConfigController mUIController;
50     private Button mSubmitBtn;
51     private Button mCancelBtn;
52 
53     @Override
onCreate(Bundle savedInstanceState)54     public void onCreate(Bundle savedInstanceState) {
55         super.onCreate(savedInstanceState);
56     }
57 
58     @Override
getMetricsCategory()59     public int getMetricsCategory() {
60         return SettingsEnums.SETTINGS_WIFI_ADD_NETWORK;
61     }
62 
63     @Override
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)64     public View onCreateView(LayoutInflater inflater, ViewGroup container,
65             Bundle savedInstanceState) {
66         final View rootView = inflater.inflate(R.layout.wifi_add_network_view, container, false);
67 
68         final Button neutral = rootView.findViewById(android.R.id.button3);
69         if (neutral != null) {
70             neutral.setVisibility(View.GONE);
71         }
72 
73         mSubmitBtn = rootView.findViewById(SUBMIT_BUTTON_ID);
74         mCancelBtn = rootView.findViewById(CANCEL_BUTTON_ID);
75         final ImageButton ssidScannerButton = rootView.findViewById(SSID_SCANNER_BUTTON_ID);
76         mSubmitBtn.setOnClickListener(this);
77         mCancelBtn.setOnClickListener(this);
78         ssidScannerButton.setOnClickListener(this);
79         mUIController = new WifiConfigController(this, rootView, null, getMode());
80 
81         return rootView;
82     }
83 
84     @Override
onViewStateRestored(Bundle savedInstanceState)85     public void onViewStateRestored(Bundle savedInstanceState) {
86         super.onViewStateRestored(savedInstanceState);
87         mUIController.updatePassword();
88     }
89 
90     @Override
onClick(View view)91     public void onClick(View view) {
92         if (view.getId() == SUBMIT_BUTTON_ID) {
93             handleSubmitAction();
94         } else if (view.getId() == CANCEL_BUTTON_ID) {
95             handleCancelAction();
96         } else if (view.getId() == SSID_SCANNER_BUTTON_ID) {
97             final TextView ssidEditText = getView().findViewById(R.id.ssid);
98             final String ssid = ssidEditText.getText().toString();
99 
100             // Launch QR code scanner to join a network.
101             startActivityForResult(WifiDppUtils.getEnrolleeQrCodeScannerIntent(ssid),
102                     REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER);
103         }
104     }
105 
106     @Override
onActivityResult(int requestCode, int resultCode, Intent data)107     public void onActivityResult(int requestCode, int resultCode, Intent data) {
108         super.onActivityResult(requestCode, resultCode, data);
109 
110         if (requestCode == REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER) {
111             if (resultCode != Activity.RESULT_OK) {
112                 return;
113             }
114 
115             final WifiConfiguration config = data.getParcelableExtra(
116                     WifiDialogActivity.KEY_WIFI_CONFIGURATION);
117             successfullyFinish(config);
118         }
119     }
120 
121     @Override
getMode()122     public int getMode() {
123         return WifiConfigUiBase.MODE_CONNECT;
124     }
125 
126     @Override
getController()127     public WifiConfigController getController() {
128         return mUIController;
129     }
130 
131     @Override
dispatchSubmit()132     public void dispatchSubmit() {
133         handleSubmitAction();
134     }
135 
136     @Override
setTitle(int id)137     public void setTitle(int id) {
138         getActivity().setTitle(id);
139     }
140 
141     @Override
setTitle(CharSequence title)142     public void setTitle(CharSequence title) {
143         getActivity().setTitle(title);
144     }
145 
146     @Override
setSubmitButton(CharSequence text)147     public void setSubmitButton(CharSequence text) {
148         mSubmitBtn.setText(text);
149     }
150 
151     @Override
setCancelButton(CharSequence text)152     public void setCancelButton(CharSequence text) {
153         mCancelBtn.setText(text);
154     }
155 
156     @Override
setForgetButton(CharSequence text)157     public void setForgetButton(CharSequence text) {
158         // AddNetwork doesn't need forget button.
159     }
160 
161     @Override
getSubmitButton()162     public Button getSubmitButton() {
163         return mSubmitBtn;
164     }
165 
166     @Override
getCancelButton()167     public Button getCancelButton() {
168         return mCancelBtn;
169     }
170 
171     @Override
getForgetButton()172     public Button getForgetButton() {
173         // AddNetwork doesn't need forget button.
174         return null;
175     }
176 
177     @VisibleForTesting
handleSubmitAction()178     void handleSubmitAction() {
179         successfullyFinish(mUIController.getConfig());
180     }
181 
successfullyFinish(WifiConfiguration config)182     private void successfullyFinish(WifiConfiguration config) {
183         final Intent intent = new Intent();
184         final Activity activity = getActivity();
185         intent.putExtra(WIFI_CONFIG_KEY, config);
186         activity.setResult(Activity.RESULT_OK, intent);
187         activity.finish();
188     }
189 
190     @VisibleForTesting
handleCancelAction()191     void handleCancelAction() {
192         final Activity activity = getActivity();
193         activity.setResult(Activity.RESULT_CANCELED);
194         activity.finish();
195     }
196 }
197