1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/* 2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License. 6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at 7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and 14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License. 15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings.bluetooth; 18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 192ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padaweimport android.bluetooth.BluetoothClass; 20afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.bluetooth.BluetoothDevice; 21afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.BroadcastReceiver; 22afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Context; 23afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.DialogInterface; 24afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent; 25afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.IntentFilter; 26afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle; 27afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.text.Editable; 28ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hambyimport android.text.Html; 29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.text.InputFilter; 303a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganeshimport android.text.InputType; 31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.text.TextWatcher; 32afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.text.InputFilter.LengthFilter; 33afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.util.Log; 34afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.View; 35afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.Button; 36ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hambyimport android.widget.CheckBox; 37ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hambyimport android.widget.CompoundButton; 38afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.EditText; 39afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.TextView; 40afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.internal.app.AlertActivity; 42afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.internal.app.AlertController; 43afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.settings.R; 44f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monkimport com.android.settingslib.bluetooth.CachedBluetoothDeviceManager; 45f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monkimport com.android.settingslib.bluetooth.LocalBluetoothManager; 46f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk 47aaf8ffff79a73c71d3fb77a31950e344f4c7eab5jhtop.kimimport android.view.KeyEvent; 48afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 49ae8d5bdc5bfabb457135dbe9c30084bffdc16a7cFabrice Di Meglioimport java.util.Locale; 50ae8d5bdc5bfabb457135dbe9c30084bffdc16a7cFabrice Di Meglio 51afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/** 523a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh * BluetoothPairingDialog asks the user to enter a PIN / Passkey / simple confirmation 533a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh * for pairing with a remote Bluetooth device. It is an activity that appears as a dialog. 54afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 55ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hambypublic final class BluetoothPairingDialog extends AlertActivity implements 56ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby CompoundButton.OnCheckedChangeListener, DialogInterface.OnClickListener, TextWatcher { 573a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh private static final String TAG = "BluetoothPairingDialog"; 58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 59e79f990490de49b39097433707c2bae6d8238330Jake Hamby private static final int BLUETOOTH_PIN_MAX_LENGTH = 16; 60e79f990490de49b39097433707c2bae6d8238330Jake Hamby private static final int BLUETOOTH_PASSKEY_MAX_LENGTH = 6; 61a539716a94cbfe33e32229549b70d7cb418d8840Edward Jee 62a539716a94cbfe33e32229549b70d7cb418d8840Edward Jee private LocalBluetoothManager mBluetoothManager; 63a539716a94cbfe33e32229549b70d7cb418d8840Edward Jee private CachedBluetoothDeviceManager mCachedDeviceManager; 64d63c0112251ab4e4e977545368dd703d875012a4Nick Pelly private BluetoothDevice mDevice; 653a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh private int mType; 66da23ae88d110dce585b19581a180feefbb0be4c8Jaikumar Ganesh private String mPairingKey; 673a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh private EditText mPairingView; 68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Button mOkButton; 69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 70436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby /** 71436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * Dismiss the dialog if the bond state changes to bonded or none, 72436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby * or if pairing was canceled for {@link #mDevice}. 73436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby */ 74436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onReceive(Context context, Intent intent) { 77436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby String action = intent.getAction(); 78436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) { 79435ad270b5f4e31e94a2bba204769660bbd4b3caJaikumar Ganesh int bondState = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, 80435ad270b5f4e31e94a2bba204769660bbd4b3caJaikumar Ganesh BluetoothDevice.ERROR); 81435ad270b5f4e31e94a2bba204769660bbd4b3caJaikumar Ganesh if (bondState == BluetoothDevice.BOND_BONDED || 82435ad270b5f4e31e94a2bba204769660bbd4b3caJaikumar Ganesh bondState == BluetoothDevice.BOND_NONE) { 83436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby dismiss(); 84435ad270b5f4e31e94a2bba204769660bbd4b3caJaikumar Ganesh } 85436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby } else if (BluetoothDevice.ACTION_PAIRING_CANCEL.equals(action)) { 86435ad270b5f4e31e94a2bba204769660bbd4b3caJaikumar Ganesh BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 87435ad270b5f4e31e94a2bba204769660bbd4b3caJaikumar Ganesh if (device == null || device.equals(mDevice)) { 88436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby dismiss(); 89435ad270b5f4e31e94a2bba204769660bbd4b3caJaikumar Ganesh } 90afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 91afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 92afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project }; 933a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh 94afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 95afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onCreate(Bundle savedInstanceState) { 96afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(savedInstanceState); 97afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 98afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Intent intent = getIntent(); 9916cc86315d7a8e1f6a0f3083d0a810a7cb097832Nick Pelly if (!intent.getAction().equals(BluetoothDevice.ACTION_PAIRING_REQUEST)) 100afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project { 101436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby Log.e(TAG, "Error: this activity may be started only with intent " + 10216cc86315d7a8e1f6a0f3083d0a810a7cb097832Nick Pelly BluetoothDevice.ACTION_PAIRING_REQUEST); 103afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project finish(); 104436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby return; 105afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 1063a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh 107f2982a9ba19340b474bafb6b0bf5832673984e0dJason Monk mBluetoothManager = Utils.getLocalBtManager(this); 108a539716a94cbfe33e32229549b70d7cb418d8840Edward Jee if (mBluetoothManager == null) { 109436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby Log.e(TAG, "Error: BluetoothAdapter not supported by system"); 110436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby finish(); 111436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby return; 112436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby } 113a539716a94cbfe33e32229549b70d7cb418d8840Edward Jee mCachedDeviceManager = mBluetoothManager.getCachedDeviceManager(); 114436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 11516cc86315d7a8e1f6a0f3083d0a810a7cb097832Nick Pelly mDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 11616cc86315d7a8e1f6a0f3083d0a810a7cb097832Nick Pelly mType = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, BluetoothDevice.ERROR); 117436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 118436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby switch (mType) { 119436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothDevice.PAIRING_VARIANT_PIN: 120e278a208bc8298963080dfb5352acedc65aad083Casper Bonde case BluetoothDevice.PAIRING_VARIANT_PIN_16_DIGITS: 121436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothDevice.PAIRING_VARIANT_PASSKEY: 122a539716a94cbfe33e32229549b70d7cb418d8840Edward Jee createUserEntryDialog(); 123436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby break; 124436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 125436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothDevice.PAIRING_VARIANT_PASSKEY_CONFIRMATION: 126436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby int passkey = 127436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_KEY, BluetoothDevice.ERROR); 128436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby if (passkey == BluetoothDevice.ERROR) { 129436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby Log.e(TAG, "Invalid Confirmation Passkey received, not showing any dialog"); 130436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby return; 131436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby } 132ae8d5bdc5bfabb457135dbe9c30084bffdc16a7cFabrice Di Meglio mPairingKey = String.format(Locale.US, "%06d", passkey); 133a539716a94cbfe33e32229549b70d7cb418d8840Edward Jee createConfirmationDialog(); 134436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby break; 135436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 136436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothDevice.PAIRING_VARIANT_CONSENT: 137436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothDevice.PAIRING_VARIANT_OOB_CONSENT: 138a539716a94cbfe33e32229549b70d7cb418d8840Edward Jee createConsentDialog(); 139436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby break; 140436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 141436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothDevice.PAIRING_VARIANT_DISPLAY_PASSKEY: 142436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothDevice.PAIRING_VARIANT_DISPLAY_PIN: 143436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby int pairingKey = 144436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_KEY, BluetoothDevice.ERROR); 145436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby if (pairingKey == BluetoothDevice.ERROR) { 146436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby Log.e(TAG, "Invalid Confirmation Passkey or PIN received, not showing any dialog"); 147436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby return; 148436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby } 149436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby if (mType == BluetoothDevice.PAIRING_VARIANT_DISPLAY_PASSKEY) { 150436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby mPairingKey = String.format("%06d", pairingKey); 151436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby } else { 152436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby mPairingKey = String.format("%04d", pairingKey); 153436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby } 154a539716a94cbfe33e32229549b70d7cb418d8840Edward Jee createDisplayPasskeyOrPinDialog(); 155436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby break; 156436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 157436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby default: 158436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby Log.e(TAG, "Incorrect pairing type received, not showing any dialog"); 1593a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh } 1603a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh 1613a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh /* 1623a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh * Leave this registered through pause/resume since we still want to 1633a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh * finish the activity in the background if pairing is canceled. 1643a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh */ 16516cc86315d7a8e1f6a0f3083d0a810a7cb097832Nick Pelly registerReceiver(mReceiver, new IntentFilter(BluetoothDevice.ACTION_PAIRING_CANCEL)); 166435ad270b5f4e31e94a2bba204769660bbd4b3caJaikumar Ganesh registerReceiver(mReceiver, new IntentFilter(BluetoothDevice.ACTION_BOND_STATE_CHANGED)); 1673a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh } 1683a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh 169a539716a94cbfe33e32229549b70d7cb418d8840Edward Jee private void createUserEntryDialog() { 170afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final AlertController.AlertParams p = mAlertParams; 171a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe p.mTitle = getString(R.string.bluetooth_pairing_request, 172a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe mCachedDeviceManager.getName(mDevice)); 173a539716a94cbfe33e32229549b70d7cb418d8840Edward Jee p.mView = createPinEntryView(); 174afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project p.mPositiveButtonText = getString(android.R.string.ok); 175afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project p.mPositiveButtonListener = this; 176afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project p.mNegativeButtonText = getString(android.R.string.cancel); 177afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project p.mNegativeButtonListener = this; 178afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project setupAlert(); 1793a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh 180436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby mOkButton = mAlert.getButton(BUTTON_POSITIVE); 181afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mOkButton.setEnabled(false); 1823a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh } 183afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 184a539716a94cbfe33e32229549b70d7cb418d8840Edward Jee private View createPinEntryView() { 1853a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh View view = getLayoutInflater().inflate(R.layout.bluetooth_pin_entry, null); 186e278a208bc8298963080dfb5352acedc65aad083Casper Bonde TextView messageViewCaptionHint = (TextView) view.findViewById(R.id.pin_values_hint); 187ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby TextView messageView2 = (TextView) view.findViewById(R.id.message_below_pin); 188ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby CheckBox alphanumericPin = (CheckBox) view.findViewById(R.id.alphanumeric_pin); 1892ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe CheckBox contactSharing = (CheckBox) view.findViewById( 1902ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe R.id.phonebook_sharing_message_entry_pin); 191a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe contactSharing.setText(getString(R.string.bluetooth_pairing_shares_phonebook, 192a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe mCachedDeviceManager.getName(mDevice))); 193a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe if (mDevice.getPhonebookAccessPermission() == BluetoothDevice.ACCESS_ALLOWED) { 194a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe contactSharing.setChecked(true); 195a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe } else if (mDevice.getPhonebookAccessPermission() == BluetoothDevice.ACCESS_REJECTED){ 196a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe contactSharing.setChecked(false); 197a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe } else { 198a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe contactSharing.setChecked(true); 199a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe mDevice.setPhonebookAccessPermission(BluetoothDevice.ACCESS_ALLOWED); 200a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe } 201a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe 2022ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe contactSharing.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 2032ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe @Override 2042ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { 2052ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe if (isChecked) { 2062ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe mDevice.setPhonebookAccessPermission(BluetoothDevice.ACCESS_ALLOWED); 2072ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe } else { 2082ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe mDevice.setPhonebookAccessPermission(BluetoothDevice.ACCESS_REJECTED); 2092ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe } 2102ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe } 2112ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe }); 2122ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe if (mDevice.getBluetoothClass().getDeviceClass() 2132ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe == BluetoothClass.Device.AUDIO_VIDEO_HANDSFREE) { 2142ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe contactSharing.setVisibility(View.VISIBLE); 2152ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe } else { 2162ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe contactSharing.setVisibility(View.GONE); 2172ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe } 2183a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh mPairingView = (EditText) view.findViewById(R.id.text); 2193a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh mPairingView.addTextChangedListener(this); 220ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby alphanumericPin.setOnCheckedChangeListener(this); 2213a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh 222a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe int messageId; 223e278a208bc8298963080dfb5352acedc65aad083Casper Bonde int messageIdHint = R.string.bluetooth_pin_values_hint; 224ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby int maxLength; 225436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby switch (mType) { 226e278a208bc8298963080dfb5352acedc65aad083Casper Bonde case BluetoothDevice.PAIRING_VARIANT_PIN_16_DIGITS: 227e278a208bc8298963080dfb5352acedc65aad083Casper Bonde messageIdHint = R.string.bluetooth_pin_values_hint_16_digits; 228e278a208bc8298963080dfb5352acedc65aad083Casper Bonde // FALLTHROUGH 229436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothDevice.PAIRING_VARIANT_PIN: 230a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe messageId = R.string.bluetooth_enter_pin_other_device; 231ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby // Maximum of 16 characters in a PIN 232ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby maxLength = BLUETOOTH_PIN_MAX_LENGTH; 233436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby break; 234436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 235436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothDevice.PAIRING_VARIANT_PASSKEY: 236a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe messageId = R.string.bluetooth_enter_passkey_other_device; 237436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby // Maximum of 6 digits for passkey 238ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby maxLength = BLUETOOTH_PASSKEY_MAX_LENGTH; 239ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby alphanumericPin.setVisibility(View.GONE); 240436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby break; 241436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 242ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby default: 243ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby Log.e(TAG, "Incorrect pairing type for createPinEntryView: " + mType); 244ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby return null; 245ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby } 246ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby 247e278a208bc8298963080dfb5352acedc65aad083Casper Bonde messageViewCaptionHint.setText(messageIdHint); 248a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe messageView2.setText(messageId); 249ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby mPairingView.setInputType(InputType.TYPE_CLASS_NUMBER); 250ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby mPairingView.setFilters(new InputFilter[] { 251ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby new LengthFilter(maxLength) }); 252ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby 253ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby return view; 254ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby } 255ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby 256a539716a94cbfe33e32229549b70d7cb418d8840Edward Jee private View createView() { 257ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby View view = getLayoutInflater().inflate(R.layout.bluetooth_pin_confirm, null); 258e49c30e533be90280b4a6e9cb0065adb1b43b104PauloftheWest TextView pairingViewCaption = (TextView) view.findViewById(R.id.pairing_caption); 259e49c30e533be90280b4a6e9cb0065adb1b43b104PauloftheWest TextView pairingViewContent = (TextView) view.findViewById(R.id.pairing_subhead); 260e49c30e533be90280b4a6e9cb0065adb1b43b104PauloftheWest TextView messagePairing = (TextView) view.findViewById(R.id.pairing_code_message); 2612ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe CheckBox contactSharing = (CheckBox) view.findViewById( 2622ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe R.id.phonebook_sharing_message_confirm_pin); 263a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe contactSharing.setText(getString(R.string.bluetooth_pairing_shares_phonebook, 264a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe mCachedDeviceManager.getName(mDevice))); 265a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe if (mDevice.getPhonebookAccessPermission() == BluetoothDevice.ACCESS_ALLOWED) { 266a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe contactSharing.setChecked(true); 267a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe } else if (mDevice.getPhonebookAccessPermission() == BluetoothDevice.ACCESS_REJECTED){ 268a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe contactSharing.setChecked(false); 269a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe } else { 270a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe contactSharing.setChecked(true); 271a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe mDevice.setPhonebookAccessPermission(BluetoothDevice.ACCESS_ALLOWED); 272a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe } 273a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe 2742ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe contactSharing.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 2752ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe @Override 2762ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { 2772ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe if (isChecked) { 2782ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe mDevice.setPhonebookAccessPermission(BluetoothDevice.ACCESS_ALLOWED); 2792ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe } else { 2802ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe mDevice.setPhonebookAccessPermission(BluetoothDevice.ACCESS_REJECTED); 2812ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe } 2822ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe } 2832ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe }); 2842ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe if (mDevice.getBluetoothClass().getDeviceClass() 2852ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe == BluetoothClass.Device.AUDIO_VIDEO_HANDSFREE) { 2862ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe contactSharing.setVisibility(View.VISIBLE); 2872ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe } else { 2882ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe contactSharing.setVisibility(View.GONE); 2892ef44c5e5def598d07f599675982e1a8b3aefc73Sanket Padawe } 290e49c30e533be90280b4a6e9cb0065adb1b43b104PauloftheWest 291e49c30e533be90280b4a6e9cb0065adb1b43b104PauloftheWest String messageCaption = null; 292e49c30e533be90280b4a6e9cb0065adb1b43b104PauloftheWest String pairingContent = null; 293ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby switch (mType) { 294e49c30e533be90280b4a6e9cb0065adb1b43b104PauloftheWest case BluetoothDevice.PAIRING_VARIANT_DISPLAY_PASSKEY: 295e49c30e533be90280b4a6e9cb0065adb1b43b104PauloftheWest case BluetoothDevice.PAIRING_VARIANT_DISPLAY_PIN: 29610773b4d4d7d11c1d4197de0277e57f4f6848e3aPauloftheWest messagePairing.setVisibility(View.VISIBLE); 297436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothDevice.PAIRING_VARIANT_PASSKEY_CONFIRMATION: 298e49c30e533be90280b4a6e9cb0065adb1b43b104PauloftheWest pairingContent = mPairingKey; 299436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby break; 300436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 301436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothDevice.PAIRING_VARIANT_CONSENT: 302ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby case BluetoothDevice.PAIRING_VARIANT_OOB_CONSENT: 30310773b4d4d7d11c1d4197de0277e57f4f6848e3aPauloftheWest messagePairing.setVisibility(View.VISIBLE); 304436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby break; 305436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 306436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby default: 307436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby Log.e(TAG, "Incorrect pairing type received, not creating view"); 308ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby return null; 3093a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh } 310e49c30e533be90280b4a6e9cb0065adb1b43b104PauloftheWest 311e49c30e533be90280b4a6e9cb0065adb1b43b104PauloftheWest if (pairingContent != null) { 312e49c30e533be90280b4a6e9cb0065adb1b43b104PauloftheWest pairingViewCaption.setVisibility(View.VISIBLE); 313e49c30e533be90280b4a6e9cb0065adb1b43b104PauloftheWest pairingViewContent.setVisibility(View.VISIBLE); 314e49c30e533be90280b4a6e9cb0065adb1b43b104PauloftheWest pairingViewContent.setText(pairingContent); 315e49c30e533be90280b4a6e9cb0065adb1b43b104PauloftheWest } 316e49c30e533be90280b4a6e9cb0065adb1b43b104PauloftheWest 3173a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh return view; 3183a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh } 3193a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh 320a539716a94cbfe33e32229549b70d7cb418d8840Edward Jee private void createConfirmationDialog() { 3213a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh final AlertController.AlertParams p = mAlertParams; 322a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe p.mTitle = getString(R.string.bluetooth_pairing_request, 323a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe mCachedDeviceManager.getName(mDevice)); 324a539716a94cbfe33e32229549b70d7cb418d8840Edward Jee p.mView = createView(); 325e41a4ca695db12308006fe1a6d061642b7d3f1a1Michael Chan p.mPositiveButtonText = getString(R.string.bluetooth_pairing_accept); 3263a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh p.mPositiveButtonListener = this; 327e41a4ca695db12308006fe1a6d061642b7d3f1a1Michael Chan p.mNegativeButtonText = getString(R.string.bluetooth_pairing_decline); 3283a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh p.mNegativeButtonListener = this; 3293a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh setupAlert(); 330afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 331afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 332a539716a94cbfe33e32229549b70d7cb418d8840Edward Jee private void createConsentDialog() { 333435ad270b5f4e31e94a2bba204769660bbd4b3caJaikumar Ganesh final AlertController.AlertParams p = mAlertParams; 334a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe p.mTitle = getString(R.string.bluetooth_pairing_request, 335a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe mCachedDeviceManager.getName(mDevice)); 336a539716a94cbfe33e32229549b70d7cb418d8840Edward Jee p.mView = createView(); 337435ad270b5f4e31e94a2bba204769660bbd4b3caJaikumar Ganesh p.mPositiveButtonText = getString(R.string.bluetooth_pairing_accept); 338435ad270b5f4e31e94a2bba204769660bbd4b3caJaikumar Ganesh p.mPositiveButtonListener = this; 339435ad270b5f4e31e94a2bba204769660bbd4b3caJaikumar Ganesh p.mNegativeButtonText = getString(R.string.bluetooth_pairing_decline); 340435ad270b5f4e31e94a2bba204769660bbd4b3caJaikumar Ganesh p.mNegativeButtonListener = this; 341435ad270b5f4e31e94a2bba204769660bbd4b3caJaikumar Ganesh setupAlert(); 342afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 343afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 344a539716a94cbfe33e32229549b70d7cb418d8840Edward Jee private void createDisplayPasskeyOrPinDialog() { 345435ad270b5f4e31e94a2bba204769660bbd4b3caJaikumar Ganesh final AlertController.AlertParams p = mAlertParams; 346a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe p.mTitle = getString(R.string.bluetooth_pairing_request, 347a7a4a5a2cf500259c7eea68ad6d8f3af8fe300fdSanket Padawe mCachedDeviceManager.getName(mDevice)); 348a539716a94cbfe33e32229549b70d7cb418d8840Edward Jee p.mView = createView(); 349da23ae88d110dce585b19581a180feefbb0be4c8Jaikumar Ganesh p.mNegativeButtonText = getString(android.R.string.cancel); 350da23ae88d110dce585b19581a180feefbb0be4c8Jaikumar Ganesh p.mNegativeButtonListener = this; 351435ad270b5f4e31e94a2bba204769660bbd4b3caJaikumar Ganesh setupAlert(); 3523a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh 353435ad270b5f4e31e94a2bba204769660bbd4b3caJaikumar Ganesh // Since its only a notification, send an OK to the framework, 354435ad270b5f4e31e94a2bba204769660bbd4b3caJaikumar Ganesh // indicating that the dialog has been displayed. 355da23ae88d110dce585b19581a180feefbb0be4c8Jaikumar Ganesh if (mType == BluetoothDevice.PAIRING_VARIANT_DISPLAY_PASSKEY) { 356da23ae88d110dce585b19581a180feefbb0be4c8Jaikumar Ganesh mDevice.setPairingConfirmation(true); 357da23ae88d110dce585b19581a180feefbb0be4c8Jaikumar Ganesh } else if (mType == BluetoothDevice.PAIRING_VARIANT_DISPLAY_PIN) { 358da23ae88d110dce585b19581a180feefbb0be4c8Jaikumar Ganesh byte[] pinBytes = BluetoothDevice.convertPinToBytes(mPairingKey); 359da23ae88d110dce585b19581a180feefbb0be4c8Jaikumar Ganesh mDevice.setPin(pinBytes); 360da23ae88d110dce585b19581a180feefbb0be4c8Jaikumar Ganesh } 361afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 362afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 363afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 364afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project protected void onDestroy() { 365afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onDestroy(); 366afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project unregisterReceiver(mReceiver); 367afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 368afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 369afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void afterTextChanged(Editable s) { 3702affa6b28ddacc87f0f95f2ddd124b256ff61850jhtop.kim if (mOkButton != null) { 371e278a208bc8298963080dfb5352acedc65aad083Casper Bonde if (mType == BluetoothDevice.PAIRING_VARIANT_PIN_16_DIGITS) { 372e278a208bc8298963080dfb5352acedc65aad083Casper Bonde mOkButton.setEnabled(s.length() >= 16); 373e278a208bc8298963080dfb5352acedc65aad083Casper Bonde } else { 374e278a208bc8298963080dfb5352acedc65aad083Casper Bonde mOkButton.setEnabled(s.length() > 0); 375e278a208bc8298963080dfb5352acedc65aad083Casper Bonde } 376afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 377afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 378afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 3793a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh private void onPair(String value) { 380436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby switch (mType) { 381436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothDevice.PAIRING_VARIANT_PIN: 382e278a208bc8298963080dfb5352acedc65aad083Casper Bonde case BluetoothDevice.PAIRING_VARIANT_PIN_16_DIGITS: 383436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby byte[] pinBytes = BluetoothDevice.convertPinToBytes(value); 384436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby if (pinBytes == null) { 385436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby return; 386436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby } 387436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby mDevice.setPin(pinBytes); 388436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby break; 389436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 390436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothDevice.PAIRING_VARIANT_PASSKEY: 391436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby int passkey = Integer.parseInt(value); 392436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby mDevice.setPasskey(passkey); 393436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby break; 394436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 395436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothDevice.PAIRING_VARIANT_PASSKEY_CONFIRMATION: 396436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothDevice.PAIRING_VARIANT_CONSENT: 397436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby mDevice.setPairingConfirmation(true); 398436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby break; 399436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 400436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothDevice.PAIRING_VARIANT_DISPLAY_PASSKEY: 401436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothDevice.PAIRING_VARIANT_DISPLAY_PIN: 402436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby // Do nothing. 403436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby break; 404436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 405436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BluetoothDevice.PAIRING_VARIANT_OOB_CONSENT: 406436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby mDevice.setRemoteOutOfBandData(); 407436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby break; 408436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby 409436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby default: 410436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby Log.e(TAG, "Incorrect pairing type received"); 411afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 412afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 413afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 414afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void onCancel() { 415cb6a3b3d9e39d63bbf10d947579989e44bcc0b98Jaikumar Ganesh mDevice.cancelPairingUserInput(); 416afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 417aaf8ffff79a73c71d3fb77a31950e344f4c7eab5jhtop.kim 418aaf8ffff79a73c71d3fb77a31950e344f4c7eab5jhtop.kim public boolean onKeyDown(int keyCode, KeyEvent event) { 419aaf8ffff79a73c71d3fb77a31950e344f4c7eab5jhtop.kim if (keyCode == KeyEvent.KEYCODE_BACK) { 420aaf8ffff79a73c71d3fb77a31950e344f4c7eab5jhtop.kim onCancel(); 421aaf8ffff79a73c71d3fb77a31950e344f4c7eab5jhtop.kim } 422aaf8ffff79a73c71d3fb77a31950e344f4c7eab5jhtop.kim return super.onKeyDown(keyCode,event); 423aaf8ffff79a73c71d3fb77a31950e344f4c7eab5jhtop.kim } 4243a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh 425afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onClick(DialogInterface dialog, int which) { 426afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project switch (which) { 427436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BUTTON_POSITIVE: 428ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby if (mPairingView != null) { 429ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby onPair(mPairingView.getText().toString()); 430ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby } else { 431ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby onPair(null); 432ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby } 433afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 4343a76bcaa83c15f96832f934e67e6f0190e72a3dcJaikumar Ganesh 435436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby case BUTTON_NEGATIVE: 436436b29e68e6608bed9e8e7d54385b8f62d89208eJake Hamby default: 437afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project onCancel(); 438afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 439afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 440afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 441afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 442afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /* Not used */ 443afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void beforeTextChanged(CharSequence s, int start, int count, int after) { 444afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 445afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 446afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /* Not used */ 447afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onTextChanged(CharSequence s, int start, int before, int count) { 448afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 449afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 450ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 451ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby // change input type for soft keyboard to numeric or alphanumeric 452ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby if (isChecked) { 453ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby mPairingView.setInputType(InputType.TYPE_CLASS_TEXT); 454ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby } else { 455ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby mPairingView.setInputType(InputType.TYPE_CLASS_NUMBER); 456ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby } 457ca9812a8521fcc483e821fd5a88ec421de0b8f66Jake Hamby } 458afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 459