WifiSettingsForSetupWizardXL.java revision c4a495fb5b3d161aa0227a08d6179bf21ffcc730
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 195cd60eb8aa5a4d5cf1a850ddd05d4f94eae1eb2fDaisuke Miyakawaimport com.android.settings.R; 205cd60eb8aa5a4d5cf1a850ddd05d4f94eae1eb2fDaisuke Miyakawa 21d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.app.Activity; 22fe3b6bea01de328cdf7d6cf414607304fcdeaed6Daisuke Miyakawaimport android.content.Context; 23cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawaimport android.content.Intent; 24d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.net.NetworkInfo.DetailedState; 25cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawaimport android.net.wifi.WifiConfiguration; 2658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawaimport android.net.wifi.WifiManager; 27d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.os.Bundle; 284dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawaimport android.os.Handler; 29590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriffimport android.os.Message; 3058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawaimport android.preference.PreferenceCategory; 3155de702961642521e247f155963644df81756215Daisuke Miyakawaimport android.text.TextUtils; 328b3b876c096acb93ec8736851e47e2ba3ce276e5Daisuke Miyakawaimport android.util.Log; 3314cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawaimport android.view.ContextMenu; 34267d51a68a6e2bc40b90d199425af88a7a824f53Daisuke Miyakawaimport android.view.ContextMenu.ContextMenuInfo; 3514cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawaimport android.view.View; 36d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.view.View.OnClickListener; 3758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawaimport android.view.ViewGroup; 38d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.view.Window; 395d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawaimport android.view.inputmethod.InputMethodManager; 40d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.widget.Button; 41d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.widget.ProgressBar; 42d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.widget.TextView; 43d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 44590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriffimport com.android.internal.util.AsyncChannel; 45590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff 4658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawaimport java.util.Collection; 47d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport java.util.EnumMap; 4809d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawaimport java.util.List; 49d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 50d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa/** 51d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * WifiSetings Activity specific for SetupWizard with X-Large screen size. 52d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa */ 53d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawapublic class WifiSettingsForSetupWizardXL extends Activity implements OnClickListener { 5458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private static final String TAG = "SetupWizard"; 5535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private static final boolean DEBUG = true; 5658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 572adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa private static final EnumMap<DetailedState, DetailedState> sNetworkStateMap = 5858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa new EnumMap<DetailedState, DetailedState>(DetailedState.class); 59d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 60d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa static { 612adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa sNetworkStateMap.put(DetailedState.IDLE, DetailedState.DISCONNECTED); 622adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa sNetworkStateMap.put(DetailedState.SCANNING, DetailedState.SCANNING); 632adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa sNetworkStateMap.put(DetailedState.CONNECTING, DetailedState.CONNECTING); 642adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa sNetworkStateMap.put(DetailedState.AUTHENTICATING, DetailedState.CONNECTING); 652adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa sNetworkStateMap.put(DetailedState.OBTAINING_IPADDR, DetailedState.CONNECTING); 662adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa sNetworkStateMap.put(DetailedState.CONNECTED, DetailedState.CONNECTED); 672adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa sNetworkStateMap.put(DetailedState.SUSPENDED, DetailedState.SUSPENDED); // ? 682adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa sNetworkStateMap.put(DetailedState.DISCONNECTING, DetailedState.DISCONNECTED); 692adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa sNetworkStateMap.put(DetailedState.DISCONNECTED, DetailedState.DISCONNECTED); 702adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa sNetworkStateMap.put(DetailedState.FAILED, DetailedState.FAILED); 71d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 72d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 7314cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa /** 742adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * Used with {@link Button#setTag(Object)} to remember "Connect" button is pressed in 752adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * with "add network" flow. 7614cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa */ 772adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa private static final int CONNECT_BUTTON_TAG_ADD_NETWORK = 1; 782adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa 792adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa private WifiSettings mWifiSettings; 802adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa private WifiManager mWifiManager; 812adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa 822adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa /** Used for resizing a padding above title. Hiden when software keyboard is shown. */ 8314cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa private View mTopPadding; 8414cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 852adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa /** Used for resizing a padding inside Config UI. Hiden when software keyboard is shown. */ 8614cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa private View mWifiConfigPadding; 8714cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 8814cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa private TextView mTitleView; 8914cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa /** 9014cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa * The name of a network currently connecting, or trying to connect. 9114cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa * This may be empty ("") at first, and updated when configuration is changed. 9214cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa */ 9314cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa private CharSequence mNetworkName = ""; 9414cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa private CharSequence mEditingTitle; 9514cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 96d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa private ProgressBar mProgressBar; 97beec0b2da6286575a4526d06cd5215463f39ae40Daisuke Miyakawa private View mTopDividerNoProgress; 982adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa /** 992adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * Used for resizing a padding between WifiSettings preference and bottom bar when 1002adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * ProgressBar is visible as a top divider. 1012adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa */ 102be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa private View mBottomPadding; 103be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa 10458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private Button mAddNetworkButton; 10558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private Button mRefreshButton; 10658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private Button mSkipOrNextButton; 10758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private Button mBackButton; 10858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 1094781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa private Button mConnectButton; 1104781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 11135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa /** 11235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa * View enclosing {@link WifiSettings}. 11335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa */ 11435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private View mWifiSettingsFragmentLayout; 115a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa private View mConnectingStatusLayout; 116a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa private TextView mConnectingStatusView; 117a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa 1182adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa /* 1192adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * States of current screen, which should be saved and restored when Activity is relaunched 1202adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * with orientation change, etc. 1212adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa */ 12235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private static final int SCREEN_STATE_DISCONNECTED = 0; 12335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private static final int SCREEN_STATE_EDITING = 1; 12435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private static final int SCREEN_STATE_CONNECTING = 2; 12535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private static final int SCREEN_STATE_CONNECTED = 3; 12635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 1272adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa /** Current screen state. */ 12835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private int mScreenState = SCREEN_STATE_DISCONNECTED; 12958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 13058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private WifiConfigUiForSetupWizardXL mWifiConfig; 13158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 1325d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa private InputMethodManager mInputMethodManager; 133fe3b6bea01de328cdf7d6cf414607304fcdeaed6Daisuke Miyakawa 1342adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa /** 1352adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * Used to store View visibility status. 1362adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * 1372adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * We store the status when we show "connecting" screen and use the stored data when the 1382adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * device failed to connect to the network. 1392adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa */ 140cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa private int mPreviousWpsFieldsVisibility = View.GONE; 141cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa private int mPreviousSecurityFieldsVisibility = View.GONE; 142cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa private int mPreviousTypeVisibility = View.GONE; 143cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa 1442adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa /** 1452adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * Previous network connection state reported by main Wifi module. 1462adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * 1472adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * Note that we don't use original {@link DetailedState} object but simplified one translated 1482adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * using sNetworkStateMap. 1492adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa */ 1502adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa private DetailedState mPreviousNetworkState = DetailedState.DISCONNECTED; 1514781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 1528f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa private int mBackgroundId = R.drawable.setups_bg_default; 1538f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa 154d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa @Override 155d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa public void onCreate(Bundle savedInstanceState) { 156d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa super.onCreate(savedInstanceState); 157d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa requestWindowFeature(Window.FEATURE_NO_TITLE); 158d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa setContentView(R.layout.wifi_settings_for_setup_wizard_xl); 15958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 16058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE); 161dd9fbb0b9e1b82025fc8699fe4ad4a9e2a918c4dDaisuke Miyakawa // There's no button here enabling wifi network, so we need to enable it without 162dd9fbb0b9e1b82025fc8699fe4ad4a9e2a918c4dDaisuke Miyakawa // users' request. 163dd9fbb0b9e1b82025fc8699fe4ad4a9e2a918c4dDaisuke Miyakawa mWifiManager.setWifiEnabled(true); 164590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff mWifiManager.asyncConnect(this, new WifiServiceHandler()); 165dd9fbb0b9e1b82025fc8699fe4ad4a9e2a918c4dDaisuke Miyakawa 166d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mWifiSettings = 167d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa (WifiSettings)getFragmentManager().findFragmentById(R.id.wifi_setup_fragment); 1685d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa mInputMethodManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 1692adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa 1702adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa initViews(); 1712adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa 1722adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // At first, Wifi module doesn't return SCANNING state (it's too early), so we manually 1732adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // show it. 1742adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa showScanningStatus(); 175d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 176d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 1772adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa private void initViews() { 17835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa if (getIntent().getBooleanExtra("firstRun", false)) { 17935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa final View layoutRoot = findViewById(R.id.layout_root); 18035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa layoutRoot.setSystemUiVisibility(View.STATUS_BAR_DISABLE_BACK); 18135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 18262fb701ea9781f4e1c05af6d730e91bb2cdcdae0Daisuke Miyakawa 18314cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mTitleView = (TextView)findViewById(R.id.wifi_setup_title); 184d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mProgressBar = (ProgressBar)findViewById(R.id.scanning_progress_bar); 185d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mProgressBar.setMax(2); 186beec0b2da6286575a4526d06cd5215463f39ae40Daisuke Miyakawa mTopDividerNoProgress = findViewById(R.id.top_divider_no_progress); 187be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mBottomPadding = findViewById(R.id.bottom_padding); 188d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 189beec0b2da6286575a4526d06cd5215463f39ae40Daisuke Miyakawa mProgressBar.setVisibility(View.VISIBLE); 1903b6aa41cce9dafa48dfbb3e93ea856610de1f1e7Daisuke Miyakawa mProgressBar.setIndeterminate(true); 191beec0b2da6286575a4526d06cd5215463f39ae40Daisuke Miyakawa mTopDividerNoProgress.setVisibility(View.GONE); 1923b6aa41cce9dafa48dfbb3e93ea856610de1f1e7Daisuke Miyakawa 19358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mAddNetworkButton = (Button)findViewById(R.id.wifi_setup_add_network); 19458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mAddNetworkButton.setOnClickListener(this); 19558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mRefreshButton = (Button)findViewById(R.id.wifi_setup_refresh_list); 19658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mRefreshButton.setOnClickListener(this); 19758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton = (Button)findViewById(R.id.wifi_setup_skip_or_next); 19858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setOnClickListener(this); 19958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mConnectButton = (Button)findViewById(R.id.wifi_setup_connect); 20058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mConnectButton.setOnClickListener(this); 20158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mBackButton = (Button)findViewById(R.id.wifi_setup_cancel); 20258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mBackButton.setOnClickListener(this); 2034dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa 20414cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mTopPadding = findViewById(R.id.top_padding); 20514cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mWifiConfigPadding = findViewById(R.id.wifi_config_padding); 20614cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 20735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mWifiSettingsFragmentLayout = findViewById(R.id.wifi_settings_fragment_layout); 208a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa mConnectingStatusLayout = findViewById(R.id.connecting_status_layout); 209a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa mConnectingStatusView = (TextView) findViewById(R.id.connecting_status); 21058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 21158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 212590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff private class WifiServiceHandler extends Handler { 213590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff @Override 214590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff public void handleMessage(Message msg) { 215590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff switch (msg.what) { 216590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff case AsyncChannel.CMD_CHANNEL_HALF_CONNECTED: 217590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) { 218590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff //AsyncChannel in msg.obj 219590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff } else { 220590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff //AsyncChannel set up failure, ignore 221590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff Log.e(TAG, "Failed to establish AsyncChannel connection"); 222590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff } 223590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff break; 224590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff default: 225590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff //Ignore 226590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff break; 227590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff } 228590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff } 229590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff } 230590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff 23158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private void restoreFirstButtonVisibilityState() { 232a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa showDefaultTitle(); 233fe7d04fee23b4142c77ec7ab1416f0b94384ba63Daisuke Miyakawa mAddNetworkButton.setVisibility(View.VISIBLE); 23458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mRefreshButton.setVisibility(View.VISIBLE); 23558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setVisibility(View.VISIBLE); 23658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mConnectButton.setVisibility(View.GONE); 23758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mBackButton.setVisibility(View.GONE); 23814cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa setPaddingVisibility(View.VISIBLE, View.GONE); 239d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 240d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 241d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa @Override 242d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa public void onClick(View view) { 243fdb9343ef660fc424bb8c29b48d5c06dff0241c1Daisuke Miyakawa hideSoftwareKeyboard(); 24458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa if (view == mAddNetworkButton) { 2454dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa if (DEBUG) Log.d(TAG, "AddNetwork button pressed"); 24658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa onAddNetworkButtonPressed(); 24758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } else if (view == mRefreshButton) { 2484dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa if (DEBUG) Log.d(TAG, "Refresh button pressed"); 24958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa refreshAccessPoints(true); 25058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } else if (view == mSkipOrNextButton) { 2514dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa if (DEBUG) Log.d(TAG, "Skip/Next button pressed"); 25255de702961642521e247f155963644df81756215Daisuke Miyakawa if (TextUtils.equals(getString(R.string.wifi_setup_skip), ((Button)view).getText())) { 25355de702961642521e247f155963644df81756215Daisuke Miyakawa // We don't want to let Wifi enabled when a user press skip without choosing 25455de702961642521e247f155963644df81756215Daisuke Miyakawa // any access point. 25558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiManager.setWifiEnabled(false); 25655de702961642521e247f155963644df81756215Daisuke Miyakawa } 2577e3ff8eca6ce2912839c02065a5463c5cd234aaeDaisuke Miyakawa setResult(RESULT_OK); 2587e3ff8eca6ce2912839c02065a5463c5cd234aaeDaisuke Miyakawa finish(); 25958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } else if (view == mConnectButton) { 2604dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa if (DEBUG) Log.d(TAG, "Connect button pressed"); 2618b3b876c096acb93ec8736851e47e2ba3ce276e5Daisuke Miyakawa onConnectButtonPressed(); 26258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } else if (view == mBackButton) { 2634dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa if (DEBUG) Log.d(TAG, "Back button pressed"); 26458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa onBackButtonPressed(); 265d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 2665d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa } 2675d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa 2685d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa private void hideSoftwareKeyboard() { 269c9cd29ddb832fd76d96fea080abe8325a8bb1bd2satok if (DEBUG) Log.i(TAG, "Hiding software keyboard."); 2705d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa final View focusedView = getCurrentFocus(); 2715d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa if (focusedView != null) { 2725d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa mInputMethodManager.hideSoftInputFromWindow(focusedView.getWindowToken(), 0); 2735d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa } 274d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 275d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 27686eaa09aa42e3281ed6c8ea85e09d4875973c4bfDaisuke Miyakawa // Called from WifiSettings 2775d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa /* package */ void updateConnectionState(DetailedState originalState) { 2782adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa final DetailedState state = sNetworkStateMap.get(originalState); 27958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 28058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa if (originalState == DetailedState.FAILED) { 28158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // We clean up the current connectivity status and let users select another network 28258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // if they want. 28358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa refreshAccessPoints(true); 28458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 28558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 286d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa switch (state) { 287b962d6566c99edf9950b5d05c5f08c56d1f850feDaisuke Miyakawa case SCANNING: { 288b962d6566c99edf9950b5d05c5f08c56d1f850feDaisuke Miyakawa // Let users know the device is working correctly though currently there's 289b962d6566c99edf9950b5d05c5f08c56d1f850feDaisuke Miyakawa // no visible network on the list. 290b962d6566c99edf9950b5d05c5f08c56d1f850feDaisuke Miyakawa if (mWifiSettings.getAccessPointsCount() == 0) { 291be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showScanningProgressBar(); 292b962d6566c99edf9950b5d05c5f08c56d1f850feDaisuke Miyakawa } else { 293be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa // Users already see available networks. 294be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showDisconnectedProgressBar(); 295b962d6566c99edf9950b5d05c5f08c56d1f850feDaisuke Miyakawa } 296b962d6566c99edf9950b5d05c5f08c56d1f850feDaisuke Miyakawa break; 297b962d6566c99edf9950b5d05c5f08c56d1f850feDaisuke Miyakawa } 298d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa case CONNECTING: { 299c4a495fb5b3d161aa0227a08d6179bf21ffcc730Daisuke Miyakawa if (mScreenState == SCREEN_STATE_CONNECTING) { 30035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa showConnectingState(); 30135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 302d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa break; 303d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 304d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa case CONNECTED: { 30535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa showConnectedState(); 306d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa break; 307d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 3084dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa default: // DISCONNECTED, FAILED 30935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa if (mScreenState != SCREEN_STATE_CONNECTED) { 31035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa showDisconnectedState(Summary.get(this, state)); 31135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 3125d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa break; 3135d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa } 3142adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa mPreviousNetworkState = state; 3154dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa } 31658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 31735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private void showDisconnectedState(String stateString) { 318be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showDisconnectedProgressBar(); 3194dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa mAddNetworkButton.setEnabled(true); 3204dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa mRefreshButton.setEnabled(true); 321d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 322d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 32335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private void showConnectingState() { 32435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mScreenState = SCREEN_STATE_CONNECTING; 32535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 326ee5576ce0677ccae468fdefa70c541837178c4fcDaisuke Miyakawa mBackButton.setVisibility(View.VISIBLE); 32714cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa // We save this title and show it when authentication failed. 32814cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mEditingTitle = mTitleView.getText(); 329a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa showConnectingTitle(); 330be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showConnectingProgressBar(); 331350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa 33235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa setPaddingVisibility(View.VISIBLE); 33335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 33435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 33535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private void showConnectedState() { 33635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // Once we show "connected" screen, we won't change it even when the device becomes 33735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // disconnected afterwards. We keep the state unless a user explicitly cancel it 33835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // (by pressing "back" button). 33935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mScreenState = SCREEN_STATE_CONNECTED; 34035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 34135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa hideSoftwareKeyboard(); 34235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa setPaddingVisibility(View.VISIBLE); 34335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 34435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa trySetBackground(R.drawable.setups_bg_complete); 34535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa showConnectedTitle(); 346be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showConnectedProgressBar(); 34735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 34835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mWifiSettingsFragmentLayout.setVisibility(View.GONE); 34935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mConnectingStatusLayout.setVisibility(View.VISIBLE); 35035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 35135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mConnectingStatusView.setText(R.string.wifi_setup_description_connected); 35235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mConnectButton.setVisibility(View.GONE); 35335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mAddNetworkButton.setVisibility(View.GONE); 35435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mRefreshButton.setVisibility(View.GONE); 35535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mBackButton.setVisibility(View.VISIBLE); 35635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mBackButton.setText(R.string.wifi_setup_back); 35735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mSkipOrNextButton.setVisibility(View.VISIBLE); 35835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mSkipOrNextButton.setEnabled(true); 35914cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 36014cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 361a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa private void showDefaultTitle() { 362a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa mTitleView.setText(getString(R.string.wifi_setup_title)); 363a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa } 364a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa 3654781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa private void showAddNetworkTitle() { 3664781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mNetworkName = ""; 3674781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mTitleView.setText(R.string.wifi_setup_title_add_network); 3684781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } 3694781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 370a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa private void showEditingTitle() { 37114cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa if (TextUtils.isEmpty(mNetworkName) && mWifiConfig != null) { 3724781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa if (mWifiConfig.getController() != null && 3734781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mWifiConfig.getController().getConfig() != null) { 3744781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mNetworkName = mWifiConfig.getController().getConfig().SSID; 3754781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } else { 3764781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa Log.w(TAG, "Unexpected null found (WifiController or WifiConfig is null). " + 3774781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa "Ignore them."); 3784781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } 37914cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 38014cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mTitleView.setText(getString(R.string.wifi_setup_title_editing_network, mNetworkName)); 381f3cd94652f26d68485650fbbe5f9904e5da3008dDaisuke Miyakawa } 382f3cd94652f26d68485650fbbe5f9904e5da3008dDaisuke Miyakawa 383a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa private void showConnectingTitle() { 384a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa if (TextUtils.isEmpty(mNetworkName) && mWifiConfig != null) { 3854781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa if (mWifiConfig.getController() != null && 3864781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mWifiConfig.getController().getConfig() != null) { 3874781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mNetworkName = mWifiConfig.getController().getConfig().SSID; 3884781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } else { 3894781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa Log.w(TAG, "Unexpected null found (WifiController or WifiConfig is null). " + 3904781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa "Ignore them."); 3914781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } 392a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa } 393a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa mTitleView.setText(getString(R.string.wifi_setup_title_connecting_network, mNetworkName)); 394a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa } 395a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa 396a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa private void showConnectedTitle() { 397a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa if (TextUtils.isEmpty(mNetworkName) && mWifiConfig != null) { 3984781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa if (mWifiConfig.getController() != null && 3994781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mWifiConfig.getController().getConfig() != null) { 4004781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mNetworkName = mWifiConfig.getController().getConfig().SSID; 4014781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } else { 4024781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa Log.w(TAG, "Unexpected null found (WifiController or WifiConfig is null). " + 4034781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa "Ignore them."); 4044781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } 405a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa } 406a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa mTitleView.setText(getString(R.string.wifi_setup_title_connected_network, mNetworkName)); 407a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa } 408a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa 409be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa /** 410be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa * Shows top divider with ProgressBar without defining the state of the ProgressBar. 411be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa * 412be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa * @see #showScanningProgressBar() 413be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa * @see #showConnectedProgressBar() 414be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa * @see #showConnectingProgressBar() 415be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa */ 416be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa private void showTopDividerWithProgressBar() { 417beec0b2da6286575a4526d06cd5215463f39ae40Daisuke Miyakawa mProgressBar.setVisibility(View.VISIBLE); 418beec0b2da6286575a4526d06cd5215463f39ae40Daisuke Miyakawa mTopDividerNoProgress.setVisibility(View.GONE); 419be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mBottomPadding.setVisibility(View.GONE); 420be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa } 421be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa 422be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa private void showScanningStatus() { 423be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showScanningProgressBar(); 4244dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa } 4254dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa 42658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private void onAddNetworkButtonPressed() { 42758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiSettings.onAddNetworkPressed(); 428fef4125d4e5db8d35a3c76041fdfde9a12627480Daisuke Miyakawa } 429fef4125d4e5db8d35a3c76041fdfde9a12627480Daisuke Miyakawa 43058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa /** 43158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * Called when the screen enters wifi configuration UI. UI widget for configuring network 43258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * (a.k.a. ConfigPreference) should be taken care of by caller side. 43358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * This method should handle buttons' visibility/enabled. 43458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * @param selectedAccessPoint AccessPoint object being selected. null when a user pressed 43558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * "Add network" button, meaning there's no selected access point. 43658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa */ 43758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa /* package */ void showConfigUi(AccessPoint selectedAccessPoint, boolean edit) { 438cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (selectedAccessPoint != null && 439cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa (selectedAccessPoint.security == AccessPoint.SECURITY_WEP || 440cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa selectedAccessPoint.security == AccessPoint.SECURITY_PSK)) { 441cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa // We forcibly set edit as true so that users can modify every field if they want, 442cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa // while config UI doesn't allow them to edit some of them when edit is false 443cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa // (e.g. password field is hiden when edit==false). 444cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa edit = true; 445cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 446cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa 4478f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa trySetBackground(R.drawable.setups_bg_default); 4488f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa 4492adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // We don't want to keep scanning Wifi networks during users' configuring a network. 45058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiSettings.pauseWifiScan(); 45158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 45235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mWifiSettingsFragmentLayout.setVisibility(View.GONE); 453a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa mConnectingStatusLayout.setVisibility(View.GONE); 45458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa final ViewGroup parent = (ViewGroup)findViewById(R.id.wifi_config_ui); 45558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa parent.setVisibility(View.VISIBLE); 45658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa parent.removeAllViews(); 45758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiConfig = new WifiConfigUiForSetupWizardXL(this, parent, selectedAccessPoint, edit); 4584781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 4592adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // Tag will be updated in this method when needed. 4604781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mConnectButton.setTag(null); 4614781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa if (selectedAccessPoint == null) { // "Add network" flow 4624781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa showAddNetworkTitle(); 4634781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mConnectButton.setVisibility(View.VISIBLE); 4644781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mConnectButton.setTag(CONNECT_BUTTON_TAG_ADD_NETWORK); 4654781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 4664781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa showEditingButtonState(); 4674781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } else if (selectedAccessPoint.security == AccessPoint.SECURITY_NONE) { 46814cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mNetworkName = selectedAccessPoint.getTitle().toString(); 46958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 47014cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa // onConnectButtonPressed() will change visibility status. 47114cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mConnectButton.performClick(); 4720333f74b9c54227cee22f04fbb08a562771504e9Daisuke Miyakawa } else { 4734781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mNetworkName = selectedAccessPoint.getTitle().toString(); 474a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa showEditingTitle(); 4754781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa showEditingButtonState(); 4764781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa if (selectedAccessPoint.security == AccessPoint.SECURITY_EAP) { 47735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa onEapNetworkSelected(); 4784781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } else { 4794781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mConnectButton.setVisibility(View.VISIBLE); 4804781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 4814781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa // WifiConfigController shows Connect button as "Save" when edit==true and a user 4824781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa // tried to connect the network. 4834781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa // In SetupWizard, we just show the button as "Connect" instead. 4844781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mConnectButton.setText(R.string.wifi_connect); 4854781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mBackButton.setText(R.string.wifi_setup_cancel); 4864781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } 48714cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 48858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 48958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 49035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa /** 4912adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * Called before security fields are correctly set by {@link WifiConfigController}. 49235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa * 49335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa * @param view security field view 49435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa * @param accessPointSecurity type of security. e.g. AccessPoint.SECURITY_NONE 49535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa * @return true when it is ok for the caller to init security fields. false when 49635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa * all security fields are managed by this method, and thus the caller shouldn't touch them. 49735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa */ 49835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa /* package */ boolean initSecurityFields(View view, int accessPointSecurity) { 49935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // Reset all states tweaked below. 50035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.eap_not_supported).setVisibility(View.GONE); 50135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.eap_not_supported_for_add_network).setVisibility(View.GONE); 50235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.ssid_text).setVisibility(View.VISIBLE); 50335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.ssid_layout).setVisibility(View.VISIBLE); 50435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 50535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa if (accessPointSecurity == AccessPoint.SECURITY_EAP) { 50635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa hideSoftwareKeyboard(); 50735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 50835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // In SetupWizard for XLarge screen, we don't have enough space for showing 50935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // configurations needed for EAP. We instead disable the whole feature there and let 51035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // users configure those networks after the setup. 51135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa if (view.findViewById(R.id.type).getVisibility() == View.VISIBLE) { 51235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.eap_not_supported_for_add_network) 5132adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa .setVisibility(View.VISIBLE); 51435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } else { 51535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.eap_not_supported).setVisibility(View.VISIBLE); 51635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 51735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.security_fields).setVisibility(View.GONE); 51835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.ssid_text).setVisibility(View.GONE); 51935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.ssid_layout).setVisibility(View.GONE); 52035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa onEapNetworkSelected(); 5212adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa 5222adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // This method did init security fields by itself. The caller must not do it. 52335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa return false; 52435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 5252adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa 5262adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // Let the caller init security fields. 52735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa return true; 52835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 52935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 53035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa /* package */ void onEapNetworkSelected() { 53135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mConnectButton.setVisibility(View.GONE); 53235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mBackButton.setText(R.string.wifi_setup_back); 53335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 53435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 5354781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa private void showEditingButtonState() { 5364781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mSkipOrNextButton.setVisibility(View.GONE); 5374781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mAddNetworkButton.setVisibility(View.GONE); 5384781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mRefreshButton.setVisibility(View.GONE); 5394781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mBackButton.setVisibility(View.VISIBLE); 5404781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } 5414781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 54258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // May be called when user press "connect" button in WifiDialog 54358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa /* package */ void onConnectButtonPressed() { 54435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mScreenState = SCREEN_STATE_CONNECTING; 54558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 5468f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa trySetBackground(R.drawable.setups_bg_wifi); 5478f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa 54858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiSettings.submit(mWifiConfig.getController()); 54958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 5502adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // updateConnectionState() isn't called soon by the main Wifi module after the user's 5512adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // "connect" request, and the user still sees "not connected" message for a while, which 5522adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // looks strange for users though legitimate from the view of the module. 5532adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // 55458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // We instead manually show "connecting" message before the system gets actual 5552adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // "connecting" message from Wifi module. 55635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa showConnectingState(); 55758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 55858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // Might be better to delay showing this button. 55958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mBackButton.setVisibility(View.VISIBLE); 560ee5576ce0677ccae468fdefa70c541837178c4fcDaisuke Miyakawa mBackButton.setText(R.string.wifi_setup_back); 56158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 562cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa // We need to restore visibility status when the device failed to connect the network. 563cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa final View wpsFieldView = findViewById(R.id.wps_fields); 564cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (wpsFieldView != null) { 565cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa mPreviousWpsFieldsVisibility = wpsFieldView.getVisibility(); 566cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa wpsFieldView.setVisibility(View.GONE); 567cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 568cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa final View securityFieldsView = findViewById(R.id.security_fields); 569cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (securityFieldsView != null) { 570cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa mPreviousSecurityFieldsVisibility = securityFieldsView.getVisibility(); 571cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa securityFieldsView.setVisibility(View.GONE); 572cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 573cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa final View typeView = findViewById(R.id.type); 574cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (typeView != null) { 575cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa mPreviousTypeVisibility = typeView.getVisibility(); 576cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa typeView.setVisibility(View.GONE); 577cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 57858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 579a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa // TODO: investigate whether visibility handling above is needed. Now that we hide 580a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa // them completely when connecting, so we may not need to do so, though we probably 581a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa // need to show software keyboard conditionaly. 582a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa final ViewGroup parent = (ViewGroup)findViewById(R.id.wifi_config_ui); 583a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa parent.setVisibility(View.GONE); 584a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa mConnectingStatusLayout.setVisibility(View.VISIBLE); 585a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa mConnectingStatusView.setText(R.string.wifi_setup_description_connecting); 586a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa 58758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setVisibility(View.VISIBLE); 58858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setEnabled(false); 58958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mConnectButton.setVisibility(View.GONE); 59058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mAddNetworkButton.setVisibility(View.GONE); 59158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mRefreshButton.setVisibility(View.GONE); 592d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 593d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 59458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private void onBackButtonPressed() { 5958f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa trySetBackground(R.drawable.setups_bg_default); 5968f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa 59735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa if (mScreenState == SCREEN_STATE_CONNECTING || mScreenState == SCREEN_STATE_CONNECTED) { 5984dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa if (DEBUG) Log.d(TAG, "Back button pressed after connect action."); 59935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mScreenState = SCREEN_STATE_DISCONNECTED; 60058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 60158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // When a user press "Back" button after pressing "Connect" button, we want to cancel 6022adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // the "Connect" request and refresh the whole Wifi status. 60358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa restoreFirstButtonVisibilityState(); 60458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 60558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setEnabled(true); 6064dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa changeNextButtonState(false); // Skip 60758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 60835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // Wifi list becomes empty for a moment. We show "scanning" effect to a user so that 60935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // he/she won't be astonished there. This stops once the scan finishes. 610be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showScanningProgressBar(); 61135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 61209d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa // Remembered networks may be re-used during SetupWizard, which confuse users. 61309d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa // We force the module to forget them to reduce UX complexity 61409d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa final List<WifiConfiguration> configs = mWifiManager.getConfiguredNetworks(); 61509d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa for (WifiConfiguration config : configs) { 61609d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa if (DEBUG) { 61709d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa Log.d(TAG, String.format("forgeting Wi-Fi network \"%s\" (id: %d)", 61809d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa config.SSID, config.networkId)); 61909d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa } 62009d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa mWifiManager.forgetNetwork(config.networkId); 62109d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa } 62209d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa 62358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa refreshAccessPoints(true); 62458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } else { // During user's Wifi configuration. 62558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiSettings.resumeWifiScan(); 62658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 62758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa restoreFirstButtonVisibilityState(); 62858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 62958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mAddNetworkButton.setEnabled(true); 63058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mRefreshButton.setEnabled(true); 63158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setEnabled(true); 63258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 63358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 63435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mWifiSettingsFragmentLayout.setVisibility(View.VISIBLE); 635a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa mConnectingStatusLayout.setVisibility(View.GONE); 63658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa final ViewGroup parent = (ViewGroup)findViewById(R.id.wifi_config_ui); 63758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa parent.removeAllViews(); 63858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa parent.setVisibility(View.GONE); 63958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiConfig = null; 64058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 64158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 64258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa /** 64358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * @param connected true when the device is connected to a specific network. 64458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa */ 64558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa /* package */ void changeNextButtonState(boolean connected) { 64658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa if (connected) { 64758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setText(R.string.wifi_setup_next); 64858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } else { 64958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setText(R.string.wifi_setup_skip); 65058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 65158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 65258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 65358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa /** 65458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * Called when the list of AccessPoints are modified and this Activity needs to refresh 65558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * the list. 65658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa */ 65758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa /* package */ void onAccessPointsUpdated( 65858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa PreferenceCategory holder, Collection<AccessPoint> accessPoints) { 659350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa // If we already show some of access points but the bar still shows "scanning" state, it 660350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa // should be stopped. 661350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa if (mProgressBar.isIndeterminate() && accessPoints.size() > 0) { 662be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showTopDividerWithProgressBar(); 663350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa mAddNetworkButton.setEnabled(true); 664350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa mRefreshButton.setEnabled(true); 665350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa } 666350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa 66758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa for (AccessPoint accessPoint : accessPoints) { 66858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa accessPoint.setLayoutResource(R.layout.custom_preference); 66958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa holder.addPreference(accessPoint); 67058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 67158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 67258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 67358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private void refreshAccessPoints(boolean disconnectNetwork) { 6744781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa final Object tag = mConnectButton.getTag(); 6754781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa if (tag != null && (tag instanceof Integer) && 6764781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa ((Integer)tag == CONNECT_BUTTON_TAG_ADD_NETWORK)) { 6774781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa // In "Add network" flow, we won't get DetaledState available for changing ProgressBar 6784781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa // state. Instead we manually show previous status here. 6792adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa showDisconnectedState(Summary.get(this, mPreviousNetworkState)); 6804781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } else { 6814781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa showScanningStatus(); 6824781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } 6838b3b876c096acb93ec8736851e47e2ba3ce276e5Daisuke Miyakawa 68458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa if (disconnectNetwork) { 68558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiManager.disconnect(); 68658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 68758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 68858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiSettings.refreshAccessPoints(); 6898b3b876c096acb93ec8736851e47e2ba3ce276e5Daisuke Miyakawa } 690cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa 691cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa /** 69214cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa * Called when {@link WifiSettings} received 69314cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa * {@link WifiManager#SUPPLICANT_STATE_CHANGED_ACTION}. 694cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa */ 695cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa /* package */ void onSupplicantStateChanged(Intent intent) { 696cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa final int errorCode = intent.getIntExtra(WifiManager.EXTRA_SUPPLICANT_ERROR, -1); 697cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (errorCode == WifiManager.ERROR_AUTHENTICATING) { 698cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa Log.i(TAG, "Received authentication error event."); 699cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa onAuthenticationFailure(); 700cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 701cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 702cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa 703cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa /** 704cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa * Called once when Authentication failed. 705cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa */ 706cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa private void onAuthenticationFailure() { 70735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mScreenState = SCREEN_STATE_EDITING; 70835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 709cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa mSkipOrNextButton.setVisibility(View.GONE); 710cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa mConnectButton.setVisibility(View.VISIBLE); 711cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa mConnectButton.setEnabled(true); 712cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa 7138f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa trySetBackground(R.drawable.setups_bg_default); 7148f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa 71514cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa if (!TextUtils.isEmpty(mEditingTitle)) { 71614cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mTitleView.setText(mEditingTitle); 71714cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } else { 71814cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa Log.w(TAG, "Title during editing/adding a network was empty."); 719a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa showEditingTitle(); 72014cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 72114cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 722a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa final ViewGroup parent = (ViewGroup)findViewById(R.id.wifi_config_ui); 723a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa parent.setVisibility(View.VISIBLE); 724a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa mConnectingStatusLayout.setVisibility(View.GONE); 725a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa 726cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa // Restore View status which was tweaked on connection. 727cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa final View wpsFieldView = findViewById(R.id.wps_fields); 728cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (wpsFieldView != null) { 729cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa wpsFieldView.setVisibility(mPreviousWpsFieldsVisibility); 730cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 731cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa final View securityFieldsView = findViewById(R.id.security_fields); 732cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (securityFieldsView != null) { 733cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa securityFieldsView.setVisibility(mPreviousSecurityFieldsVisibility); 734cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (mPreviousSecurityFieldsVisibility == View.VISIBLE && mWifiConfig != null) { 735cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa final View passwordView = findViewById(R.id.password); 736cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (passwordView != null) { 737cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (passwordView.isFocused()) { 73814cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa setPaddingVisibility(View.GONE); 739cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 74014cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mWifiConfig.requestFocusAndShowKeyboard(R.id.password); 741cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 742cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 743cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 744cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa final View typeView = findViewById(R.id.type); 745cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (typeView != null) { 746cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa typeView.setVisibility(mPreviousTypeVisibility); 74714cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa if (mPreviousTypeVisibility == View.VISIBLE && mWifiConfig != null) { 74814cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa final View ssidView = findViewById(R.id.ssid); 74914cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa if (ssidView != null) { 75014cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa if (ssidView.isFocused()) { 75114cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa setPaddingVisibility(View.GONE); 75214cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 75314cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mWifiConfig.requestFocusAndShowKeyboard(R.id.ssid); 75414cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 75514cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 756cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 757cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 758cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa 759be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa /** Note: doesn't affect bottom padding */ 7602adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // Used by WifiConfigUiForSetupWizardXL 7612adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa /* package */ void setPaddingVisibility(int visibility) { 762c4a495fb5b3d161aa0227a08d6179bf21ffcc730Daisuke Miyakawa Log.d("@@@", "setPaddingVisibilyty: " + visibility, new RuntimeException()); 76314cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa setPaddingVisibility(visibility, visibility); 76414cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 76514cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 766be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa /** Note: doesn't affect bottom padding */ 76714cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa private void setPaddingVisibility(int topPaddingVisibility, int configVisibility) { 76814cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mTopPadding.setVisibility(topPaddingVisibility); 76914cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mWifiConfigPadding.setVisibility(configVisibility); 77014cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 77114cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 772be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa private void showDisconnectedProgressBar() { 773be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mProgressBar.setVisibility(View.GONE); 774be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mProgressBar.setIndeterminate(false); 775be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mTopDividerNoProgress.setVisibility(View.VISIBLE); 776be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mBottomPadding.setVisibility(View.VISIBLE); 777be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa } 778be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa 779be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa /** 780be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa * Shows top divider with ProgressBar, whose state is intermediate. 781be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa */ 782be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa private void showScanningProgressBar() { 783be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showTopDividerWithProgressBar(); 784be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mProgressBar.setIndeterminate(true); 785be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa } 786be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa 787be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa /** 788be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa * Shows top divider with ProgressBar, showing "connecting" state. 789be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa */ 790be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa private void showConnectingProgressBar() { 791be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showTopDividerWithProgressBar(); 792be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mProgressBar.setIndeterminate(false); 793be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mProgressBar.setProgress(1); 794be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa } 795be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa 796be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa private void showConnectedProgressBar() { 797be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showTopDividerWithProgressBar(); 798be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mProgressBar.setIndeterminate(false); 799be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mProgressBar.setProgress(2); 800be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa } 801be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa 802cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa /** 8032adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa * Called when WifiManager is requested to save a network. 804cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa */ 805cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa /* package */ void onSaveNetwork(WifiConfiguration config) { 8062adae4e274c00f0b05b405d60b8def23d9b28469Daisuke Miyakawa // We want to both save and connect a network. connectNetwork() does both. 807cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa mWifiManager.connectNetwork(config); 808cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 809267d51a68a6e2bc40b90d199425af88a7a824f53Daisuke Miyakawa 810267d51a68a6e2bc40b90d199425af88a7a824f53Daisuke Miyakawa @Override 811267d51a68a6e2bc40b90d199425af88a7a824f53Daisuke Miyakawa public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) { 812267d51a68a6e2bc40b90d199425af88a7a824f53Daisuke Miyakawa super.onCreateContextMenu(menu, view, menuInfo); 813267d51a68a6e2bc40b90d199425af88a7a824f53Daisuke Miyakawa } 8148f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa 8158f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa /** 8168f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa * Replace the current background with a new background whose id is resId if needed. 8178f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa */ 8188f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa private void trySetBackground(int resId) { 819cc0dc00916c5194cdef4151767ec58c6ccad6578Daisuke Miyakawa if (mBackgroundId != resId) { 8208f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa getWindow().setBackgroundDrawable(getResources().getDrawable(resId)); 8218f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa mBackgroundId = resId; 8228f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa } 8238f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa } 824d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa} 825