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