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.Dialog; 20 import android.net.wifi.WifiConfiguration; 21 import android.os.Bundle; 22 import android.support.v7.preference.PreferenceScreen; 23 import android.text.TextUtils; 24 import android.view.LayoutInflater; 25 import android.view.Menu; 26 import android.view.MenuInflater; 27 import android.view.View; 28 import android.view.View.OnClickListener; 29 import android.view.ViewGroup; 30 import android.widget.LinearLayout; 31 import android.widget.ListView; 32 import android.widget.TextView; 33 34 import com.android.settings.R; 35 import com.android.settings.SetupWizardUtils; 36 import com.android.setupwizardlib.SetupWizardListLayout; 37 import com.android.setupwizardlib.view.NavigationBar; 38 39 /** 40 * This customized version of WifiSettings is shown to the user only during Setup Wizard. Menu 41 * is not shown, clicking on an access point will auto-advance to the next screen (once connected), 42 * and, if the user opts to skip ahead without a wifi connection, a warning message alerts of 43 * possible carrier data charges or missing software updates. 44 */ 45 public class WifiSettingsForSetupWizard extends WifiSettings { 46 47 private static final String TAG = "WifiSettingsForSetupWizard"; 48 49 private SetupWizardListLayout mLayout; 50 private View mAddOtherNetworkItem; 51 private TextView mEmptyFooter; 52 private View mMacAddressFooter; 53 private boolean mListLastEmpty = false; 54 55 @Override 56 public View onCreateView(final LayoutInflater inflater, ViewGroup container, 57 Bundle savedInstanceState) { 58 mLayout = (SetupWizardListLayout) 59 inflater.inflate(R.layout.setup_wifi_layout, container, false); 60 final ListView list = mLayout.getListView(); 61 62 mAddOtherNetworkItem = inflater.inflate(R.layout.setup_wifi_add_network, list, false); 63 list.addFooterView(mAddOtherNetworkItem, null, true); 64 mAddOtherNetworkItem.setOnClickListener(new OnClickListener() { 65 @Override 66 public void onClick(View v) { 67 if (mWifiManager.isWifiEnabled()) { 68 onAddNetworkPressed(); 69 } 70 } 71 }); 72 73 mMacAddressFooter = inflater.inflate(R.layout.setup_wifi_mac_address, list, false); 74 list.addFooterView(mMacAddressFooter, null, false); 75 76 final NavigationBar navigationBar = mLayout.getNavigationBar(); 77 if (navigationBar != null) { 78 WifiSetupActivity activity = (WifiSetupActivity) getActivity(); 79 activity.onNavigationBarCreated(navigationBar); 80 } 81 82 return mLayout; 83 } 84 85 @Override 86 public void onActivityCreated(Bundle savedInstanceState) { 87 super.onActivityCreated(savedInstanceState); 88 89 if (hasNextButton()) { 90 getNextButton().setVisibility(View.GONE); 91 } 92 93 updateMacAddress(); 94 } 95 96 @Override 97 public void onAccessPointsChanged() { 98 super.onAccessPointsChanged(); 99 PreferenceScreen preferenceScreen = getPreferenceScreen(); 100 updateFooter(preferenceScreen == null || preferenceScreen.getPreferenceCount() == 0); 101 } 102 103 @Override 104 public void onWifiStateChanged(int state) { 105 super.onWifiStateChanged(state); 106 updateMacAddress(); 107 } 108 109 @Override 110 public void registerForContextMenu(View view) { 111 // Suppressed during setup wizard 112 } 113 114 @Override 115 /* package */ WifiEnabler createWifiEnabler() { 116 // Not shown during setup wizard 117 return null; 118 } 119 120 @Override 121 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 122 // Do not show menu during setup wizard 123 } 124 125 @Override 126 public Dialog onCreateDialog(int dialogId) { 127 final Dialog dialog = super.onCreateDialog(dialogId); 128 SetupWizardUtils.applyImmersiveFlags(dialog); 129 return dialog; 130 } 131 132 @Override 133 protected void connect(final WifiConfiguration config) { 134 WifiSetupActivity activity = (WifiSetupActivity) getActivity(); 135 activity.networkSelected(); 136 super.connect(config); 137 } 138 139 @Override 140 protected void connect(final int networkId) { 141 WifiSetupActivity activity = (WifiSetupActivity) getActivity(); 142 activity.networkSelected(); 143 super.connect(networkId); 144 } 145 146 @Override 147 protected TextView initEmptyTextView() { 148 final LayoutInflater inflater = LayoutInflater.from(getActivity()); 149 mEmptyFooter = (TextView) inflater.inflate(R.layout.setup_wifi_empty, getListView(), false); 150 return mEmptyFooter; 151 } 152 153 protected void updateFooter(boolean isEmpty) { 154 if (isEmpty != mListLastEmpty) { 155 if (isEmpty) { 156 setFooterView(mEmptyFooter); 157 } else { 158 LinearLayout layout = new LinearLayout(getContext()); 159 layout.setOrientation(LinearLayout.VERTICAL); 160 layout.addView(mAddOtherNetworkItem); 161 layout.addView(mMacAddressFooter); 162 setFooterView(layout); 163 } 164 mListLastEmpty = isEmpty; 165 } 166 } 167 168 @Override 169 public View setPinnedHeaderView(int layoutResId) { 170 // Pinned header is not supported in setup wizard 171 return null; 172 } 173 174 @Override 175 public void setPinnedHeaderView(View pinnedHeader) { 176 // Pinned header is not supported in setup wizard 177 } 178 179 @Override 180 protected void setProgressBarVisible(boolean visible) { 181 if (mLayout != null) { 182 if (visible) { 183 mLayout.showProgressBar(); 184 } else { 185 mLayout.hideProgressBar(); 186 } 187 } 188 } 189 190 private void updateMacAddress() { 191 if (mMacAddressFooter != null) { 192 String macAddress = null; 193 if (mWifiManager != null) { 194 android.net.wifi.WifiInfo connectionInfo = mWifiManager.getConnectionInfo(); 195 if (connectionInfo != null) { 196 macAddress = connectionInfo.getMacAddress(); 197 } 198 } 199 final TextView macAddressTextView = 200 (TextView) mMacAddressFooter.findViewById(R.id.mac_address); 201 macAddressTextView.setText(!TextUtils.isEmpty(macAddress) ? 202 macAddress : getString(R.string.status_unavailable)); 203 } 204 } 205 } 206