Merge "Add More Unit Test for FastPairDualConnection." into tm-dev
diff --git a/nearby/framework/java/android/nearby/INearbyManager.aidl b/nearby/framework/java/android/nearby/INearbyManager.aidl
index cd05106..4fff563 100644
--- a/nearby/framework/java/android/nearby/INearbyManager.aidl
+++ b/nearby/framework/java/android/nearby/INearbyManager.aidl
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2007, The Android Open Source Project
+ * Copyright (C) 2022, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/nearby/framework/java/android/nearby/IScanListener.aidl b/nearby/framework/java/android/nearby/IScanListener.aidl
index 8747b07..54033aa 100644
--- a/nearby/framework/java/android/nearby/IScanListener.aidl
+++ b/nearby/framework/java/android/nearby/IScanListener.aidl
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2007, The Android Open Source Project
+ * Copyright (C) 2022, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/nearby/framework/java/android/nearby/ScanRequest.aidl b/nearby/framework/java/android/nearby/ScanRequest.aidl
index 0aaf3af..438dfed 100644
--- a/nearby/framework/java/android/nearby/ScanRequest.aidl
+++ b/nearby/framework/java/android/nearby/ScanRequest.aidl
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012, The Android Open Source Project
+ * Copyright (C) 2022, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/nearby/halfsheet/res/layout/fast_pair_consent_fragment.xml b/nearby/halfsheet/res/layout/fast_pair_consent_fragment.xml
deleted file mode 100644
index aba9a32..0000000
--- a/nearby/halfsheet/res/layout/fast_pair_consent_fragment.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<android.support.v7.widget.LinearLayoutCompat
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:orientation="vertical"
- android:layout_width="match_parent" android:layout_height="match_parent">
-
- <android.support.constraint.ConstraintLayout
- android:id="@+id/image_view"
- android:layout_width="match_parent"
- android:layout_height="340dp"
- android:paddingStart="12dp"
- android:paddingEnd="12dp"
- android:paddingTop="12dp">
- <TextView
- android:id="@+id/header_subtitle"
- android:textColor="@color/fast_pair_half_sheet_subtitle_color"
- android:fontFamily="google-sans"
- android:textSize="14sp"
- android:gravity="center"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toEndOf="parent" />
-
- <ImageView
- android:id="@+id/pairing_pic"
- android:layout_width="@dimen/fast_pair_half_sheet_image_size"
- android:layout_height="@dimen/fast_pair_half_sheet_image_size"
- android:paddingTop="18dp"
- android:paddingBottom="18dp"
- android:importantForAccessibility="no"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/header_subtitle" />
-
- <ProgressBar
- android:id="@+id/connect_progressbar"
- android:layout_width="@dimen/fast_pair_half_sheet_image_size"
- android:layout_height="2dp"
- android:indeterminate="true"
- android:indeterminateTint="@color/fast_pair_progress_color"
- android:indeterminateTintMode="src_in"
- style="?android:attr/progressBarStyleHorizontal"
- app:layout_constraintTop_toBottomOf="@+id/pairing_pic"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"/>
-
- <Button
- android:id="@+id/connect_btn"
- android:text="@string/fast_pair_app_launch_button"
- android:layout_height="@dimen/fast_pair_connect_button_height"
- android:layout_width="@dimen/fast_pair_half_sheet_image_size"
- android:background="@color/fast_pair_half_sheet_button_color"
- android:paddingTop="6dp"
- android:paddingBottom="6dp"
- app:layout_constraintTop_toBottomOf="@+id/pairing_pic"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- style="@style/HalfSheetButton" />
-
- <Button
- android:id="@+id/result_action_btn"
- android:text="@string/common_done"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:paddingTop="6dp"
- android:paddingBottom="6dp"
- app:layout_constraintTop_toBottomOf="@+id/pairing_pic"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- style="@style/HalfSheetButtonBorderless" />
-
- </android.support.constraint.ConstraintLayout>
-
-</android.support.v7.widget.LinearLayoutCompat>
diff --git a/nearby/halfsheet/src/com/android/nearby/halfsheet/fragment/DevicePairingFragment.java b/nearby/halfsheet/src/com/android/nearby/halfsheet/fragment/DevicePairingFragment.java
index c99c130..74530de 100644
--- a/nearby/halfsheet/src/com/android/nearby/halfsheet/fragment/DevicePairingFragment.java
+++ b/nearby/halfsheet/src/com/android/nearby/halfsheet/fragment/DevicePairingFragment.java
@@ -324,7 +324,7 @@
private Intent createCompletionIntent(@Nullable String companionApp, @Nullable String address) {
if (isEmpty(companionApp)) {
return null;
- } else if (FastPairUtils.isAppInstalled(companionApp, getContext())
+ } else if (FastPairUtils.isAppInstalled(getContext(), companionApp)
&& isLaunchable(companionApp)) {
mOpenCompanionAppIntent = createCompanionAppIntent(companionApp, address);
return mOpenCompanionAppIntent;
diff --git a/nearby/halfsheet/src/com/android/nearby/halfsheet/utils/FastPairUtils.java b/nearby/halfsheet/src/com/android/nearby/halfsheet/utils/FastPairUtils.java
index ee869ba..fffb9e1 100644
--- a/nearby/halfsheet/src/com/android/nearby/halfsheet/utils/FastPairUtils.java
+++ b/nearby/halfsheet/src/com/android/nearby/halfsheet/utils/FastPairUtils.java
@@ -18,11 +18,15 @@
import static com.android.server.nearby.common.fastpair.service.UserActionHandlerBase.EXTRA_COMPANION_APP;
import static com.android.server.nearby.fastpair.UserActionHandler.ACTION_FAST_PAIR;
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.util.Log;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.net.URISyntaxException;
@@ -37,7 +41,7 @@
public static final String TAG = "HalfSheetActivity";
/** FastPair util method check certain app is install on the device or not. */
- public static boolean isAppInstalled(String packageName, Context context) {
+ public static boolean isAppInstalled(Context context, String packageName) {
try {
context.getPackageManager().getPackageInfo(packageName, 0);
return true;
@@ -71,7 +75,8 @@
}
/**
- * Converts a {@link ScanFastPairStoreItem} to a {@link StoredDiscoveryItem}.
+ * Converts a {@link service.proto.Cache.ScanFastPairStoreItem}
+ * to a {@link service.proto.Cache.StoredDiscoveryItem}.
*
* <p>This is needed to make the new Fast Pair scanning stack compatible with the rest of the
* legacy Fast Pair code.
@@ -110,7 +115,39 @@
.build();
}
- private FastPairUtils() {
-
+ /**
+ * Returns true the application is installed and can be opened on device.
+ */
+ public static boolean isLaunchable(@NonNull Context context, String companionApp) {
+ return isAppInstalled(context, companionApp)
+ && createCompanionAppIntent(context, companionApp, null) != null;
}
+
+ /**
+ * Returns an intent to launch given the package name and bluetooth address (if provided).
+ * Returns null if no such an intent can be found.
+ */
+ @Nullable
+ public static Intent createCompanionAppIntent(@NonNull Context context, String packageName,
+ @Nullable String address) {
+ Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
+ if (intent == null) {
+ return null;
+ }
+ if (address != null) {
+ BluetoothAdapter adapter = getBluetoothAdapter(context);
+ if (adapter != null) {
+ intent.putExtra(BluetoothDevice.EXTRA_DEVICE, adapter.getRemoteDevice(address));
+ }
+ }
+ return intent;
+ }
+
+ @Nullable
+ private static BluetoothAdapter getBluetoothAdapter(@NonNull Context context) {
+ BluetoothManager bluetoothManager = context.getSystemService(BluetoothManager.class);
+ return bluetoothManager == null ? null : bluetoothManager.getAdapter();
+ }
+
+ private FastPairUtils() {}
}
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 f8d5a62..9620f0a 100644
--- a/nearby/service/java/com/android/server/nearby/fastpair/FastPairAdvHandler.java
+++ b/nearby/service/java/com/android/server/nearby/fastpair/FastPairAdvHandler.java
@@ -16,6 +16,8 @@
package com.android.server.nearby.fastpair;
+import static com.android.server.nearby.fastpair.Constant.TAG;
+
import static com.google.common.primitives.Bytes.concat;
import android.accounts.Account;
@@ -45,7 +47,6 @@
public class FastPairAdvHandler {
Context mContext;
String mBleAddress;
- private static final String TAG = "FastPairAdvHandler";
/** The types about how the bloomfilter is processed. */
public enum ProcessBloomFilterType {
@@ -71,8 +72,7 @@
mBleAddress = fastPairDevice.getBluetoothAddress();
if (FastPairDecoder.checkModelId(fastPairDevice.getData())) {
byte[] model = FastPairDecoder.getModelId(fastPairDevice.getData());
- Log.d("FastPairService",
- "On discovery model id " + Hex.bytesToStringLowercase(model));
+ Log.d(TAG, "On discovery model id " + Hex.bytesToStringLowercase(model));
// Use api to get anti spoofing key from model id.
try {
Rpcs.GetObservedDeviceResponse response =
diff --git a/nearby/service/java/com/android/server/nearby/util/FastPairDecoder.java b/nearby/service/java/com/android/server/nearby/util/FastPairDecoder.java
index 5bb76c9..6021ff6 100644
--- a/nearby/service/java/com/android/server/nearby/util/FastPairDecoder.java
+++ b/nearby/service/java/com/android/server/nearby/util/FastPairDecoder.java
@@ -145,7 +145,6 @@
return getExtraField(serviceData, FIELD_TYPE_BLOOM_FILTER_NO_NOTIFICATION);
}
-
/**
* Get random resolvableData
*/
diff --git a/nearby/tests/multidevices/host/Android.bp b/nearby/tests/multidevices/host/Android.bp
index b0adfba..5aace96 100644
--- a/nearby/tests/multidevices/host/Android.bp
+++ b/nearby/tests/multidevices/host/Android.bp
@@ -16,7 +16,7 @@
default_applicable_licenses: ["Android-Apache-2.0"],
}
-// Run the tests: atest -v CtsSeekerDiscoverProviderTest
+// Run the tests: atest -v CtsSeekerDiscoverProviderTest -- --replicate-parent-setup --multi-device-count 2
python_test_host {
name: "CtsSeekerDiscoverProviderTest",
main: "seeker_discover_provider_test.py",