Handle csip set member automatic pair in Setting am: 629611a43e am: eb412a0614

Original change: https://android-review.googlesource.com/c/platform/packages/apps/Settings/+/1903834

Change-Id: Ibb8140b8af96036750457a6866eb9ba410bc0b84
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 5f91278..3212755 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2326,6 +2326,7 @@
             android:exported="true">
             <intent-filter>
                 <action android:name="android.bluetooth.device.action.PAIRING_REQUEST" />
+                <action android:name="android.bluetooth.action.CSIS_SET_MEMBER_AVAILABLE"/>
             </intent-filter>
         </receiver>
 
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingRequest.java b/src/com/android/settings/bluetooth/BluetoothPairingRequest.java
index 4ea4338..6b80256 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingRequest.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingRequest.java
@@ -16,12 +16,14 @@
 
 package com.android.settings.bluetooth;
 
+import android.bluetooth.BluetoothCsipSetCoordinator;
 import android.bluetooth.BluetoothDevice;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.os.PowerManager;
 import android.os.UserHandle;
+import android.text.TextUtils;
 
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
 
@@ -36,38 +38,55 @@
     @Override
     public void onReceive(Context context, Intent intent) {
         String action = intent.getAction();
-        if (action == null || !action.equals(BluetoothDevice.ACTION_PAIRING_REQUEST)) {
+        if (action == null) {
             return;
         }
 
-        PowerManager powerManager = context.getSystemService(PowerManager.class);
         BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
-        int pairingVariant = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT,
-                BluetoothDevice.ERROR);
-        String deviceAddress = device != null ? device.getAddress() : null;
-        String deviceName = device != null ? device.getName() : null;
-        boolean shouldShowDialog = LocalBluetoothPreferences.shouldShowDialogInForeground(
-                context, deviceAddress, deviceName);
-
         final LocalBluetoothManager mBluetoothManager = Utils.getLocalBtManager(context);
-        // Skips consent pairing dialog if the device was recently associated with CDM
-        if (pairingVariant == BluetoothDevice.PAIRING_VARIANT_CONSENT
-                && (device.canBondWithoutDialog()
-                || mBluetoothManager.getCachedDeviceManager().isOngoingPairByCsip(device))) {
-            device.setPairingConfirmation(true);
-        } else if (powerManager.isInteractive() && shouldShowDialog) {
-            // Since the screen is on and the BT-related activity is in the foreground,
-            // just open the dialog
-            // convert broadcast intent into activity intent (same action string)
-            Intent pairingIntent = BluetoothPairingService.getPairingDialogIntent(context, intent,
-                    BluetoothDevice.EXTRA_PAIRING_INITIATOR_FOREGROUND);
+        if (TextUtils.equals(action, BluetoothDevice.ACTION_PAIRING_REQUEST)) {
+            PowerManager powerManager = context.getSystemService(PowerManager.class);
+            int pairingVariant = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT,
+                    BluetoothDevice.ERROR);
+            String deviceAddress = device != null ? device.getAddress() : null;
+            String deviceName = device != null ? device.getName() : null;
+            boolean shouldShowDialog = LocalBluetoothPreferences.shouldShowDialogInForeground(
+                    context, deviceAddress, deviceName);
 
-            context.startActivityAsUser(pairingIntent, UserHandle.CURRENT);
-        } else {
-            // Put up a notification that leads to the dialog
-            intent.setClass(context, BluetoothPairingService.class);
-            intent.setAction(BluetoothDevice.ACTION_PAIRING_REQUEST);
-            context.startServiceAsUser(intent, UserHandle.CURRENT);
+            // Skips consent pairing dialog if the device was recently associated with CDM
+            if (pairingVariant == BluetoothDevice.PAIRING_VARIANT_CONSENT
+                    && (device.canBondWithoutDialog()
+                    || mBluetoothManager.getCachedDeviceManager().isOngoingPairByCsip(device))) {
+                device.setPairingConfirmation(true);
+            } else if (powerManager.isInteractive() && shouldShowDialog) {
+                // Since the screen is on and the BT-related activity is in the foreground,
+                // just open the dialog
+                // convert broadcast intent into activity intent (same action string)
+                Intent pairingIntent = BluetoothPairingService.getPairingDialogIntent(context,
+                        intent, BluetoothDevice.EXTRA_PAIRING_INITIATOR_FOREGROUND);
+
+                context.startActivityAsUser(pairingIntent, UserHandle.CURRENT);
+            } else {
+                // Put up a notification that leads to the dialog
+                intent.setClass(context, BluetoothPairingService.class);
+                intent.setAction(BluetoothDevice.ACTION_PAIRING_REQUEST);
+                context.startServiceAsUser(intent, UserHandle.CURRENT);
+            }
+        } else if (TextUtils.equals(action,
+                BluetoothCsipSetCoordinator.ACTION_CSIS_SET_MEMBER_AVAILABLE)) {
+            if (device == null) {
+                return;
+            }
+
+            final int groupId = intent.getIntExtra(BluetoothCsipSetCoordinator.EXTRA_CSIS_GROUP_ID,
+                    BluetoothCsipSetCoordinator.GROUP_ID_INVALID);
+            if (groupId == BluetoothCsipSetCoordinator.GROUP_ID_INVALID) {
+                return;
+            }
+
+            if (mBluetoothManager.getCachedDeviceManager().shouldPairByCsip(device, groupId)) {
+                device.createBond(BluetoothDevice.TRANSPORT_LE);
+            }
         }
     }
 }