12748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby/* 22748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby * Copyright (C) 2011 The Android Open Source Project 32748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby * 42748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby * Licensed under the Apache License, Version 2.0 (the "License"); 52748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby * you may not use this file except in compliance with the License. 62748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby * You may obtain a copy of the License at 72748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby * 82748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby * http://www.apache.org/licenses/LICENSE-2.0 92748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby * 102748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby * Unless required by applicable law or agreed to in writing, software 112748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby * distributed under the License is distributed on an "AS IS" BASIS, 122748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby * See the License for the specific language governing permissions and 142748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby * limitations under the License. 152748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby */ 162748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby 172748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hambypackage com.android.settings.bluetooth; 182748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby 1911b69bf86d7b3d8203e24473d4d91424a87bbdc1Maggie Benthallimport static android.os.UserManager.DISALLOW_CONFIG_BLUETOOTH; 2011b69bf86d7b3d8203e24473d4d91424a87bbdc1Maggie Benthall 212748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hambyimport android.bluetooth.BluetoothAdapter; 222748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hambyimport android.bluetooth.BluetoothDevice; 232748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hambyimport android.bluetooth.BluetoothDevicePicker; 2411b69bf86d7b3d8203e24473d4d91424a87bbdc1Maggie Benthallimport android.content.Context; 252748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hambyimport android.content.Intent; 26436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hambyimport android.os.Bundle; 2711b69bf86d7b3d8203e24473d4d91424a87bbdc1Maggie Benthallimport android.os.UserManager; 282748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby 292748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hambyimport com.android.settings.R; 302748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby 312748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby/** 322748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby * BluetoothSettings is the Settings screen for Bluetooth configuration and 332748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby * connection management. 342748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby */ 35436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hambypublic final class DevicePickerFragment extends DeviceListPreferenceFragment { 362748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby 373343d1aabbb04619991b7f8a2edb093cc8b1b47eMaggie Benthall public DevicePickerFragment() { 38fe21d9aaa8a8c7f8a759805ba021b59dd821e4feGeoffrey Borggaard super(null /* Not tied to any user restrictions. */); 39fe21d9aaa8a8c7f8a759805ba021b59dd821e4feGeoffrey Borggaard } 40fe21d9aaa8a8c7f8a759805ba021b59dd821e4feGeoffrey Borggaard 412748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby private boolean mNeedAuth; 422748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby private String mLaunchPackage; 432748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby private String mLaunchClass; 44de53b46b165ca65a464ecc6f062da55e11050389Jake Hamby private boolean mStartScanOnResume; 452748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby 46436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby @Override 47436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby void addPreferencesForActivity() { 48436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby addPreferencesFromResource(R.xml.device_picker); 49436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 50436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby Intent intent = getActivity().getIntent(); 512748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby mNeedAuth = intent.getBooleanExtra(BluetoothDevicePicker.EXTRA_NEED_AUTH, false); 52436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby setFilter(intent.getIntExtra(BluetoothDevicePicker.EXTRA_FILTER_TYPE, 53436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby BluetoothDevicePicker.FILTER_TYPE_ALL)); 542748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby mLaunchPackage = intent.getStringExtra(BluetoothDevicePicker.EXTRA_LAUNCH_PACKAGE); 552748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby mLaunchClass = intent.getStringExtra(BluetoothDevicePicker.EXTRA_LAUNCH_CLASS); 56436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby } 572748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby 58436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby @Override 59436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby public void onCreate(Bundle savedInstanceState) { 60436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby super.onCreate(savedInstanceState); 61436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby getActivity().setTitle(getString(R.string.device_picker)); 6211b69bf86d7b3d8203e24473d4d91424a87bbdc1Maggie Benthall UserManager um = (UserManager) getSystemService(Context.USER_SERVICE); 6311b69bf86d7b3d8203e24473d4d91424a87bbdc1Maggie Benthall mStartScanOnResume = !um.hasUserRestriction(DISALLOW_CONFIG_BLUETOOTH) 6411b69bf86d7b3d8203e24473d4d91424a87bbdc1Maggie Benthall && (savedInstanceState == null); // don't start scan after rotation 652748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby } 662748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby 672748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby @Override 682748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby public void onResume() { 692748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby super.onResume(); 704346cda76c6faa69d7341eb5e4e5bf21c2210e7fGilles Debunne addCachedDevices(); 71de53b46b165ca65a464ecc6f062da55e11050389Jake Hamby if (mStartScanOnResume) { 72de53b46b165ca65a464ecc6f062da55e11050389Jake Hamby mLocalAdapter.startScanning(true); 73de53b46b165ca65a464ecc6f062da55e11050389Jake Hamby mStartScanOnResume = false; 74de53b46b165ca65a464ecc6f062da55e11050389Jake Hamby } 752748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby } 762748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby 77436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby @Override 782748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby void onDevicePreferenceClick(BluetoothDevicePreference btPreference) { 79436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby mLocalAdapter.stopScanning(); 80436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby LocalBluetoothPreferences.persistSelectedDeviceInPicker( 81436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby getActivity(), mSelectedDevice.getAddress()); 822748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby if ((btPreference.getCachedDevice().getBondState() == 832748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby BluetoothDevice.BOND_BONDED) || !mNeedAuth) { 842748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby sendDevicePickedIntent(mSelectedDevice); 852748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby finish(); 862748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby } else { 872748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby super.onDevicePreferenceClick(btPreference); 882748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby } 892748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby } 902748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby 912748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby public void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice, 922748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby int bondState) { 932748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby if (bondState == BluetoothDevice.BOND_BONDED) { 942748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby BluetoothDevice device = cachedDevice.getDevice(); 952748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby if (device.equals(mSelectedDevice)) { 962748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby sendDevicePickedIntent(device); 972748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby finish(); 982748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby } 992748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby } 1002748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby } 1012748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby 102436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby @Override 103436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby public void onBluetoothStateChanged(int bluetoothState) { 1042748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby super.onBluetoothStateChanged(bluetoothState); 1052748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby 1062748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby if (bluetoothState == BluetoothAdapter.STATE_ON) { 107e78c1879058571c00879f0d3e756951302adf513Gilles Debunne mLocalAdapter.startScanning(false); 1082748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby } 1092748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby } 1102748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby 111436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby private void sendDevicePickedIntent(BluetoothDevice device) { 1122748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby Intent intent = new Intent(BluetoothDevicePicker.ACTION_DEVICE_SELECTED); 1132748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby intent.putExtra(BluetoothDevice.EXTRA_DEVICE, device); 1142748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby if (mLaunchPackage != null && mLaunchClass != null) { 1152748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby intent.setClassName(mLaunchPackage, mLaunchClass); 1162748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby } 1172748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby getActivity().sendBroadcast(intent); 1182748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby } 1192748fc24cfeef9a79fc5e29c02a71737def35e6aJake Hamby} 120