WifiSettingsForSetupWizard.java revision f13c783f6b91aeaa4528d9b003a600636750f6b4
1/* 2 * Copyright (C) 2014 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 17package com.android.settings.wifi; 18 19import android.app.Activity; 20import android.content.BroadcastReceiver; 21import android.content.Context; 22import android.content.Intent; 23import android.content.IntentFilter; 24import android.content.res.TypedArray; 25import android.net.ConnectivityManager; 26import android.net.NetworkInfo; 27import android.net.wifi.WifiManager; 28import android.os.Bundle; 29import android.util.Log; 30import android.view.LayoutInflater; 31import android.view.Menu; 32import android.view.MenuItem; 33import android.view.View; 34import android.view.View.OnClickListener; 35import android.view.ViewGroup; 36import android.widget.ImageButton; 37import android.widget.PopupMenu; 38import android.widget.PopupMenu.OnMenuItemClickListener; 39 40import com.android.settings.R; 41 42/** 43 * This customized version of WifiSettings is shown to the user only during Setup Wizard. Menu 44 * selections are limited, clicking on an access point will auto-advance to the next screen (once 45 * connected), and, if the user opts to skip ahead without a wifi connection, a warning message 46 * alerts of possible carrier data charges or missing software updates. 47 */ 48public class WifiSettingsForSetupWizard extends WifiSettings { 49 50 private static final String TAG = "WifiSettingsForSetupWizard"; 51 52 /* Used in Wifi Setup context */ 53 54 // this boolean extra specifies whether to auto finish when connection is established 55 private static final String EXTRA_AUTO_FINISH_ON_CONNECT = "wifi_auto_finish_on_connect"; 56 57 // show a text regarding data charges when wifi connection is required during setup wizard 58 protected static final String EXTRA_SHOW_WIFI_REQUIRED_INFO = "wifi_show_wifi_required_info"; 59 60 // should activity finish once we have a connection? 61 private boolean mAutoFinishOnConnection; 62 63 private final IntentFilter mFilter; 64 private final BroadcastReceiver mReceiver; 65 66 public WifiSettingsForSetupWizard() { 67 super(); 68 69 mFilter = new IntentFilter(); 70 mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); 71 72 mReceiver = new BroadcastReceiver() { 73 @Override 74 public void onReceive(Context context, Intent intent) { 75 NetworkInfo info = (NetworkInfo) intent.getParcelableExtra( 76 WifiManager.EXTRA_NETWORK_INFO); 77 if (mAutoFinishOnConnection && info.isConnected()) { 78 Log.d(TAG, "mReceiver.onReceive context=" + context + " intent=" + intent); 79 WifiSetupActivity activity = (WifiSetupActivity) getActivity(); 80 activity.finishOrNext(Activity.RESULT_OK); 81 } 82 } 83 }; 84 } 85 86 @Override 87 public View onCreateView(final LayoutInflater inflater, ViewGroup container, 88 Bundle savedInstanceState) { 89 90 final View view = inflater.inflate(R.layout.setup_preference, container, false); 91 final View other = view.findViewById(R.id.other_network); 92 other.setOnClickListener(new OnClickListener() { 93 @Override 94 public void onClick(View v) { 95 if (mWifiManager.isWifiEnabled()) { 96 onAddNetworkPressed(); 97 } 98 } 99 }); 100 final ImageButton b = (ImageButton) view.findViewById(R.id.more); 101 if (b != null) { 102 b.setOnClickListener(new OnClickListener() { 103 @Override 104 public void onClick(View v) { 105 if (mWifiManager.isWifiEnabled()) { 106 PopupMenu pm = new PopupMenu(inflater.getContext(), b); 107 pm.inflate(R.menu.wifi_setup); 108 pm.setOnMenuItemClickListener(new OnMenuItemClickListener() { 109 @Override 110 public boolean onMenuItemClick(MenuItem item) { 111 if (R.id.wifi_wps == item.getItemId()) { 112 showDialog(WPS_PBC_DIALOG_ID); 113 return true; 114 } 115 return false; 116 } 117 }); 118 pm.show(); 119 } 120 } 121 }); 122 } 123 124 final Intent intent = getActivity().getIntent(); 125 if (intent.getBooleanExtra(EXTRA_SHOW_WIFI_REQUIRED_INFO, false)) { 126 view.findViewById(R.id.wifi_required_info).setVisibility(View.VISIBLE); 127 } 128 129 return view; 130 } 131 132 @Override 133 public void onActivityCreated(Bundle savedInstanceState) { 134 super.onActivityCreated(savedInstanceState); 135 136 getView().setSystemUiVisibility( 137 View.STATUS_BAR_DISABLE_HOME | 138 View.STATUS_BAR_DISABLE_RECENT | 139 View.STATUS_BAR_DISABLE_NOTIFICATION_ALERTS | 140 View.STATUS_BAR_DISABLE_CLOCK); 141 142 final WifiSetupActivity activity = (WifiSetupActivity) getActivity(); 143 final Intent intent = activity.getIntent(); 144 145 // first if we're supposed to finish once we have a connection 146 mAutoFinishOnConnection = intent.getBooleanExtra(EXTRA_AUTO_FINISH_ON_CONNECT, false); 147 148 if (mAutoFinishOnConnection) { 149 // Hide the next button 150 if (hasNextButton()) { 151 getNextButton().setVisibility(View.GONE); 152 } 153 154 /* 155 * When entering with a savedInstanceState, we may be returning from a later activity in 156 * the setup flow. It's not clear yet if there are other possible circumstances. It's 157 * not appropriate to refire our activity results, so we skip that here. 158 */ 159 if (savedInstanceState == null) { 160 final ConnectivityManager connectivity = (ConnectivityManager) 161 activity.getSystemService(Context.CONNECTIVITY_SERVICE); 162 if (connectivity != null && 163 connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) { 164 Log.d(TAG, "onActivityCreated Auto-finishing"); 165 activity.finishOrNext(Activity.RESULT_OK); 166 return; 167 } 168 } 169 } 170 } 171 172 @Override 173 public void onResume() { 174 super.onResume(); 175 getActivity().registerReceiver(mReceiver, mFilter); 176 } 177 178 @Override 179 public void onPause() { 180 super.onPause(); 181 getActivity().unregisterReceiver(mReceiver); 182 } 183 184 @Override 185 public void registerForContextMenu(View view) { 186 // Suppressed during setup wizard 187 } 188 189 @Override 190 /* package */ WifiEnabler createWifiEnabler() { 191 // Not shown during setup wizard 192 return null; 193 } 194 195 @Override 196 /* package */ void addOptionsMenuItems(Menu menu) { 197 final boolean wifiIsEnabled = mWifiManager.isWifiEnabled(); 198 final TypedArray ta = getActivity().getTheme() 199 .obtainStyledAttributes(new int[] {R.attr.ic_wps}); 200 menu.add(Menu.NONE, MENU_ID_WPS_PBC, 0, R.string.wifi_menu_wps_pbc) 201 .setIcon(ta.getDrawable(0)) 202 .setEnabled(wifiIsEnabled) 203 .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 204 menu.add(Menu.NONE, MENU_ID_ADD_NETWORK, 0, R.string.wifi_add_network) 205 .setEnabled(wifiIsEnabled) 206 .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 207 ta.recycle(); 208 } 209 210} 211