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.content.Intent; 20d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.content.res.TypedArray; 21b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lamimport android.database.DataSetObserver; 226a627652cbac48a7d5bea5bc81772f90d7d82af9Maurice Lamimport android.net.wifi.WifiConfiguration; 23d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.os.Bundle; 24b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lamimport android.view.Gravity; 25d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.view.LayoutInflater; 26d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.view.Menu; 27d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.view.MenuItem; 28d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.view.View; 29d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.view.View.OnClickListener; 30d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport android.view.ViewGroup; 31b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lamimport android.widget.AbsListView.LayoutParams; 32b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lamimport android.widget.ListAdapter; 33588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lamimport android.widget.ListView; 34588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lamimport android.widget.TextView; 35d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 36d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerimport com.android.settings.R; 37d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 38d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner/** 39d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * This customized version of WifiSettings is shown to the user only during Setup Wizard. Menu 40d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * selections are limited, clicking on an access point will auto-advance to the next screen (once 41d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * connected), and, if the user opts to skip ahead without a wifi connection, a warning message 42d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner * alerts of possible carrier data charges or missing software updates. 43d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner */ 44d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brennerpublic class WifiSettingsForSetupWizard extends WifiSettings { 45d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 46d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner private static final String TAG = "WifiSettingsForSetupWizard"; 47d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 48d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner // show a text regarding data charges when wifi connection is required during setup wizard 49d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner protected static final String EXTRA_SHOW_WIFI_REQUIRED_INFO = "wifi_show_wifi_required_info"; 50d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 51b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam private View mAddOtherNetworkItem; 52b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam private ListAdapter mAdapter; 53b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam private TextView mEmptyFooter; 54b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam private boolean mListLastEmpty = false; 55b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam 56d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner @Override 57d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner public View onCreateView(final LayoutInflater inflater, ViewGroup container, 58d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner Bundle savedInstanceState) { 59d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 60d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner final View view = inflater.inflate(R.layout.setup_preference, container, false); 61588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam 62588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam final ListView list = (ListView) view.findViewById(android.R.id.list); 63588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam final View title = view.findViewById(R.id.title); 64588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam if (title == null) { 65588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam final View header = inflater.inflate(R.layout.setup_wizard_header, list, false); 665aee7d5c684f77252eb7f16b1e9f19e83c07b2ffMaurice Lam list.addHeaderView(header, null, false); 67588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam } 68588e61aa055eff73c968e2b8f45b6848bd8f7766Maurice Lam 69b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam mAddOtherNetworkItem = inflater.inflate(R.layout.setup_wifi_add_network, list, false); 70b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam list.addFooterView(mAddOtherNetworkItem, null, true); 71b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam mAddOtherNetworkItem.setOnClickListener(new OnClickListener() { 72d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner @Override 73d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner public void onClick(View v) { 74d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner if (mWifiManager.isWifiEnabled()) { 75d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner onAddNetworkPressed(); 76d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 77d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 78d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner }); 79d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 80d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner final Intent intent = getActivity().getIntent(); 81d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner if (intent.getBooleanExtra(EXTRA_SHOW_WIFI_REQUIRED_INFO, false)) { 82d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner view.findViewById(R.id.wifi_required_info).setVisibility(View.VISIBLE); 83d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 84d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 85d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner return view; 86d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 87d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 88d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner @Override 89d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner public void onActivityCreated(Bundle savedInstanceState) { 90d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner super.onActivityCreated(savedInstanceState); 91d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 92d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner getView().setSystemUiVisibility( 93d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner View.STATUS_BAR_DISABLE_HOME | 94d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner View.STATUS_BAR_DISABLE_RECENT | 95d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner View.STATUS_BAR_DISABLE_NOTIFICATION_ALERTS | 96d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner View.STATUS_BAR_DISABLE_CLOCK); 97d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 986a627652cbac48a7d5bea5bc81772f90d7d82af9Maurice Lam if (hasNextButton()) { 996a627652cbac48a7d5bea5bc81772f90d7d82af9Maurice Lam getNextButton().setVisibility(View.GONE); 100d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 101b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam 102b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam mAdapter = getPreferenceScreen().getRootAdapter(); 103b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam mAdapter.registerDataSetObserver(new DataSetObserver() { 104b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam @Override 105b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam public void onChanged() { 106b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam super.onChanged(); 107b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam updateFooter(); 108b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam } 109b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam }); 110d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 111d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 112d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner @Override 113d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner public void registerForContextMenu(View view) { 114d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner // Suppressed during setup wizard 115d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 116d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 117d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner @Override 118d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner /* package */ WifiEnabler createWifiEnabler() { 119d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner // Not shown during setup wizard 120d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner return null; 121d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 122d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner 123d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner @Override 124d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner /* package */ void addOptionsMenuItems(Menu menu) { 125d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner final boolean wifiIsEnabled = mWifiManager.isWifiEnabled(); 126d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner final TypedArray ta = getActivity().getTheme() 127d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner .obtainStyledAttributes(new int[] {R.attr.ic_wps}); 128d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner menu.add(Menu.NONE, MENU_ID_WPS_PBC, 0, R.string.wifi_menu_wps_pbc) 129d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner .setIcon(ta.getDrawable(0)) 130d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner .setEnabled(wifiIsEnabled) 131d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 132d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner menu.add(Menu.NONE, MENU_ID_ADD_NETWORK, 0, R.string.wifi_add_network) 133d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner .setEnabled(wifiIsEnabled) 134d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 135d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner ta.recycle(); 136d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner } 1376a627652cbac48a7d5bea5bc81772f90d7d82af9Maurice Lam 1386a627652cbac48a7d5bea5bc81772f90d7d82af9Maurice Lam @Override 1396a627652cbac48a7d5bea5bc81772f90d7d82af9Maurice Lam protected void connect(final WifiConfiguration config) { 1406a627652cbac48a7d5bea5bc81772f90d7d82af9Maurice Lam WifiSetupActivity activity = (WifiSetupActivity) getActivity(); 1416a627652cbac48a7d5bea5bc81772f90d7d82af9Maurice Lam activity.networkSelected(); 1426a627652cbac48a7d5bea5bc81772f90d7d82af9Maurice Lam super.connect(config); 1436a627652cbac48a7d5bea5bc81772f90d7d82af9Maurice Lam } 1446a627652cbac48a7d5bea5bc81772f90d7d82af9Maurice Lam 1456a627652cbac48a7d5bea5bc81772f90d7d82af9Maurice Lam @Override 1466a627652cbac48a7d5bea5bc81772f90d7d82af9Maurice Lam protected void connect(final int networkId) { 1476a627652cbac48a7d5bea5bc81772f90d7d82af9Maurice Lam WifiSetupActivity activity = (WifiSetupActivity) getActivity(); 1486a627652cbac48a7d5bea5bc81772f90d7d82af9Maurice Lam activity.networkSelected(); 1496a627652cbac48a7d5bea5bc81772f90d7d82af9Maurice Lam super.connect(networkId); 1506a627652cbac48a7d5bea5bc81772f90d7d82af9Maurice Lam } 151b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam 152b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam @Override 153b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam protected TextView initEmptyView() { 154b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam mEmptyFooter = new TextView(getActivity()); 155b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam mEmptyFooter.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 156b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam LayoutParams.MATCH_PARENT)); 157b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam mEmptyFooter.setGravity(Gravity.CENTER); 158b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam mEmptyFooter.setCompoundDrawablesWithIntrinsicBounds(0, 159b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam R.drawable.ic_wifi_emptystate, 0,0); 160b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam return mEmptyFooter; 161b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam } 162b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam 163b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam protected void updateFooter() { 164b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam final boolean isEmpty = mAdapter.isEmpty(); 165b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam if (isEmpty != mListLastEmpty) { 166b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam final ListView list = getListView(); 167b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam if (isEmpty) { 168b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam list.removeFooterView(mAddOtherNetworkItem); 169b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam list.addFooterView(mEmptyFooter, null, false); 170b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam } else { 171b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam list.removeFooterView(mEmptyFooter); 172b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam list.addFooterView(mAddOtherNetworkItem, null, true); 173b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam } 174b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam mListLastEmpty = isEmpty; 175b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam } 176b6c414a6d279b83f5306e9d4aaddb02e5bb8cfe1Maurice Lam } 177d3446c5708aff2580d4ddb9f559e72784bfac55eRussell Brenner} 178