WifiSettingsForSetupWizard.java revision 588e61aa055eff73c968e2b8f45b6848bd8f7766
1d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner/*
2d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * Copyright (C) 2014 The Android Open Source Project
3d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner *
4d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * Licensed under the Apache License, Version 2.0 (the "License");
5d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * you may not use this file except in compliance with the License.
6d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * You may obtain a copy of the License at
7d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner *
8d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner *      http://www.apache.org/licenses/LICENSE-2.0
9d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner *
10d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * Unless required by applicable law or agreed to in writing, software
11d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * distributed under the License is distributed on an "AS IS" BASIS,
12d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * See the License for the specific language governing permissions and
14d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * limitations under the License.
15d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner */
16d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
17d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerpackage com.android.settings.wifi;
18d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
19d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.app.Activity;
20d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.content.BroadcastReceiver;
21d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.content.Context;
22d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.content.Intent;
23d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.content.IntentFilter;
24d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.content.res.TypedArray;
25d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.net.ConnectivityManager;
26d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.net.NetworkInfo;
27d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.net.wifi.WifiManager;
28d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.os.Bundle;
29d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.util.Log;
30d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.view.LayoutInflater;
31d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.view.Menu;
32d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.view.MenuItem;
33d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.view.View;
34d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.view.View.OnClickListener;
35d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.view.ViewGroup;
36d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.widget.ImageButton;
37588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lamimport android.widget.ListView;
38d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.widget.PopupMenu;
39d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.widget.PopupMenu.OnMenuItemClickListener;
40588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lamimport android.widget.TextView;
41d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
42d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport com.android.settings.R;
43d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
44d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner/**
45d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * This customized version of WifiSettings is shown to the user only during Setup Wizard. Menu
46d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * selections are limited, clicking on an access point will auto-advance to the next screen (once
47d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * connected), and, if the user opts to skip ahead without a wifi connection, a warning message
48d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * alerts of possible carrier data charges or missing software updates.
49d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner */
50d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerpublic class WifiSettingsForSetupWizard extends WifiSettings {
51d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
52d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    private static final String TAG = "WifiSettingsForSetupWizard";
53d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
54d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    /* Used in Wifi Setup context */
55d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
56d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    // this boolean extra specifies whether to auto finish when connection is established
57d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    private static final String EXTRA_AUTO_FINISH_ON_CONNECT = "wifi_auto_finish_on_connect";
58d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
59d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    // show a text regarding data charges when wifi connection is required during setup wizard
60d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    protected static final String EXTRA_SHOW_WIFI_REQUIRED_INFO = "wifi_show_wifi_required_info";
61d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
62d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    // should activity finish once we have a connection?
63d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    private boolean mAutoFinishOnConnection;
64d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
65d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    private final IntentFilter mFilter;
66d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    private final BroadcastReceiver mReceiver;
67d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
68d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    public WifiSettingsForSetupWizard() {
69d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        super();
70d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
71d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        mFilter = new IntentFilter();
72d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
73d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
74d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        mReceiver = new BroadcastReceiver() {
75d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner            @Override
76d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner            public void onReceive(Context context, Intent intent) {
77d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner                NetworkInfo info = (NetworkInfo) intent.getParcelableExtra(
78d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner                        WifiManager.EXTRA_NETWORK_INFO);
79d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner                if (mAutoFinishOnConnection && info.isConnected()) {
80c56c8c99e9e078dccf43c2251c3a94cf477f2812Russell Brenner                    Log.d(TAG, "mReceiver.onReceive context=" + context + " intent=" + intent);
816776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam                    WifiSetupActivity activity = (WifiSetupActivity) getActivity();
826776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam                    activity.finishOrNext(Activity.RESULT_OK);
83d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner                }
84d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner            }
85d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        };
86d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    }
87d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
88d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    @Override
89d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    public View onCreateView(final LayoutInflater inflater, ViewGroup container,
90d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner            Bundle savedInstanceState) {
91d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
92d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        final View view = inflater.inflate(R.layout.setup_preference, container, false);
93588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam
94588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam        final ListView list = (ListView) view.findViewById(android.R.id.list);
95588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam        final View title = view.findViewById(R.id.title);
96588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam        if (title == null) {
97588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam            final View header = inflater.inflate(R.layout.setup_wizard_header, list, false);
98588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam            list.addHeaderView(header);
99588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam        }
100588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam
101588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam        final View other = inflater.inflate(R.layout.setup_wifi_add_network, list, false);
102588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam        list.addFooterView(other, null, true);
103d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        other.setOnClickListener(new OnClickListener() {
104d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner            @Override
105d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner            public void onClick(View v) {
106d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner                if (mWifiManager.isWifiEnabled()) {
107d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner                    onAddNetworkPressed();
108d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner                }
109d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner            }
110d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        });
111d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
112d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        final Intent intent = getActivity().getIntent();
113d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        if (intent.getBooleanExtra(EXTRA_SHOW_WIFI_REQUIRED_INFO, false)) {
114d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner            view.findViewById(R.id.wifi_required_info).setVisibility(View.VISIBLE);
115d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        }
116d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
117d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        return view;
118d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    }
119d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
120d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    @Override
121d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    public void onActivityCreated(Bundle savedInstanceState) {
122d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        super.onActivityCreated(savedInstanceState);
123d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
124d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        getView().setSystemUiVisibility(
125d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner                View.STATUS_BAR_DISABLE_HOME |
126d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner                View.STATUS_BAR_DISABLE_RECENT |
127d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner                View.STATUS_BAR_DISABLE_NOTIFICATION_ALERTS |
128d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner                View.STATUS_BAR_DISABLE_CLOCK);
129d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
1306776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam        final WifiSetupActivity activity = (WifiSetupActivity) getActivity();
131d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        final Intent intent = activity.getIntent();
132d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
133d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        // first if we're supposed to finish once we have a connection
134d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        mAutoFinishOnConnection = intent.getBooleanExtra(EXTRA_AUTO_FINISH_ON_CONNECT, false);
135d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
1366776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam        if (mAutoFinishOnConnection) {
137d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner            // Hide the next button
138d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner            if (hasNextButton()) {
139d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner                getNextButton().setVisibility(View.GONE);
140d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner            }
141d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
1426776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam            /*
1436776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam             * When entering with a savedInstanceState, we may be returning from a later activity in
1446776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam             * the setup flow. It's not clear yet if there are other possible circumstances. It's
1456776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam             * not appropriate to refire our activity results, so we skip that here.
1466776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam             */
1476776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam            if (savedInstanceState == null) {
1486776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam                final ConnectivityManager connectivity = (ConnectivityManager)
1496776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam                        activity.getSystemService(Context.CONNECTIVITY_SERVICE);
1506776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam                if (connectivity != null &&
1516776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam                        connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) {
1526776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam                    Log.d(TAG, "onActivityCreated Auto-finishing");
1536776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam                    activity.finishOrNext(Activity.RESULT_OK);
1546776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam                    return;
1556776c67ac12161b3e5e25c8848b46656ea91be1dMaurice Lam                }
156d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner            }
157d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        }
158d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    }
159d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
160d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    @Override
161d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    public void onResume() {
162d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        super.onResume();
163d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        getActivity().registerReceiver(mReceiver, mFilter);
164d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    }
165d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
166d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    @Override
167d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    public void onPause() {
168d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        super.onPause();
169d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        getActivity().unregisterReceiver(mReceiver);
170d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    }
171d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
172d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    @Override
173d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    public void registerForContextMenu(View view) {
174d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        // Suppressed during setup wizard
175d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    }
176d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
177d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    @Override
178d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    /* package */ WifiEnabler createWifiEnabler() {
179d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        // Not shown during setup wizard
180d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        return null;
181d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    }
182d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner
183d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    @Override
184d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    /* package */ void addOptionsMenuItems(Menu menu) {
185d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        final boolean wifiIsEnabled = mWifiManager.isWifiEnabled();
186d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        final TypedArray ta = getActivity().getTheme()
187d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner                .obtainStyledAttributes(new int[] {R.attr.ic_wps});
188d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        menu.add(Menu.NONE, MENU_ID_WPS_PBC, 0, R.string.wifi_menu_wps_pbc)
189d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner                .setIcon(ta.getDrawable(0))
190d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner                .setEnabled(wifiIsEnabled)
191d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner                .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
192d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        menu.add(Menu.NONE, MENU_ID_ADD_NETWORK, 0, R.string.wifi_add_network)
193d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner                .setEnabled(wifiIsEnabled)
194d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner                .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
195d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner        ta.recycle();
196d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner    }
197d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner}
198