@Override
  public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    if (action.equals(BluetoothDevice.ACTION_PAIRING_REQUEST)) {
      // convert broadcast intent into activity intent (same action string)
      BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
      int type = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, BluetoothDevice.ERROR);
      Intent pairingIntent = new Intent();
      pairingIntent.setClass(context, BluetoothPairingDialog.class);
      pairingIntent.putExtra(BluetoothDevice.EXTRA_DEVICE, device);
      pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, type);
      if (type == BluetoothDevice.PAIRING_VARIANT_PASSKEY_CONFIRMATION
          || type == BluetoothDevice.PAIRING_VARIANT_DISPLAY_PASSKEY
          || type == BluetoothDevice.PAIRING_VARIANT_DISPLAY_PIN) {
        int pairingKey =
            intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_KEY, BluetoothDevice.ERROR);
        pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_KEY, pairingKey);
      }
      pairingIntent.setAction(BluetoothDevice.ACTION_PAIRING_REQUEST);
      pairingIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

      PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
      String deviceAddress = device != null ? device.getAddress() : null;
      if (powerManager.isScreenOn()
          && LocalBluetoothPreferences.shouldShowDialogInForeground(context, deviceAddress)) {
        // Since the screen is on and the BT-related activity is in the foreground,
        // just open the dialog
        context.startActivity(pairingIntent);
      } else {
        // Put up a notification that leads to the dialog
        Resources res = context.getResources();
        Notification.Builder builder =
            new Notification.Builder(context)
                .setSmallIcon(android.R.drawable.stat_sys_data_bluetooth)
                .setTicker(res.getString(R.string.bluetooth_notif_ticker));

        PendingIntent pending =
            PendingIntent.getActivity(context, 0, pairingIntent, PendingIntent.FLAG_ONE_SHOT);

        String name = intent.getStringExtra(BluetoothDevice.EXTRA_NAME);
        if (TextUtils.isEmpty(name)) {
          name =
              device != null
                  ? device.getAliasName()
                  : context.getString(android.R.string.unknownName);
        }

        builder
            .setContentTitle(res.getString(R.string.bluetooth_notif_title))
            .setContentText(res.getString(R.string.bluetooth_notif_message, name))
            .setContentIntent(pending)
            .setAutoCancel(true)
            .setDefaults(Notification.DEFAULT_SOUND)
            .setColor(res.getColor(com.android.internal.R.color.system_notification_accent_color));

        NotificationManager manager =
            (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        manager.notify(NOTIFICATION_ID, builder.getNotification());
      }

    } else if (action.equals(BluetoothDevice.ACTION_PAIRING_CANCEL)) {

      // Remove the notification
      NotificationManager manager =
          (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
      manager.cancel(NOTIFICATION_ID);

    } else if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {
      int bondState = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.ERROR);
      int oldState =
          intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE, BluetoothDevice.ERROR);
      if ((oldState == BluetoothDevice.BOND_BONDING) && (bondState == BluetoothDevice.BOND_NONE)) {
        // Remove the notification
        NotificationManager manager =
            (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        manager.cancel(NOTIFICATION_ID);
      }
    }
  }
        @Override
        public void onReceive(Context context, Intent intent) {
          String action = intent.getAction();

          if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

            if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
              String entry =
                  device.getName()
                      + " ("
                      + getDeviceMajorClassName(device.getBluetoothClass().getMajorDeviceClass())
                      + ")"
                      + "\n"
                      + device.getAddress();

              if (mNewDevicesArrayAdapter.getPosition(entry) == -1)
                mNewDevicesArrayAdapter.add(entry);
            }
          } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
            setProgressBarIndeterminateVisibility(false);
            setTitle(R.string.text_select_device);
            findViewById(R.id.button_scan).setVisibility(View.VISIBLE);

            if (mNewDevicesArrayAdapter.getCount() == 0) {
              String noDevices = getResources().getText(R.string.text_no_new_devices).toString();
              mNewDevicesArrayAdapter.add(noDevices);
            }
          } else if (BluetoothDevice.ACTION_PAIRING_REQUEST.equals(action)) {
            int pairingVariant = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, -1);

            if (pairingVariant == BluetoothDevice.PAIRING_VARIANT_PASSKEY_CONFIRMATION) {
              String pairingPasskey = intent.getStringExtra(BluetoothDevice.EXTRA_PAIRING_KEY);

              if (DBG) Log.d(TAG, "Passkey :" + pairingPasskey);

            } else if (pairingVariant == BluetoothDevice.PAIRING_VARIANT_PIN) {

              if (DBG) Log.d(TAG, "Pairing via PIN");
            }
          } else if (BluetoothDevice.ACTION_UUID.equals(action)) {

          } else if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {
            int prevBondState = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE, -1);
            int currBondState = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, -1);

            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

            // Unpaired
            if (prevBondState == BluetoothDevice.BOND_BONDED
                && currBondState == BluetoothDevice.BOND_NONE) {

              Toast.makeText(
                      getApplicationContext(), "Unpaired " + device.getName(), Toast.LENGTH_SHORT)
                  .show();

            } else if (prevBondState == BluetoothDevice.BOND_BONDING
                && currBondState == BluetoothDevice.BOND_BONDED) {

              Toast.makeText(
                      getApplicationContext(),
                      "Paired with " + device.getName(),
                      Toast.LENGTH_SHORT)
                  .show();

              String entry =
                  device.getName()
                      + " ("
                      + getDeviceMajorClassName(device.getBluetoothClass().getMajorDeviceClass())
                      + ")"
                      + "\n"
                      + device.getAddress();

              mNewDevicesArrayAdapter.remove(entry);
            }

            getPairedDevices();
          }
        }