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