WifiSettingsForSetupWizardXL.java revision 590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71
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; 3958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawaimport android.view.WindowManager; 405d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawaimport android.view.inputmethod.InputMethodManager; 41d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.widget.Button; 42d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.widget.ProgressBar; 43d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport android.widget.TextView; 44d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 45590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriffimport com.android.internal.util.AsyncChannel; 46590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff 4758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawaimport java.util.Collection; 48d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawaimport java.util.EnumMap; 4909d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawaimport java.util.List; 50d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 51d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa/** 52d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa * WifiSetings Activity specific for SetupWizard with X-Large screen size. 53d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa */ 54d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawapublic class WifiSettingsForSetupWizardXL extends Activity implements OnClickListener { 5558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private static final String TAG = "SetupWizard"; 5635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private static final boolean DEBUG = true; 5758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 58d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa private static final EnumMap<DetailedState, DetailedState> stateMap = 5958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa new EnumMap<DetailedState, DetailedState>(DetailedState.class); 60d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 61d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa static { 62d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa stateMap.put(DetailedState.IDLE, DetailedState.DISCONNECTED); 63b962d6566c99edf9950b5d05c5f08c56d1f850feDaisuke Miyakawa stateMap.put(DetailedState.SCANNING, DetailedState.SCANNING); 64d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa stateMap.put(DetailedState.CONNECTING, DetailedState.CONNECTING); 65d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa stateMap.put(DetailedState.AUTHENTICATING, DetailedState.CONNECTING); 66d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa stateMap.put(DetailedState.OBTAINING_IPADDR, DetailedState.CONNECTING); 67d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa stateMap.put(DetailedState.CONNECTED, DetailedState.CONNECTED); 68d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa stateMap.put(DetailedState.SUSPENDED, DetailedState.SUSPENDED); // ? 69d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa stateMap.put(DetailedState.DISCONNECTING, DetailedState.DISCONNECTED); 70d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa stateMap.put(DetailedState.DISCONNECTED, DetailedState.DISCONNECTED); 715d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa stateMap.put(DetailedState.FAILED, DetailedState.FAILED); 72d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 73d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 7458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private WifiManager mWifiManager; 7558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 7614cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa /** 7714cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa * Used for resizing a padding above title. Hiden when software keyboard is shown. 7814cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa */ 7914cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa private View mTopPadding; 8014cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 8114cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa /** 8214cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa * Used for resizing a padding inside Config UI. Hiden when software keyboard is shown. 8314cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa */ 8414cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa private View mWifiConfigPadding; 8514cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 8614cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa private TextView mTitleView; 8714cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa /** 8814cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa * The name of a network currently connecting, or trying to connect. 8914cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa * This may be empty ("") at first, and updated when configuration is changed. 9014cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa */ 9114cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa private CharSequence mNetworkName = ""; 9214cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa private CharSequence mEditingTitle; 9314cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 94d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa private ProgressBar mProgressBar; 95beec0b2da6286575a4526d06cd5215463f39ae40Daisuke Miyakawa private View mTopDividerNoProgress; 96be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa private View mBottomPadding; 97be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa 98d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa private WifiSettings mWifiSettings; 99d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke 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 static int CONNECT_BUTTON_TAG_ADD_NETWORK = 1; 1064781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 1074781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa private Button mConnectButton; 1084781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 10935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa /** 11035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa * View enclosing {@link WifiSettings}. 11135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa */ 11235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private View mWifiSettingsFragmentLayout; 113a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa private View mConnectingStatusLayout; 114a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa private TextView mConnectingStatusView; 115a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa 11635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private static final int SCREEN_STATE_DISCONNECTED = 0; 11735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private static final int SCREEN_STATE_EDITING = 1; 11835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private static final int SCREEN_STATE_CONNECTING = 2; 11935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private static final int SCREEN_STATE_CONNECTED = 3; 12035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 12135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private int mScreenState = SCREEN_STATE_DISCONNECTED; 12258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 12358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private WifiConfigUiForSetupWizardXL mWifiConfig; 12458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 1255d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa private InputMethodManager mInputMethodManager; 126fe3b6bea01de328cdf7d6cf414607304fcdeaed6Daisuke Miyakawa 1274dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa private final Handler mHandler = new Handler(); 1284dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa 129cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa private int mPreviousWpsFieldsVisibility = View.GONE; 130cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa private int mPreviousSecurityFieldsVisibility = View.GONE; 131cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa private int mPreviousTypeVisibility = View.GONE; 132cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa 1334781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa private DetailedState mPreviousState = DetailedState.DISCONNECTED; 1344781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 1358f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa private int mBackgroundId = R.drawable.setups_bg_default; 1368f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa 137d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa @Override 138d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa public void onCreate(Bundle savedInstanceState) { 139d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa super.onCreate(savedInstanceState); 140d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa requestWindowFeature(Window.FEATURE_NO_TITLE); 141d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa setContentView(R.layout.wifi_settings_for_setup_wizard_xl); 14258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 14358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 14440124c30a9d554597808992d77ccc867737cf242Daisuke Miyakawa 14558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE); 146dd9fbb0b9e1b82025fc8699fe4ad4a9e2a918c4dDaisuke Miyakawa // There's no button here enabling wifi network, so we need to enable it without 147dd9fbb0b9e1b82025fc8699fe4ad4a9e2a918c4dDaisuke Miyakawa // users' request. 148dd9fbb0b9e1b82025fc8699fe4ad4a9e2a918c4dDaisuke Miyakawa mWifiManager.setWifiEnabled(true); 149590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff mWifiManager.asyncConnect(this, new WifiServiceHandler()); 150dd9fbb0b9e1b82025fc8699fe4ad4a9e2a918c4dDaisuke Miyakawa 151d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mWifiSettings = 152d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa (WifiSettings)getFragmentManager().findFragmentById(R.id.wifi_setup_fragment); 1535d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa mInputMethodManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 154d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa setup(); 155d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 156d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 157d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa public void setup() { 15835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa if (getIntent().getBooleanExtra("firstRun", false)) { 15935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa final View layoutRoot = findViewById(R.id.layout_root); 16035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa layoutRoot.setSystemUiVisibility(View.STATUS_BAR_DISABLE_BACK); 16135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 16262fb701ea9781f4e1c05af6d730e91bb2cdcdae0Daisuke Miyakawa 16314cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mTitleView = (TextView)findViewById(R.id.wifi_setup_title); 164d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mProgressBar = (ProgressBar)findViewById(R.id.scanning_progress_bar); 165d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa mProgressBar.setMax(2); 166beec0b2da6286575a4526d06cd5215463f39ae40Daisuke Miyakawa mTopDividerNoProgress = findViewById(R.id.top_divider_no_progress); 167be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mBottomPadding = findViewById(R.id.bottom_padding); 168d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 169beec0b2da6286575a4526d06cd5215463f39ae40Daisuke Miyakawa mProgressBar.setVisibility(View.VISIBLE); 1703b6aa41cce9dafa48dfbb3e93ea856610de1f1e7Daisuke Miyakawa mProgressBar.setIndeterminate(true); 171beec0b2da6286575a4526d06cd5215463f39ae40Daisuke Miyakawa mTopDividerNoProgress.setVisibility(View.GONE); 1723b6aa41cce9dafa48dfbb3e93ea856610de1f1e7Daisuke Miyakawa 17358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mAddNetworkButton = (Button)findViewById(R.id.wifi_setup_add_network); 17458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mAddNetworkButton.setOnClickListener(this); 17558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mRefreshButton = (Button)findViewById(R.id.wifi_setup_refresh_list); 17658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mRefreshButton.setOnClickListener(this); 17758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton = (Button)findViewById(R.id.wifi_setup_skip_or_next); 17858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setOnClickListener(this); 17958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mConnectButton = (Button)findViewById(R.id.wifi_setup_connect); 18058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mConnectButton.setOnClickListener(this); 18158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mBackButton = (Button)findViewById(R.id.wifi_setup_cancel); 18258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mBackButton.setOnClickListener(this); 1834dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa 18414cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mTopPadding = findViewById(R.id.top_padding); 18514cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mWifiConfigPadding = findViewById(R.id.wifi_config_padding); 18614cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 18735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mWifiSettingsFragmentLayout = findViewById(R.id.wifi_settings_fragment_layout); 188a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa mConnectingStatusLayout = findViewById(R.id.connecting_status_layout); 189a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa mConnectingStatusView = (TextView) findViewById(R.id.connecting_status); 190a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa 1914dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa // At first, Wifi module doesn't return SCANNING state (it's too early), so we manually 1924dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa // show it. 1934dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa showScanningStatus(); 19458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 19558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 196590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff private class WifiServiceHandler extends Handler { 197590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff @Override 198590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff public void handleMessage(Message msg) { 199590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff switch (msg.what) { 200590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff case AsyncChannel.CMD_CHANNEL_HALF_CONNECTED: 201590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) { 202590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff //AsyncChannel in msg.obj 203590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff } else { 204590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff //AsyncChannel set up failure, ignore 205590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff Log.e(TAG, "Failed to establish AsyncChannel connection"); 206590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff } 207590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff break; 208590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff default: 209590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff //Ignore 210590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff break; 211590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff } 212590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff } 213590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff } 214590e6c23b7ba4bf9a75ecfe5e6eda11d0dfa5c71Irfan Sheriff 21558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private void restoreFirstButtonVisibilityState() { 216a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa showDefaultTitle(); 217fe7d04fee23b4142c77ec7ab1416f0b94384ba63Daisuke Miyakawa mAddNetworkButton.setVisibility(View.VISIBLE); 21858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mRefreshButton.setVisibility(View.VISIBLE); 21958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setVisibility(View.VISIBLE); 22058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mConnectButton.setVisibility(View.GONE); 22158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mBackButton.setVisibility(View.GONE); 22214cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa setPaddingVisibility(View.VISIBLE, View.GONE); 223d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 224d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 225d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa @Override 226d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa public void onClick(View view) { 227fdb9343ef660fc424bb8c29b48d5c06dff0241c1Daisuke Miyakawa hideSoftwareKeyboard(); 22858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa if (view == mAddNetworkButton) { 2294dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa if (DEBUG) Log.d(TAG, "AddNetwork button pressed"); 23058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa onAddNetworkButtonPressed(); 23158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } else if (view == mRefreshButton) { 2324dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa if (DEBUG) Log.d(TAG, "Refresh button pressed"); 23358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa refreshAccessPoints(true); 23458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } else if (view == mSkipOrNextButton) { 2354dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa if (DEBUG) Log.d(TAG, "Skip/Next button pressed"); 23655de702961642521e247f155963644df81756215Daisuke Miyakawa if (TextUtils.equals(getString(R.string.wifi_setup_skip), ((Button)view).getText())) { 23755de702961642521e247f155963644df81756215Daisuke Miyakawa // We don't want to let Wifi enabled when a user press skip without choosing 23855de702961642521e247f155963644df81756215Daisuke Miyakawa // any access point. 23958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiManager.setWifiEnabled(false); 24055de702961642521e247f155963644df81756215Daisuke Miyakawa } 2417e3ff8eca6ce2912839c02065a5463c5cd234aaeDaisuke Miyakawa setResult(RESULT_OK); 2427e3ff8eca6ce2912839c02065a5463c5cd234aaeDaisuke Miyakawa finish(); 24358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } else if (view == mConnectButton) { 2444dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa if (DEBUG) Log.d(TAG, "Connect button pressed"); 2458b3b876c096acb93ec8736851e47e2ba3ce276e5Daisuke Miyakawa onConnectButtonPressed(); 24658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } else if (view == mBackButton) { 2474dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa if (DEBUG) Log.d(TAG, "Back button pressed"); 24858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa onBackButtonPressed(); 249d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 2505d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa } 2515d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa 2525d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa private void hideSoftwareKeyboard() { 253c9cd29ddb832fd76d96fea080abe8325a8bb1bd2satok if (DEBUG) Log.i(TAG, "Hiding software keyboard."); 2545d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa final View focusedView = getCurrentFocus(); 2555d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa if (focusedView != null) { 2565d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa mInputMethodManager.hideSoftInputFromWindow(focusedView.getWindowToken(), 0); 2575d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa } 258d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 259d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 26086eaa09aa42e3281ed6c8ea85e09d4875973c4bfDaisuke Miyakawa // Called from WifiSettings 2615d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa /* package */ void updateConnectionState(DetailedState originalState) { 262d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa final DetailedState state = stateMap.get(originalState); 26358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 26458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa if (originalState == DetailedState.FAILED) { 26558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // We clean up the current connectivity status and let users select another network 26658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // if they want. 26758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa refreshAccessPoints(true); 26858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 26958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 270d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa switch (state) { 271b962d6566c99edf9950b5d05c5f08c56d1f850feDaisuke Miyakawa case SCANNING: { 272b962d6566c99edf9950b5d05c5f08c56d1f850feDaisuke Miyakawa // Let users know the device is working correctly though currently there's 273b962d6566c99edf9950b5d05c5f08c56d1f850feDaisuke Miyakawa // no visible network on the list. 274b962d6566c99edf9950b5d05c5f08c56d1f850feDaisuke Miyakawa if (mWifiSettings.getAccessPointsCount() == 0) { 275be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showScanningProgressBar(); 276b962d6566c99edf9950b5d05c5f08c56d1f850feDaisuke Miyakawa } else { 277be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa // Users already see available networks. 278be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showDisconnectedProgressBar(); 279b962d6566c99edf9950b5d05c5f08c56d1f850feDaisuke Miyakawa } 280b962d6566c99edf9950b5d05c5f08c56d1f850feDaisuke Miyakawa break; 281b962d6566c99edf9950b5d05c5f08c56d1f850feDaisuke Miyakawa } 282d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa case CONNECTING: { 28335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa if (mScreenState != SCREEN_STATE_DISCONNECTED && 28435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mScreenState != SCREEN_STATE_CONNECTED) { 28535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa showConnectingState(); 28635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 287d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa break; 288d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 289d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa case CONNECTED: { 29035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa showConnectedState(); 291d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa break; 292d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 2934dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa default: // DISCONNECTED, FAILED 29435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa if (mScreenState != SCREEN_STATE_CONNECTED) { 29535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa showDisconnectedState(Summary.get(this, state)); 29635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 2975d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa break; 2985d3c5cb9d0134c02ee0a5a91baa2e90d83a5deddDaisuke Miyakawa } 2994781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mPreviousState = state; 3004dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa } 30158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 30235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private void showDisconnectedState(String stateString) { 303be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showDisconnectedProgressBar(); 3044dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa mAddNetworkButton.setEnabled(true); 3054dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa mRefreshButton.setEnabled(true); 306d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 307d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 30835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private void showConnectingState() { 30935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mScreenState = SCREEN_STATE_CONNECTING; 31035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 311ee5576ce0677ccae468fdefa70c541837178c4fcDaisuke Miyakawa mBackButton.setVisibility(View.VISIBLE); 31214cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa // We save this title and show it when authentication failed. 31314cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mEditingTitle = mTitleView.getText(); 314a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa showConnectingTitle(); 315be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showConnectingProgressBar(); 316350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa 31735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa setPaddingVisibility(View.VISIBLE); 31835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 31935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 32035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa private void showConnectedState() { 32135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // Once we show "connected" screen, we won't change it even when the device becomes 32235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // disconnected afterwards. We keep the state unless a user explicitly cancel it 32335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // (by pressing "back" button). 32435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mScreenState = SCREEN_STATE_CONNECTED; 32535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 32635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa hideSoftwareKeyboard(); 32735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa setPaddingVisibility(View.VISIBLE); 32835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 32935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa trySetBackground(R.drawable.setups_bg_complete); 33035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa showConnectedTitle(); 331be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showConnectedProgressBar(); 33235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 33335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mWifiSettingsFragmentLayout.setVisibility(View.GONE); 33435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mConnectingStatusLayout.setVisibility(View.VISIBLE); 33535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 33635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mConnectingStatusView.setText(R.string.wifi_setup_description_connected); 33735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mConnectButton.setVisibility(View.GONE); 33835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mAddNetworkButton.setVisibility(View.GONE); 33935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mRefreshButton.setVisibility(View.GONE); 34035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mBackButton.setVisibility(View.VISIBLE); 34135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mBackButton.setText(R.string.wifi_setup_back); 34235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mSkipOrNextButton.setVisibility(View.VISIBLE); 34335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mSkipOrNextButton.setEnabled(true); 34414cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 34514cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 346a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa private void showDefaultTitle() { 347a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa mTitleView.setText(getString(R.string.wifi_setup_title)); 348a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa } 349a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa 3504781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa private void showAddNetworkTitle() { 3514781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mNetworkName = ""; 3524781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mTitleView.setText(R.string.wifi_setup_title_add_network); 3534781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } 3544781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 355a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa private void showEditingTitle() { 35614cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa if (TextUtils.isEmpty(mNetworkName) && mWifiConfig != null) { 3574781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa if (mWifiConfig.getController() != null && 3584781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mWifiConfig.getController().getConfig() != null) { 3594781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mNetworkName = mWifiConfig.getController().getConfig().SSID; 3604781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } else { 3614781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa Log.w(TAG, "Unexpected null found (WifiController or WifiConfig is null). " + 3624781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa "Ignore them."); 3634781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } 36414cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 36514cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mTitleView.setText(getString(R.string.wifi_setup_title_editing_network, mNetworkName)); 366f3cd94652f26d68485650fbbe5f9904e5da3008dDaisuke Miyakawa } 367f3cd94652f26d68485650fbbe5f9904e5da3008dDaisuke Miyakawa 368a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa private void showConnectingTitle() { 369a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa if (TextUtils.isEmpty(mNetworkName) && mWifiConfig != null) { 3704781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa if (mWifiConfig.getController() != null && 3714781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mWifiConfig.getController().getConfig() != null) { 3724781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mNetworkName = mWifiConfig.getController().getConfig().SSID; 3734781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } else { 3744781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa Log.w(TAG, "Unexpected null found (WifiController or WifiConfig is null). " + 3754781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa "Ignore them."); 3764781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } 377a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa } 378a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa mTitleView.setText(getString(R.string.wifi_setup_title_connecting_network, mNetworkName)); 379a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa } 380a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa 381a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa private void showConnectedTitle() { 382a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa if (TextUtils.isEmpty(mNetworkName) && mWifiConfig != null) { 3834781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa if (mWifiConfig.getController() != null && 3844781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mWifiConfig.getController().getConfig() != null) { 3854781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mNetworkName = mWifiConfig.getController().getConfig().SSID; 3864781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } else { 3874781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa Log.w(TAG, "Unexpected null found (WifiController or WifiConfig is null). " + 3884781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa "Ignore them."); 3894781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } 390a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa } 391a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa mTitleView.setText(getString(R.string.wifi_setup_title_connected_network, mNetworkName)); 392a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa } 393a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa 394be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa /** 395be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa * Shows top divider with ProgressBar without defining the state of the ProgressBar. 396be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa * 397be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa * @see #showScanningProgressBar() 398be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa * @see #showConnectedProgressBar() 399be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa * @see #showConnectingProgressBar() 400be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa */ 401be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa private void showTopDividerWithProgressBar() { 402beec0b2da6286575a4526d06cd5215463f39ae40Daisuke Miyakawa mProgressBar.setVisibility(View.VISIBLE); 403beec0b2da6286575a4526d06cd5215463f39ae40Daisuke Miyakawa mTopDividerNoProgress.setVisibility(View.GONE); 404be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mBottomPadding.setVisibility(View.GONE); 405be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa } 406be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa 407be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa private void showScanningStatus() { 408be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showScanningProgressBar(); 4094dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa } 4104dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa 41158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private void onAddNetworkButtonPressed() { 41258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiSettings.onAddNetworkPressed(); 413fef4125d4e5db8d35a3c76041fdfde9a12627480Daisuke Miyakawa } 414fef4125d4e5db8d35a3c76041fdfde9a12627480Daisuke Miyakawa 41558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa /** 41658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * Called when the screen enters wifi configuration UI. UI widget for configuring network 41758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * (a.k.a. ConfigPreference) should be taken care of by caller side. 41858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * This method should handle buttons' visibility/enabled. 41958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * @param selectedAccessPoint AccessPoint object being selected. null when a user pressed 42058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * "Add network" button, meaning there's no selected access point. 42158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa */ 42258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa /* package */ void showConfigUi(AccessPoint selectedAccessPoint, boolean edit) { 423cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (selectedAccessPoint != null && 424cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa (selectedAccessPoint.security == AccessPoint.SECURITY_WEP || 425cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa selectedAccessPoint.security == AccessPoint.SECURITY_PSK)) { 426cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa // We forcibly set edit as true so that users can modify every field if they want, 427cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa // while config UI doesn't allow them to edit some of them when edit is false 428cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa // (e.g. password field is hiden when edit==false). 429cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa edit = true; 430cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 431cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa 4328f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa trySetBackground(R.drawable.setups_bg_default); 4338f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa 43458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // We don't want to keep scanning Wi-Fi networks during users' configuring one network. 43558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiSettings.pauseWifiScan(); 43658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 43735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mWifiSettingsFragmentLayout.setVisibility(View.GONE); 438a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa mConnectingStatusLayout.setVisibility(View.GONE); 43958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa final ViewGroup parent = (ViewGroup)findViewById(R.id.wifi_config_ui); 44058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa parent.setVisibility(View.VISIBLE); 44158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa parent.removeAllViews(); 44258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiConfig = new WifiConfigUiForSetupWizardXL(this, parent, selectedAccessPoint, edit); 4434781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 4444781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa // For safety, we forget the tag once. Tag will be updated in this method when needed. 4454781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mConnectButton.setTag(null); 4464781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa if (selectedAccessPoint == null) { // "Add network" flow 4474781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa showAddNetworkTitle(); 4484781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mConnectButton.setVisibility(View.VISIBLE); 4494781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mConnectButton.setTag(CONNECT_BUTTON_TAG_ADD_NETWORK); 4504781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 4514781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa showEditingButtonState(); 4524781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } else if (selectedAccessPoint.security == AccessPoint.SECURITY_NONE) { 45314cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mNetworkName = selectedAccessPoint.getTitle().toString(); 45458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 45514cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa // onConnectButtonPressed() will change visibility status. 45614cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mConnectButton.performClick(); 4570333f74b9c54227cee22f04fbb08a562771504e9Daisuke Miyakawa } else { 4584781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mNetworkName = selectedAccessPoint.getTitle().toString(); 459a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa showEditingTitle(); 4604781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa showEditingButtonState(); 4614781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa if (selectedAccessPoint.security == AccessPoint.SECURITY_EAP) { 46235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa onEapNetworkSelected(); 4634781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } else { 4644781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mConnectButton.setVisibility(View.VISIBLE); 4654781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 4664781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa // WifiConfigController shows Connect button as "Save" when edit==true and a user 4674781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa // tried to connect the network. 4684781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa // In SetupWizard, we just show the button as "Connect" instead. 4694781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mConnectButton.setText(R.string.wifi_connect); 4704781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mBackButton.setText(R.string.wifi_setup_cancel); 4714781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } 47214cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 47358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 47458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 47535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa /** 47635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa * Called before security fields are correctly set by WifiConfigController. 47735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa * 47835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa * @param view security field view 47935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa * @param accessPointSecurity type of security. e.g. AccessPoint.SECURITY_NONE 48035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa * @return true when it is ok for the caller to init security fields. false when 48135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa * all security fields are managed by this method, and thus the caller shouldn't touch them. 48235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa */ 48335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa /* package */ boolean initSecurityFields(View view, int accessPointSecurity) { 48435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // Reset all states tweaked below. 48535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.eap_not_supported).setVisibility(View.GONE); 48635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.eap_not_supported_for_add_network).setVisibility(View.GONE); 48735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.ssid_text).setVisibility(View.VISIBLE); 48835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.ssid_layout).setVisibility(View.VISIBLE); 48935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 49035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa if (accessPointSecurity == AccessPoint.SECURITY_EAP) { 49135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa hideSoftwareKeyboard(); 49235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 49335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // In SetupWizard for XLarge screen, we don't have enough space for showing 49435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // configurations needed for EAP. We instead disable the whole feature there and let 49535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // users configure those networks after the setup. 49635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa if (view.findViewById(R.id.type).getVisibility() == View.VISIBLE) { 49735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.eap_not_supported_for_add_network) 49835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa .setVisibility(View.VISIBLE); 49935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } else { 50035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.eap_not_supported).setVisibility(View.VISIBLE); 50135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 50235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.security_fields).setVisibility(View.GONE); 50335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.ssid_text).setVisibility(View.GONE); 50435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa view.findViewById(R.id.ssid_layout).setVisibility(View.GONE); 50535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa onEapNetworkSelected(); 50635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa return false; 50735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 50835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa return true; 50935eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 51035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 51135eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa /* package */ void onEapNetworkSelected() { 51235eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mConnectButton.setVisibility(View.GONE); 51335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mBackButton.setText(R.string.wifi_setup_back); 51435eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa } 51535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 5164781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa private void showEditingButtonState() { 5174781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mSkipOrNextButton.setVisibility(View.GONE); 5184781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mAddNetworkButton.setVisibility(View.GONE); 5194781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mRefreshButton.setVisibility(View.GONE); 5204781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa mBackButton.setVisibility(View.VISIBLE); 5214781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } 5224781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa 52358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // May be called when user press "connect" button in WifiDialog 52458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa /* package */ void onConnectButtonPressed() { 52535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mScreenState = SCREEN_STATE_CONNECTING; 52658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 5278f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa trySetBackground(R.drawable.setups_bg_wifi); 5288f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa 52958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiSettings.submit(mWifiConfig.getController()); 53058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 53158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // updateConnectionState() isn't called soon after the user's "connect" action, 53258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // and the user still sees "not connected" message for a while, which looks strange. 53358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // We instead manually show "connecting" message before the system gets actual 53458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // "connecting" message from Wi-Fi module. 53535eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa showConnectingState(); 53658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 53758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // Might be better to delay showing this button. 53858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mBackButton.setVisibility(View.VISIBLE); 539ee5576ce0677ccae468fdefa70c541837178c4fcDaisuke Miyakawa mBackButton.setText(R.string.wifi_setup_back); 54058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 541cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa // We need to restore visibility status when the device failed to connect the network. 542cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa final View wpsFieldView = findViewById(R.id.wps_fields); 543cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (wpsFieldView != null) { 544cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa mPreviousWpsFieldsVisibility = wpsFieldView.getVisibility(); 545cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa wpsFieldView.setVisibility(View.GONE); 546cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 547cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa final View securityFieldsView = findViewById(R.id.security_fields); 548cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (securityFieldsView != null) { 549cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa mPreviousSecurityFieldsVisibility = securityFieldsView.getVisibility(); 550cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa securityFieldsView.setVisibility(View.GONE); 551cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 552cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa final View typeView = findViewById(R.id.type); 553cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (typeView != null) { 554cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa mPreviousTypeVisibility = typeView.getVisibility(); 555cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa typeView.setVisibility(View.GONE); 556cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 55758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 558a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa // TODO: investigate whether visibility handling above is needed. Now that we hide 559a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa // them completely when connecting, so we may not need to do so, though we probably 560a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa // need to show software keyboard conditionaly. 561a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa final ViewGroup parent = (ViewGroup)findViewById(R.id.wifi_config_ui); 562a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa parent.setVisibility(View.GONE); 563a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa mConnectingStatusLayout.setVisibility(View.VISIBLE); 564a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa mConnectingStatusView.setText(R.string.wifi_setup_description_connecting); 565a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa 56658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setVisibility(View.VISIBLE); 56758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setEnabled(false); 56858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mConnectButton.setVisibility(View.GONE); 56958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mAddNetworkButton.setVisibility(View.GONE); 57058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mRefreshButton.setVisibility(View.GONE); 571d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa } 572d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa 57358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private void onBackButtonPressed() { 5748f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa trySetBackground(R.drawable.setups_bg_default); 5758f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa 57635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa if (mScreenState == SCREEN_STATE_CONNECTING || mScreenState == SCREEN_STATE_CONNECTED) { 5774dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa if (DEBUG) Log.d(TAG, "Back button pressed after connect action."); 57835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mScreenState = SCREEN_STATE_DISCONNECTED; 57958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 58058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // When a user press "Back" button after pressing "Connect" button, we want to cancel 58158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa // the "Connect" request and refresh the whole wifi status. 58258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa restoreFirstButtonVisibilityState(); 58358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 58458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setEnabled(true); 5854dd2a5b4f7129609d773a7e663c48f81b89a60b2Daisuke Miyakawa changeNextButtonState(false); // Skip 58658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 58735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // Wifi list becomes empty for a moment. We show "scanning" effect to a user so that 58835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa // he/she won't be astonished there. This stops once the scan finishes. 589be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showScanningProgressBar(); 59035eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 59109d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa // Remembered networks may be re-used during SetupWizard, which confuse users. 59209d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa // We force the module to forget them to reduce UX complexity 59309d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa final List<WifiConfiguration> configs = mWifiManager.getConfiguredNetworks(); 59409d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa for (WifiConfiguration config : configs) { 59509d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa if (DEBUG) { 59609d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa Log.d(TAG, String.format("forgeting Wi-Fi network \"%s\" (id: %d)", 59709d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa config.SSID, config.networkId)); 59809d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa } 59909d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa mWifiManager.forgetNetwork(config.networkId); 60009d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa } 60109d5c98ea1465183ed8065771e1a4f34a50f0d75Daisuke Miyakawa 60258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa refreshAccessPoints(true); 60358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } else { // During user's Wifi configuration. 60458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiSettings.resumeWifiScan(); 60558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 60658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa restoreFirstButtonVisibilityState(); 60758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 60858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mAddNetworkButton.setEnabled(true); 60958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mRefreshButton.setEnabled(true); 61058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setEnabled(true); 61158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 61258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 61335eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mWifiSettingsFragmentLayout.setVisibility(View.VISIBLE); 614a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa mConnectingStatusLayout.setVisibility(View.GONE); 61558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa final ViewGroup parent = (ViewGroup)findViewById(R.id.wifi_config_ui); 61658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa parent.removeAllViews(); 61758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa parent.setVisibility(View.GONE); 61858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiConfig = null; 61958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 62058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 62158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa /** 62258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * @param connected true when the device is connected to a specific network. 62358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa */ 62458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa /* package */ void changeNextButtonState(boolean connected) { 62558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa if (connected) { 62658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setText(R.string.wifi_setup_next); 62758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } else { 62858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mSkipOrNextButton.setText(R.string.wifi_setup_skip); 62958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 63058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 63158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 63258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa /** 63358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * Called when the list of AccessPoints are modified and this Activity needs to refresh 63458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa * the list. 63558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa */ 63658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa /* package */ void onAccessPointsUpdated( 63758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa PreferenceCategory holder, Collection<AccessPoint> accessPoints) { 638350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa // If we already show some of access points but the bar still shows "scanning" state, it 639350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa // should be stopped. 640350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa if (mProgressBar.isIndeterminate() && accessPoints.size() > 0) { 641be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showTopDividerWithProgressBar(); 642350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa mAddNetworkButton.setEnabled(true); 643350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa mRefreshButton.setEnabled(true); 644350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa } 645350b724d098329186eb6f566029e0537ff24de9dDaisuke Miyakawa 64658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa for (AccessPoint accessPoint : accessPoints) { 64758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa accessPoint.setLayoutResource(R.layout.custom_preference); 64858b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa holder.addPreference(accessPoint); 64958b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 65058b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 65158b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 65258b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa private void refreshAccessPoints(boolean disconnectNetwork) { 6534781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa final Object tag = mConnectButton.getTag(); 6544781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa if (tag != null && (tag instanceof Integer) && 6554781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa ((Integer)tag == CONNECT_BUTTON_TAG_ADD_NETWORK)) { 6564781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa // In "Add network" flow, we won't get DetaledState available for changing ProgressBar 6574781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa // state. Instead we manually show previous status here. 65835eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa showDisconnectedState(Summary.get(this, mPreviousState)); 6594781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } else { 6604781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa showScanningStatus(); 6614781d280d4cc210ea824c729ba1c9efaf2d2da48Daisuke Miyakawa } 6628b3b876c096acb93ec8736851e47e2ba3ce276e5Daisuke Miyakawa 66358b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa if (disconnectNetwork) { 66458b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiManager.disconnect(); 66558b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa } 66658b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa 66758b0291fe6e6e47bf3d7457d8cf2648b8ce4a1aeDaisuke Miyakawa mWifiSettings.refreshAccessPoints(); 6688b3b876c096acb93ec8736851e47e2ba3ce276e5Daisuke Miyakawa } 669cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa 670cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa /** 67114cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa * Called when {@link WifiSettings} received 67214cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa * {@link WifiManager#SUPPLICANT_STATE_CHANGED_ACTION}. 673cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa */ 674cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa /* package */ void onSupplicantStateChanged(Intent intent) { 675cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa final int errorCode = intent.getIntExtra(WifiManager.EXTRA_SUPPLICANT_ERROR, -1); 676cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (errorCode == WifiManager.ERROR_AUTHENTICATING) { 677cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa Log.i(TAG, "Received authentication error event."); 678cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa onAuthenticationFailure(); 679cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 680cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 681cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa 682cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa /** 683cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa * Called once when Authentication failed. 684cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa */ 685cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa private void onAuthenticationFailure() { 68635eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa mScreenState = SCREEN_STATE_EDITING; 68735eae7ccc759da15c6d82c388ab52e4dafab2a13Daisuke Miyakawa 688cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa mSkipOrNextButton.setVisibility(View.GONE); 689cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa mConnectButton.setVisibility(View.VISIBLE); 690cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa mConnectButton.setEnabled(true); 691cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa 6928f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa trySetBackground(R.drawable.setups_bg_default); 6938f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa 69414cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa if (!TextUtils.isEmpty(mEditingTitle)) { 69514cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mTitleView.setText(mEditingTitle); 69614cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } else { 69714cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa Log.w(TAG, "Title during editing/adding a network was empty."); 698a0587d028a79397b8c3c2ccf66ee1d5b2dacb625Daisuke Miyakawa showEditingTitle(); 69914cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 70014cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 701a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa final ViewGroup parent = (ViewGroup)findViewById(R.id.wifi_config_ui); 702a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa parent.setVisibility(View.VISIBLE); 703a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa mConnectingStatusLayout.setVisibility(View.GONE); 704a30013fad40bcbe02d87863edae488b75c73190dDaisuke Miyakawa 705cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa // Restore View status which was tweaked on connection. 706cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa final View wpsFieldView = findViewById(R.id.wps_fields); 707cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (wpsFieldView != null) { 708cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa wpsFieldView.setVisibility(mPreviousWpsFieldsVisibility); 709cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 710cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa final View securityFieldsView = findViewById(R.id.security_fields); 711cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (securityFieldsView != null) { 712cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa securityFieldsView.setVisibility(mPreviousSecurityFieldsVisibility); 713cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (mPreviousSecurityFieldsVisibility == View.VISIBLE && mWifiConfig != null) { 714cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa final View passwordView = findViewById(R.id.password); 715cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (passwordView != null) { 716cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (passwordView.isFocused()) { 71714cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa setPaddingVisibility(View.GONE); 718cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 71914cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mWifiConfig.requestFocusAndShowKeyboard(R.id.password); 720cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 721cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 722cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 723cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa final View typeView = findViewById(R.id.type); 724cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa if (typeView != null) { 725cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa typeView.setVisibility(mPreviousTypeVisibility); 72614cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa if (mPreviousTypeVisibility == View.VISIBLE && mWifiConfig != null) { 72714cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa final View ssidView = findViewById(R.id.ssid); 72814cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa if (ssidView != null) { 72914cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa if (ssidView.isFocused()) { 73014cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa setPaddingVisibility(View.GONE); 73114cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 73214cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mWifiConfig.requestFocusAndShowKeyboard(R.id.ssid); 73314cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 73414cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 735cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 736cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 737cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa 738be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa /** Note: doesn't affect bottom padding */ 73914cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa public void setPaddingVisibility(int visibility) { 74014cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa setPaddingVisibility(visibility, visibility); 74114cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 74214cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 743be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa /** Note: doesn't affect bottom padding */ 74414cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa private void setPaddingVisibility(int topPaddingVisibility, int configVisibility) { 74514cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mTopPadding.setVisibility(topPaddingVisibility); 74614cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa mWifiConfigPadding.setVisibility(configVisibility); 74714cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa } 74814cbcb7fe88dab90cb50efa3a09869bc48297170Daisuke Miyakawa 749be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa private void showDisconnectedProgressBar() { 750be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mProgressBar.setVisibility(View.GONE); 751be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mProgressBar.setIndeterminate(false); 752be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mTopDividerNoProgress.setVisibility(View.VISIBLE); 753be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mBottomPadding.setVisibility(View.VISIBLE); 754be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa } 755be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa 756be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa /** 757be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa * Shows top divider with ProgressBar, whose state is intermediate. 758be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa */ 759be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa private void showScanningProgressBar() { 760be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showTopDividerWithProgressBar(); 761be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mProgressBar.setIndeterminate(true); 762be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa } 763be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa 764be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa /** 765be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa * Shows top divider with ProgressBar, showing "connecting" state. 766be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa */ 767be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa private void showConnectingProgressBar() { 768be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showTopDividerWithProgressBar(); 769be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mProgressBar.setIndeterminate(false); 770be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mProgressBar.setProgress(1); 771be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa } 772be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa 773be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa private void showConnectedProgressBar() { 774be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa showTopDividerWithProgressBar(); 775be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mProgressBar.setIndeterminate(false); 776be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa mProgressBar.setProgress(2); 777be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa } 778be10e75c8c81a979384bc3a06b26150c22885bcaDaisuke Miyakawa 779cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa /** 780cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa * Called when WifiManager is requested to save a network. This method sholud include 781cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa * WifiManager#saveNetwork() call. 782cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa * 783cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa * Currently this method calls {@link WifiManager#connectNetwork(int)}. 784cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa */ 785cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa /* package */ void onSaveNetwork(WifiConfiguration config) { 786cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa mWifiManager.connectNetwork(config); 787cde3083fb539e87728a17a0bb491314530a29643Daisuke Miyakawa } 788267d51a68a6e2bc40b90d199425af88a7a824f53Daisuke Miyakawa 789267d51a68a6e2bc40b90d199425af88a7a824f53Daisuke Miyakawa @Override 790267d51a68a6e2bc40b90d199425af88a7a824f53Daisuke Miyakawa public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) { 791267d51a68a6e2bc40b90d199425af88a7a824f53Daisuke Miyakawa super.onCreateContextMenu(menu, view, menuInfo); 792267d51a68a6e2bc40b90d199425af88a7a824f53Daisuke Miyakawa } 7938f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa 7948f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa /** 7958f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa * Replace the current background with a new background whose id is resId if needed. 7968f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa */ 7978f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa private void trySetBackground(int resId) { 798cc0dc00916c5194cdef4151767ec58c6ccad6578Daisuke Miyakawa if (mBackgroundId != resId) { 7998f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa getWindow().setBackgroundDrawable(getResources().getDrawable(resId)); 8008f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa mBackgroundId = resId; 8018f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa } 8028f533a62324d154f5f804a511a2f3208dd73780dDaisuke Miyakawa } 803d36699282cbd0a6897f425106081d3f2c0db55d4Daisuke Miyakawa} 804