1d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa/* 2d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * Copyright (C) 2010 The Android Open Source Project 3d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * 4d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * Licensed under the Apache License, Version 2.0 (the "License"); 5d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * you may not use this file except in compliance with the License. 6d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * You may obtain a copy of the License at 7d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * 8d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * http://www.apache.org/licenses/LICENSE-2.0 9d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * 10d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * Unless required by applicable law or agreed to in writing, software 11d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * distributed under the License is distributed on an "AS IS" BASIS, 12d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * See the License for the specific language governing permissions and 14d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * limitations under the License. 15d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa */ 16d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 17d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawapackage com.android.settings.wifi; 18d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 19d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.app.Activity; 20fe3b6bea01de328cdf7d6cf414607304fcdeaed6Daisuke Miyakawaimport android.content.Context; 21cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawaimport android.content.Intent; 22f54fec59398a285b1f5344da120792bec5e4707aFreeman Ngimport android.content.pm.ActivityInfo; 23d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.net.NetworkInfo.DetailedState; 24cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawaimport android.net.wifi.WifiConfiguration; 2558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawaimport android.net.wifi.WifiManager; 26d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.os.Bundle; 274dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawaimport android.os.Handler; 28590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriffimport android.os.Message; 29e78c1879058571c00879f0d3e756951302adf513Gilles Debunneimport android.preference.PreferenceScreen; 3055de702961642521e247f155963644df81756215Daisuke Miyakawaimport android.text.TextUtils; 318b3b876c096acb93ec8736851e47e2ba3ce276e5Daisuke Miyakawaimport android.util.Log; 3214cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawaimport android.view.View; 33d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.view.View.OnClickListener; 3458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawaimport android.view.ViewGroup; 35d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.view.Window; 365d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawaimport android.view.inputmethod.InputMethodManager; 37d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.widget.Button; 38d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.widget.ProgressBar; 39d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.widget.TextView; 40d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 41590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriffimport com.android.internal.util.AsyncChannel; 42e78c1879058571c00879f0d3e756951302adf513Gilles Debunneimport com.android.settings.R; 43590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff 4458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawaimport java.util.Collection; 45d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport java.util.EnumMap; 4609d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawaimport java.util.List; 47d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 48d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa/** 49d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * WifiSetings Activity specific for SetupWizard with X-Large screen size. 50d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa */ 51d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawapublic class WifiSettingsForSetupWizardXL extends Activity implements OnClickListener { 5258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private static final String TAG = "SetupWizard"; 5335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private static final boolean DEBUG = true; 5458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 55f54fec59398a285b1f5344da120792bec5e4707aFreeman Ng // lock orientation into landscape or portrait 56f54fec59398a285b1f5344da120792bec5e4707aFreeman Ng private static final String EXTRA_PREFS_LANDSCAPE_LOCK = "extra_prefs_landscape_lock"; 57f54fec59398a285b1f5344da120792bec5e4707aFreeman Ng private static final String EXTRA_PREFS_PORTRAIT_LOCK = "extra_prefs_portrait_lock"; 58f54fec59398a285b1f5344da120792bec5e4707aFreeman Ng 592adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa private static final EnumMap<DetailedState, DetailedState> sNetworkStateMap = 6058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa new EnumMap<DetailedState, DetailedState>(DetailedState.class); 61d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 62d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa static { 632adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa sNetworkStateMap.put(DetailedState.IDLE, DetailedState.DISCONNECTED); 642adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa sNetworkStateMap.put(DetailedState.SCANNING, DetailedState.SCANNING); 652adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa sNetworkStateMap.put(DetailedState.CONNECTING, DetailedState.CONNECTING); 662adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa sNetworkStateMap.put(DetailedState.AUTHENTICATING, DetailedState.CONNECTING); 672adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa sNetworkStateMap.put(DetailedState.OBTAINING_IPADDR, DetailedState.CONNECTING); 682adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa sNetworkStateMap.put(DetailedState.CONNECTED, DetailedState.CONNECTED); 692adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa sNetworkStateMap.put(DetailedState.SUSPENDED, DetailedState.SUSPENDED); // ? 702adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa sNetworkStateMap.put(DetailedState.DISCONNECTING, DetailedState.DISCONNECTED); 712adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa sNetworkStateMap.put(DetailedState.DISCONNECTED, DetailedState.DISCONNECTED); 722adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa sNetworkStateMap.put(DetailedState.FAILED, DetailedState.FAILED); 73d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 74d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 752adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa private WifiSettings mWifiSettings; 762adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa private WifiManager mWifiManager; 772adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa 782adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa /** Used for resizing a padding above title. Hiden when software keyboard is shown. */ 7914cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa private View mTopPadding; 8014cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 81dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa /** Used for resizing a padding of main content. Hiden when software keyboard is shown. */ 82dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa private View mContentPadding; 8314cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 8414cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa private TextView mTitleView; 8514cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa /** 8614cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa * The name of a network currently connecting, or trying to connect. 8714cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa * This may be empty ("") at first, and updated when configuration is changed. 8814cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa */ 8914cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa private CharSequence mNetworkName = ""; 9014cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa private CharSequence mEditingTitle; 9114cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 92d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa private ProgressBar mProgressBar; 93beec0b2da6286575a4526d06cd5215463f39ae40Daisuke Miyakawa private View mTopDividerNoProgress; 942adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa /** 952adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * Used for resizing a padding between WifiSettings preference and bottom bar when 962adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * ProgressBar is visible as a top divider. 972adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa */ 98be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa private View mBottomPadding; 99be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa 10058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private Button mAddNetworkButton; 10158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private Button mRefreshButton; 10258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private Button mSkipOrNextButton; 10358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private Button mBackButton; 10458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 1054781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa private Button mConnectButton; 1064781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 10735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa /** 10835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa * View enclosing {@link WifiSettings}. 10935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa */ 11035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private View mWifiSettingsFragmentLayout; 111a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa private View mConnectingStatusLayout; 112a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa private TextView mConnectingStatusView; 113a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa 1142adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa /* 1152adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * States of current screen, which should be saved and restored when Activity is relaunched 1162adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * with orientation change, etc. 1172adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa */ 11835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private static final int SCREEN_STATE_DISCONNECTED = 0; 11935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private static final int SCREEN_STATE_EDITING = 1; 12035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private static final int SCREEN_STATE_CONNECTING = 2; 12135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private static final int SCREEN_STATE_CONNECTED = 3; 12235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 1232adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa /** Current screen state. */ 12435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private int mScreenState = SCREEN_STATE_DISCONNECTED; 12558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 12658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private WifiConfigUiForSetupWizardXL mWifiConfig; 12758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 1285d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa private InputMethodManager mInputMethodManager; 129fe3b6bea01de328cdf7d6cf414607304fcdeaed6Daisuke Miyakawa 1302adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa /** 1312adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * Previous network connection state reported by main Wifi module. 1322adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * 1332adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * Note that we don't use original {@link DetailedState} object but simplified one translated 1342adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * using sNetworkStateMap. 1352adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa */ 1362adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa private DetailedState mPreviousNetworkState = DetailedState.DISCONNECTED; 1374781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 138d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa @Override 139d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa public void onCreate(Bundle savedInstanceState) { 140d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa super.onCreate(savedInstanceState); 141d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa requestWindowFeature(Window.FEATURE_NO_TITLE); 142d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa setContentView(R.layout.wifi_settings_for_setup_wizard_xl); 14358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 14458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE); 145dd9fbb0b9e1b82025fc8699fe4ad4a9e2a918c4dDaisuke Miyakawa // There's no button here enabling wifi network, so we need to enable it without 146dd9fbb0b9e1b82025fc8699fe4ad4a9e2a918c4dDaisuke Miyakawa // users' request. 147dd9fbb0b9e1b82025fc8699fe4ad4a9e2a918c4dDaisuke Miyakawa mWifiManager.setWifiEnabled(true); 148590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff mWifiManager.asyncConnect(this, new WifiServiceHandler()); 149dd9fbb0b9e1b82025fc8699fe4ad4a9e2a918c4dDaisuke Miyakawa 150d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mWifiSettings = 151d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa (WifiSettings)getFragmentManager().findFragmentById(R.id.wifi_setup_fragment); 1525d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa mInputMethodManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 1532adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa 1542adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa initViews(); 1552adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa 1562adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // At first, Wifi module doesn't return SCANNING state (it's too early), so we manually 1572adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // show it. 158f26b2b5110117a74605ec30305fdfaa9c8077608Daisuke Miyakawa showScanningState(); 159d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 160d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 1612adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa private void initViews() { 162f54fec59398a285b1f5344da120792bec5e4707aFreeman Ng Intent intent = getIntent(); 163f54fec59398a285b1f5344da120792bec5e4707aFreeman Ng 164f54fec59398a285b1f5344da120792bec5e4707aFreeman Ng if (intent.getBooleanExtra("firstRun", false)) { 16535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa final View layoutRoot = findViewById(R.id.layout_root); 16635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa layoutRoot.setSystemUiVisibility(View.STATUS_BAR_DISABLE_BACK); 16735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 168f54fec59398a285b1f5344da120792bec5e4707aFreeman Ng if (intent.getBooleanExtra(EXTRA_PREFS_LANDSCAPE_LOCK, false)) { 169f54fec59398a285b1f5344da120792bec5e4707aFreeman Ng setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); 170f54fec59398a285b1f5344da120792bec5e4707aFreeman Ng } 171f54fec59398a285b1f5344da120792bec5e4707aFreeman Ng if (intent.getBooleanExtra(EXTRA_PREFS_PORTRAIT_LOCK, false)) { 172f54fec59398a285b1f5344da120792bec5e4707aFreeman Ng setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); 173f54fec59398a285b1f5344da120792bec5e4707aFreeman Ng } 17462fb701ea9781f4e1c05af6d730e91bb2cdcdae0Daisuke Miyakawa 17514cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mTitleView = (TextView)findViewById(R.id.wifi_setup_title); 176d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mProgressBar = (ProgressBar)findViewById(R.id.scanning_progress_bar); 177d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mProgressBar.setMax(2); 178beec0b2da6286575a4526d06cd5215463f39ae40Daisuke Miyakawa mTopDividerNoProgress = findViewById(R.id.top_divider_no_progress); 179be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mBottomPadding = findViewById(R.id.bottom_padding); 180d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 181beec0b2da6286575a4526d06cd5215463f39ae40Daisuke Miyakawa mProgressBar.setVisibility(View.VISIBLE); 1823b6aa41cce9dafa48dfbb3e93ea856610de1f1e7Daisuke Miyakawa mProgressBar.setIndeterminate(true); 183beec0b2da6286575a4526d06cd5215463f39ae40Daisuke Miyakawa mTopDividerNoProgress.setVisibility(View.GONE); 1843b6aa41cce9dafa48dfbb3e93ea856610de1f1e7Daisuke Miyakawa 18558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mAddNetworkButton = (Button)findViewById(R.id.wifi_setup_add_network); 18658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mAddNetworkButton.setOnClickListener(this); 18758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mRefreshButton = (Button)findViewById(R.id.wifi_setup_refresh_list); 18858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mRefreshButton.setOnClickListener(this); 18958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton = (Button)findViewById(R.id.wifi_setup_skip_or_next); 19058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setOnClickListener(this); 19158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mConnectButton = (Button)findViewById(R.id.wifi_setup_connect); 19258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mConnectButton.setOnClickListener(this); 19358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mBackButton = (Button)findViewById(R.id.wifi_setup_cancel); 19458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mBackButton.setOnClickListener(this); 1954dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa 19614cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mTopPadding = findViewById(R.id.top_padding); 197dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa mContentPadding = findViewById(R.id.content_padding); 19814cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 19935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mWifiSettingsFragmentLayout = findViewById(R.id.wifi_settings_fragment_layout); 200a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa mConnectingStatusLayout = findViewById(R.id.connecting_status_layout); 201a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa mConnectingStatusView = (TextView) findViewById(R.id.connecting_status); 20258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 20358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 204590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff private class WifiServiceHandler extends Handler { 205590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff @Override 206590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff public void handleMessage(Message msg) { 207590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff switch (msg.what) { 208590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff case AsyncChannel.CMD_CHANNEL_HALF_CONNECTED: 209590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) { 210590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff //AsyncChannel in msg.obj 211590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff } else { 212590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff //AsyncChannel set up failure, ignore 213590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff Log.e(TAG, "Failed to establish AsyncChannel connection"); 214590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff } 215590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff break; 216590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff default: 217590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff //Ignore 218590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff break; 219590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff } 220590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff } 221590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff } 222590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff 223dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa private void restoreFirstVisibilityState() { 224a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa showDefaultTitle(); 225fe7d04fee23b4142c77ec7ab1416f0b94384ba63Daisuke Miyakawa mAddNetworkButton.setVisibility(View.VISIBLE); 22658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mRefreshButton.setVisibility(View.VISIBLE); 22758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setVisibility(View.VISIBLE); 22858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mConnectButton.setVisibility(View.GONE); 22958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mBackButton.setVisibility(View.GONE); 230dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa setPaddingVisibility(View.VISIBLE); 231d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 232d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 233d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa @Override 234d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa public void onClick(View view) { 235fdb9343ef660fc424bb8c29b48d5c06dff0241c1Daisuke Miyakawa hideSoftwareKeyboard(); 23658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa if (view == mAddNetworkButton) { 2374dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa if (DEBUG) Log.d(TAG, "AddNetwork button pressed"); 23858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa onAddNetworkButtonPressed(); 23958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } else if (view == mRefreshButton) { 2404dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa if (DEBUG) Log.d(TAG, "Refresh button pressed"); 24158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa refreshAccessPoints(true); 24258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } else if (view == mSkipOrNextButton) { 2434dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa if (DEBUG) Log.d(TAG, "Skip/Next button pressed"); 24455de702961642521e247f155963644df81756215Daisuke Miyakawa if (TextUtils.equals(getString(R.string.wifi_setup_skip), ((Button)view).getText())) { 24555de702961642521e247f155963644df81756215Daisuke Miyakawa // We don't want to let Wifi enabled when a user press skip without choosing 24655de702961642521e247f155963644df81756215Daisuke Miyakawa // any access point. 24758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiManager.setWifiEnabled(false); 24883183f469875e9835d32311c5c7f60c04eed8da4Daisuke Miyakawa // Notify "skip" 24983183f469875e9835d32311c5c7f60c04eed8da4Daisuke Miyakawa setResult(RESULT_FIRST_USER); 25083183f469875e9835d32311c5c7f60c04eed8da4Daisuke Miyakawa } else { 25183183f469875e9835d32311c5c7f60c04eed8da4Daisuke Miyakawa setResult(RESULT_OK); 25255de702961642521e247f155963644df81756215Daisuke Miyakawa } 2537e3ff8eca6ce2912839c02065a5463c5cd234aaeDaisuke Miyakawa finish(); 25458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } else if (view == mConnectButton) { 2554dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa if (DEBUG) Log.d(TAG, "Connect button pressed"); 2568b3b876c096acb93ec8736851e47e2ba3ce276e5Daisuke Miyakawa onConnectButtonPressed(); 25758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } else if (view == mBackButton) { 2584dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa if (DEBUG) Log.d(TAG, "Back button pressed"); 25958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa onBackButtonPressed(); 260d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 2615d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa } 2625d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa 2635d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa private void hideSoftwareKeyboard() { 264c9cd29ddb832fd76d96fea080abe8325a8bb1bd2satok if (DEBUG) Log.i(TAG, "Hiding software keyboard."); 2655d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa final View focusedView = getCurrentFocus(); 2665d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa if (focusedView != null) { 2675d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa mInputMethodManager.hideSoftInputFromWindow(focusedView.getWindowToken(), 0); 2685d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa } 269d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 270d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 27186eaa09aa42e3281ed6c8ea85e09d4875973c4bfDaisuke Miyakawa // Called from WifiSettings 2725d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa /* package */ void updateConnectionState(DetailedState originalState) { 2732adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa final DetailedState state = sNetworkStateMap.get(originalState); 27458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 27558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa if (originalState == DetailedState.FAILED) { 27658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // We clean up the current connectivity status and let users select another network 27758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // if they want. 27858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa refreshAccessPoints(true); 27958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 28058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 281d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa switch (state) { 282b962d6566c99edf9950b5d05c5f08c56d1f850feDaisuke Miyakawa case SCANNING: { 2836a7b3d99493e9ba1492e705dc748b85992c5ee14Daisuke Miyakawa if (mScreenState == SCREEN_STATE_DISCONNECTED) { 2846a7b3d99493e9ba1492e705dc748b85992c5ee14Daisuke Miyakawa if (mWifiSettings.getAccessPointsCount() == 0) { 2857e84e4682d5d9b643add13c453d631dad8343918Freeman Ng showScanningState(); 2866a7b3d99493e9ba1492e705dc748b85992c5ee14Daisuke Miyakawa } else { 2876a7b3d99493e9ba1492e705dc748b85992c5ee14Daisuke Miyakawa showDisconnectedProgressBar(); 288dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa mWifiSettingsFragmentLayout.setVisibility(View.VISIBLE); 289dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa mBottomPadding.setVisibility(View.GONE); 290dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa } 2916a7b3d99493e9ba1492e705dc748b85992c5ee14Daisuke Miyakawa } else { 2926a7b3d99493e9ba1492e705dc748b85992c5ee14Daisuke Miyakawa showDisconnectedProgressBar(); 293b962d6566c99edf9950b5d05c5f08c56d1f850feDaisuke Miyakawa } 294b962d6566c99edf9950b5d05c5f08c56d1f850feDaisuke Miyakawa break; 295b962d6566c99edf9950b5d05c5f08c56d1f850feDaisuke Miyakawa } 296d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa case CONNECTING: { 297c4a495fb5b3d161aa0227a08d6179bf21ffcc730Daisuke Miyakawa if (mScreenState == SCREEN_STATE_CONNECTING) { 29835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa showConnectingState(); 29935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 300d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa break; 301d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 302d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa case CONNECTED: { 30335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa showConnectedState(); 304d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa break; 305d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 3064dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa default: // DISCONNECTED, FAILED 307f26b2b5110117a74605ec30305fdfaa9c8077608Daisuke Miyakawa if (mScreenState != SCREEN_STATE_CONNECTED && 308f26b2b5110117a74605ec30305fdfaa9c8077608Daisuke Miyakawa mWifiSettings.getAccessPointsCount() > 0) { 30935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa showDisconnectedState(Summary.get(this, state)); 31035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 3115d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa break; 3125d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa } 3132adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa mPreviousNetworkState = state; 3144dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa } 31558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 31635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private void showDisconnectedState(String stateString) { 317be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showDisconnectedProgressBar(); 318f26b2b5110117a74605ec30305fdfaa9c8077608Daisuke Miyakawa if (mScreenState == SCREEN_STATE_DISCONNECTED && 319f26b2b5110117a74605ec30305fdfaa9c8077608Daisuke Miyakawa mWifiSettings.getAccessPointsCount() > 0) { 320dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa mWifiSettingsFragmentLayout.setVisibility(View.VISIBLE); 321dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa mBottomPadding.setVisibility(View.GONE); 322dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa } 3234dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa mAddNetworkButton.setEnabled(true); 3244dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa mRefreshButton.setEnabled(true); 325d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 326d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 32735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private void showConnectingState() { 32835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mScreenState = SCREEN_STATE_CONNECTING; 32935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 330ee5576ce0677ccae468fdefa70c541837178c4fcDaisuke Miyakawa mBackButton.setVisibility(View.VISIBLE); 33114cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa // We save this title and show it when authentication failed. 33214cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mEditingTitle = mTitleView.getText(); 333a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa showConnectingTitle(); 334be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showConnectingProgressBar(); 335350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa 33635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa setPaddingVisibility(View.VISIBLE); 33735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 33835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 33935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private void showConnectedState() { 34035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // Once we show "connected" screen, we won't change it even when the device becomes 34135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // disconnected afterwards. We keep the state unless a user explicitly cancel it 34235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // (by pressing "back" button). 34335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mScreenState = SCREEN_STATE_CONNECTED; 34435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 34535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa hideSoftwareKeyboard(); 34635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa setPaddingVisibility(View.VISIBLE); 34735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 34835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa showConnectedTitle(); 349be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showConnectedProgressBar(); 35035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 35135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mWifiSettingsFragmentLayout.setVisibility(View.GONE); 35235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mConnectingStatusLayout.setVisibility(View.VISIBLE); 35335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 35435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mConnectingStatusView.setText(R.string.wifi_setup_description_connected); 35535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mConnectButton.setVisibility(View.GONE); 35635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mAddNetworkButton.setVisibility(View.GONE); 35735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mRefreshButton.setVisibility(View.GONE); 35835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mBackButton.setVisibility(View.VISIBLE); 35935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mBackButton.setText(R.string.wifi_setup_back); 36035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mSkipOrNextButton.setVisibility(View.VISIBLE); 36135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mSkipOrNextButton.setEnabled(true); 36214cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 36314cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 364a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa private void showDefaultTitle() { 365a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa mTitleView.setText(getString(R.string.wifi_setup_title)); 366a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa } 367a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa 3684781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa private void showAddNetworkTitle() { 3694781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mNetworkName = ""; 3704781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mTitleView.setText(R.string.wifi_setup_title_add_network); 3714781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } 3724781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 373a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa private void showEditingTitle() { 37414cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa if (TextUtils.isEmpty(mNetworkName) && mWifiConfig != null) { 3754781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa if (mWifiConfig.getController() != null && 3764781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mWifiConfig.getController().getConfig() != null) { 3774781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mNetworkName = mWifiConfig.getController().getConfig().SSID; 3784781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } else { 3794781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa Log.w(TAG, "Unexpected null found (WifiController or WifiConfig is null). " + 3804781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa "Ignore them."); 3814781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } 38214cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 38314cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mTitleView.setText(getString(R.string.wifi_setup_title_editing_network, mNetworkName)); 384f3cd94652f26d68485650fbbe5f9904e5da3008dDaisuke Miyakawa } 385f3cd94652f26d68485650fbbe5f9904e5da3008dDaisuke Miyakawa 386a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa private void showConnectingTitle() { 387a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa if (TextUtils.isEmpty(mNetworkName) && mWifiConfig != null) { 3884781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa if (mWifiConfig.getController() != null && 3894781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mWifiConfig.getController().getConfig() != null) { 3904781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mNetworkName = mWifiConfig.getController().getConfig().SSID; 3914781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } else { 3924781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa Log.w(TAG, "Unexpected null found (WifiController or WifiConfig is null). " + 3934781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa "Ignore them."); 3944781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } 395a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa } 396a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa mTitleView.setText(getString(R.string.wifi_setup_title_connecting_network, mNetworkName)); 397a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa } 398a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa 399a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa private void showConnectedTitle() { 400a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa if (TextUtils.isEmpty(mNetworkName) && mWifiConfig != null) { 4014781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa if (mWifiConfig.getController() != null && 4024781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mWifiConfig.getController().getConfig() != null) { 4034781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mNetworkName = mWifiConfig.getController().getConfig().SSID; 4044781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } else { 4054781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa Log.w(TAG, "Unexpected null found (WifiController or WifiConfig is null). " + 4064781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa "Ignore them."); 4074781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } 408a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa } 409a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa mTitleView.setText(getString(R.string.wifi_setup_title_connected_network, mNetworkName)); 410a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa } 411a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa 412be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa /** 413be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa * Shows top divider with ProgressBar without defining the state of the ProgressBar. 414be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa * 415be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa * @see #showScanningProgressBar() 416be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa * @see #showConnectedProgressBar() 417be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa * @see #showConnectingProgressBar() 418be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa */ 419be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa private void showTopDividerWithProgressBar() { 420beec0b2da6286575a4526d06cd5215463f39ae40Daisuke Miyakawa mProgressBar.setVisibility(View.VISIBLE); 421beec0b2da6286575a4526d06cd5215463f39ae40Daisuke Miyakawa mTopDividerNoProgress.setVisibility(View.GONE); 422be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mBottomPadding.setVisibility(View.GONE); 423be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa } 424be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa 425dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa private void showScanningState() { 426dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa setPaddingVisibility(View.VISIBLE); 427dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa mWifiSettingsFragmentLayout.setVisibility(View.GONE); 428be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showScanningProgressBar(); 4294dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa } 4304dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa 43158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private void onAddNetworkButtonPressed() { 43258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiSettings.onAddNetworkPressed(); 433fef4125d4e5db8d35a3c76041fdfde9a12627480Daisuke Miyakawa } 434fef4125d4e5db8d35a3c76041fdfde9a12627480Daisuke Miyakawa 43558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa /** 43658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * Called when the screen enters wifi configuration UI. UI widget for configuring network 43758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * (a.k.a. ConfigPreference) should be taken care of by caller side. 43858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * This method should handle buttons' visibility/enabled. 43958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * @param selectedAccessPoint AccessPoint object being selected. null when a user pressed 44058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * "Add network" button, meaning there's no selected access point. 44158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa */ 44258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa /* package */ void showConfigUi(AccessPoint selectedAccessPoint, boolean edit) { 443dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa mScreenState = SCREEN_STATE_EDITING; 444dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa 445cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (selectedAccessPoint != null && 446cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa (selectedAccessPoint.security == AccessPoint.SECURITY_WEP || 447cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa selectedAccessPoint.security == AccessPoint.SECURITY_PSK)) { 448cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa // We forcibly set edit as true so that users can modify every field if they want, 449cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa // while config UI doesn't allow them to edit some of them when edit is false 450cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa // (e.g. password field is hiden when edit==false). 451cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa edit = true; 452cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 453cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa 4542adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // We don't want to keep scanning Wifi networks during users' configuring a network. 45558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiSettings.pauseWifiScan(); 45658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 45735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mWifiSettingsFragmentLayout.setVisibility(View.GONE); 458a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa mConnectingStatusLayout.setVisibility(View.GONE); 45958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa final ViewGroup parent = (ViewGroup)findViewById(R.id.wifi_config_ui); 46058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa parent.setVisibility(View.VISIBLE); 46158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa parent.removeAllViews(); 46258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiConfig = new WifiConfigUiForSetupWizardXL(this, parent, selectedAccessPoint, edit); 4634781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 4644781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa if (selectedAccessPoint == null) { // "Add network" flow 4654781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa showAddNetworkTitle(); 4664781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mConnectButton.setVisibility(View.VISIBLE); 4674781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 468ffce5dabbb8ad5cc441181241e84cf1a03233e20Daisuke Miyakawa showDisconnectedProgressBar(); 4694781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa showEditingButtonState(); 4704781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } else if (selectedAccessPoint.security == AccessPoint.SECURITY_NONE) { 47114cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mNetworkName = selectedAccessPoint.getTitle().toString(); 47258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 47314cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa // onConnectButtonPressed() will change visibility status. 47414cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mConnectButton.performClick(); 4750333f74b9c54227cee22f04fbb08a562771504e9Daisuke Miyakawa } else { 4764781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mNetworkName = selectedAccessPoint.getTitle().toString(); 477a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa showEditingTitle(); 478ffce5dabbb8ad5cc441181241e84cf1a03233e20Daisuke Miyakawa showDisconnectedProgressBar(); 4794781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa showEditingButtonState(); 4804781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa if (selectedAccessPoint.security == AccessPoint.SECURITY_EAP) { 48135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa onEapNetworkSelected(); 4824781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } else { 4834781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mConnectButton.setVisibility(View.VISIBLE); 4844781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 4854781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa // WifiConfigController shows Connect button as "Save" when edit==true and a user 4864781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa // tried to connect the network. 4874781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa // In SetupWizard, we just show the button as "Connect" instead. 4884781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mConnectButton.setText(R.string.wifi_connect); 4894781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mBackButton.setText(R.string.wifi_setup_cancel); 4904781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } 49114cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 49258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 49358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 49435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa /** 4952adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * Called before security fields are correctly set by {@link WifiConfigController}. 49635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa * 49735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa * @param view security field view 49835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa * @param accessPointSecurity type of security. e.g. AccessPoint.SECURITY_NONE 49935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa * @return true when it is ok for the caller to init security fields. false when 50035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa * all security fields are managed by this method, and thus the caller shouldn't touch them. 50135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa */ 50235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa /* package */ boolean initSecurityFields(View view, int accessPointSecurity) { 50335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // Reset all states tweaked below. 50435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.eap_not_supported).setVisibility(View.GONE); 50535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.eap_not_supported_for_add_network).setVisibility(View.GONE); 50635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.ssid_text).setVisibility(View.VISIBLE); 50735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.ssid_layout).setVisibility(View.VISIBLE); 50835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 50935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa if (accessPointSecurity == AccessPoint.SECURITY_EAP) { 510d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa setPaddingVisibility(View.VISIBLE); 51135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa hideSoftwareKeyboard(); 51235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 51335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // In SetupWizard for XLarge screen, we don't have enough space for showing 51435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // configurations needed for EAP. We instead disable the whole feature there and let 51535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // users configure those networks after the setup. 516d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa if (view.findViewById(R.id.type_ssid).getVisibility() == View.VISIBLE) { 51735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.eap_not_supported_for_add_network) 5182adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa .setVisibility(View.VISIBLE); 51935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } else { 52035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.eap_not_supported).setVisibility(View.VISIBLE); 52135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 52235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.security_fields).setVisibility(View.GONE); 52335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.ssid_text).setVisibility(View.GONE); 52435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.ssid_layout).setVisibility(View.GONE); 52535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa onEapNetworkSelected(); 5262adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa 5272adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // This method did init security fields by itself. The caller must not do it. 52835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa return false; 52935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 5302adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa 531d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa mConnectButton.setVisibility(View.VISIBLE); 532d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa setPaddingVisibility(View.GONE); 533d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa 534d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa // In "add network" flow, we'll see multiple initSecurityFields() calls with different 535d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa // accessPointSecurity variable. We want to show software keyboard conditionally everytime 536d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa // when this method is called. 537d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa if (mWifiConfig != null) { 538d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa if (accessPointSecurity == AccessPoint.SECURITY_PSK || 539d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa accessPointSecurity == AccessPoint.SECURITY_WEP) { 540d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa mWifiConfig.requestFocusAndShowKeyboard(R.id.password); 541d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa } else { 542d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa mWifiConfig.requestFocusAndShowKeyboard(R.id.ssid); 543d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa } 544d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa } 545d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa 5462adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // Let the caller init security fields. 54735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa return true; 54835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 54935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 550d1c22a1b56778f76a7bc8da624f83934ff4771a9Daisuke Miyakawa private void onEapNetworkSelected() { 55135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mConnectButton.setVisibility(View.GONE); 55235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mBackButton.setText(R.string.wifi_setup_back); 55335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 55435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 5554781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa private void showEditingButtonState() { 5564781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mSkipOrNextButton.setVisibility(View.GONE); 5574781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mAddNetworkButton.setVisibility(View.GONE); 5584781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mRefreshButton.setVisibility(View.GONE); 5594781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mBackButton.setVisibility(View.VISIBLE); 5604781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } 5614781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 56258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // May be called when user press "connect" button in WifiDialog 56358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa /* package */ void onConnectButtonPressed() { 56435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mScreenState = SCREEN_STATE_CONNECTING; 56558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 56658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiSettings.submit(mWifiConfig.getController()); 56758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 5682adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // updateConnectionState() isn't called soon by the main Wifi module after the user's 5692adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // "connect" request, and the user still sees "not connected" message for a while, which 5702adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // looks strange for users though legitimate from the view of the module. 5712adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // 57258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // We instead manually show "connecting" message before the system gets actual 5732adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // "connecting" message from Wifi module. 57435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa showConnectingState(); 57558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 57658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // Might be better to delay showing this button. 57758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mBackButton.setVisibility(View.VISIBLE); 578ee5576ce0677ccae468fdefa70c541837178c4fcDaisuke Miyakawa mBackButton.setText(R.string.wifi_setup_back); 57958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 580a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa final ViewGroup parent = (ViewGroup)findViewById(R.id.wifi_config_ui); 581a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa parent.setVisibility(View.GONE); 582a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa mConnectingStatusLayout.setVisibility(View.VISIBLE); 583a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa mConnectingStatusView.setText(R.string.wifi_setup_description_connecting); 584a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa 58558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setVisibility(View.VISIBLE); 58658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setEnabled(false); 58758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mConnectButton.setVisibility(View.GONE); 58858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mAddNetworkButton.setVisibility(View.GONE); 58958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mRefreshButton.setVisibility(View.GONE); 590d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 591d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 59258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private void onBackButtonPressed() { 5938f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa 59435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa if (mScreenState == SCREEN_STATE_CONNECTING || mScreenState == SCREEN_STATE_CONNECTED) { 5954dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa if (DEBUG) Log.d(TAG, "Back button pressed after connect action."); 59635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mScreenState = SCREEN_STATE_DISCONNECTED; 59758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 59858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // When a user press "Back" button after pressing "Connect" button, we want to cancel 5992adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // the "Connect" request and refresh the whole Wifi status. 600dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa restoreFirstVisibilityState(); 60158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 60258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setEnabled(true); 6034dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa changeNextButtonState(false); // Skip 60458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 60535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // Wifi list becomes empty for a moment. We show "scanning" effect to a user so that 60635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // he/she won't be astonished there. This stops once the scan finishes. 607dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa showScanningState(); 60835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 60909d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa // Remembered networks may be re-used during SetupWizard, which confuse users. 61009d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa // We force the module to forget them to reduce UX complexity 61109d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa final List<WifiConfiguration> configs = mWifiManager.getConfiguredNetworks(); 61209d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa for (WifiConfiguration config : configs) { 61309d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa if (DEBUG) { 61409d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa Log.d(TAG, String.format("forgeting Wi-Fi network \"%s\" (id: %d)", 61509d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa config.SSID, config.networkId)); 61609d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa } 61709d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa mWifiManager.forgetNetwork(config.networkId); 61809d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa } 61909d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa 620dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa mWifiSettingsFragmentLayout.setVisibility(View.GONE); 62158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa refreshAccessPoints(true); 62258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } else { // During user's Wifi configuration. 623dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa mScreenState = SCREEN_STATE_DISCONNECTED; 62458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiSettings.resumeWifiScan(); 62558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 626dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa restoreFirstVisibilityState(); 62758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 62858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mAddNetworkButton.setEnabled(true); 62958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mRefreshButton.setEnabled(true); 63058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setEnabled(true); 631dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa showDisconnectedProgressBar(); 632f26b2b5110117a74605ec30305fdfaa9c8077608Daisuke Miyakawa mWifiSettingsFragmentLayout.setVisibility(View.VISIBLE); 633f26b2b5110117a74605ec30305fdfaa9c8077608Daisuke Miyakawa mBottomPadding.setVisibility(View.GONE); 63458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 63558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 636dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa setPaddingVisibility(View.VISIBLE); 637a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa mConnectingStatusLayout.setVisibility(View.GONE); 63858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa final ViewGroup parent = (ViewGroup)findViewById(R.id.wifi_config_ui); 63958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa parent.removeAllViews(); 64058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa parent.setVisibility(View.GONE); 64158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiConfig = null; 64258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 64358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 64458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa /** 64558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * @param connected true when the device is connected to a specific network. 64658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa */ 64758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa /* package */ void changeNextButtonState(boolean connected) { 64858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa if (connected) { 64958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setText(R.string.wifi_setup_next); 65058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } else { 65158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setText(R.string.wifi_setup_skip); 65258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 65358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 65458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 65558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa /** 65658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * Called when the list of AccessPoints are modified and this Activity needs to refresh 65758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * the list. 658e78c1879058571c00879f0d3e756951302adf513Gilles Debunne * @param preferenceScreen 65958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa */ 66058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa /* package */ void onAccessPointsUpdated( 661e78c1879058571c00879f0d3e756951302adf513Gilles Debunne PreferenceScreen preferenceScreen, Collection<AccessPoint> accessPoints) { 662350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa // If we already show some of access points but the bar still shows "scanning" state, it 663350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa // should be stopped. 664350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa if (mProgressBar.isIndeterminate() && accessPoints.size() > 0) { 665dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa showDisconnectedProgressBar(); 666dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa if (mScreenState == SCREEN_STATE_DISCONNECTED) { 667dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa mWifiSettingsFragmentLayout.setVisibility(View.VISIBLE); 668dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa mBottomPadding.setVisibility(View.GONE); 669dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa } 670350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa mAddNetworkButton.setEnabled(true); 671350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa mRefreshButton.setEnabled(true); 672350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa } 673350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa 67458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa for (AccessPoint accessPoint : accessPoints) { 67558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa accessPoint.setLayoutResource(R.layout.custom_preference); 676e78c1879058571c00879f0d3e756951302adf513Gilles Debunne preferenceScreen.addPreference(accessPoint); 67758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 67858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 67958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 68058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private void refreshAccessPoints(boolean disconnectNetwork) { 681f26b2b5110117a74605ec30305fdfaa9c8077608Daisuke Miyakawa showScanningState(); 6828b3b876c096acb93ec8736851e47e2ba3ce276e5Daisuke Miyakawa 68358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa if (disconnectNetwork) { 68458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiManager.disconnect(); 68558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 68658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 68758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiSettings.refreshAccessPoints(); 6888b3b876c096acb93ec8736851e47e2ba3ce276e5Daisuke Miyakawa } 689cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa 690cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa /** 69114cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa * Called when {@link WifiSettings} received 69214cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa * {@link WifiManager#SUPPLICANT_STATE_CHANGED_ACTION}. 693cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa */ 694cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa /* package */ void onSupplicantStateChanged(Intent intent) { 695cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa final int errorCode = intent.getIntExtra(WifiManager.EXTRA_SUPPLICANT_ERROR, -1); 696cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (errorCode == WifiManager.ERROR_AUTHENTICATING) { 697cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa Log.i(TAG, "Received authentication error event."); 698cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa onAuthenticationFailure(); 699cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 700cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 701cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa 702cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa /** 703cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa * Called once when Authentication failed. 704cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa */ 705cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa private void onAuthenticationFailure() { 70635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mScreenState = SCREEN_STATE_EDITING; 70735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 708cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa mSkipOrNextButton.setVisibility(View.GONE); 709cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa mConnectButton.setVisibility(View.VISIBLE); 710cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa mConnectButton.setEnabled(true); 711cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa 71214cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa if (!TextUtils.isEmpty(mEditingTitle)) { 71314cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mTitleView.setText(mEditingTitle); 71414cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } else { 71514cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa Log.w(TAG, "Title during editing/adding a network was empty."); 716a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa showEditingTitle(); 71714cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 71814cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 719a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa final ViewGroup parent = (ViewGroup)findViewById(R.id.wifi_config_ui); 720a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa parent.setVisibility(View.VISIBLE); 721a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa mConnectingStatusLayout.setVisibility(View.GONE); 7226291d50b5de2933f8debf760b25be74b17981883Daisuke Miyakawa 7236291d50b5de2933f8debf760b25be74b17981883Daisuke Miyakawa showDisconnectedProgressBar(); 7246291d50b5de2933f8debf760b25be74b17981883Daisuke Miyakawa setPaddingVisibility(View.GONE); 725cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 726cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa 7272adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // Used by WifiConfigUiForSetupWizardXL 7282adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa /* package */ void setPaddingVisibility(int visibility) { 729dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa mTopPadding.setVisibility(visibility); 730dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa mContentPadding.setVisibility(visibility); 73114cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 73214cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 733be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa private void showDisconnectedProgressBar() { 734dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa // The device may report DISCONNECTED during connecting to a network, at which we don't 735dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa // want to lose bottom padding of top divider implicitly added by ProgressBar. 736dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa if (mScreenState == SCREEN_STATE_DISCONNECTED) { 737dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa mProgressBar.setVisibility(View.GONE); 738dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa mProgressBar.setIndeterminate(false); 739dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa mTopDividerNoProgress.setVisibility(View.VISIBLE); 740dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa } else { 741dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa mProgressBar.setVisibility(View.VISIBLE); 742dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa mProgressBar.setIndeterminate(false); 7436291d50b5de2933f8debf760b25be74b17981883Daisuke Miyakawa mProgressBar.setProgress(0); 744dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa mTopDividerNoProgress.setVisibility(View.GONE); 745dfd492df3f95042ac40004ef46c853064d3f27bbDaisuke Miyakawa } 746be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa } 747be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa 748be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa /** 749be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa * Shows top divider with ProgressBar, whose state is intermediate. 750be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa */ 751be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa private void showScanningProgressBar() { 752be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showTopDividerWithProgressBar(); 753be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mProgressBar.setIndeterminate(true); 754be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa } 755be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa 756be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa /** 757be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa * Shows top divider with ProgressBar, showing "connecting" state. 758be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa */ 759be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa private void showConnectingProgressBar() { 760be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showTopDividerWithProgressBar(); 761be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mProgressBar.setIndeterminate(false); 762be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mProgressBar.setProgress(1); 763be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa } 764be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa 765be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa private void showConnectedProgressBar() { 766be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showTopDividerWithProgressBar(); 767be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mProgressBar.setIndeterminate(false); 768be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mProgressBar.setProgress(2); 769be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa } 770be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa 771cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa /** 7722adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * Called when WifiManager is requested to save a network. 773cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa */ 774cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa /* package */ void onSaveNetwork(WifiConfiguration config) { 7752adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // We want to both save and connect a network. connectNetwork() does both. 776cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa mWifiManager.connectNetwork(config); 777cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 778d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa} 779