Remove obsolete WifiSettingsForSetupWizardXL

Bug: 18405549
Change-Id: I30c7c9ee8f544054b13cfc24f7433bdc1448e339
This commit is contained in:
Adrian Roos
2015-02-11 15:54:45 +01:00
parent 172e76600f
commit 8481d64e32
6 changed files with 2 additions and 1443 deletions

View File

@@ -208,13 +208,6 @@
</intent-filter>
</activity>
<activity android:name=".wifi.WifiSettingsForSetupWizardXL"
android:theme="@android:style/Theme.Material.Light.NoActionBar"
android:screenOrientation="behind"
android:clearTaskOnLaunch="true"
android:windowSoftInputMode="adjustResize"
android:exported="true" />
<activity android:name="Settings$AdvancedWifiSettingsActivity"
android:taskAffinity="com.android.settings"
android:label="@string/wifi_advanced_settings_label"

View File

@@ -1,430 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2010 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- All ids in this layout must be in wifi_dialog.xml -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- UI components that should be shown appropriately -->
<FrameLayout
android:id="@+id/eap_not_supported"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="360dip"
android:orientation="vertical"
android:visibility="gone">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lineSpacingExtra="12dip"
android:text="@string/wifi_setup_eap_not_supported"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="20sp" />
</FrameLayout>
<!-- In "add network" flow, we have security type field (@id/security below) below
this View, so need a bit different layout than the other flow, in which we'll use
@id/eap_not_supported. -->
<FrameLayout
android:id="@+id/eap_not_supported_for_add_network"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lineSpacingExtra="12dip"
android:text="@string/wifi_setup_eap_not_supported"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="20sp" />
</FrameLayout>
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dip">
<!-- To accomodate @id/type into TableLayout, we splitted the layout into two:
@id/type_ssid and @id/type_security. -->
<TableRow
android:id="@+id/type_ssid"
android:minHeight="56dip"
android:visibility="gone">
<TextView
android:id="@+id/ssid_text"
android:layout_width="wrap_content"
android:minWidth="128dip"
android:layout_height="wrap_content"
android:minHeight="56dip"
android:paddingEnd="16dip"
android:layout_alignParentStart="true"
android:text="@string/wifi_ssid"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="20sp"
android:gravity="start|center_vertical" />
<FrameLayout
android:id="@+id/ssid_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/ssid_text"
android:layout_toEndOf="@id/ssid_text">
<EditText
android:id="@+id/ssid"
android:layout_width="368dip"
android:layout_height="wrap_content"
android:singleLine="true"
android:hint="@string/wifi_ssid_hint"
android:inputType="textNoSuggestions"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="20sp" />
</FrameLayout>
</TableRow>
<TableRow
android:id="@+id/security_fields"
android:minHeight="56dip"
android:visibility="gone">
<TextView
android:id="@+id/password_text"
android:layout_width="wrap_content"
android:minWidth="128dip"
android:layout_height="wrap_content"
android:minHeight="56dip"
android:text="@string/wifi_password"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="20sp"
android:gravity="start|center_vertical" />
<LinearLayout
android:id="@+id/password_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom">
<EditText
android:id="@+id/password"
android:layout_width="368dip"
android:layout_height="wrap_content"
android:minHeight="56dip"
android:singleLine="true"
android:password="true"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="20sp" />
</LinearLayout>
<!-- It looks CheckBox isn't aligned well with TableRow -->
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<CheckBox
android:id="@+id/show_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="56dip"
android:text="@string/wifi_show_password"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="20sp" />
</FrameLayout>
</TableRow>
<TableRow
android:id="@+id/type_security"
android:minHeight="56dip"
android:visibility="gone">
<TextView
android:id="@+id/security_text"
android:layout_width="wrap_content"
android:minWidth="128dip"
android:layout_height="wrap_content"
android:minHeight="56dip"
android:text="@string/wifi_security"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="20sp"
android:gravity="bottom"/>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom">
<Spinner
android:id="@+id/security"
android:layout_width="368dip"
android:layout_height="wrap_content"
android:minHeight="56dip"
android:paddingStart="4dip"/>
</FrameLayout>
</TableRow>
</TableLayout>
<!-- All the views below are "gone".
We want them as data storage, not as UI components. -->
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone">
<LinearLayout android:id="@+id/info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"/>
<!-- android:id="@+id/security_fields" -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<LinearLayout android:id="@+id/eap"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/wifi_eap_method" />
<Spinner android:id="@+id/method"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:prompt="@string/wifi_eap_method"
android:entries="@array/wifi_eap_method" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/please_select_phase2" />
<Spinner android:id="@+id/phase2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:prompt="@string/please_select_phase2"
android:entries="@array/wifi_phase2_entries" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/wifi_eap_ca_cert" />
<Spinner android:id="@+id/ca_cert"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:prompt="@string/wifi_eap_ca_cert" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/wifi_eap_user_cert" />
<Spinner android:id="@+id/user_cert"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:prompt="@string/wifi_eap_user_cert" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/wifi_eap_identity" />
<EditText android:id="@+id/identity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:inputType="textNoSuggestions" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/wifi_eap_anonymous" />
<EditText android:id="@+id/anonymous"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:inputType="textNoSuggestions" />
</LinearLayout> <!-- android:id="@+id/eap" -->
<!-- <TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/wifi_password" />
<EditText android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:password="true" />
<CheckBox android:id="@+id/show_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/wifi_show_password" /> -->
</LinearLayout> <!-- android:id="@+id/security_fields" -->
<LinearLayout android:id="@+id/proxy_settings_fields"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<TextView android:id="@+id/proxy_settings_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/proxy_settings_title" />
<Spinner android:id="@+id/proxy_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:prompt="@string/proxy_settings_title"
android:entries="@array/wifi_proxy_settings" />
</LinearLayout>
<LinearLayout android:id="@+id/proxy_warning_limited_support"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<!-- Dummy to enable right-justification of warning -->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/proxy_warning_limited_support" />
</LinearLayout>
<LinearLayout android:id="@+id/proxy_fields"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/proxy_hostname_label" />
<EditText android:id="@+id/proxy_hostname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:inputType="textNoSuggestions" />
<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/proxy_port_label" />
<EditText android:id="@+id/proxy_port"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:inputType="textNoSuggestions" />
<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/proxy_exclusionlist_label" />
<EditText android:id="@+id/proxy_exclusionlist"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:inputType="textNoSuggestions" />
</LinearLayout>
<LinearLayout android:id="@+id/ip_fields"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/wifi_ip_settings" />
<Spinner android:id="@+id/ip_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:prompt="@string/wifi_ip_settings"
android:entries="@array/wifi_ip_settings" />
</LinearLayout>
<LinearLayout android:id="@+id/staticip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/wifi_ip_address" />
<EditText android:id="@+id/ipaddress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:inputType="textNoSuggestions" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/wifi_gateway" />
<EditText android:id="@+id/gateway"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:inputType="textNoSuggestions" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/wifi_network_prefix_length" />
<EditText android:id="@+id/network_prefix_length"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:inputType="textNoSuggestions" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/wifi_dns1" />
<EditText android:id="@+id/dns1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:inputType="textNoSuggestions" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/wifi_dns2" />
<EditText android:id="@+id/dns2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:inputType="textNoSuggestions" />
</LinearLayout>
</LinearLayout>
</LinearLayout>

View File

@@ -99,9 +99,6 @@ public class WifiConfigController implements TextWatcher,
/* Full list of phase2 methods */
private final ArrayAdapter<String> PHASE2_FULL_ADAPTER;
// True when this instance is used in SetupWizard XL context.
private final boolean mInXlSetupWizard;
private final Handler mTextViewChangedHandler;
// e.g. AccessPoint.SECURITY_NONE
@@ -148,7 +145,6 @@ public class WifiConfigController implements TextWatcher,
public WifiConfigController(
WifiConfigUiBase parent, View view, AccessPoint accessPoint, boolean edit) {
mConfigUi = parent;
mInXlSetupWizard = (parent instanceof WifiConfigUiForSetupWizardXL);
mView = view;
mAccessPoint = accessPoint;
@@ -184,18 +180,7 @@ public class WifiConfigController implements TextWatcher,
mSsidView.addTextChangedListener(this);
mSecuritySpinner = ((Spinner) mView.findViewById(R.id.security));
mSecuritySpinner.setOnItemSelectedListener(this);
if (mInXlSetupWizard) {
mView.findViewById(R.id.type_ssid).setVisibility(View.VISIBLE);
mView.findViewById(R.id.type_security).setVisibility(View.VISIBLE);
// We want custom layout. The content must be same as the other cases.
ArrayAdapter<String> adapter = new ArrayAdapter<String>(mContext,
R.layout.wifi_setup_custom_list_item_1, android.R.id.text1,
res.getStringArray(R.array.wifi_security_no_eap));
mSecuritySpinner.setAdapter(adapter);
} else {
mView.findViewById(R.id.type).setVisibility(View.VISIBLE);
}
mView.findViewById(R.id.type).setVisibility(View.VISIBLE);
showIpConfigFields();
showProxyFields();
@@ -605,13 +590,6 @@ public class WifiConfigController implements TextWatcher,
}
private void showSecurityFields() {
if (mInXlSetupWizard) {
// Note: XL SetupWizard won't hide "EAP" settings here.
if (!((WifiSettingsForSetupWizardXL)mConfigUi.getContext()).initSecurityFields(mView,
mAccessPointSecurity)) {
return;
}
}
if (mAccessPointSecurity == AccessPoint.SECURITY_NONE) {
mView.findViewById(R.id.security_fields).setVisibility(View.GONE);
return;

View File

@@ -21,8 +21,7 @@ import android.view.LayoutInflater;
import android.widget.Button;
/**
* Foundation interface glues between Activities and UIs like
* {@link WifiDialog} or {@link WifiConfigUiForSetupWizardXL}.
* Foundation interface glues between Activities and UIs like {@link WifiDialog}.
*/
public interface WifiConfigUiBase {
public Context getContext();

View File

@@ -1,211 +0,0 @@
/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.wifi;
import com.android.settings.R;
import com.android.settingslib.wifi.AccessPoint;
import android.content.Context;
import android.os.Handler;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
/**
* Shows simplified UI for configuring a wifi network. Used only in SetupWizard for XLarge
* screen.
*/
public class WifiConfigUiForSetupWizardXL implements WifiConfigUiBase, OnFocusChangeListener {
private static final String TAG = "SetupWizard";
private Button mConnectButton;
private Button mCancelButton;
private final WifiSettingsForSetupWizardXL mActivity;
private View mView;
private WifiConfigController mController;
private AccessPoint mAccessPoint;
private boolean mEdit;
private Handler mHandler = new Handler();
private final InputMethodManager mInputMethodManager;
private LayoutInflater mInflater;
/**
* @param activity Activity which creates this object.
* @param parent Parent ViewGroup (typically some layout) holding a view object created by
* this object
* @param accessPoint target AccessPoint to be configured.
* @param edit
*/
public WifiConfigUiForSetupWizardXL(
WifiSettingsForSetupWizardXL activity, ViewGroup parent,
AccessPoint accessPoint, boolean edit) {
mActivity = activity;
mConnectButton = (Button)activity.findViewById(R.id.wifi_setup_connect);
mCancelButton = (Button)activity.findViewById(R.id.wifi_setup_cancel);
mAccessPoint = accessPoint;
mEdit = edit;
mInflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mView = mInflater.inflate(R.layout.wifi_config_ui_for_setup_wizard, parent, true);
mController = new WifiConfigController(this, mView, mAccessPoint, edit);
mInputMethodManager = (InputMethodManager)
activity.getSystemService(Context.INPUT_METHOD_SERVICE);
if (mView.findViewById(R.id.security_fields).getVisibility() == View.VISIBLE) {
requestFocusAndShowKeyboard(R.id.password);
} else if (mView.findViewById(R.id.type_ssid).getVisibility() == View.VISIBLE) {
// Add Network flow.
requestFocusAndShowKeyboard(R.id.ssid);
}
}
/**
* @param editViewId must be EditView
*/
public void requestFocusAndShowKeyboard(int editViewId) {
// Set Focus to password View.
final View viewToBeFocused = mView.findViewById(editViewId);
if (viewToBeFocused == null) {
Log.w(TAG, "password field to be focused not found.");
} else if (!(viewToBeFocused instanceof EditText)) {
Log.w(TAG, "password field is not EditText");
} else {
if (viewToBeFocused.isFocused()) {
Log.i(TAG, "Already focused");
if (!mInputMethodManager.showSoftInput(viewToBeFocused, 0)) {
Log.w(TAG, "Failed to show SoftInput");
}
} else {
// After acquiring the focus, we show software keyboard.
viewToBeFocused.setOnFocusChangeListener(this);
final boolean requestFocusResult = viewToBeFocused.requestFocus();
Log.i(TAG, String.format("Focus request: %s",
(requestFocusResult ? "successful" : "failed")));
if (!requestFocusResult) {
viewToBeFocused.setOnFocusChangeListener(null);
}
}
}
}
public View getView() {
return mView;
}
public AccessPoint getAccessPoint() {
return mAccessPoint;
}
@Override
public WifiConfigController getController() {
return mController;
}
@Override
public boolean isEdit() {
return mEdit;
}
@Override
public LayoutInflater getLayoutInflater() {
return mInflater;
}
@Override
public Button getSubmitButton() {
return mConnectButton;
}
@Override
public Button getForgetButton() {
return null;
}
@Override
public Button getCancelButton() {
return mCancelButton;
}
@Override
public void setSubmitButton(CharSequence text) {
mConnectButton.setVisibility(View.VISIBLE);
mConnectButton.setText(text);
}
@Override
public void setForgetButton(CharSequence text) {
// In XL setup screen, we won't show Forget button for simplifying the UI.
}
@Override
public void setCancelButton(CharSequence text) {
mCancelButton.setVisibility(View.VISIBLE);
// We don't want "cancel" label given from caller.
// mCancelButton.setText(text);
}
@Override
public Context getContext() {
return mActivity;
}
@Override
public void setTitle(int id) {
Log.d(TAG, "Ignoring setTitle");
}
@Override
public void setTitle(CharSequence title) {
Log.d(TAG, "Ignoring setTitle");
}
private class FocusRunnable implements Runnable {
final View mViewToBeFocused;
public FocusRunnable(View viewToBeFocused) {
mViewToBeFocused = viewToBeFocused;
}
@Override
public void run() {
// mInputMethodManager.focusIn(mViewToBeFocused);
final boolean showSoftInputResult =
mInputMethodManager.showSoftInput(mViewToBeFocused, 0);
if (showSoftInputResult) {
mActivity.setPaddingVisibility(View.GONE);
} else {
Log.w(TAG, "Failed to show software keyboard ");
}
}
}
@Override
public void onFocusChange(View view, boolean hasFocus) {
view.setOnFocusChangeListener(null);
if (hasFocus) {
mHandler.post(new FocusRunnable(view));
}
}
}

View File

@@ -1,770 +0,0 @@
/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.wifi;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.net.NetworkInfo.DetailedState;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.preference.PreferenceScreen;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.android.settings.R;
import com.android.settingslib.wifi.AccessPoint;
import java.util.Collection;
import java.util.EnumMap;
import java.util.List;
/**
* WifiSetings Activity specific for SetupWizard with X-Large screen size.
*/
public class WifiSettingsForSetupWizardXL extends Activity implements OnClickListener {
private static final String TAG = "SetupWizard";
private static final boolean DEBUG = true;
// lock orientation into landscape or portrait
private static final String EXTRA_PREFS_LANDSCAPE_LOCK = "extra_prefs_landscape_lock";
private static final String EXTRA_PREFS_PORTRAIT_LOCK = "extra_prefs_portrait_lock";
private static final EnumMap<DetailedState, DetailedState> sNetworkStateMap =
new EnumMap<DetailedState, DetailedState>(DetailedState.class);
static {
sNetworkStateMap.put(DetailedState.IDLE, DetailedState.DISCONNECTED);
sNetworkStateMap.put(DetailedState.SCANNING, DetailedState.SCANNING);
sNetworkStateMap.put(DetailedState.CONNECTING, DetailedState.CONNECTING);
sNetworkStateMap.put(DetailedState.AUTHENTICATING, DetailedState.CONNECTING);
sNetworkStateMap.put(DetailedState.OBTAINING_IPADDR, DetailedState.CONNECTING);
sNetworkStateMap.put(DetailedState.CONNECTED, DetailedState.CONNECTED);
sNetworkStateMap.put(DetailedState.SUSPENDED, DetailedState.SUSPENDED); // ?
sNetworkStateMap.put(DetailedState.DISCONNECTING, DetailedState.DISCONNECTED);
sNetworkStateMap.put(DetailedState.DISCONNECTED, DetailedState.DISCONNECTED);
sNetworkStateMap.put(DetailedState.FAILED, DetailedState.FAILED);
}
private WifiSettings mWifiSettings;
private WifiManager mWifiManager;
/** Used for resizing a padding above title. Hiden when software keyboard is shown. */
private View mTopPadding;
/** Used for resizing a padding of main content. Hiden when software keyboard is shown. */
private View mContentPadding;
private TextView mTitleView;
/**
* The name of a network currently connecting, or trying to connect.
* This may be empty ("") at first, and updated when configuration is changed.
*/
private CharSequence mNetworkName = "";
private CharSequence mEditingTitle;
private ProgressBar mProgressBar;
private View mTopDividerNoProgress;
/**
* Used for resizing a padding between WifiSettings preference and bottom bar when
* ProgressBar is visible as a top divider.
*/
private View mBottomPadding;
private Button mAddNetworkButton;
private Button mRefreshButton;
private Button mSkipOrNextButton;
private Button mBackButton;
private Button mConnectButton;
/**
* View enclosing {@link WifiSettings}.
*/
private View mWifiSettingsFragmentLayout;
private View mConnectingStatusLayout;
private TextView mConnectingStatusView;
/*
* States of current screen, which should be saved and restored when Activity is relaunched
* with orientation change, etc.
*/
private static final int SCREEN_STATE_DISCONNECTED = 0;
private static final int SCREEN_STATE_EDITING = 1;
private static final int SCREEN_STATE_CONNECTING = 2;
private static final int SCREEN_STATE_CONNECTED = 3;
/** Current screen state. */
private int mScreenState = SCREEN_STATE_DISCONNECTED;
private WifiConfigUiForSetupWizardXL mWifiConfig;
private InputMethodManager mInputMethodManager;
/**
* Previous network connection state reported by main Wifi module.
*
* Note that we don't use original {@link DetailedState} object but simplified one translated
* using sNetworkStateMap.
*/
private DetailedState mPreviousNetworkState = DetailedState.DISCONNECTED;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.wifi_settings_for_setup_wizard_xl);
mWifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
// There's no button here enabling wifi network, so we need to enable it without
// users' request.
mWifiManager.setWifiEnabled(true);
mWifiSettings =
(WifiSettings)getFragmentManager().findFragmentById(R.id.wifi_setup_fragment);
mInputMethodManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
initViews();
// At first, Wifi module doesn't return SCANNING state (it's too early), so we manually
// show it.
showScanningState();
}
private void initViews() {
Intent intent = getIntent();
if (intent.getBooleanExtra("firstRun", false)) {
final View layoutRoot = findViewById(R.id.layout_root);
layoutRoot.setSystemUiVisibility(View.STATUS_BAR_DISABLE_BACK);
}
if (intent.getBooleanExtra(EXTRA_PREFS_LANDSCAPE_LOCK, false)) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
}
if (intent.getBooleanExtra(EXTRA_PREFS_PORTRAIT_LOCK, false)) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
}
mTitleView = (TextView)findViewById(R.id.wifi_setup_title);
mProgressBar = (ProgressBar)findViewById(R.id.scanning_progress_bar);
mProgressBar.setMax(2);
mTopDividerNoProgress = findViewById(R.id.top_divider_no_progress);
mBottomPadding = findViewById(R.id.bottom_padding);
mProgressBar.setVisibility(View.VISIBLE);
mProgressBar.setIndeterminate(true);
mTopDividerNoProgress.setVisibility(View.GONE);
mAddNetworkButton = (Button)findViewById(R.id.wifi_setup_add_network);
mAddNetworkButton.setOnClickListener(this);
mRefreshButton = (Button)findViewById(R.id.wifi_setup_refresh_list);
mRefreshButton.setOnClickListener(this);
mSkipOrNextButton = (Button)findViewById(R.id.wifi_setup_skip_or_next);
mSkipOrNextButton.setOnClickListener(this);
mConnectButton = (Button)findViewById(R.id.wifi_setup_connect);
mConnectButton.setOnClickListener(this);
mBackButton = (Button)findViewById(R.id.wifi_setup_cancel);
mBackButton.setOnClickListener(this);
mTopPadding = findViewById(R.id.top_padding);
mContentPadding = findViewById(R.id.content_padding);
mWifiSettingsFragmentLayout = findViewById(R.id.wifi_settings_fragment_layout);
mConnectingStatusLayout = findViewById(R.id.connecting_status_layout);
mConnectingStatusView = (TextView) findViewById(R.id.connecting_status);
}
private void restoreFirstVisibilityState() {
showDefaultTitle();
mAddNetworkButton.setVisibility(View.VISIBLE);
mRefreshButton.setVisibility(View.VISIBLE);
mSkipOrNextButton.setVisibility(View.VISIBLE);
mConnectButton.setVisibility(View.GONE);
mBackButton.setVisibility(View.GONE);
setPaddingVisibility(View.VISIBLE);
}
@Override
public void onClick(View view) {
hideSoftwareKeyboard();
if (view == mAddNetworkButton) {
if (DEBUG) Log.d(TAG, "AddNetwork button pressed");
onAddNetworkButtonPressed();
} else if (view == mRefreshButton) {
if (DEBUG) Log.d(TAG, "Refresh button pressed");
refreshAccessPoints(true);
} else if (view == mSkipOrNextButton) {
if (DEBUG) Log.d(TAG, "Skip/Next button pressed");
if (TextUtils.equals(getString(R.string.wifi_setup_skip), ((Button)view).getText())) {
// We don't want to let Wifi enabled when a user press skip without choosing
// any access point.
mWifiManager.setWifiEnabled(false);
// Notify "skip"
setResult(RESULT_FIRST_USER);
} else {
setResult(RESULT_OK);
}
finish();
} else if (view == mConnectButton) {
if (DEBUG) Log.d(TAG, "Connect button pressed");
onConnectButtonPressed();
} else if (view == mBackButton) {
if (DEBUG) Log.d(TAG, "Back button pressed");
onBackButtonPressed();
}
}
private void hideSoftwareKeyboard() {
if (DEBUG) Log.i(TAG, "Hiding software keyboard.");
final View focusedView = getCurrentFocus();
if (focusedView != null) {
mInputMethodManager.hideSoftInputFromWindow(focusedView.getWindowToken(), 0);
}
}
// Called from WifiSettings
/* package */ void updateConnectionState(DetailedState originalState) {
final DetailedState state = sNetworkStateMap.get(originalState);
if (originalState == DetailedState.FAILED) {
// We clean up the current connectivity status and let users select another network
// if they want.
refreshAccessPoints(true);
}
switch (state) {
case SCANNING: {
if (mScreenState == SCREEN_STATE_DISCONNECTED) {
if (mWifiSettings.getAccessPointsCount() == 0) {
showScanningState();
} else {
showDisconnectedProgressBar();
mWifiSettingsFragmentLayout.setVisibility(View.VISIBLE);
mBottomPadding.setVisibility(View.GONE);
}
} else {
showDisconnectedProgressBar();
}
break;
}
case CONNECTING: {
if (mScreenState == SCREEN_STATE_CONNECTING) {
showConnectingState();
}
break;
}
case CONNECTED: {
showConnectedState();
break;
}
default: // DISCONNECTED, FAILED
if (mScreenState != SCREEN_STATE_CONNECTED &&
mWifiSettings.getAccessPointsCount() > 0) {
showDisconnectedState(AccessPoint.getSummary(this, state, false /* isEphemeral */));
}
break;
}
mPreviousNetworkState = state;
}
private void showDisconnectedState(String stateString) {
showDisconnectedProgressBar();
if (mScreenState == SCREEN_STATE_DISCONNECTED &&
mWifiSettings.getAccessPointsCount() > 0) {
mWifiSettingsFragmentLayout.setVisibility(View.VISIBLE);
mBottomPadding.setVisibility(View.GONE);
}
mAddNetworkButton.setEnabled(true);
mRefreshButton.setEnabled(true);
}
private void showConnectingState() {
mScreenState = SCREEN_STATE_CONNECTING;
mBackButton.setVisibility(View.VISIBLE);
// We save this title and show it when authentication failed.
mEditingTitle = mTitleView.getText();
showConnectingTitle();
showConnectingProgressBar();
setPaddingVisibility(View.VISIBLE);
}
private void showConnectedState() {
// Once we show "connected" screen, we won't change it even when the device becomes
// disconnected afterwards. We keep the state unless a user explicitly cancel it
// (by pressing "back" button).
mScreenState = SCREEN_STATE_CONNECTED;
hideSoftwareKeyboard();
setPaddingVisibility(View.VISIBLE);
showConnectedTitle();
showConnectedProgressBar();
mWifiSettingsFragmentLayout.setVisibility(View.GONE);
mConnectingStatusLayout.setVisibility(View.VISIBLE);
mConnectingStatusView.setText(R.string.wifi_setup_description_connected);
mConnectButton.setVisibility(View.GONE);
mAddNetworkButton.setVisibility(View.GONE);
mRefreshButton.setVisibility(View.GONE);
mBackButton.setVisibility(View.VISIBLE);
mBackButton.setText(R.string.wifi_setup_back);
mSkipOrNextButton.setVisibility(View.VISIBLE);
mSkipOrNextButton.setEnabled(true);
}
private void showDefaultTitle() {
mTitleView.setText(getString(R.string.wifi_setup_title));
}
private void showAddNetworkTitle() {
mNetworkName = "";
mTitleView.setText(R.string.wifi_setup_title_add_network);
}
private void showEditingTitle() {
if (TextUtils.isEmpty(mNetworkName) && mWifiConfig != null) {
if (mWifiConfig.getController() != null &&
mWifiConfig.getController().getConfig() != null) {
mNetworkName = mWifiConfig.getController().getConfig().SSID;
} else {
Log.w(TAG, "Unexpected null found (WifiController or WifiConfig is null). " +
"Ignore them.");
}
}
mTitleView.setText(getString(R.string.wifi_setup_title_editing_network, mNetworkName));
}
private void showConnectingTitle() {
if (TextUtils.isEmpty(mNetworkName) && mWifiConfig != null) {
if (mWifiConfig.getController() != null &&
mWifiConfig.getController().getConfig() != null) {
mNetworkName = mWifiConfig.getController().getConfig().SSID;
} else {
Log.w(TAG, "Unexpected null found (WifiController or WifiConfig is null). " +
"Ignore them.");
}
}
mTitleView.setText(getString(R.string.wifi_setup_title_connecting_network, mNetworkName));
}
private void showConnectedTitle() {
if (TextUtils.isEmpty(mNetworkName) && mWifiConfig != null) {
if (mWifiConfig.getController() != null &&
mWifiConfig.getController().getConfig() != null) {
mNetworkName = mWifiConfig.getController().getConfig().SSID;
} else {
Log.w(TAG, "Unexpected null found (WifiController or WifiConfig is null). " +
"Ignore them.");
}
}
mTitleView.setText(getString(R.string.wifi_setup_title_connected_network, mNetworkName));
}
/**
* Shows top divider with ProgressBar without defining the state of the ProgressBar.
*
* @see #showScanningProgressBar()
* @see #showConnectedProgressBar()
* @see #showConnectingProgressBar()
*/
private void showTopDividerWithProgressBar() {
mProgressBar.setVisibility(View.VISIBLE);
mTopDividerNoProgress.setVisibility(View.GONE);
mBottomPadding.setVisibility(View.GONE);
}
private void showScanningState() {
setPaddingVisibility(View.VISIBLE);
mWifiSettingsFragmentLayout.setVisibility(View.GONE);
showScanningProgressBar();
}
private void onAddNetworkButtonPressed() {
mWifiSettings.onAddNetworkPressed();
}
/**
* Called when the screen enters wifi configuration UI. UI widget for configuring network
* (a.k.a. ConfigPreference) should be taken care of by caller side.
* This method should handle buttons' visibility/enabled.
* @param selectedAccessPoint AccessPoint object being selected. null when a user pressed
* "Add network" button, meaning there's no selected access point.
*/
/* package */ void showConfigUi(AccessPoint selectedAccessPoint, boolean edit) {
mScreenState = SCREEN_STATE_EDITING;
if (selectedAccessPoint != null &&
(selectedAccessPoint.getSecurity() == AccessPoint.SECURITY_WEP ||
selectedAccessPoint.getSecurity() == AccessPoint.SECURITY_PSK)) {
// We forcibly set edit as true so that users can modify every field if they want,
// while config UI doesn't allow them to edit some of them when edit is false
// (e.g. password field is hiden when edit==false).
edit = true;
}
// We don't want to keep scanning Wifi networks during users' configuring a network.
mWifiSettings.pauseWifiScan();
mWifiSettingsFragmentLayout.setVisibility(View.GONE);
mConnectingStatusLayout.setVisibility(View.GONE);
final ViewGroup parent = (ViewGroup)findViewById(R.id.wifi_config_ui);
parent.setVisibility(View.VISIBLE);
parent.removeAllViews();
mWifiConfig = new WifiConfigUiForSetupWizardXL(this, parent, selectedAccessPoint, edit);
if (selectedAccessPoint == null) { // "Add network" flow
showAddNetworkTitle();
mConnectButton.setVisibility(View.VISIBLE);
showDisconnectedProgressBar();
showEditingButtonState();
} else if (selectedAccessPoint.getSecurity() == AccessPoint.SECURITY_NONE) {
mNetworkName = selectedAccessPoint.getSsid().toString();
// onConnectButtonPressed() will change visibility status.
mConnectButton.performClick();
} else {
mNetworkName = selectedAccessPoint.getSsid().toString();
showEditingTitle();
showDisconnectedProgressBar();
showEditingButtonState();
if (selectedAccessPoint.getSecurity() == AccessPoint.SECURITY_EAP) {
onEapNetworkSelected();
} else {
mConnectButton.setVisibility(View.VISIBLE);
// WifiConfigController shows Connect button as "Save" when edit==true and a user
// tried to connect the network.
// In SetupWizard, we just show the button as "Connect" instead.
mConnectButton.setText(R.string.wifi_connect);
mBackButton.setText(R.string.wifi_setup_cancel);
}
}
}
/**
* Called before security fields are correctly set by {@link WifiConfigController}.
*
* @param view security field view
* @param accessPointSecurity type of security. e.g. AccessPoint.SECURITY_NONE
* @return true when it is ok for the caller to init security fields. false when
* all security fields are managed by this method, and thus the caller shouldn't touch them.
*/
/* package */ boolean initSecurityFields(View view, int accessPointSecurity) {
// Reset all states tweaked below.
view.findViewById(R.id.eap_not_supported).setVisibility(View.GONE);
view.findViewById(R.id.eap_not_supported_for_add_network).setVisibility(View.GONE);
view.findViewById(R.id.ssid_text).setVisibility(View.VISIBLE);
view.findViewById(R.id.ssid_layout).setVisibility(View.VISIBLE);
if (accessPointSecurity == AccessPoint.SECURITY_EAP) {
setPaddingVisibility(View.VISIBLE);
hideSoftwareKeyboard();
// In SetupWizard for XLarge screen, we don't have enough space for showing
// configurations needed for EAP. We instead disable the whole feature there and let
// users configure those networks after the setup.
if (view.findViewById(R.id.type_ssid).getVisibility() == View.VISIBLE) {
view.findViewById(R.id.eap_not_supported_for_add_network)
.setVisibility(View.VISIBLE);
} else {
view.findViewById(R.id.eap_not_supported).setVisibility(View.VISIBLE);
}
view.findViewById(R.id.security_fields).setVisibility(View.GONE);
view.findViewById(R.id.ssid_text).setVisibility(View.GONE);
view.findViewById(R.id.ssid_layout).setVisibility(View.GONE);
onEapNetworkSelected();
// This method did init security fields by itself. The caller must not do it.
return false;
}
mConnectButton.setVisibility(View.VISIBLE);
setPaddingVisibility(View.GONE);
// In "add network" flow, we'll see multiple initSecurityFields() calls with different
// accessPointSecurity variable. We want to show software keyboard conditionally everytime
// when this method is called.
if (mWifiConfig != null) {
if (accessPointSecurity == AccessPoint.SECURITY_PSK ||
accessPointSecurity == AccessPoint.SECURITY_WEP) {
mWifiConfig.requestFocusAndShowKeyboard(R.id.password);
} else {
mWifiConfig.requestFocusAndShowKeyboard(R.id.ssid);
}
}
// Let the caller init security fields.
return true;
}
private void onEapNetworkSelected() {
mConnectButton.setVisibility(View.GONE);
mBackButton.setText(R.string.wifi_setup_back);
}
private void showEditingButtonState() {
mSkipOrNextButton.setVisibility(View.GONE);
mAddNetworkButton.setVisibility(View.GONE);
mRefreshButton.setVisibility(View.GONE);
mBackButton.setVisibility(View.VISIBLE);
}
// May be called when user press "connect" button in WifiDialog
/* package */ void onConnectButtonPressed() {
mScreenState = SCREEN_STATE_CONNECTING;
mWifiSettings.submit(mWifiConfig.getController());
// updateConnectionState() isn't called soon by the main Wifi module after the user's
// "connect" request, and the user still sees "not connected" message for a while, which
// looks strange for users though legitimate from the view of the module.
//
// We instead manually show "connecting" message before the system gets actual
// "connecting" message from Wifi module.
showConnectingState();
// Might be better to delay showing this button.
mBackButton.setVisibility(View.VISIBLE);
mBackButton.setText(R.string.wifi_setup_back);
final ViewGroup parent = (ViewGroup)findViewById(R.id.wifi_config_ui);
parent.setVisibility(View.GONE);
mConnectingStatusLayout.setVisibility(View.VISIBLE);
mConnectingStatusView.setText(R.string.wifi_setup_description_connecting);
mSkipOrNextButton.setVisibility(View.VISIBLE);
mSkipOrNextButton.setEnabled(false);
mConnectButton.setVisibility(View.GONE);
mAddNetworkButton.setVisibility(View.GONE);
mRefreshButton.setVisibility(View.GONE);
}
private void onBackButtonPressed() {
if (mScreenState == SCREEN_STATE_CONNECTING || mScreenState == SCREEN_STATE_CONNECTED) {
if (DEBUG) Log.d(TAG, "Back button pressed after connect action.");
mScreenState = SCREEN_STATE_DISCONNECTED;
// When a user press "Back" button after pressing "Connect" button, we want to cancel
// the "Connect" request and refresh the whole Wifi status.
restoreFirstVisibilityState();
mSkipOrNextButton.setEnabled(true);
changeNextButtonState(false); // Skip
// Wifi list becomes empty for a moment. We show "scanning" effect to a user so that
// he/she won't be astonished there. This stops once the scan finishes.
showScanningState();
// Remembered networks may be re-used during SetupWizard, which confuse users.
// We force the module to forget them to reduce UX complexity
final List<WifiConfiguration> configs = mWifiManager.getConfiguredNetworks();
for (WifiConfiguration config : configs) {
if (DEBUG) {
Log.d(TAG, String.format("forgeting Wi-Fi network \"%s\" (id: %d)",
config.SSID, config.networkId));
}
mWifiManager.forget(config.networkId, new WifiManager.ActionListener() {
public void onSuccess() {
}
public void onFailure(int reason) {
//TODO: Add failure UI
}
});
}
mWifiSettingsFragmentLayout.setVisibility(View.GONE);
refreshAccessPoints(true);
} else { // During user's Wifi configuration.
mScreenState = SCREEN_STATE_DISCONNECTED;
mWifiSettings.resumeWifiScan();
restoreFirstVisibilityState();
mAddNetworkButton.setEnabled(true);
mRefreshButton.setEnabled(true);
mSkipOrNextButton.setEnabled(true);
showDisconnectedProgressBar();
mWifiSettingsFragmentLayout.setVisibility(View.VISIBLE);
mBottomPadding.setVisibility(View.GONE);
}
setPaddingVisibility(View.VISIBLE);
mConnectingStatusLayout.setVisibility(View.GONE);
final ViewGroup parent = (ViewGroup)findViewById(R.id.wifi_config_ui);
parent.removeAllViews();
parent.setVisibility(View.GONE);
mWifiConfig = null;
}
/**
* @param connected true when the device is connected to a specific network.
*/
/* package */ void changeNextButtonState(boolean connected) {
if (connected) {
mSkipOrNextButton.setText(R.string.wifi_setup_next);
} else {
mSkipOrNextButton.setText(R.string.wifi_setup_skip);
}
}
/**
* Called when the list of AccessPoints are modified and this Activity needs to refresh
* the list.
* @param preferenceScreen
*/
/* package */ void onAccessPointsUpdated(
PreferenceScreen preferenceScreen, Collection<AccessPoint> accessPoints) {
// If we already show some of access points but the bar still shows "scanning" state, it
// should be stopped.
if (mProgressBar.isIndeterminate() && accessPoints.size() > 0) {
showDisconnectedProgressBar();
if (mScreenState == SCREEN_STATE_DISCONNECTED) {
mWifiSettingsFragmentLayout.setVisibility(View.VISIBLE);
mBottomPadding.setVisibility(View.GONE);
}
mAddNetworkButton.setEnabled(true);
mRefreshButton.setEnabled(true);
}
for (AccessPoint accessPoint : accessPoints) {
AccessPointPreference preference = (AccessPointPreference) accessPoint.getTag();
if (preference == null) continue;
preference.setLayoutResource(R.layout.custom_preference);
preferenceScreen.addPreference(preference);
}
}
private void refreshAccessPoints(boolean disconnectNetwork) {
showScanningState();
if (disconnectNetwork) {
mWifiManager.disconnect();
}
mWifiSettings.refreshAccessPoints();
}
/**
* Called when {@link WifiSettings} received
* {@link WifiManager#SUPPLICANT_STATE_CHANGED_ACTION}.
*/
/* package */ void onSupplicantStateChanged(Intent intent) {
final int errorCode = intent.getIntExtra(WifiManager.EXTRA_SUPPLICANT_ERROR, -1);
if (errorCode == WifiManager.ERROR_AUTHENTICATING) {
Log.i(TAG, "Received authentication error event.");
onAuthenticationFailure();
}
}
/**
* Called once when Authentication failed.
*/
private void onAuthenticationFailure() {
mScreenState = SCREEN_STATE_EDITING;
mSkipOrNextButton.setVisibility(View.GONE);
mConnectButton.setVisibility(View.VISIBLE);
mConnectButton.setEnabled(true);
if (!TextUtils.isEmpty(mEditingTitle)) {
mTitleView.setText(mEditingTitle);
} else {
Log.w(TAG, "Title during editing/adding a network was empty.");
showEditingTitle();
}
final ViewGroup parent = (ViewGroup)findViewById(R.id.wifi_config_ui);
parent.setVisibility(View.VISIBLE);
mConnectingStatusLayout.setVisibility(View.GONE);
showDisconnectedProgressBar();
setPaddingVisibility(View.GONE);
}
// Used by WifiConfigUiForSetupWizardXL
/* package */ void setPaddingVisibility(int visibility) {
mTopPadding.setVisibility(visibility);
mContentPadding.setVisibility(visibility);
}
private void showDisconnectedProgressBar() {
// The device may report DISCONNECTED during connecting to a network, at which we don't
// want to lose bottom padding of top divider implicitly added by ProgressBar.
if (mScreenState == SCREEN_STATE_DISCONNECTED) {
mProgressBar.setVisibility(View.GONE);
mProgressBar.setIndeterminate(false);
mTopDividerNoProgress.setVisibility(View.VISIBLE);
} else {
mProgressBar.setVisibility(View.VISIBLE);
mProgressBar.setIndeterminate(false);
mProgressBar.setProgress(0);
mTopDividerNoProgress.setVisibility(View.GONE);
}
}
/**
* Shows top divider with ProgressBar, whose state is intermediate.
*/
private void showScanningProgressBar() {
showTopDividerWithProgressBar();
mProgressBar.setIndeterminate(true);
}
/**
* Shows top divider with ProgressBar, showing "connecting" state.
*/
private void showConnectingProgressBar() {
showTopDividerWithProgressBar();
mProgressBar.setIndeterminate(false);
mProgressBar.setProgress(1);
}
private void showConnectedProgressBar() {
showTopDividerWithProgressBar();
mProgressBar.setIndeterminate(false);
mProgressBar.setProgress(2);
}
/**
* Called when WifiManager is requested to save a network.
*/
/* package */ void onSaveNetwork(WifiConfiguration config) {
// We want to both save and connect a network. connectNetwork() does both.
mWifiManager.connect(config, new WifiManager.ActionListener() {
public void onSuccess() {
}
public void onFailure(int reason) {
//TODO: Add failure UI
}
});
}
}