Close scan screen when pairing and remove device when unpairing.
Close the scan screen after successful pairing, and remove a device from the list of paired devices after unpairing. As part of the fix, BluetoothSettings was refactored into a parent class, DeviceListPreferenceFragment, and three subclasses for each variant type: BluetoothSettings, BluetoothFindNearby, and DevicePickerFragment, replacing the checks against mScreenType with custom logic in the child classes. Bug: 3325848 Change-Id: If64fddc3ba5b4f1136451491c7d5a1139b696e47
This commit is contained in:
98
src/com/android/settings/bluetooth/DevicePickerFragment.java
Normal file
98
src/com/android/settings/bluetooth/DevicePickerFragment.java
Normal file
@@ -0,0 +1,98 @@
|
||||
/*
|
||||
* Copyright (C) 2011 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.settings.bluetooth;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
import android.bluetooth.BluetoothDevice;
|
||||
import android.bluetooth.BluetoothDevicePicker;
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.settings.R;
|
||||
|
||||
/**
|
||||
* BluetoothSettings is the Settings screen for Bluetooth configuration and
|
||||
* connection management.
|
||||
*/
|
||||
public class DevicePickerFragment extends DeviceListPreferenceFragment {
|
||||
|
||||
private static final String TAG = "BluetoothDevicePicker";
|
||||
|
||||
private boolean mNeedAuth;
|
||||
private String mLaunchPackage;
|
||||
private String mLaunchClass;
|
||||
|
||||
void addPreferencesForActivity(Activity activity) {
|
||||
Intent intent = activity.getIntent();
|
||||
mNeedAuth = intent.getBooleanExtra(BluetoothDevicePicker.EXTRA_NEED_AUTH, false);
|
||||
mFilterType = intent.getIntExtra(BluetoothDevicePicker.EXTRA_FILTER_TYPE,
|
||||
BluetoothDevicePicker.FILTER_TYPE_ALL);
|
||||
mLaunchPackage = intent.getStringExtra(BluetoothDevicePicker.EXTRA_LAUNCH_PACKAGE);
|
||||
mLaunchClass = intent.getStringExtra(BluetoothDevicePicker.EXTRA_LAUNCH_CLASS);
|
||||
|
||||
activity.setTitle(activity.getString(R.string.device_picker));
|
||||
addPreferencesFromResource(R.xml.device_picker);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
addDevices();
|
||||
mLocalManager.startScanning(true);
|
||||
}
|
||||
|
||||
void onDevicePreferenceClick(BluetoothDevicePreference btPreference) {
|
||||
mLocalManager.stopScanning();
|
||||
mLocalManager.persistSelectedDeviceInPicker(mSelectedDevice.getAddress());
|
||||
if ((btPreference.getCachedDevice().getBondState() ==
|
||||
BluetoothDevice.BOND_BONDED) || !mNeedAuth) {
|
||||
sendDevicePickedIntent(mSelectedDevice);
|
||||
finish();
|
||||
} else {
|
||||
super.onDevicePreferenceClick(btPreference);
|
||||
}
|
||||
}
|
||||
|
||||
public void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice,
|
||||
int bondState) {
|
||||
if (bondState == BluetoothDevice.BOND_BONDED) {
|
||||
BluetoothDevice device = cachedDevice.getDevice();
|
||||
if (device.equals(mSelectedDevice)) {
|
||||
sendDevicePickedIntent(device);
|
||||
finish();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void onBluetoothStateChanged(int bluetoothState) {
|
||||
super.onBluetoothStateChanged(bluetoothState);
|
||||
|
||||
if (bluetoothState == BluetoothAdapter.STATE_ON) {
|
||||
mLocalManager.startScanning(false);
|
||||
}
|
||||
}
|
||||
|
||||
void sendDevicePickedIntent(BluetoothDevice device) {
|
||||
Intent intent = new Intent(BluetoothDevicePicker.ACTION_DEVICE_SELECTED);
|
||||
intent.putExtra(BluetoothDevice.EXTRA_DEVICE, device);
|
||||
if (mLaunchPackage != null && mLaunchClass != null) {
|
||||
intent.setClassName(mLaunchPackage, mLaunchClass);
|
||||
}
|
||||
getActivity().sendBroadcast(intent);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user