diff options
Diffstat (limited to 'src/com/android/settings/bluetooth/BluetoothDevicePreference.java')
-rw-r--r-- | src/com/android/settings/bluetooth/BluetoothDevicePreference.java | 46 |
1 files changed, 40 insertions, 6 deletions
diff --git a/src/com/android/settings/bluetooth/BluetoothDevicePreference.java b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java index b36d2ea..836ff12 100644 --- a/src/com/android/settings/bluetooth/BluetoothDevicePreference.java +++ b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java @@ -19,10 +19,15 @@ package com.android.settings.bluetooth; import static android.os.UserManager.DISALLOW_CONFIG_BLUETOOTH; import android.app.AlertDialog; +import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothClass; import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothProfile; +import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; +import android.content.IntentFilter; import android.os.UserManager; import android.preference.Preference; import android.text.Html; @@ -58,6 +63,10 @@ public final class BluetoothDevicePreference extends Preference implements private AlertDialog mDisconnectDialog; + private Context mContext; + + private static final int OK_BUTTON = -1; + public BluetoothDevicePreference(Context context, CachedBluetoothDevice cachedDevice) { super(context); @@ -193,21 +202,28 @@ public final class BluetoothDevicePreference extends Preference implements // Show disconnect confirmation dialog for a device. private void askDisconnect() { - Context context = getContext(); + mContext = getContext(); String name = mCachedDevice.getName(); if (TextUtils.isEmpty(name)) { - name = context.getString(R.string.bluetooth_device); + name = mContext.getString(R.string.bluetooth_device); } - String message = context.getString(R.string.bluetooth_disconnect_all_profiles, name); - String title = context.getString(R.string.bluetooth_disconnect_title); + String message = mContext.getString(R.string.bluetooth_disconnect_all_profiles, name); + String title = mContext.getString(R.string.bluetooth_disconnect_title); + + IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED); + mContext.registerReceiver(mBluetoothReceiver, filter); DialogInterface.OnClickListener disconnectListener = new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { - mCachedDevice.disconnect(); + // Disconnect only when user has selected OK + if (which == OK_BUTTON) { + mCachedDevice.disconnect(); + } + mContext.unregisterReceiver(mBluetoothReceiver); } }; - mDisconnectDialog = Utils.showDisconnectDialog(context, + mDisconnectDialog = Utils.showDisconnectDialog(mContext, mDisconnectDialog, disconnectListener, title, Html.fromHtml(message)); } @@ -270,4 +286,22 @@ public final class BluetoothDevicePreference extends Preference implements } return R.drawable.ic_settings_bluetooth; } + + private final BroadcastReceiver mBluetoothReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) { + switch (intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR)) { + case BluetoothAdapter.STATE_TURNING_OFF: + Log.v(TAG, "Receiver DISABLED_ACTION "); + if (mDisconnectDialog != null && mDisconnectDialog.isShowing()) { + mDisconnectDialog.dismiss(); + } + mContext.unregisterReceiver(mBluetoothReceiver); + break; + } + } + } + }; } |