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.WifiDppQrCodeScannerFragment; 36 import com.android.settings.wifi.dpp.WifiDppUtils; 37 38 /** 39 * A full screen UI component for users to edit and add a Wi-Fi network. 40 */ 41 public class AddNetworkFragment extends InstrumentedFragment implements WifiConfigUiBase2, 42 View.OnClickListener { 43 44 public static final String WIFI_CONFIG_KEY = "wifi_config_key"; 45 @VisibleForTesting 46 final static int SUBMIT_BUTTON_ID = android.R.id.button1; 47 @VisibleForTesting 48 final static int CANCEL_BUTTON_ID = android.R.id.button2; 49 final static int SSID_SCANNER_BUTTON_ID = R.id.ssid_scanner_button; 50 51 private static final int REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER = 0; 52 53 private WifiConfigController2 mUIController; 54 private Button mSubmitBtn; 55 private Button mCancelBtn; 56 57 @Override onCreate(Bundle savedInstanceState)58 public void onCreate(Bundle savedInstanceState) { 59 super.onCreate(savedInstanceState); 60 } 61 62 @Override getMetricsCategory()63 public int getMetricsCategory() { 64 return SettingsEnums.SETTINGS_WIFI_ADD_NETWORK; 65 } 66 67 @Override onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)68 public View onCreateView(LayoutInflater inflater, ViewGroup container, 69 Bundle savedInstanceState) { 70 final View rootView = inflater.inflate(R.layout.wifi_add_network_view, container, false); 71 72 final Button neutral = rootView.findViewById(android.R.id.button3); 73 if (neutral != null) { 74 neutral.setVisibility(View.GONE); 75 } 76 77 mSubmitBtn = rootView.findViewById(SUBMIT_BUTTON_ID); 78 mCancelBtn = rootView.findViewById(CANCEL_BUTTON_ID); 79 final ImageButton ssidScannerButton = rootView.findViewById(SSID_SCANNER_BUTTON_ID); 80 mSubmitBtn.setOnClickListener(this); 81 mCancelBtn.setOnClickListener(this); 82 ssidScannerButton.setOnClickListener(this); 83 mUIController = new WifiConfigController2(this, rootView, null, getMode()); 84 85 return rootView; 86 } 87 88 @Override onResume()89 public void onResume() { 90 super.onResume(); 91 mUIController.showSecurityFields( 92 /* refreshEapMethods */ false, /* refreshCertificates */ true); 93 } 94 95 @Override onViewStateRestored(Bundle savedInstanceState)96 public void onViewStateRestored(Bundle savedInstanceState) { 97 super.onViewStateRestored(savedInstanceState); 98 mUIController.updatePassword(); 99 } 100 101 @Override onClick(View view)102 public void onClick(View view) { 103 if (view.getId() == SUBMIT_BUTTON_ID) { 104 handleSubmitAction(); 105 } else if (view.getId() == CANCEL_BUTTON_ID) { 106 handleCancelAction(); 107 } else if (view.getId() == SSID_SCANNER_BUTTON_ID) { 108 final TextView ssidEditText = getView().findViewById(R.id.ssid); 109 final String ssid = ssidEditText.getText().toString(); 110 111 // Launch QR code scanner to join a network. 112 startActivityForResult( 113 WifiDppUtils.getEnrolleeQrCodeScannerIntent(view.getContext(), ssid), 114 REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER); 115 } 116 } 117 118 @Override onActivityResult(int requestCode, int resultCode, Intent data)119 public void onActivityResult(int requestCode, int resultCode, Intent data) { 120 super.onActivityResult(requestCode, resultCode, data); 121 if (requestCode == REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER) { 122 if (resultCode != Activity.RESULT_OK) { 123 return; 124 } 125 126 final WifiConfiguration config = data.getParcelableExtra( 127 WifiDppQrCodeScannerFragment.KEY_WIFI_CONFIGURATION); 128 successfullyFinish(config); 129 } 130 } 131 132 @Override getMode()133 public int getMode() { 134 return WifiConfigUiBase2.MODE_CONNECT; 135 } 136 137 @Override getController()138 public WifiConfigController2 getController() { 139 return mUIController; 140 } 141 142 @Override dispatchSubmit()143 public void dispatchSubmit() { 144 handleSubmitAction(); 145 } 146 147 @Override setTitle(int id)148 public void setTitle(int id) { 149 getActivity().setTitle(id); 150 } 151 152 @Override setTitle(CharSequence title)153 public void setTitle(CharSequence title) { 154 getActivity().setTitle(title); 155 } 156 157 @Override setSubmitButton(CharSequence text)158 public void setSubmitButton(CharSequence text) { 159 mSubmitBtn.setText(text); 160 } 161 162 @Override setCancelButton(CharSequence text)163 public void setCancelButton(CharSequence text) { 164 mCancelBtn.setText(text); 165 } 166 167 @Override setForgetButton(CharSequence text)168 public void setForgetButton(CharSequence text) { 169 // AddNetwork doesn't need forget button. 170 } 171 172 @Override getSubmitButton()173 public Button getSubmitButton() { 174 return mSubmitBtn; 175 } 176 177 @Override getCancelButton()178 public Button getCancelButton() { 179 return mCancelBtn; 180 } 181 182 @Override getForgetButton()183 public Button getForgetButton() { 184 // AddNetwork doesn't need forget button. 185 return null; 186 } 187 188 @VisibleForTesting handleSubmitAction()189 void handleSubmitAction() { 190 successfullyFinish(mUIController.getConfig()); 191 } 192 successfullyFinish(WifiConfiguration config)193 private void successfullyFinish(WifiConfiguration config) { 194 final Intent intent = new Intent(); 195 final Activity activity = getActivity(); 196 intent.putExtra(WIFI_CONFIG_KEY, config); 197 activity.setResult(Activity.RESULT_OK, intent); 198 activity.finish(); 199 } 200 201 @VisibleForTesting handleCancelAction()202 void handleCancelAction() { 203 final Activity activity = getActivity(); 204 activity.setResult(Activity.RESULT_CANCELED); 205 activity.finish(); 206 } 207 } 208