From 435ad270b5f4e31e94a2bba204769660bbd4b3ca Mon Sep 17 00:00:00 2001 From: Jaikumar Ganesh Date: Wed, 16 Sep 2009 11:56:11 -0700 Subject: [PATCH] resolved conflicts for merge of 1b7ffcf4 to master --- AndroidManifest.xml | 2 +- res/values/strings.xml | 10 +- .../bluetooth/BluetoothEventRedirector.java | 11 +- .../settings/bluetooth/BluetoothPairingDialog.java | 118 +++++++++++++-------- .../bluetooth/BluetoothPairingRequest.java | 3 +- .../bluetooth/CachedBluetoothDeviceManager.java | 14 ++- .../settings/bluetooth/LocalBluetoothManager.java | 11 +- 7 files changed, 106 insertions(+), 63 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 4a5b258ad0..2512241423 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -444,7 +444,7 @@ android:label="@string/bluetooth_connect_specific_profiles_title" /> diff --git a/res/values/strings.xml b/res/values/strings.xml index f807dc2741..71dd9ece86 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -509,7 +509,7 @@ Manage connections, set device name & discoverability - Bluetooth pairing request + Bluetooth pairing request Bluetooth device info @@ -518,10 +518,16 @@ \nType passkey to pair with \u0022%1$s\u0022. To pair with \u0022%1$s\u0022, confirm that it is showing the passkey: %2$s. + + %1$s\nwants to pair. + + Enter %2$s on \u0022%1$s\u0022 to pair. Pair Don\u0027t Pair + + bluetooth device Attention @@ -529,7 +535,7 @@ There was a problem pairing with %1$s. - There was a problem pairing with %1$s because the typed PIN or Passkey is incorrect. + There was a problem pairing with %1$s because the PIN or Passkey is incorrect. Cannot establish communication with %1$s. diff --git a/src/com/android/settings/bluetooth/BluetoothEventRedirector.java b/src/com/android/settings/bluetooth/BluetoothEventRedirector.java index 44bc640a11..1a373dde4e 100644 --- a/src/com/android/settings/bluetooth/BluetoothEventRedirector.java +++ b/src/com/android/settings/bluetooth/BluetoothEventRedirector.java @@ -27,6 +27,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.util.Log; +import com.android.settings.R; import com.android.settings.bluetooth.LocalBluetoothProfileManager.Profile; /** @@ -78,11 +79,7 @@ public class BluetoothEventRedirector { mManager.getCachedDeviceManager().onBondingStateChanged(device, bondState); if (bondState == BluetoothDevice.BOND_NONE) { int reason = intent.getIntExtra(BluetoothDevice.EXTRA_REASON, BluetoothDevice.ERROR); - if (reason == BluetoothDevice.UNBOND_REASON_AUTH_REJECTED || - reason == BluetoothDevice.UNBOND_REASON_AUTH_FAILED || - reason == BluetoothDevice.UNBOND_REASON_REMOTE_DEVICE_DOWN) { - mManager.getCachedDeviceManager().onBondingError(device, reason); - } + mManager.getCachedDeviceManager().onBondingError(device, reason); } } else if (action.equals(BluetoothHeadset.ACTION_STATE_CHANGED)) { @@ -110,6 +107,9 @@ public class BluetoothEventRedirector { } else if (action.equals(BluetoothDevice.ACTION_CLASS_CHANGED)) { mManager.getCachedDeviceManager().onBtClassChanged(device); + } else if (action.equals(BluetoothDevice.ACTION_PAIRING_CANCEL)) { + int errorMsg = R.string.bluetooth_pairing_error_message; + mManager.showError(device, R.string.bluetooth_error_title, errorMsg); } } }; @@ -133,6 +133,7 @@ public class BluetoothEventRedirector { // Pairing broadcasts filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED); + filter.addAction(BluetoothDevice.ACTION_PAIRING_CANCEL); // Fine-grained state broadcasts filter.addAction(BluetoothA2dp.ACTION_SINK_STATE_CHANGED); diff --git a/src/com/android/settings/bluetooth/BluetoothPairingDialog.java b/src/com/android/settings/bluetooth/BluetoothPairingDialog.java index 04b3b6e7f2..7004ba0fa9 100644 --- a/src/com/android/settings/bluetooth/BluetoothPairingDialog.java +++ b/src/com/android/settings/bluetooth/BluetoothPairingDialog.java @@ -51,23 +51,25 @@ public class BluetoothPairingDialog extends AlertActivity implements DialogInter private LocalBluetoothManager mLocalManager; private BluetoothDevice mDevice; private int mType; - private String mConfirmationPasskey; + private String mPasskey; private EditText mPairingView; private Button mOkButton; - private static final String INSTANCE_KEY_PAIRING_CANCELED = "received_pairing_canceled"; - private boolean mReceivedPairingCanceled; - private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - if (!BluetoothDevice.ACTION_PAIRING_CANCEL.equals(intent.getAction())) { - return; - } - - BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); - if (device == null || device.equals(mDevice)) { - onReceivedPairingCanceled(); + if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(intent.getAction())) { + int bondState = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, + BluetoothDevice.ERROR); + if (bondState == BluetoothDevice.BOND_BONDED || + bondState == BluetoothDevice.BOND_NONE) { + dismissDialog(); + } + } else if(BluetoothDevice.ACTION_PAIRING_CANCEL.equals(intent.getAction())) { + BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); + if (device == null || device.equals(mDevice)) { + dismissDialog(); + } } } }; @@ -92,15 +94,26 @@ public class BluetoothPairingDialog extends AlertActivity implements DialogInter createUserEntryDialog(); } else if (mType == BluetoothDevice.PAIRING_VARIANT_PASSKEY) { createUserEntryDialog(); - } else if (mType == BluetoothDevice.PAIRING_VARIANT_CONFIRMATION){ + } else if (mType == BluetoothDevice.PAIRING_VARIANT_PASSKEY_CONFIRMATION){ int passkey = intent.getIntExtra(BluetoothDevice.EXTRA_PASSKEY, BluetoothDevice.ERROR); if (passkey == BluetoothDevice.ERROR) { Log.e(TAG, "Invalid ConfirmationPasskey received, not showing any dialog"); return; } - mConfirmationPasskey = String.format("%06d", passkey); + mPasskey = String.format("%06d", passkey); createConfirmationDialog(); + } else if (mType == BluetoothDevice.PAIRING_VARIANT_CONSENT) { + createConsentDialog(); + } else if (mType == BluetoothDevice.PAIRING_VARIANT_DISPLAY_PASSKEY) { + int passkey = + intent.getIntExtra(BluetoothDevice.EXTRA_PASSKEY, BluetoothDevice.ERROR); + if (passkey == BluetoothDevice.ERROR) { + Log.e(TAG, "Invalid ConfirmationPasskey received, not showing any dialog"); + return; + } + mPasskey = String.format("%06d", passkey); + createDisplayPasskeyDialog(); } else { Log.e(TAG, "Incorrect pairing type received, not showing any dialog"); } @@ -110,12 +123,13 @@ public class BluetoothPairingDialog extends AlertActivity implements DialogInter * finish the activity in the background if pairing is canceled. */ registerReceiver(mReceiver, new IntentFilter(BluetoothDevice.ACTION_PAIRING_CANCEL)); + registerReceiver(mReceiver, new IntentFilter(BluetoothDevice.ACTION_BOND_STATE_CHANGED)); } private void createUserEntryDialog() { final AlertController.AlertParams p = mAlertParams; p.mIconId = android.R.drawable.ic_dialog_info; - p.mTitle = getString(R.string.bluetooth_pin_entry); + p.mTitle = getString(R.string.bluetooth_pairing_request); p.mView = createView(); p.mPositiveButtonText = getString(android.R.string.ok); p.mPositiveButtonListener = this; @@ -143,13 +157,22 @@ public class BluetoothPairingDialog extends AlertActivity implements DialogInter } else if (mType == BluetoothDevice.PAIRING_VARIANT_PASSKEY){ messageView.setText(getString(R.string.bluetooth_enter_passkey_msg, name)); // Maximum of 6 digits for passkey - mPairingView.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED); + mPairingView.setInputType(InputType.TYPE_CLASS_NUMBER | + InputType.TYPE_NUMBER_FLAG_SIGNED); mPairingView.setFilters(new InputFilter[] { new LengthFilter(BLUETOOTH_PASSKEY_MAX_LENGTH)}); - } else { + } else if (mType == BluetoothDevice.PAIRING_VARIANT_PASSKEY_CONFIRMATION) { mPairingView.setVisibility(View.GONE); messageView.setText(getString(R.string.bluetooth_confirm_passkey_msg, name, - mConfirmationPasskey)); + mPasskey)); + } else if (mType == BluetoothDevice.PAIRING_VARIANT_CONSENT) { + mPairingView.setVisibility(View.GONE); + messageView.setText(getString(R.string.bluetooth_incoming_pairing_msg, name)); + } else if (mType == BluetoothDevice.PAIRING_VARIANT_DISPLAY_PASSKEY) { + mPairingView.setVisibility(View.GONE); + messageView.setText(getString(R.string.bluetooth_display_passkey_msg, name, mPasskey)); + } else { + Log.e(TAG, "Incorrect pairing type received, not creating view"); } return view; } @@ -157,7 +180,7 @@ public class BluetoothPairingDialog extends AlertActivity implements DialogInter private void createConfirmationDialog() { final AlertController.AlertParams p = mAlertParams; p.mIconId = android.R.drawable.ic_dialog_info; - p.mTitle = getString(R.string.bluetooth_pin_entry); + p.mTitle = getString(R.string.bluetooth_pairing_request); p.mView = createView(); p.mPositiveButtonText = getString(R.string.bluetooth_pairing_accept); p.mPositiveButtonListener = this; @@ -166,27 +189,35 @@ public class BluetoothPairingDialog extends AlertActivity implements DialogInter setupAlert(); } - @Override - protected void onRestoreInstanceState(Bundle savedInstanceState) { - super.onRestoreInstanceState(savedInstanceState); - - mReceivedPairingCanceled = savedInstanceState.getBoolean(INSTANCE_KEY_PAIRING_CANCELED); - if (mReceivedPairingCanceled) { - onReceivedPairingCanceled(); - } + private void createConsentDialog() { + final AlertController.AlertParams p = mAlertParams; + p.mIconId = android.R.drawable.ic_dialog_info; + p.mTitle = getString(R.string.bluetooth_pairing_request); + p.mView = createView(); + p.mPositiveButtonText = getString(R.string.bluetooth_pairing_accept); + p.mPositiveButtonListener = this; + p.mNegativeButtonText = getString(R.string.bluetooth_pairing_decline); + p.mNegativeButtonListener = this; + setupAlert(); } - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); + private void createDisplayPasskeyDialog() { + final AlertController.AlertParams p = mAlertParams; + p.mIconId = android.R.drawable.ic_dialog_info; + p.mTitle = getString(R.string.bluetooth_pairing_request); + p.mView = createView(); + p.mPositiveButtonText = getString(android.R.string.ok); + p.mPositiveButtonListener = this; + setupAlert(); - outState.putBoolean(INSTANCE_KEY_PAIRING_CANCELED, mReceivedPairingCanceled); + // Since its only a notification, send an OK to the framework, + // indicating that the dialog has been displayed. + mDevice.setPairingConfirmation(true); } @Override protected void onDestroy() { super.onDestroy(); - unregisterReceiver(mReceiver); } @@ -196,21 +227,8 @@ public class BluetoothPairingDialog extends AlertActivity implements DialogInter } } - private void onReceivedPairingCanceled() { - mReceivedPairingCanceled = true; - - TextView messageView = (TextView) findViewById(R.id.message); - messageView.setText(getString(R.string.bluetooth_pairing_error_message, - mDevice.getName())); - - mPairingView.setVisibility(View.GONE); - mPairingView.clearFocus(); - mPairingView.removeTextChangedListener(this); - - mOkButton = mAlert.getButton(DialogInterface.BUTTON_POSITIVE); - mOkButton.setEnabled(true); - mOkButton.setText(android.R.string.ok); - mAlert.getButton(DialogInterface.BUTTON_NEGATIVE).setVisibility(View.GONE); + private void dismissDialog() { + this.dismiss(); } private void onPair(String value) { @@ -223,8 +241,14 @@ public class BluetoothPairingDialog extends AlertActivity implements DialogInter } else if (mType == BluetoothDevice.PAIRING_VARIANT_PASSKEY) { int passkey = Integer.parseInt(value); mDevice.setPasskey(passkey); - } else { + } else if (mType == BluetoothDevice.PAIRING_VARIANT_PASSKEY_CONFIRMATION) { mDevice.setPairingConfirmation(true); + } else if (mType == BluetoothDevice.PAIRING_VARIANT_CONSENT) { + mDevice.setPairingConfirmation(true); + } else if (mType == BluetoothDevice.PAIRING_VARIANT_DISPLAY_PASSKEY) { + // Do Nothing. + } else { + Log.e(TAG, "Incorrect pairing type received"); } } diff --git a/src/com/android/settings/bluetooth/BluetoothPairingRequest.java b/src/com/android/settings/bluetooth/BluetoothPairingRequest.java index 87278061a6..2fa17448ea 100644 --- a/src/com/android/settings/bluetooth/BluetoothPairingRequest.java +++ b/src/com/android/settings/bluetooth/BluetoothPairingRequest.java @@ -54,7 +54,8 @@ public class BluetoothPairingRequest extends BroadcastReceiver { pairingIntent.setClass(context, BluetoothPairingDialog.class); pairingIntent.putExtra(BluetoothDevice.EXTRA_DEVICE, device); pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, type); - if (type == BluetoothDevice.PAIRING_VARIANT_CONFIRMATION) { + if (type == BluetoothDevice.PAIRING_VARIANT_PASSKEY_CONFIRMATION || + type == BluetoothDevice.PAIRING_VARIANT_DISPLAY_PASSKEY) { int passkey = intent.getIntExtra(BluetoothDevice.EXTRA_PASSKEY, BluetoothDevice.ERROR); pairingIntent.putExtra(BluetoothDevice.EXTRA_PASSKEY, passkey); } diff --git a/src/com/android/settings/bluetooth/CachedBluetoothDeviceManager.java b/src/com/android/settings/bluetooth/CachedBluetoothDeviceManager.java index e3f048a93d..7052bfb6ed 100644 --- a/src/com/android/settings/bluetooth/CachedBluetoothDeviceManager.java +++ b/src/com/android/settings/bluetooth/CachedBluetoothDeviceManager.java @@ -85,7 +85,6 @@ public class CachedBluetoothDeviceManager { mCachedDevices.add(cachedDevice); deviceAdded = true; } - cachedDevice.setRssi(rssi); cachedDevice.setBtClass(btClass); cachedDevice.setName(name); @@ -193,17 +192,26 @@ public class CachedBluetoothDeviceManager { switch(reason) { case BluetoothDevice.UNBOND_REASON_AUTH_FAILED: errorMsg = R.string.bluetooth_pairing_pin_error_message; + mLocalManager.showError(device, R.string.bluetooth_error_title, errorMsg); break; case BluetoothDevice.UNBOND_REASON_AUTH_REJECTED: errorMsg = R.string.bluetooth_pairing_rejected_error_message; + mLocalManager.showError(device, R.string.bluetooth_error_title, errorMsg); break; case BluetoothDevice.UNBOND_REASON_REMOTE_DEVICE_DOWN: errorMsg = R.string.bluetooth_pairing_device_down_error_message; + mLocalManager.showError(device, R.string.bluetooth_error_title, errorMsg); break; - default: + case BluetoothDevice.UNBOND_REASON_DISCOVERY_IN_PROGRESS: + case BluetoothDevice.UNBOND_REASON_AUTH_TIMEOUT: + case BluetoothDevice.UNBOND_REASON_REPEATED_ATTEMPTS: errorMsg = R.string.bluetooth_pairing_error_message; + mLocalManager.showError(device, R.string.bluetooth_error_title, errorMsg); + break; + default: + Log.w(TAG, "onBondingError: Not displaying any error message for reason:" + reason); + break; } - mLocalManager.showError(device, R.string.bluetooth_error_title, errorMsg); } public synchronized void onProfileStateChanged(BluetoothDevice device, Profile profile, diff --git a/src/com/android/settings/bluetooth/LocalBluetoothManager.java b/src/com/android/settings/bluetooth/LocalBluetoothManager.java index 9ec95ab823..501f767f67 100644 --- a/src/com/android/settings/bluetooth/LocalBluetoothManager.java +++ b/src/com/android/settings/bluetooth/LocalBluetoothManager.java @@ -254,9 +254,12 @@ public class LocalBluetoothManager { public void showError(BluetoothDevice device, int titleResId, int messageResId) { CachedBluetoothDevice cachedDevice = mCachedDeviceManager.findDevice(device); - if (cachedDevice == null) return; - - String name = cachedDevice.getName(); + String name = null; + if (cachedDevice == null) { + name = mContext.getString(R.string.bluetooth_remote_device); + } else { + name = cachedDevice.getName(); + } String message = mContext.getString(messageResId, name); if (mForegroundActivity != null) { @@ -269,7 +272,7 @@ public class LocalBluetoothManager { .show(); } else { // Fallback on a toast - Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show(); + Toast.makeText(mContext, message, Toast.LENGTH_LONG).show(); } } -- 2.11.0