OSDN Git Service

resolved conflicts for merge of 1b7ffcf4 to master
authorJaikumar Ganesh <jaikumar@google.com>
Wed, 16 Sep 2009 18:56:11 +0000 (11:56 -0700)
committerJaikumar Ganesh <jaikumar@google.com>
Wed, 16 Sep 2009 18:56:11 +0000 (11:56 -0700)
AndroidManifest.xml
res/values/strings.xml
src/com/android/settings/bluetooth/BluetoothEventRedirector.java
src/com/android/settings/bluetooth/BluetoothPairingDialog.java
src/com/android/settings/bluetooth/BluetoothPairingRequest.java
src/com/android/settings/bluetooth/CachedBluetoothDeviceManager.java
src/com/android/settings/bluetooth/LocalBluetoothManager.java

index 4a5b258..2512241 100644 (file)
                   android:label="@string/bluetooth_connect_specific_profiles_title" />
 
         <activity android:name=".bluetooth.BluetoothPairingDialog"
-                  android:label="@string/bluetooth_pin_entry"
+                  android:label="@string/bluetooth_pairing_dialog"
                   android:excludeFromRecents="true"
                   android:theme="@*android:style/Theme.Dialog.Alert">
             <intent-filter>
index f807dc2..71dd9ec 100644 (file)
     <string name="bluetooth_settings_summary">Manage connections, set device name &amp; discoverability</string>
 
     <!-- Title for the dialog to enter PIN.  -->
-    <string name="bluetooth_pin_entry">Bluetooth pairing request</string>
+    <string name="bluetooth_pairing_request">Bluetooth pairing request</string>
     <!-- Title for the bluetooth device info screen. -->
     <string name="bluetooth_device_info">Bluetooth device info</string>
     <!-- Message when bluetooth dialog for pin entry is showing -->
     <string name="bluetooth_enter_passkey_msg">\nType passkey to pair with \u0022<xliff:g id="device_name">%1$s</xliff:g>\u0022.</string>
     <!-- Message when bluetooth dialog for confirmation of passkey is showing -->
     <string name="bluetooth_confirm_passkey_msg">To pair with \u0022<xliff:g id="device_name">%1$s</xliff:g>\u0022, confirm that it is showing the passkey: <xliff:g id="passkey">%2$s</xliff:g>.</string>
+    <!-- Message when bluetooth incoming pairing request for (2.1 devices) dialog is showing -->
+    <string name="bluetooth_incoming_pairing_msg"><xliff:g id="device_name">%1$s</xliff:g>\nwants to pair.</string>
+    <!-- Message when bluetooth dialog when passkey needs to be displayed. -->
+    <string name="bluetooth_display_passkey_msg">Enter <xliff:g id="passkey">%2$s</xliff:g> on \u0022<xliff:g id="device_name">%1$s</xliff:g>\u0022 to pair. </string>
     <!-- Button text for accepting an incoming pairing request -->
     <string name="bluetooth_pairing_accept">Pair</string>
     <!-- Button text for declining an incoming pairing request -->
     <string name="bluetooth_pairing_decline">Don\u0027t Pair</string>
+    <!-- Generic string for remote Bluetooth device  -->
+    <string name="bluetooth_remote_device">bluetooth device</string>
 
     <!-- Title for BT error dialogs. -->
     <string name="bluetooth_error_title">Attention</string>
     <string name="bluetooth_pairing_error_message">There was a problem pairing with <xliff:g id="device_name">%1$s</xliff:g>.</string> 
     <!-- Message for the error dialog when BT pairing fails because the PIN /
     Passkey entered is incorrect. -->
-    <string name="bluetooth_pairing_pin_error_message">There was a problem pairing with <xliff:g id="device_name">%1$s</xliff:g> because the typed PIN or Passkey is incorrect.</string>
+    <string name="bluetooth_pairing_pin_error_message">There was a problem pairing with <xliff:g id="device_name">%1$s</xliff:g> because the PIN or Passkey is incorrect.</string>
     <!-- Message for the error dialog when BT pairing fails because the other device is down. -->
     <string name="bluetooth_pairing_device_down_error_message">Cannot establish communication with <xliff:g id="device_name">%1$s</xliff:g>.</string>
     <!-- Message for the error dialog when BT pairing fails because the other device rejected the pairing. -->
index 44bc640..1a373dd 100644 (file)
@@ -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);
index 04b3b6e..7004ba0 100644 (file)
@@ -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");
         }
     }
 
index 8727806..2fa1744 100644 (file)
@@ -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);
             }
index e3f048a..7052bfb 100644 (file)
@@ -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,
index 9ec95ab..501f767 100644 (file)
@@ -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();
         }
     }