OSDN Git Service

[WifiSetup] Make illustration header not clickable
[android-x86/packages-apps-Settings.git] / src / com / android / settings / wifi / WifiSettingsForSetupWizard.java
1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
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
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 package com.android.settings.wifi;
18
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;
41
42 import com.android.settings.R;
43
44 /**
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.
49  */
50 public class WifiSettingsForSetupWizard extends WifiSettings {
51
52     private static final String TAG = "WifiSettingsForSetupWizard";
53
54     /* Used in Wifi Setup context */
55
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";
58
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";
61
62     // should activity finish once we have a connection?
63     private boolean mAutoFinishOnConnection;
64
65     private final IntentFilter mFilter;
66     private final BroadcastReceiver mReceiver;
67
68     public WifiSettingsForSetupWizard() {
69         super();
70
71         mFilter = new IntentFilter();
72         mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
73
74         mReceiver = new BroadcastReceiver() {
75             @Override
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);
83                 }
84             }
85         };
86     }
87
88     @Override
89     public View onCreateView(final LayoutInflater inflater, ViewGroup container,
90             Bundle savedInstanceState) {
91
92         final View view = inflater.inflate(R.layout.setup_preference, container, false);
93
94         final ListView list = (ListView) view.findViewById(android.R.id.list);
95         final View title = view.findViewById(R.id.title);
96         if (title == null) {
97             final View header = inflater.inflate(R.layout.setup_wizard_header, list, false);
98             list.addHeaderView(header, null, false);
99         }
100
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() {
104             @Override
105             public void onClick(View v) {
106                 if (mWifiManager.isWifiEnabled()) {
107                     onAddNetworkPressed();
108                 }
109             }
110         });
111
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);
115         }
116
117         return view;
118     }
119
120     @Override
121     public void onActivityCreated(Bundle savedInstanceState) {
122         super.onActivityCreated(savedInstanceState);
123
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);
129
130         final WifiSetupActivity activity = (WifiSetupActivity) getActivity();
131         final Intent intent = activity.getIntent();
132
133         // first if we're supposed to finish once we have a connection
134         mAutoFinishOnConnection = intent.getBooleanExtra(EXTRA_AUTO_FINISH_ON_CONNECT, false);
135
136         if (mAutoFinishOnConnection) {
137             // Hide the next button
138             if (hasNextButton()) {
139                 getNextButton().setVisibility(View.GONE);
140             }
141
142             /*
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.
146              */
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);
154                     return;
155                 }
156             }
157         }
158     }
159
160     @Override
161     public void onResume() {
162         super.onResume();
163         getActivity().registerReceiver(mReceiver, mFilter);
164     }
165
166     @Override
167     public void onPause() {
168         super.onPause();
169         getActivity().unregisterReceiver(mReceiver);
170     }
171
172     @Override
173     public void registerForContextMenu(View view) {
174         // Suppressed during setup wizard
175     }
176
177     @Override
178     /* package */ WifiEnabler createWifiEnabler() {
179         // Not shown during setup wizard
180         return null;
181     }
182
183     @Override
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);
195         ta.recycle();
196     }
197 }