WifiSettingsForSetupWizard.java revision 588e61aa055eff73c968e2b8f45b6848bd8f7766
1d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner/* 2d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * Copyright (C) 2014 The Android Open Source Project 3d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * 4d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * Licensed under the Apache License, Version 2.0 (the "License"); 5d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * you may not use this file except in compliance with the License. 6d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * You may obtain a copy of the License at 7d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * 8d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * http://www.apache.org/licenses/LICENSE-2.0 9d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * 10d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * Unless required by applicable law or agreed to in writing, software 11d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * distributed under the License is distributed on an "AS IS" BASIS, 12d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * See the License for the specific language governing permissions and 14d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * limitations under the License. 15d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner */ 16d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 17d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerpackage com.android.settings.wifi; 18d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 19d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.app.Activity; 20d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.content.BroadcastReceiver; 21d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.content.Context; 22d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.content.Intent; 23d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.content.IntentFilter; 24d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.content.res.TypedArray; 25d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.net.ConnectivityManager; 26d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.net.NetworkInfo; 27d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.net.wifi.WifiManager; 28d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.os.Bundle; 29d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.util.Log; 30d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.view.LayoutInflater; 31d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.view.Menu; 32d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.view.MenuItem; 33d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.view.View; 34d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.view.View.OnClickListener; 35d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.view.ViewGroup; 36d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.widget.ImageButton; 37588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lamimport android.widget.ListView; 38d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.widget.PopupMenu; 39d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.widget.PopupMenu.OnMenuItemClickListener; 40588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lamimport android.widget.TextView; 41d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 42d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport com.android.settings.R; 43d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 44d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner/** 45d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * This customized version of WifiSettings is shown to the user only during Setup Wizard. Menu 46d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * selections are limited, clicking on an access point will auto-advance to the next screen (once 47d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * connected), and, if the user opts to skip ahead without a wifi connection, a warning message 48d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * alerts of possible carrier data charges or missing software updates. 49d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner */ 50d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerpublic class WifiSettingsForSetupWizard extends WifiSettings { 51d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 52d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner private static final String TAG = "WifiSettingsForSetupWizard"; 53d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 54d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner /* Used in Wifi Setup context */ 55d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 56d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner // this boolean extra specifies whether to auto finish when connection is established 57d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner private static final String EXTRA_AUTO_FINISH_ON_CONNECT = "wifi_auto_finish_on_connect"; 58d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 59d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner // show a text regarding data charges when wifi connection is required during setup wizard 60d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner protected static final String EXTRA_SHOW_WIFI_REQUIRED_INFO = "wifi_show_wifi_required_info"; 61d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 62d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner // should activity finish once we have a connection? 63d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner private boolean mAutoFinishOnConnection; 64d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 65d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner private final IntentFilter mFilter; 66d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner private final BroadcastReceiver mReceiver; 67d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 68d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner public WifiSettingsForSetupWizard() { 69d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner super(); 70d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 71d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner mFilter = new IntentFilter(); 72d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); 73d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 74d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner mReceiver = new BroadcastReceiver() { 75d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner @Override 76d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner public void onReceive(Context context, Intent intent) { 77d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner NetworkInfo info = (NetworkInfo) intent.getParcelableExtra( 78d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner WifiManager.EXTRA_NETWORK_INFO); 79d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner if (mAutoFinishOnConnection && info.isConnected()) { 80c56c8c99e9e078dccf43c2251c3a94cf477f2812Russell Brenner Log.d(TAG, "mReceiver.onReceive context=" + context + " intent=" + intent); 816776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam WifiSetupActivity activity = (WifiSetupActivity) getActivity(); 826776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam activity.finishOrNext(Activity.RESULT_OK); 83d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 84d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 85d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner }; 86d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 87d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 88d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner @Override 89d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner public View onCreateView(final LayoutInflater inflater, ViewGroup container, 90d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner Bundle savedInstanceState) { 91d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 92d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner final View view = inflater.inflate(R.layout.setup_preference, container, false); 93588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam 94588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam final ListView list = (ListView) view.findViewById(android.R.id.list); 95588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam final View title = view.findViewById(R.id.title); 96588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam if (title == null) { 97588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam final View header = inflater.inflate(R.layout.setup_wizard_header, list, false); 98588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam list.addHeaderView(header); 99588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam } 100588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam 101588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam final View other = inflater.inflate(R.layout.setup_wifi_add_network, list, false); 102588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam list.addFooterView(other, null, true); 103d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner other.setOnClickListener(new OnClickListener() { 104d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner @Override 105d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner public void onClick(View v) { 106d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner if (mWifiManager.isWifiEnabled()) { 107d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner onAddNetworkPressed(); 108d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 109d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 110d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner }); 111d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 112d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner final Intent intent = getActivity().getIntent(); 113d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner if (intent.getBooleanExtra(EXTRA_SHOW_WIFI_REQUIRED_INFO, false)) { 114d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner view.findViewById(R.id.wifi_required_info).setVisibility(View.VISIBLE); 115d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 116d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 117d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner return view; 118d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 119d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 120d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner @Override 121d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner public void onActivityCreated(Bundle savedInstanceState) { 122d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner super.onActivityCreated(savedInstanceState); 123d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 124d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner getView().setSystemUiVisibility( 125d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner View.STATUS_BAR_DISABLE_HOME | 126d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner View.STATUS_BAR_DISABLE_RECENT | 127d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner View.STATUS_BAR_DISABLE_NOTIFICATION_ALERTS | 128d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner View.STATUS_BAR_DISABLE_CLOCK); 129d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 1306776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam final WifiSetupActivity activity = (WifiSetupActivity) getActivity(); 131d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner final Intent intent = activity.getIntent(); 132d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 133d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner // first if we're supposed to finish once we have a connection 134d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner mAutoFinishOnConnection = intent.getBooleanExtra(EXTRA_AUTO_FINISH_ON_CONNECT, false); 135d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 1366776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam if (mAutoFinishOnConnection) { 137d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner // Hide the next button 138d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner if (hasNextButton()) { 139d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner getNextButton().setVisibility(View.GONE); 140d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 141d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 1426776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam /* 1436776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam * When entering with a savedInstanceState, we may be returning from a later activity in 1446776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam * the setup flow. It's not clear yet if there are other possible circumstances. It's 1456776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam * not appropriate to refire our activity results, so we skip that here. 1466776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam */ 1476776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam if (savedInstanceState == null) { 1486776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam final ConnectivityManager connectivity = (ConnectivityManager) 1496776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam activity.getSystemService(Context.CONNECTIVITY_SERVICE); 1506776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam if (connectivity != null && 1516776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) { 1526776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam Log.d(TAG, "onActivityCreated Auto-finishing"); 1536776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam activity.finishOrNext(Activity.RESULT_OK); 1546776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam return; 1556776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam } 156d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 157d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 158d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 159d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 160d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner @Override 161d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner public void onResume() { 162d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner super.onResume(); 163d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner getActivity().registerReceiver(mReceiver, mFilter); 164d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 165d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 166d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner @Override 167d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner public void onPause() { 168d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner super.onPause(); 169d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner getActivity().unregisterReceiver(mReceiver); 170d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 171d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 172d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner @Override 173d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner public void registerForContextMenu(View view) { 174d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner // Suppressed during setup wizard 175d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 176d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 177d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner @Override 178d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner /* package */ WifiEnabler createWifiEnabler() { 179d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner // Not shown during setup wizard 180d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner return null; 181d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 182d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 183d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner @Override 184d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner /* package */ void addOptionsMenuItems(Menu menu) { 185d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner final boolean wifiIsEnabled = mWifiManager.isWifiEnabled(); 186d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner final TypedArray ta = getActivity().getTheme() 187d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner .obtainStyledAttributes(new int[] {R.attr.ic_wps}); 188d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner menu.add(Menu.NONE, MENU_ID_WPS_PBC, 0, R.string.wifi_menu_wps_pbc) 189d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner .setIcon(ta.getDrawable(0)) 190d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner .setEnabled(wifiIsEnabled) 191d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 192d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner menu.add(Menu.NONE, MENU_ID_ADD_NETWORK, 0, R.string.wifi_add_network) 193d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner .setEnabled(wifiIsEnabled) 194d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 195d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner ta.recycle(); 196d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 197d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner} 198