1b98463f8b0de186dc263217286449a76d6df91a8repo sync/* 2b98463f8b0de186dc263217286449a76d6df91a8repo sync * Copyright (C) 2011 The Android Open Source Project 3b98463f8b0de186dc263217286449a76d6df91a8repo sync * 4b98463f8b0de186dc263217286449a76d6df91a8repo sync * Licensed under the Apache License, Version 2.0 (the "License"); 5b98463f8b0de186dc263217286449a76d6df91a8repo sync * you may not use this file except in compliance with the License. 6b98463f8b0de186dc263217286449a76d6df91a8repo sync * You may obtain a copy of the License at 7b98463f8b0de186dc263217286449a76d6df91a8repo sync * 8b98463f8b0de186dc263217286449a76d6df91a8repo sync * http://www.apache.org/licenses/LICENSE-2.0 9b98463f8b0de186dc263217286449a76d6df91a8repo sync * 10b98463f8b0de186dc263217286449a76d6df91a8repo sync * Unless required by applicable law or agreed to in writing, software 11b98463f8b0de186dc263217286449a76d6df91a8repo sync * distributed under the License is distributed on an "AS IS" BASIS, 12b98463f8b0de186dc263217286449a76d6df91a8repo sync * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b98463f8b0de186dc263217286449a76d6df91a8repo sync * See the License for the specific language governing permissions and 14b98463f8b0de186dc263217286449a76d6df91a8repo sync * limitations under the License. 15b98463f8b0de186dc263217286449a76d6df91a8repo sync */ 16b98463f8b0de186dc263217286449a76d6df91a8repo sync 179ef53578b8ef7da9c372b4fcd48ea760a0d9c305Irfan Sheriffpackage com.android.settings.wifi.p2p; 18b98463f8b0de186dc263217286449a76d6df91a8repo sync 19b98463f8b0de186dc263217286449a76d6df91a8repo syncimport android.app.Activity; 20b98463f8b0de186dc263217286449a76d6df91a8repo syncimport android.app.AlertDialog; 21b98463f8b0de186dc263217286449a76d6df91a8repo syncimport android.app.Dialog; 22b98463f8b0de186dc263217286449a76d6df91a8repo syncimport android.content.BroadcastReceiver; 23b98463f8b0de186dc263217286449a76d6df91a8repo syncimport android.content.Context; 24b98463f8b0de186dc263217286449a76d6df91a8repo syncimport android.content.DialogInterface; 25b98463f8b0de186dc263217286449a76d6df91a8repo syncimport android.content.DialogInterface.OnClickListener; 26b98463f8b0de186dc263217286449a76d6df91a8repo syncimport android.content.Intent; 27b98463f8b0de186dc263217286449a76d6df91a8repo syncimport android.content.IntentFilter; 2876feb7f1c129e8053ba72ee27cc048a0e7fd2152repo syncimport android.net.NetworkInfo; 29b98463f8b0de186dc263217286449a76d6df91a8repo syncimport android.net.wifi.p2p.WifiP2pConfig; 307c872478ebc016d8412ebbe2667d446e67a3a7easunil duttuimport android.net.wifi.p2p.WifiP2pInfo; 31b98463f8b0de186dc263217286449a76d6df91a8repo syncimport android.net.wifi.p2p.WifiP2pDevice; 32b98463f8b0de186dc263217286449a76d6df91a8repo syncimport android.net.wifi.p2p.WifiP2pDeviceList; 33f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenagaimport android.net.wifi.p2p.WifiP2pGroup; 34f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenagaimport android.net.wifi.p2p.WifiP2pGroupList; 35b98463f8b0de186dc263217286449a76d6df91a8repo syncimport android.net.wifi.p2p.WifiP2pManager; 365d2169eb6fa94ea84392138291735b69d0e384e5Yuhao Zhengimport android.net.wifi.p2p.WifiP2pManager.PeerListListener; 37f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenagaimport android.net.wifi.p2p.WifiP2pManager.PersistentGroupInfoListener; 388c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriffimport android.net.wifi.WpsInfo; 39b98463f8b0de186dc263217286449a76d6df91a8repo syncimport android.os.Bundle; 401e13143b3a40405a0e61d2b9219710e445878e43Irfan Sheriffimport android.os.SystemProperties; 41b98463f8b0de186dc263217286449a76d6df91a8repo syncimport android.preference.Preference; 422592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriffimport android.preference.PreferenceCategory; 432592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriffimport android.preference.PreferenceGroup; 44b98463f8b0de186dc263217286449a76d6df91a8repo syncimport android.preference.PreferenceScreen; 45540f75aa922806f8af506188a36d30e9c4dbad87Irfan Sheriffimport android.text.InputFilter; 462592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriffimport android.text.TextUtils; 47b98463f8b0de186dc263217286449a76d6df91a8repo syncimport android.util.Log; 48b98463f8b0de186dc263217286449a76d6df91a8repo syncimport android.view.Menu; 49b98463f8b0de186dc263217286449a76d6df91a8repo syncimport android.view.MenuInflater; 50b98463f8b0de186dc263217286449a76d6df91a8repo syncimport android.view.MenuItem; 5197617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriffimport android.widget.EditText; 528c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriffimport android.widget.Toast; 53b98463f8b0de186dc263217286449a76d6df91a8repo sync 549ef53578b8ef7da9c372b4fcd48ea760a0d9c305Irfan Sheriffimport com.android.settings.R; 559ef53578b8ef7da9c372b4fcd48ea760a0d9c305Irfan Sheriffimport com.android.settings.SettingsPreferenceFragment; 56b98463f8b0de186dc263217286449a76d6df91a8repo sync 57b98463f8b0de186dc263217286449a76d6df91a8repo sync/* 58b98463f8b0de186dc263217286449a76d6df91a8repo sync * Displays Wi-fi p2p settings UI 59b98463f8b0de186dc263217286449a76d6df91a8repo sync */ 60ec10578884e3c23b3585bccde76e9c12978dda05Irfan Sheriffpublic class WifiP2pSettings extends SettingsPreferenceFragment 615d2169eb6fa94ea84392138291735b69d0e384e5Yuhao Zheng implements PersistentGroupInfoListener, PeerListListener { 62b98463f8b0de186dc263217286449a76d6df91a8repo sync 63b98463f8b0de186dc263217286449a76d6df91a8repo sync private static final String TAG = "WifiP2pSettings"; 648c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff private static final boolean DBG = false; 65b98463f8b0de186dc263217286449a76d6df91a8repo sync private static final int MENU_ID_SEARCH = Menu.FIRST; 668c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff private static final int MENU_ID_RENAME = Menu.FIRST + 1; 67b98463f8b0de186dc263217286449a76d6df91a8repo sync 68b98463f8b0de186dc263217286449a76d6df91a8repo sync private final IntentFilter mIntentFilter = new IntentFilter(); 69b98463f8b0de186dc263217286449a76d6df91a8repo sync private WifiP2pManager mWifiP2pManager; 7076feb7f1c129e8053ba72ee27cc048a0e7fd2152repo sync private WifiP2pManager.Channel mChannel; 7197617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff private OnClickListener mRenameListener; 72b98463f8b0de186dc263217286449a76d6df91a8repo sync private OnClickListener mDisconnectListener; 73c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff private OnClickListener mCancelConnectListener; 74f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga private OnClickListener mDeleteGroupListener; 75b98463f8b0de186dc263217286449a76d6df91a8repo sync private WifiP2pPeer mSelectedWifiPeer; 76f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga private WifiP2pPersistentGroup mSelectedGroup; 771a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde private String mSelectedGroupName; 7897617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff private EditText mDeviceNameText; 79b98463f8b0de186dc263217286449a76d6df91a8repo sync 808c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff private boolean mWifiP2pEnabled; 818c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff private boolean mWifiP2pSearching; 828c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff private int mConnectedDevices; 837c872478ebc016d8412ebbe2667d446e67a3a7easunil duttu private boolean mLastGroupFormed = false; 848c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff 852592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff private PreferenceGroup mPeersGroup; 86f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga private PreferenceGroup mPersistentGroup; 872592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff private Preference mThisDevicePref; 882592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff 898c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff private static final int DIALOG_DISCONNECT = 1; 90c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff private static final int DIALOG_CANCEL_CONNECT = 2; 9197617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff private static final int DIALOG_RENAME = 3; 92f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga private static final int DIALOG_DELETE_GROUP = 4; 93b98463f8b0de186dc263217286449a76d6df91a8repo sync 94db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff private static final String SAVE_DIALOG_PEER = "PEER_STATE"; 955864701197e9943a706cb9bf329975f428d7d1c8Amith Yamasani private static final String SAVE_DEVICE_NAME = "DEV_NAME"; 961a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde private static final String SAVE_SELECTED_GROUP = "GROUP_NAME"; 97db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff 982592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff private WifiP2pDevice mThisDevice; 992592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff private WifiP2pDeviceList mPeers = new WifiP2pDeviceList(); 1002592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff 1015864701197e9943a706cb9bf329975f428d7d1c8Amith Yamasani private String mSavedDeviceName; 1025864701197e9943a706cb9bf329975f428d7d1c8Amith Yamasani 103b98463f8b0de186dc263217286449a76d6df91a8repo sync private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 104b98463f8b0de186dc263217286449a76d6df91a8repo sync @Override 105b98463f8b0de186dc263217286449a76d6df91a8repo sync public void onReceive(Context context, Intent intent) { 106b98463f8b0de186dc263217286449a76d6df91a8repo sync String action = intent.getAction(); 107b98463f8b0de186dc263217286449a76d6df91a8repo sync 108b98463f8b0de186dc263217286449a76d6df91a8repo sync if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) { 1098c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff mWifiP2pEnabled = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, 1108c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff WifiP2pManager.WIFI_P2P_STATE_DISABLED) == WifiP2pManager.WIFI_P2P_STATE_ENABLED; 1118c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff handleP2pStateChanged(); 112b98463f8b0de186dc263217286449a76d6df91a8repo sync } else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) { 1139f86b5df783ed063d1142f0050edbddf4fe3c7c2Irfan Sheriff mPeers = (WifiP2pDeviceList) intent.getParcelableExtra( 1149f86b5df783ed063d1142f0050edbddf4fe3c7c2Irfan Sheriff WifiP2pManager.EXTRA_P2P_DEVICE_LIST); 1159f86b5df783ed063d1142f0050edbddf4fe3c7c2Irfan Sheriff handlePeersChanged(); 11676feb7f1c129e8053ba72ee27cc048a0e7fd2152repo sync } else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) { 11776feb7f1c129e8053ba72ee27cc048a0e7fd2152repo sync if (mWifiP2pManager == null) return; 11876feb7f1c129e8053ba72ee27cc048a0e7fd2152repo sync NetworkInfo networkInfo = (NetworkInfo) intent.getParcelableExtra( 11976feb7f1c129e8053ba72ee27cc048a0e7fd2152repo sync WifiP2pManager.EXTRA_NETWORK_INFO); 1207c872478ebc016d8412ebbe2667d446e67a3a7easunil duttu WifiP2pInfo wifip2pinfo = (WifiP2pInfo) intent.getParcelableExtra( 1217c872478ebc016d8412ebbe2667d446e67a3a7easunil duttu WifiP2pManager.EXTRA_WIFI_P2P_INFO); 12276feb7f1c129e8053ba72ee27cc048a0e7fd2152repo sync if (networkInfo.isConnected()) { 1238c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff if (DBG) Log.d(TAG, "Connected"); 1247c872478ebc016d8412ebbe2667d446e67a3a7easunil duttu } else if (mLastGroupFormed != true) { 1253a14bafcf6792e14b3d74a591af39c9d62a4cc26Irfan Sheriff //start a search when we are disconnected 1267c872478ebc016d8412ebbe2667d446e67a3a7easunil duttu //but not on group removed broadcast event 1273a14bafcf6792e14b3d74a591af39c9d62a4cc26Irfan Sheriff startSearch(); 12876feb7f1c129e8053ba72ee27cc048a0e7fd2152repo sync } 1297c872478ebc016d8412ebbe2667d446e67a3a7easunil duttu mLastGroupFormed = wifip2pinfo.groupFormed; 1302592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff } else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) { 1312592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff mThisDevice = (WifiP2pDevice) intent.getParcelableExtra( 1322592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff WifiP2pManager.EXTRA_WIFI_P2P_DEVICE); 1338c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff if (DBG) Log.d(TAG, "Update device info: " + mThisDevice); 1342592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff updateDevicePref(); 1353a14bafcf6792e14b3d74a591af39c9d62a4cc26Irfan Sheriff } else if (WifiP2pManager.WIFI_P2P_DISCOVERY_CHANGED_ACTION.equals(action)) { 1363a14bafcf6792e14b3d74a591af39c9d62a4cc26Irfan Sheriff int discoveryState = intent.getIntExtra(WifiP2pManager.EXTRA_DISCOVERY_STATE, 1373a14bafcf6792e14b3d74a591af39c9d62a4cc26Irfan Sheriff WifiP2pManager.WIFI_P2P_DISCOVERY_STOPPED); 1383a14bafcf6792e14b3d74a591af39c9d62a4cc26Irfan Sheriff if (DBG) Log.d(TAG, "Discovery state changed: " + discoveryState); 1393a14bafcf6792e14b3d74a591af39c9d62a4cc26Irfan Sheriff if (discoveryState == WifiP2pManager.WIFI_P2P_DISCOVERY_STARTED) { 1403a14bafcf6792e14b3d74a591af39c9d62a4cc26Irfan Sheriff updateSearchMenu(true); 1413a14bafcf6792e14b3d74a591af39c9d62a4cc26Irfan Sheriff } else { 1423a14bafcf6792e14b3d74a591af39c9d62a4cc26Irfan Sheriff updateSearchMenu(false); 1433a14bafcf6792e14b3d74a591af39c9d62a4cc26Irfan Sheriff } 144f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga } else if (WifiP2pManager.WIFI_P2P_PERSISTENT_GROUPS_CHANGED_ACTION.equals(action)) { 145f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga if (mWifiP2pManager != null) { 146f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga mWifiP2pManager.requestPersistentGroupInfo(mChannel, WifiP2pSettings.this); 147f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga } 148b98463f8b0de186dc263217286449a76d6df91a8repo sync } 149b98463f8b0de186dc263217286449a76d6df91a8repo sync } 150b98463f8b0de186dc263217286449a76d6df91a8repo sync }; 151b98463f8b0de186dc263217286449a76d6df91a8repo sync 1521a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde public WifiP2pSettings() { 1531a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde if (DBG) Log.d(TAG, "Creating WifiP2pSettings ..."); 1541a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde } 1551a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde 156b98463f8b0de186dc263217286449a76d6df91a8repo sync @Override 157db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff public void onActivityCreated(Bundle savedInstanceState) { 158b98463f8b0de186dc263217286449a76d6df91a8repo sync addPreferencesFromResource(R.xml.wifi_p2p_settings); 159b98463f8b0de186dc263217286449a76d6df91a8repo sync 160b98463f8b0de186dc263217286449a76d6df91a8repo sync mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION); 161b98463f8b0de186dc263217286449a76d6df91a8repo sync mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION); 16276feb7f1c129e8053ba72ee27cc048a0e7fd2152repo sync mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION); 1632592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION); 1643a14bafcf6792e14b3d74a591af39c9d62a4cc26Irfan Sheriff mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_DISCOVERY_CHANGED_ACTION); 165f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_PERSISTENT_GROUPS_CHANGED_ACTION); 1668c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff 167b98463f8b0de186dc263217286449a76d6df91a8repo sync final Activity activity = getActivity(); 168b98463f8b0de186dc263217286449a76d6df91a8repo sync mWifiP2pManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); 16976feb7f1c129e8053ba72ee27cc048a0e7fd2152repo sync if (mWifiP2pManager != null) { 170ec10578884e3c23b3585bccde76e9c12978dda05Irfan Sheriff mChannel = mWifiP2pManager.initialize(activity, getActivity().getMainLooper(), null); 17176feb7f1c129e8053ba72ee27cc048a0e7fd2152repo sync if (mChannel == null) { 17276feb7f1c129e8053ba72ee27cc048a0e7fd2152repo sync //Failure to set up connection 17376feb7f1c129e8053ba72ee27cc048a0e7fd2152repo sync Log.e(TAG, "Failed to set up connection with wifi p2p service"); 17476feb7f1c129e8053ba72ee27cc048a0e7fd2152repo sync mWifiP2pManager = null; 17576feb7f1c129e8053ba72ee27cc048a0e7fd2152repo sync } 17676feb7f1c129e8053ba72ee27cc048a0e7fd2152repo sync } else { 17776feb7f1c129e8053ba72ee27cc048a0e7fd2152repo sync Log.e(TAG, "mWifiP2pManager is null !"); 178b98463f8b0de186dc263217286449a76d6df91a8repo sync } 179b98463f8b0de186dc263217286449a76d6df91a8repo sync 180db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff if (savedInstanceState != null && savedInstanceState.containsKey(SAVE_DIALOG_PEER)) { 181db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff WifiP2pDevice device = savedInstanceState.getParcelable(SAVE_DIALOG_PEER); 182db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff mSelectedWifiPeer = new WifiP2pPeer(getActivity(), device); 183db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff } 1845864701197e9943a706cb9bf329975f428d7d1c8Amith Yamasani if (savedInstanceState != null && savedInstanceState.containsKey(SAVE_DEVICE_NAME)) { 1855864701197e9943a706cb9bf329975f428d7d1c8Amith Yamasani mSavedDeviceName = savedInstanceState.getString(SAVE_DEVICE_NAME); 1865864701197e9943a706cb9bf329975f428d7d1c8Amith Yamasani } 1871a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde if (savedInstanceState != null && savedInstanceState.containsKey(SAVE_SELECTED_GROUP)) { 1881a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde mSelectedGroupName = savedInstanceState.getString(SAVE_SELECTED_GROUP); 1891a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde } 190db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff 19197617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff mRenameListener = new OnClickListener() { 19297617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff @Override 19397617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff public void onClick(DialogInterface dialog, int which) { 19497617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff if (which == DialogInterface.BUTTON_POSITIVE) { 19597617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff if (mWifiP2pManager != null) { 19697617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff mWifiP2pManager.setDeviceName(mChannel, 19797617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff mDeviceNameText.getText().toString(), 19897617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff new WifiP2pManager.ActionListener() { 19997617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff public void onSuccess() { 20097617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff if (DBG) Log.d(TAG, " device rename success"); 20197617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff } 20297617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff public void onFailure(int reason) { 20397617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff Toast.makeText(getActivity(), 20497617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff R.string.wifi_p2p_failed_rename_message, 20597617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff Toast.LENGTH_LONG).show(); 20697617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff } 20797617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff }); 20897617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff } 20997617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff } 21097617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff } 21197617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff }; 21297617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff 213b98463f8b0de186dc263217286449a76d6df91a8repo sync //disconnect dialog listener 214b98463f8b0de186dc263217286449a76d6df91a8repo sync mDisconnectListener = new OnClickListener() { 215b98463f8b0de186dc263217286449a76d6df91a8repo sync @Override 216b98463f8b0de186dc263217286449a76d6df91a8repo sync public void onClick(DialogInterface dialog, int which) { 217b98463f8b0de186dc263217286449a76d6df91a8repo sync if (which == DialogInterface.BUTTON_POSITIVE) { 218b98463f8b0de186dc263217286449a76d6df91a8repo sync if (mWifiP2pManager != null) { 219ec10578884e3c23b3585bccde76e9c12978dda05Irfan Sheriff mWifiP2pManager.removeGroup(mChannel, new WifiP2pManager.ActionListener() { 220ec10578884e3c23b3585bccde76e9c12978dda05Irfan Sheriff public void onSuccess() { 2218c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff if (DBG) Log.d(TAG, " remove group success"); 222ec10578884e3c23b3585bccde76e9c12978dda05Irfan Sheriff } 223ec10578884e3c23b3585bccde76e9c12978dda05Irfan Sheriff public void onFailure(int reason) { 2248c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff if (DBG) Log.d(TAG, " remove group fail " + reason); 225ec10578884e3c23b3585bccde76e9c12978dda05Irfan Sheriff } 226ec10578884e3c23b3585bccde76e9c12978dda05Irfan Sheriff }); 227b98463f8b0de186dc263217286449a76d6df91a8repo sync } 228b98463f8b0de186dc263217286449a76d6df91a8repo sync } 229b98463f8b0de186dc263217286449a76d6df91a8repo sync } 230b98463f8b0de186dc263217286449a76d6df91a8repo sync }; 2318c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff 232c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff //cancel connect dialog listener 233c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff mCancelConnectListener = new OnClickListener() { 234c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff @Override 235c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff public void onClick(DialogInterface dialog, int which) { 236c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff if (which == DialogInterface.BUTTON_POSITIVE) { 237c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff if (mWifiP2pManager != null) { 238c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff mWifiP2pManager.cancelConnect(mChannel, 239c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff new WifiP2pManager.ActionListener() { 240c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff public void onSuccess() { 241c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff if (DBG) Log.d(TAG, " cancel connect success"); 242c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff } 243c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff public void onFailure(int reason) { 244c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff if (DBG) Log.d(TAG, " cancel connect fail " + reason); 245c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff } 246c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff }); 247c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff } 248c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff } 249c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff } 250c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff }; 251c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff 252f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga //delete persistent group dialog listener 253f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga mDeleteGroupListener = new OnClickListener() { 254f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga @Override 255f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga public void onClick(DialogInterface dialog, int which) { 256f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga if (which == DialogInterface.BUTTON_POSITIVE) { 257f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga if (mWifiP2pManager != null) { 2581a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde if (mSelectedGroup != null) { 2591a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde if (DBG) Log.d(TAG, " deleting group " + mSelectedGroup.getGroupName()); 2601a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde mWifiP2pManager.deletePersistentGroup(mChannel, 2611a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde mSelectedGroup.getNetworkId(), 2621a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde new WifiP2pManager.ActionListener() { 2631a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde public void onSuccess() { 2641a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde if (DBG) Log.d(TAG, " delete group success"); 2651a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde } 2661a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde public void onFailure(int reason) { 2671a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde if (DBG) Log.d(TAG, " delete group fail " + reason); 2681a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde } 2691a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde }); 2701a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde mSelectedGroup = null; 2711a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde } else { 2721a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde if (DBG) Log.w(TAG, " No selected group to delete!" ); 2731a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde } 2741a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde } 2751a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde } else if (which == DialogInterface.BUTTON_NEGATIVE) { 2761a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde if (DBG) { 2771a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde Log.d(TAG, " forgetting selected group " + mSelectedGroup.getGroupName()); 278f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga } 2791a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde mSelectedGroup = null; 280f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga } 281f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga } 282f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga }; 283f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga 284a318d1e8216670d40f3e378211891c333dd5d328Irfan Sheriff setHasOptionsMenu(true); 285a318d1e8216670d40f3e378211891c333dd5d328Irfan Sheriff 2868c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff final PreferenceScreen preferenceScreen = getPreferenceScreen(); 2878c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff preferenceScreen.removeAll(); 2888c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff preferenceScreen.setOrderingAsAdded(true); 289acac38011b6f596b6c74f568a53965acef4a477aYuhao Zheng 2908c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff mThisDevicePref = new Preference(getActivity()); 291acac38011b6f596b6c74f568a53965acef4a477aYuhao Zheng mThisDevicePref.setPersistent(false); 292acac38011b6f596b6c74f568a53965acef4a477aYuhao Zheng mThisDevicePref.setSelectable(false); 2938c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff preferenceScreen.addPreference(mThisDevicePref); 2948c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff 295a318d1e8216670d40f3e378211891c333dd5d328Irfan Sheriff mPeersGroup = new PreferenceCategory(getActivity()); 296a318d1e8216670d40f3e378211891c333dd5d328Irfan Sheriff mPeersGroup.setTitle(R.string.wifi_p2p_peer_devices); 2976271cd01de0c22407d5d83e485e719e40cf57c50Yuhao Zheng preferenceScreen.addPreference(mPeersGroup); 298db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff 299f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga mPersistentGroup = new PreferenceCategory(getActivity()); 300f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga mPersistentGroup.setTitle(R.string.wifi_p2p_remembered_groups); 3016271cd01de0c22407d5d83e485e719e40cf57c50Yuhao Zheng preferenceScreen.addPreference(mPersistentGroup); 302f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga 303db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff super.onActivityCreated(savedInstanceState); 304b98463f8b0de186dc263217286449a76d6df91a8repo sync } 305b98463f8b0de186dc263217286449a76d6df91a8repo sync 306b98463f8b0de186dc263217286449a76d6df91a8repo sync @Override 307b98463f8b0de186dc263217286449a76d6df91a8repo sync public void onResume() { 308b98463f8b0de186dc263217286449a76d6df91a8repo sync super.onResume(); 309b98463f8b0de186dc263217286449a76d6df91a8repo sync getActivity().registerReceiver(mReceiver, mIntentFilter); 3105d2169eb6fa94ea84392138291735b69d0e384e5Yuhao Zheng if (mWifiP2pManager != null) { 3115d2169eb6fa94ea84392138291735b69d0e384e5Yuhao Zheng mWifiP2pManager.requestPeers(mChannel, WifiP2pSettings.this); 3125d2169eb6fa94ea84392138291735b69d0e384e5Yuhao Zheng } 313b98463f8b0de186dc263217286449a76d6df91a8repo sync } 314b98463f8b0de186dc263217286449a76d6df91a8repo sync 315b98463f8b0de186dc263217286449a76d6df91a8repo sync @Override 316b98463f8b0de186dc263217286449a76d6df91a8repo sync public void onPause() { 317b98463f8b0de186dc263217286449a76d6df91a8repo sync super.onPause(); 3185d2169eb6fa94ea84392138291735b69d0e384e5Yuhao Zheng if (mWifiP2pManager != null) { 3195d2169eb6fa94ea84392138291735b69d0e384e5Yuhao Zheng mWifiP2pManager.stopPeerDiscovery(mChannel, null); 3205d2169eb6fa94ea84392138291735b69d0e384e5Yuhao Zheng } 321b98463f8b0de186dc263217286449a76d6df91a8repo sync getActivity().unregisterReceiver(mReceiver); 322b98463f8b0de186dc263217286449a76d6df91a8repo sync } 323b98463f8b0de186dc263217286449a76d6df91a8repo sync 324b98463f8b0de186dc263217286449a76d6df91a8repo sync @Override 325b98463f8b0de186dc263217286449a76d6df91a8repo sync public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 3268c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff int textId = mWifiP2pSearching ? R.string.wifi_p2p_menu_searching : 3278c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff R.string.wifi_p2p_menu_search; 3288c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff menu.add(Menu.NONE, MENU_ID_SEARCH, 0, textId) 3298c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff .setEnabled(mWifiP2pEnabled) 330b98463f8b0de186dc263217286449a76d6df91a8repo sync .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 3318c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff menu.add(Menu.NONE, MENU_ID_RENAME, 0, R.string.wifi_p2p_menu_rename) 3328c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff .setEnabled(mWifiP2pEnabled) 333b98463f8b0de186dc263217286449a76d6df91a8repo sync .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 334b98463f8b0de186dc263217286449a76d6df91a8repo sync super.onCreateOptionsMenu(menu, inflater); 335b98463f8b0de186dc263217286449a76d6df91a8repo sync } 336b98463f8b0de186dc263217286449a76d6df91a8repo sync 337b98463f8b0de186dc263217286449a76d6df91a8repo sync @Override 3388c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff public void onPrepareOptionsMenu(Menu menu) { 3398c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff MenuItem searchMenu = menu.findItem(MENU_ID_SEARCH); 3408c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff MenuItem renameMenu = menu.findItem(MENU_ID_RENAME); 3418c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff if (mWifiP2pEnabled) { 3428c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff searchMenu.setEnabled(true); 3438c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff renameMenu.setEnabled(true); 3448c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff } else { 3458c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff searchMenu.setEnabled(false); 3468c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff renameMenu.setEnabled(false); 3478c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff } 3488c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff 3498c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff if (mWifiP2pSearching) { 3508c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff searchMenu.setTitle(R.string.wifi_p2p_menu_searching); 3518c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff } else { 3528c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff searchMenu.setTitle(R.string.wifi_p2p_menu_search); 3538c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff } 3548c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff } 3558c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff 3568c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff @Override 357b98463f8b0de186dc263217286449a76d6df91a8repo sync public boolean onOptionsItemSelected(MenuItem item) { 358b98463f8b0de186dc263217286449a76d6df91a8repo sync switch (item.getItemId()) { 359b98463f8b0de186dc263217286449a76d6df91a8repo sync case MENU_ID_SEARCH: 3608c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff startSearch(); 361b98463f8b0de186dc263217286449a76d6df91a8repo sync return true; 3628c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff case MENU_ID_RENAME: 36397617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff showDialog(DIALOG_RENAME); 364b98463f8b0de186dc263217286449a76d6df91a8repo sync return true; 365b98463f8b0de186dc263217286449a76d6df91a8repo sync } 366b98463f8b0de186dc263217286449a76d6df91a8repo sync return super.onOptionsItemSelected(item); 367b98463f8b0de186dc263217286449a76d6df91a8repo sync } 368b98463f8b0de186dc263217286449a76d6df91a8repo sync 369b98463f8b0de186dc263217286449a76d6df91a8repo sync @Override 370b98463f8b0de186dc263217286449a76d6df91a8repo sync public boolean onPreferenceTreeClick(PreferenceScreen screen, Preference preference) { 371b98463f8b0de186dc263217286449a76d6df91a8repo sync if (preference instanceof WifiP2pPeer) { 372b98463f8b0de186dc263217286449a76d6df91a8repo sync mSelectedWifiPeer = (WifiP2pPeer) preference; 373ec10578884e3c23b3585bccde76e9c12978dda05Irfan Sheriff if (mSelectedWifiPeer.device.status == WifiP2pDevice.CONNECTED) { 374b98463f8b0de186dc263217286449a76d6df91a8repo sync showDialog(DIALOG_DISCONNECT); 375c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff } else if (mSelectedWifiPeer.device.status == WifiP2pDevice.INVITED) { 376c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff showDialog(DIALOG_CANCEL_CONNECT); 377b98463f8b0de186dc263217286449a76d6df91a8repo sync } else { 3788c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff WifiP2pConfig config = new WifiP2pConfig(); 3798c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff config.deviceAddress = mSelectedWifiPeer.device.deviceAddress; 3801e13143b3a40405a0e61d2b9219710e445878e43Irfan Sheriff 3811e13143b3a40405a0e61d2b9219710e445878e43Irfan Sheriff int forceWps = SystemProperties.getInt("wifidirect.wps", -1); 3821e13143b3a40405a0e61d2b9219710e445878e43Irfan Sheriff 3831e13143b3a40405a0e61d2b9219710e445878e43Irfan Sheriff if (forceWps != -1) { 3841e13143b3a40405a0e61d2b9219710e445878e43Irfan Sheriff config.wps.setup = forceWps; 3858c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff } else { 3861e13143b3a40405a0e61d2b9219710e445878e43Irfan Sheriff if (mSelectedWifiPeer.device.wpsPbcSupported()) { 3871e13143b3a40405a0e61d2b9219710e445878e43Irfan Sheriff config.wps.setup = WpsInfo.PBC; 3881e13143b3a40405a0e61d2b9219710e445878e43Irfan Sheriff } else if (mSelectedWifiPeer.device.wpsKeypadSupported()) { 3891e13143b3a40405a0e61d2b9219710e445878e43Irfan Sheriff config.wps.setup = WpsInfo.KEYPAD; 3901e13143b3a40405a0e61d2b9219710e445878e43Irfan Sheriff } else { 3911e13143b3a40405a0e61d2b9219710e445878e43Irfan Sheriff config.wps.setup = WpsInfo.DISPLAY; 3921e13143b3a40405a0e61d2b9219710e445878e43Irfan Sheriff } 3938c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff } 3941e13143b3a40405a0e61d2b9219710e445878e43Irfan Sheriff 3958c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff mWifiP2pManager.connect(mChannel, config, 3968c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff new WifiP2pManager.ActionListener() { 3978c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff public void onSuccess() { 3988c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff if (DBG) Log.d(TAG, " connect success"); 3998c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff } 4008c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff public void onFailure(int reason) { 4018c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff Log.e(TAG, " connect fail " + reason); 4028c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff Toast.makeText(getActivity(), 4038c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff R.string.wifi_p2p_failed_connect_message, 4048c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff Toast.LENGTH_SHORT).show(); 4058c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff } 4068c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff }); 407b98463f8b0de186dc263217286449a76d6df91a8repo sync } 408f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga } else if (preference instanceof WifiP2pPersistentGroup) { 409f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga mSelectedGroup = (WifiP2pPersistentGroup) preference; 410f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga showDialog(DIALOG_DELETE_GROUP); 411b98463f8b0de186dc263217286449a76d6df91a8repo sync } 412b98463f8b0de186dc263217286449a76d6df91a8repo sync return super.onPreferenceTreeClick(screen, preference); 413b98463f8b0de186dc263217286449a76d6df91a8repo sync } 414b98463f8b0de186dc263217286449a76d6df91a8repo sync 415b98463f8b0de186dc263217286449a76d6df91a8repo sync @Override 416b98463f8b0de186dc263217286449a76d6df91a8repo sync public Dialog onCreateDialog(int id) { 4178c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff if (id == DIALOG_DISCONNECT) { 4188c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff String deviceName = TextUtils.isEmpty(mSelectedWifiPeer.device.deviceName) ? 4198c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff mSelectedWifiPeer.device.deviceAddress : 4208c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff mSelectedWifiPeer.device.deviceName; 421db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff String msg; 422db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff if (mConnectedDevices > 1) { 423db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff msg = getActivity().getString(R.string.wifi_p2p_disconnect_multiple_message, 424db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff deviceName, mConnectedDevices - 1); 425db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff } else { 426db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff msg = getActivity().getString(R.string.wifi_p2p_disconnect_message, deviceName); 427db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff } 428b98463f8b0de186dc263217286449a76d6df91a8repo sync AlertDialog dialog = new AlertDialog.Builder(getActivity()) 4298c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff .setTitle(R.string.wifi_p2p_disconnect_title) 430db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff .setMessage(msg) 431b98463f8b0de186dc263217286449a76d6df91a8repo sync .setPositiveButton(getActivity().getString(R.string.dlg_ok), mDisconnectListener) 432b98463f8b0de186dc263217286449a76d6df91a8repo sync .setNegativeButton(getActivity().getString(R.string.dlg_cancel), null) 433b98463f8b0de186dc263217286449a76d6df91a8repo sync .create(); 434b98463f8b0de186dc263217286449a76d6df91a8repo sync return dialog; 435c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff } else if (id == DIALOG_CANCEL_CONNECT) { 436c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff int stringId = R.string.wifi_p2p_cancel_connect_message; 437c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff String deviceName = TextUtils.isEmpty(mSelectedWifiPeer.device.deviceName) ? 438c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff mSelectedWifiPeer.device.deviceAddress : 439c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff mSelectedWifiPeer.device.deviceName; 440c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff 441c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff AlertDialog dialog = new AlertDialog.Builder(getActivity()) 442c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff .setTitle(R.string.wifi_p2p_cancel_connect_title) 443c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff .setMessage(getActivity().getString(stringId, deviceName)) 444c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff .setPositiveButton(getActivity().getString(R.string.dlg_ok), mCancelConnectListener) 445c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff .setNegativeButton(getActivity().getString(R.string.dlg_cancel), null) 446c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff .create(); 447c08caf7a339677a7806e80f940d4d54690e4de92Irfan Sheriff return dialog; 44897617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff } else if (id == DIALOG_RENAME) { 44997617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff mDeviceNameText = new EditText(getActivity()); 450540f75aa922806f8af506188a36d30e9c4dbad87Irfan Sheriff mDeviceNameText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(30)}); 4515864701197e9943a706cb9bf329975f428d7d1c8Amith Yamasani if (mSavedDeviceName != null) { 4525864701197e9943a706cb9bf329975f428d7d1c8Amith Yamasani mDeviceNameText.setText(mSavedDeviceName); 4535864701197e9943a706cb9bf329975f428d7d1c8Amith Yamasani mDeviceNameText.setSelection(mSavedDeviceName.length()); 4545864701197e9943a706cb9bf329975f428d7d1c8Amith Yamasani } else if (mThisDevice != null && !TextUtils.isEmpty(mThisDevice.deviceName)) { 4555864701197e9943a706cb9bf329975f428d7d1c8Amith Yamasani mDeviceNameText.setText(mThisDevice.deviceName); 4565864701197e9943a706cb9bf329975f428d7d1c8Amith Yamasani mDeviceNameText.setSelection(0, mThisDevice.deviceName.length()); 4575864701197e9943a706cb9bf329975f428d7d1c8Amith Yamasani } 4585864701197e9943a706cb9bf329975f428d7d1c8Amith Yamasani mSavedDeviceName = null; 45997617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff AlertDialog dialog = new AlertDialog.Builder(getActivity()) 46097617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff .setTitle(R.string.wifi_p2p_menu_rename) 46197617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff .setView(mDeviceNameText) 46297617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff .setPositiveButton(getActivity().getString(R.string.dlg_ok), mRenameListener) 46397617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff .setNegativeButton(getActivity().getString(R.string.dlg_cancel), null) 46497617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff .create(); 46597617ce89e6f106f60a6ece48276a30b9fe8fdccIrfan Sheriff return dialog; 466f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga } else if (id == DIALOG_DELETE_GROUP) { 467f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga int stringId = R.string.wifi_p2p_delete_group_message; 468f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga 469f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga AlertDialog dialog = new AlertDialog.Builder(getActivity()) 470fb6faab59e63d4e48a9dc52b67bcf89a94f05079Irfan Sheriff .setMessage(getActivity().getString(stringId)) 471f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga .setPositiveButton(getActivity().getString(R.string.dlg_ok), mDeleteGroupListener) 4721a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde .setNegativeButton(getActivity().getString(R.string.dlg_cancel), 4731a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde mDeleteGroupListener).create(); 474f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga return dialog; 475b98463f8b0de186dc263217286449a76d6df91a8repo sync } 476b98463f8b0de186dc263217286449a76d6df91a8repo sync return null; 477b98463f8b0de186dc263217286449a76d6df91a8repo sync } 478b98463f8b0de186dc263217286449a76d6df91a8repo sync 479db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff @Override 480db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff public void onSaveInstanceState(Bundle outState) { 481db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff if (mSelectedWifiPeer != null) { 482db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff outState.putParcelable(SAVE_DIALOG_PEER, mSelectedWifiPeer.device); 483db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff } 4845864701197e9943a706cb9bf329975f428d7d1c8Amith Yamasani if (mDeviceNameText != null) { 4855864701197e9943a706cb9bf329975f428d7d1c8Amith Yamasani outState.putString(SAVE_DEVICE_NAME, mDeviceNameText.getText().toString()); 4865864701197e9943a706cb9bf329975f428d7d1c8Amith Yamasani } 4871a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde if (mSelectedGroup != null) { 4881a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde outState.putString(SAVE_SELECTED_GROUP, mSelectedGroup.getGroupName()); 4891a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde } 490db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff } 491db3d4bb8c489da99d23cd6e6713a6f1f10fb52bcIrfan Sheriff 4929f86b5df783ed063d1142f0050edbddf4fe3c7c2Irfan Sheriff private void handlePeersChanged() { 4938c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff mPeersGroup.removeAll(); 4942592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff 4958c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff mConnectedDevices = 0; 4969f86b5df783ed063d1142f0050edbddf4fe3c7c2Irfan Sheriff if (DBG) Log.d(TAG, "List of available peers"); 4979f86b5df783ed063d1142f0050edbddf4fe3c7c2Irfan Sheriff for (WifiP2pDevice peer: mPeers.getDeviceList()) { 4989f86b5df783ed063d1142f0050edbddf4fe3c7c2Irfan Sheriff if (DBG) Log.d(TAG, "-> " + peer); 4998c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff mPeersGroup.addPreference(new WifiP2pPeer(getActivity(), peer)); 5008c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff if (peer.status == WifiP2pDevice.CONNECTED) mConnectedDevices++; 5018c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff } 5026ac5554d3006451c2d0bf9250a6ac9e77d572b0dIrfan Sheriff if (DBG) Log.d(TAG, " mConnectedDevices " + mConnectedDevices); 5038c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff } 504b98463f8b0de186dc263217286449a76d6df91a8repo sync 505acac38011b6f596b6c74f568a53965acef4a477aYuhao Zheng @Override 506f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga public void onPersistentGroupInfoAvailable(WifiP2pGroupList groups) { 507f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga mPersistentGroup.removeAll(); 508f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga 509f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga for (WifiP2pGroup group: groups.getGroupList()) { 510f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga if (DBG) Log.d(TAG, " group " + group); 5111a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde WifiP2pPersistentGroup wppg = new WifiP2pPersistentGroup(getActivity(), group); 5121a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde mPersistentGroup.addPreference(wppg); 5131a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde if (wppg.getGroupName().equals(mSelectedGroupName)) { 5141a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde if (DBG) Log.d(TAG, "Selecting group " + wppg.getGroupName()); 5151a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde mSelectedGroup = wppg; 5161a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde mSelectedGroupName = null; 5171a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde } 5181a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde } 5191a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde if (mSelectedGroupName != null) { 5201a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde // Looks like there's a dialog pending getting user confirmation to delete the 5211a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde // selected group. When user hits OK on that dialog, we won't do anything; but we 5221a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde // shouldn't be in this situation in first place, because these groups are persistent 5231a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde // groups and they shouldn't just get deleted! 5241a9819df165c6891248ca53e50ed44ac81a516beVinit Deshapnde Log.w(TAG, " Selected group " + mSelectedGroupName + " disappered on next query "); 525f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga } 526f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga } 527f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga 528acac38011b6f596b6c74f568a53965acef4a477aYuhao Zheng @Override 5295d2169eb6fa94ea84392138291735b69d0e384e5Yuhao Zheng public void onPeersAvailable(WifiP2pDeviceList peers) { 5305d2169eb6fa94ea84392138291735b69d0e384e5Yuhao Zheng if (DBG) Log.d(TAG, "Requested peers are available"); 5315d2169eb6fa94ea84392138291735b69d0e384e5Yuhao Zheng mPeers = peers; 5325d2169eb6fa94ea84392138291735b69d0e384e5Yuhao Zheng handlePeersChanged(); 533f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga } 534f3f14665a36544e8c4fb250ad5b4742091935963Yoshihiko Ikenaga 5358c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff private void handleP2pStateChanged() { 5368c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff updateSearchMenu(false); 537acac38011b6f596b6c74f568a53965acef4a477aYuhao Zheng mThisDevicePref.setEnabled(mWifiP2pEnabled); 538acac38011b6f596b6c74f568a53965acef4a477aYuhao Zheng mPeersGroup.setEnabled(mWifiP2pEnabled); 539acac38011b6f596b6c74f568a53965acef4a477aYuhao Zheng mPersistentGroup.setEnabled(mWifiP2pEnabled); 5408c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff } 5412592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff 5428c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff private void updateSearchMenu(boolean searching) { 5438c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff mWifiP2pSearching = searching; 5448c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff Activity activity = getActivity(); 5458c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff if (activity != null) activity.invalidateOptionsMenu(); 5468c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff } 5472592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff 5488c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff private void startSearch() { 5498c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff if (mWifiP2pManager != null && !mWifiP2pSearching) { 5508c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff mWifiP2pManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() { 5518c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff public void onSuccess() { 5528c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff } 5538c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff public void onFailure(int reason) { 5548c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff if (DBG) Log.d(TAG, " discover fail " + reason); 5558c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff } 5568c2ac71b34a00a863b2c3ddcd5b5dae1d9bd6a25Irfan Sheriff }); 5572592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff } 5582592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff } 5592592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff 5602592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff private void updateDevicePref() { 5612592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff if (mThisDevice != null) { 5622592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff if (TextUtils.isEmpty(mThisDevice.deviceName)) { 5632592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff mThisDevicePref.setTitle(mThisDevice.deviceAddress); 5642592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff } else { 5652592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff mThisDevicePref.setTitle(mThisDevice.deviceName); 5662592083c1fa0ab3f7e0f5bd5240160785c5544eeIrfan Sheriff } 567b98463f8b0de186dc263217286449a76d6df91a8repo sync } 568b98463f8b0de186dc263217286449a76d6df91a8repo sync } 569b98463f8b0de186dc263217286449a76d6df91a8repo sync} 570