Merge "Add forget function to remove database info and poc for subsequent" into tm-dev
diff --git a/nearby/service/java/com/android/server/nearby/fastpair/FastPairAdvHandler.java b/nearby/service/java/com/android/server/nearby/fastpair/FastPairAdvHandler.java
index ac84199..af49da1 100644
--- a/nearby/service/java/com/android/server/nearby/fastpair/FastPairAdvHandler.java
+++ b/nearby/service/java/com/android/server/nearby/fastpair/FastPairAdvHandler.java
@@ -31,6 +31,7 @@
import com.android.server.nearby.common.bloomfilter.BloomFilter;
import com.android.server.nearby.common.bloomfilter.FastPairBloomFilterHasher;
import com.android.server.nearby.common.locator.Locator;
+import com.android.server.nearby.fastpair.cache.DiscoveryItem;
import com.android.server.nearby.fastpair.cache.FastPairCacheManager;
import com.android.server.nearby.fastpair.halfsheet.FastPairHalfSheetManager;
import com.android.server.nearby.provider.FastPairDataProvider;
@@ -49,6 +50,8 @@
public class FastPairAdvHandler {
Context mContext;
String mBleAddress;
+ // Need to be deleted after notification manager in use.
+ private boolean mIsFirst = false;
/** The types about how the bloomfilter is processed. */
public enum ProcessBloomFilterType {
@@ -131,7 +134,29 @@
Log.d(TAG, "bloom filter is recognized in the cache");
continue;
} else {
- Log.d(TAG, "bloom filter is not recognized not paired before");
+ Log.d(TAG, "bloom filter is recognized not paired before should"
+ + "show subsequent pairing notification");
+ if (mIsFirst) {
+ mIsFirst = false;
+ // Get full info from api the initial request will only return
+ // part of the info due to size limit.
+ List<Data.FastPairDeviceWithAccountKey> resList =
+ dataProvider.loadFastPairDeviceWithAccountKey(account,
+ List.of(recognizedDevice.getAccountKey().toByteArray()));
+ if (resList != null && resList.size() > 0) {
+ //Saved device from footprint does not have ble address so
+ // fill ble address with current scan result.
+ Cache.StoredDiscoveryItem storedDiscoveryItem =
+ resList.get(0).getDiscoveryItem().toBuilder()
+ .setMacAddress(
+ fastPairDevice.getBluetoothAddress())
+ .build();
+ Locator.get(mContext, FastPairController.class).pair(
+ new DiscoveryItem(mContext, storedDiscoveryItem),
+ resList.get(0).getAccountKey().toByteArray(),
+ /** companionApp=*/ null);
+ }
+ }
}
return;
diff --git a/nearby/service/java/com/android/server/nearby/fastpair/FastPairController.java b/nearby/service/java/com/android/server/nearby/fastpair/FastPairController.java
index 896056b..e1db7e5 100644
--- a/nearby/service/java/com/android/server/nearby/fastpair/FastPairController.java
+++ b/nearby/service/java/com/android/server/nearby/fastpair/FastPairController.java
@@ -163,6 +163,28 @@
}
/**
+ * Subsequent pairing entry.
+ */
+ public void pair(DiscoveryItem item,
+ @Nullable byte[] accountKey,
+ @Nullable String companionApp) {
+ FastPairNotificationManager fastPairNotificationManager =
+ new FastPairNotificationManager(mContext, item, false);
+ FastPairHalfSheetManager fastPairHalfSheetManager =
+ Locator.get(mContext, FastPairHalfSheetManager.class);
+ PairingProgressHandlerBase pairingProgressHandlerBase =
+ PairingProgressHandlerBase.create(
+ mContext,
+ item,
+ /* companionApp= */ null,
+ /* accountKey= */ accountKey,
+ mFootprintsDeviceManager,
+ fastPairNotificationManager,
+ fastPairHalfSheetManager,
+ /* isRetroactivePair= */ false);
+ pair(item, accountKey, companionApp, pairingProgressHandlerBase);
+ }
+ /**
* Pairing function
*/
@Annotations.EventThread
diff --git a/nearby/service/java/com/android/server/nearby/fastpair/FastPairManager.java b/nearby/service/java/com/android/server/nearby/fastpair/FastPairManager.java
index 7604771..74c033f 100644
--- a/nearby/service/java/com/android/server/nearby/fastpair/FastPairManager.java
+++ b/nearby/service/java/com/android/server/nearby/fastpair/FastPairManager.java
@@ -22,6 +22,7 @@
import android.annotation.WorkerThread;
import android.app.KeyguardManager;
import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothManager;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
@@ -48,7 +49,6 @@
import com.android.server.nearby.common.bluetooth.fastpair.Preferences;
import com.android.server.nearby.common.bluetooth.fastpair.ReflectionException;
import com.android.server.nearby.common.bluetooth.fastpair.SimpleBroadcastReceiver;
-import com.android.server.nearby.common.bluetooth.testability.android.bluetooth.BluetoothDevice;
import com.android.server.nearby.common.eventloop.Annotations;
import com.android.server.nearby.common.eventloop.EventLoop;
import com.android.server.nearby.common.eventloop.NamedRunnable;
@@ -106,6 +106,8 @@
if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
Log.d(TAG, "onReceive: ACTION_SCREEN_ON.");
invalidateScan();
+ } else if (intent.getAction().equals(BluetoothDevice.ACTION_BOND_STATE_CHANGED)) {
+ processBluetoothConnectionEvent(intent);
}
}
};
@@ -146,6 +148,7 @@
public void initiate() {
mIntentFilter.addAction(Intent.ACTION_SCREEN_ON);
mIntentFilter.addAction(Intent.ACTION_SCREEN_OFF);
+ mIntentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
mLocatorContextWrapper.getContext()
.registerReceiver(mScreenBroadcastReceiver, mIntentFilter);
diff --git a/nearby/service/java/com/android/server/nearby/fastpair/halfsheet/FastPairService.java b/nearby/service/java/com/android/server/nearby/fastpair/halfsheet/FastPairService.java
index 8c0d572..76eabbf 100644
--- a/nearby/service/java/com/android/server/nearby/fastpair/halfsheet/FastPairService.java
+++ b/nearby/service/java/com/android/server/nearby/fastpair/halfsheet/FastPairService.java
@@ -70,7 +70,7 @@
}
/**
- * Asks the Fast Pair service to pair the device.
+ * Asks the Fast Pair service to pair the device. initial pairing.
*/
@Override
public void connect(FastPairDevice fastPairDevice) {