Merge "Add test for FastPair module"
diff --git a/nearby/framework/Android.bp b/nearby/framework/Android.bp
index 74980c9..fd7f2c9 100644
--- a/nearby/framework/Android.bp
+++ b/nearby/framework/Android.bp
@@ -59,7 +59,10 @@
name: "framework-nearby-pre-jarjar",
defaults: ["framework-nearby-defaults"],
sdk_version: "module_current",
- libs: ["framework-annotations-lib"],
+ libs: [
+ "framework-annotations-lib",
+ "framework-bluetooth",
+ ],
// java_api_finder must accompany `srcs` (`srcs` defined in `framework-nearby-defaults`)
plugins: ["java_api_finder"],
installable: false,
@@ -77,6 +80,7 @@
"framework-module-defaults", // the SDK needs to be usable in all processes
"framework-nearby-defaults",
],
+ libs: ["framework-bluetooth"],
jarjar_rules: ":nearby-jarjar-rules",
apex_available: [
diff --git a/nearby/halfsheet/Android.bp b/nearby/halfsheet/Android.bp
index 781f308..82d0933 100644
--- a/nearby/halfsheet/Android.bp
+++ b/nearby/halfsheet/Android.bp
@@ -26,6 +26,7 @@
plugins: ["java_api_finder"],
jarjar_rules: ":nearby-jarjar-rules",
libs: [
+ "framework-bluetooth",
"framework-nearby-pre-jarjar",
"nearby-service-string",
],
diff --git a/nearby/service/Android.bp b/nearby/service/Android.bp
index b80d677..5b0028e 100644
--- a/nearby/service/Android.bp
+++ b/nearby/service/Android.bp
@@ -36,6 +36,7 @@
java_library {
name: "nearby-service-string",
srcs: [":nearby-service-string-res"],
+ libs: ["framework-bluetooth"],
sdk_version: "module_current",
}
@@ -53,6 +54,7 @@
// pre-jarjar symbols are needed so that nearby-service can reference the original class
// names at compile time
"framework-nearby-pre-jarjar",
+ "framework-bluetooth.stubs.module_lib", // TODO(b/215722418): Change to framework-bluetooth once fixed
"error_prone_annotations",
],
static_libs: [
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 253e942..41b6da7 100644
--- a/nearby/service/java/com/android/server/nearby/fastpair/FastPairManager.java
+++ b/nearby/service/java/com/android/server/nearby/fastpair/FastPairManager.java
@@ -29,7 +29,6 @@
import android.nearby.NearbyDevice;
import android.nearby.NearbyManager;
import android.nearby.ScanCallback;
-import android.nearby.ScanRequest;
import android.util.Log;
import androidx.annotation.NonNull;
@@ -51,8 +50,8 @@
import com.android.server.nearby.fastpair.footprint.FootprintsDeviceManager;
import com.android.server.nearby.fastpair.halfsheet.FastPairHalfSheetManager;
import com.android.server.nearby.fastpair.pairinghandler.PairingProgressHandlerBase;
+import com.android.server.nearby.provider.FastPairDataProvider;
import com.android.server.nearby.util.FastPairDecoder;
-import com.android.server.nearby.util.ForegroundThread;
import com.android.server.nearby.util.Hex;
import com.google.protobuf.ByteString;
@@ -101,11 +100,12 @@
Log.d("FastPairService", " the nearby manager is " + nearbyManager);
if (nearbyManager != null) {
- nearbyManager.startScan(
- new ScanRequest.Builder()
- .setScanType(ScanRequest.SCAN_TYPE_FAST_PAIR).build(),
- ForegroundThread.getExecutor(),
- mScanCallback);
+ // Uncomment this if you want to get mainline half sheet
+// nearbyManager.startScan(
+// new ScanRequest.Builder()
+// .setScanType(ScanRequest.SCAN_TYPE_FAST_PAIR).build(),
+// ForegroundThread.getExecutor(),
+// mScanCallback);
} else {
Log.d("FastPairService", " the nearby manager is null");
}
@@ -114,9 +114,12 @@
byte[] model = intent.getByteArrayExtra(EXTRA_MODEL_ID);
String address = intent.getStringExtra(EXTRA_ADDRESS);
Log.d("FastPairService", "start pair " + address);
+ Rpcs.GetObservedDeviceResponse response =
+ FastPairDataProvider.getInstance().loadFastPairDeviceMetadata(model);
+ ByteString publicKey = response.getDevice().getAntiSpoofingKeyPair().getPublicKey();
Locator.get(mLocatorContextWrapper, FastPairHalfSheetManager.class).showHalfSheet(
Cache.ScanFastPairStoreItem.newBuilder().setAddress(address)
- .setAntiSpoofingPublicKey(ByteString.EMPTY)
+ .setAntiSpoofingPublicKey(publicKey)
.build());
} else {
Log.d("FastPairService", " screen off");
diff --git a/nearby/service/java/com/android/server/nearby/provider/FastPairDataProvider.java b/nearby/service/java/com/android/server/nearby/provider/FastPairDataProvider.java
index cac815b..2ecbaa3 100644
--- a/nearby/service/java/com/android/server/nearby/provider/FastPairDataProvider.java
+++ b/nearby/service/java/com/android/server/nearby/provider/FastPairDataProvider.java
@@ -56,8 +56,11 @@
private FastPairDataProvider(Context context) {
mProxyFastPairDataProvider = ProxyFastPairDataProvider.create(
context, FastPairDataProviderBase.ACTION_FAST_PAIR_DATA_PROVIDER);
- Log.d("FastPairService", "the fast pair proxy provider is init"
- + (mProxyFastPairDataProvider == null));
+ if (mProxyFastPairDataProvider == null) {
+ Log.d("FastPairService", "fail to initiate the fast pair proxy provider");
+ } else {
+ Log.d("FastPairService", "the fast pair proxy provider initiated");
+ }
}
/** loadFastPairDeviceMetadata. */
diff --git a/nearby/tests/cts/fastpair/src/android/nearby/cts/FastPairDataProviderBaseTest.java b/nearby/tests/cts/fastpair/src/android/nearby/cts/FastPairDataProviderBaseTest.java
index 8611611..bceca81 100644
--- a/nearby/tests/cts/fastpair/src/android/nearby/cts/FastPairDataProviderBaseTest.java
+++ b/nearby/tests/cts/fastpair/src/android/nearby/cts/FastPairDataProviderBaseTest.java
@@ -81,6 +81,7 @@
private static final boolean ELIGIBLE_ACCOUNT_1_OPT_IN = true;
private static final Account ELIGIBLE_ACCOUNT_2 = new Account("def@gmail.com", "type2");
private static final boolean ELIGIBLE_ACCOUNT_2_OPT_IN = false;
+ private static final Account MANAGE_ACCOUNT = new Account("ghi@gmail.com", "type3");
private static final ImmutableList<FastPairEligibleAccount> ELIGIBLE_ACCOUNTS =
ImmutableList.of(
genHappyPathFastPairEligibleAccount(ELIGIBLE_ACCOUNT_1,
@@ -89,6 +90,8 @@
ELIGIBLE_ACCOUNT_2_OPT_IN));
private static final int ERROR_CODE_BAD_REQUEST =
FastPairDataProviderBase.ERROR_CODE_BAD_REQUEST;
+ private static final int MANAGE_ACCOUNT_REQUEST_TYPE =
+ FastPairDataProviderBase.MANAGE_REQUEST_ADD;
private static final String ERROR_STRING = "ERROR_STRING";
private static final String FAIL_CONNECT_GOTO_SETTINGS_DESCRIPTION =
"FAIL_CONNECT_GOTO_SETTINGS_DESCRIPTION";
@@ -131,6 +134,9 @@
private static final FastPairEligibleAccountsRequestParcel
FAST_PAIR_ELIGIBLE_ACCOUNTS_REQUEST_PARCEL =
genFastPairEligibleAccountsRequestParcel();
+ private static final FastPairManageAccountRequestParcel
+ FAST_PAIR_MANAGE_ACCOUNT_REQUEST_PARCEL =
+ genFastPairManageAccountRequestParcel();
private static final FastPairAntispoofkeyDeviceMetadata
HAPPY_PATH_FAST_PAIR_ANTI_SPOOF_KEY_DEVICE_METADATA =
genHappyPathFastPairAntispoofkeyDeviceMetadata();
@@ -222,12 +228,22 @@
@Test
public void testHappyPathManageFastPairAccount() throws Exception {
+ // AOSP sends calls to OEM via Parcelable.
mHappyPathFastPairDataProvider.asProvider().manageFastPairAccount(
- new FastPairManageAccountRequestParcel(),
+ FAST_PAIR_MANAGE_ACCOUNT_REQUEST_PARCEL,
mManageAccountCallback);
+
+ // OEM receives request and verifies that it is as expected.
+ final ArgumentCaptor<FastPairDataProviderBase.FastPairManageAccountRequest>
+ mFastPairManageAccountRequestCaptor =
+ ArgumentCaptor.forClass(
+ FastPairDataProviderBase.FastPairManageAccountRequest.class);
verify(mMockFastPairDataProviderBase).onManageFastPairAccount(
- any(FastPairDataProviderBase.FastPairManageAccountRequest.class),
+ mFastPairManageAccountRequestCaptor.capture(),
any(FastPairDataProviderBase.FastPairManageActionCallback.class));
+ ensureHappyPathAsExpected(mFastPairManageAccountRequestCaptor.getValue());
+
+ // AOSP receives SUCCESS response.
verify(mManageAccountCallback).onSuccess();
}
@@ -280,12 +296,12 @@
@Test
public void testErrorPathManageFastPairAccount() throws Exception {
mErrorPathFastPairDataProvider.asProvider().manageFastPairAccount(
- new FastPairManageAccountRequestParcel(),
+ FAST_PAIR_MANAGE_ACCOUNT_REQUEST_PARCEL,
mManageAccountCallback);
verify(mMockFastPairDataProviderBase).onManageFastPairAccount(
any(FastPairDataProviderBase.FastPairManageAccountRequest.class),
any(FastPairDataProviderBase.FastPairManageActionCallback.class));
- verify(mManageAccountCallback).onError(anyInt(), any());
+ verify(mManageAccountCallback).onError(eq(ERROR_CODE_BAD_REQUEST), eq(ERROR_STRING));
}
@Test
@@ -431,6 +447,17 @@
return requestParcel;
}
+ /* Generates FastPairManageAccountRequestParcel. */
+ private static FastPairManageAccountRequestParcel
+ genFastPairManageAccountRequestParcel() {
+ FastPairManageAccountRequestParcel requestParcel =
+ new FastPairManageAccountRequestParcel();
+ requestParcel.account = MANAGE_ACCOUNT;
+ requestParcel.requestType = MANAGE_ACCOUNT_REQUEST_TYPE;
+
+ return requestParcel;
+ }
+
/* Generates Happy Path AntispoofkeyDeviceMetadata. */
private static FastPairAntispoofkeyDeviceMetadata
genHappyPathFastPairAntispoofkeyDeviceMetadata() {
@@ -507,6 +534,12 @@
// No fields since FastPairEligibleAccountsRequest is just a place holder now.
}
+ private static void ensureHappyPathAsExpected(
+ FastPairDataProviderBase.FastPairManageAccountRequest request) {
+ assertEquals(MANAGE_ACCOUNT, request.getAccount());
+ assertEquals(MANAGE_ACCOUNT_REQUEST_TYPE, request.getRequestType());
+ }
+
/* Verifies Happy Path AntispoofkeyDeviceMetadataParcel. */
private static void ensureHappyPathAsExpected(
FastPairAntispoofkeyDeviceMetadataParcel metadataParcel) {