2 * Copyright (C) 2014 The Android Open Source Project
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package com.android.settings.wifi;
19 import android.app.Activity;
20 import android.content.BroadcastReceiver;
21 import android.content.Context;
22 import android.content.Intent;
23 import android.content.IntentFilter;
24 import android.content.res.TypedArray;
25 import android.net.ConnectivityManager;
26 import android.net.NetworkInfo;
27 import android.net.wifi.WifiManager;
28 import android.os.Bundle;
29 import android.util.Log;
30 import android.view.LayoutInflater;
31 import android.view.Menu;
32 import android.view.MenuItem;
33 import android.view.View;
34 import android.view.View.OnClickListener;
35 import android.view.ViewGroup;
36 import android.widget.ImageButton;
37 import android.widget.ListView;
38 import android.widget.PopupMenu;
39 import android.widget.PopupMenu.OnMenuItemClickListener;
40 import android.widget.TextView;
42 import com.android.settings.R;
45 * This customized version of WifiSettings is shown to the user only during Setup Wizard. Menu
46 * selections are limited, clicking on an access point will auto-advance to the next screen (once
47 * connected), and, if the user opts to skip ahead without a wifi connection, a warning message
48 * alerts of possible carrier data charges or missing software updates.
50 public class WifiSettingsForSetupWizard extends WifiSettings {
52 private static final String TAG = "WifiSettingsForSetupWizard";
54 /* Used in Wifi Setup context */
56 // this boolean extra specifies whether to auto finish when connection is established
57 private static final String EXTRA_AUTO_FINISH_ON_CONNECT = "wifi_auto_finish_on_connect";
59 // show a text regarding data charges when wifi connection is required during setup wizard
60 protected static final String EXTRA_SHOW_WIFI_REQUIRED_INFO = "wifi_show_wifi_required_info";
62 // should activity finish once we have a connection?
63 private boolean mAutoFinishOnConnection;
65 private final IntentFilter mFilter;
66 private final BroadcastReceiver mReceiver;
68 public WifiSettingsForSetupWizard() {
71 mFilter = new IntentFilter();
72 mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
74 mReceiver = new BroadcastReceiver() {
76 public void onReceive(Context context, Intent intent) {
77 NetworkInfo info = (NetworkInfo) intent.getParcelableExtra(
78 WifiManager.EXTRA_NETWORK_INFO);
79 if (mAutoFinishOnConnection && info.isConnected()) {
80 Log.d(TAG, "mReceiver.onReceive context=" + context + " intent=" + intent);
81 WifiSetupActivity activity = (WifiSetupActivity) getActivity();
82 activity.finishOrNext(Activity.RESULT_OK);
89 public View onCreateView(final LayoutInflater inflater, ViewGroup container,
90 Bundle savedInstanceState) {
92 final View view = inflater.inflate(R.layout.setup_preference, container, false);
94 final ListView list = (ListView) view.findViewById(android.R.id.list);
95 final View title = view.findViewById(R.id.title);
97 final View header = inflater.inflate(R.layout.setup_wizard_header, list, false);
98 list.addHeaderView(header, null, false);
101 final View other = inflater.inflate(R.layout.setup_wifi_add_network, list, false);
102 list.addFooterView(other, null, true);
103 other.setOnClickListener(new OnClickListener() {
105 public void onClick(View v) {
106 if (mWifiManager.isWifiEnabled()) {
107 onAddNetworkPressed();
112 final Intent intent = getActivity().getIntent();
113 if (intent.getBooleanExtra(EXTRA_SHOW_WIFI_REQUIRED_INFO, false)) {
114 view.findViewById(R.id.wifi_required_info).setVisibility(View.VISIBLE);
121 public void onActivityCreated(Bundle savedInstanceState) {
122 super.onActivityCreated(savedInstanceState);
124 getView().setSystemUiVisibility(
125 View.STATUS_BAR_DISABLE_HOME |
126 View.STATUS_BAR_DISABLE_RECENT |
127 View.STATUS_BAR_DISABLE_NOTIFICATION_ALERTS |
128 View.STATUS_BAR_DISABLE_CLOCK);
130 final WifiSetupActivity activity = (WifiSetupActivity) getActivity();
131 final Intent intent = activity.getIntent();
133 // first if we're supposed to finish once we have a connection
134 mAutoFinishOnConnection = intent.getBooleanExtra(EXTRA_AUTO_FINISH_ON_CONNECT, false);
136 if (mAutoFinishOnConnection) {
137 // Hide the next button
138 if (hasNextButton()) {
139 getNextButton().setVisibility(View.GONE);
143 * When entering with a savedInstanceState, we may be returning from a later activity in
144 * the setup flow. It's not clear yet if there are other possible circumstances. It's
145 * not appropriate to refire our activity results, so we skip that here.
147 if (savedInstanceState == null) {
148 final ConnectivityManager connectivity = (ConnectivityManager)
149 activity.getSystemService(Context.CONNECTIVITY_SERVICE);
150 if (connectivity != null &&
151 connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) {
152 Log.d(TAG, "onActivityCreated Auto-finishing");
153 activity.finishOrNext(Activity.RESULT_OK);
161 public void onResume() {
163 getActivity().registerReceiver(mReceiver, mFilter);
167 public void onPause() {
169 getActivity().unregisterReceiver(mReceiver);
173 public void registerForContextMenu(View view) {
174 // Suppressed during setup wizard
178 /* package */ WifiEnabler createWifiEnabler() {
179 // Not shown during setup wizard
184 /* package */ void addOptionsMenuItems(Menu menu) {
185 final boolean wifiIsEnabled = mWifiManager.isWifiEnabled();
186 final TypedArray ta = getActivity().getTheme()
187 .obtainStyledAttributes(new int[] {R.attr.ic_wps});
188 menu.add(Menu.NONE, MENU_ID_WPS_PBC, 0, R.string.wifi_menu_wps_pbc)
189 .setIcon(ta.getDrawable(0))
190 .setEnabled(wifiIsEnabled)
191 .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
192 menu.add(Menu.NONE, MENU_ID_ADD_NETWORK, 0, R.string.wifi_add_network)
193 .setEnabled(wifiIsEnabled)
194 .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);