Merge "Fix parceling bug in NearbyDeviceParcelable."
diff --git a/nearby/halfsheet/Android.bp b/nearby/halfsheet/Android.bp
index 3f4f258..2b35254 100644
--- a/nearby/halfsheet/Android.bp
+++ b/nearby/halfsheet/Android.bp
@@ -16,45 +16,42 @@
     default_applicable_licenses: ["Android-Apache-2.0"],
 }
 
-java_defaults {
-    name: "HalfSheetDefaults",
+android_app {
+    name: "HalfSheetUX",
+    defaults: ["platform_app_defaults"],
     srcs: ["src/**/*.java"],
     sdk_version: "module_current",
     // This is included in tethering apex, which uses min SDK 30
     min_sdk_version: "30",
     target_sdk_version: "current",
-    manifest: "AndroidManifest.xml",
-    plugins: ["java_api_finder"],
-    jarjar_rules: ":nearby-jarjar-rules",
+    updatable: true,
+    certificate: ":com.android.nearby.halfsheetcertificate",
     libs: [
         "framework-bluetooth",
         "framework-connectivity-tiramisu",
         "nearby-service-string",
-      ],
+    ],
     static_libs: [
         "androidx.annotation_annotation",
         "androidx.fragment_fragment",
         "androidx-constraintlayout_constraintlayout",
         "androidx.localbroadcastmanager_localbroadcastmanager",
+        "androidx.core_core",
+        "androidx.appcompat_appcompat",
+        "androidx.recyclerview_recyclerview",
+        "androidx.lifecycle_lifecycle-runtime",
+        "androidx.lifecycle_lifecycle-extensions",
+        "com.google.android.material_material",
         "fast-pair-lite-protos",
     ],
-    lint: { strict_updatability_linting: true }
-}
-
-android_app {
-    name: "HalfSheetUX",
-    defaults: ["HalfSheetDefaults"],
-    resource_dirs: ["res"],
-    certificate: ":com.android.nearby.halfsheetcertificate",
-    updatable: true,
-    static_libs: [
-        "com.google.android.material_material",
-    ],
+    plugins: ["java_api_finder"],
+    manifest: "AndroidManifest.xml",
+    jarjar_rules: ":nearby-jarjar-rules",
     apex_available: ["com.android.tethering",],
+    lint: { strict_updatability_linting: true }
 }
 
 android_app_certificate {
     name: "com.android.nearby.halfsheetcertificate",
     certificate: "apk-certs/com.android.nearby.halfsheet"
 }
-
diff --git a/nearby/halfsheet/AndroidManifest.xml b/nearby/halfsheet/AndroidManifest.xml
index 3e8b39b..22987fb 100644
--- a/nearby/halfsheet/AndroidManifest.xml
+++ b/nearby/halfsheet/AndroidManifest.xml
@@ -15,17 +15,17 @@
   ~ limitations under the License.
   -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
     package="com.android.nearby.halfsheet">
-    <application android:label="@string/app_name">
+    <application>
         <activity
             android:name="com.android.nearby.halfsheet.HalfSheetActivity"
-            android:exported="true">
+            android:exported="true"
+            android:launchMode="singleInstance"
+            android:theme="@style/HalfSheetStyle" >
             <intent-filter>
                 <action android:name="android.nearby.SHOW_HALFSHEET"/>
                 <category android:name="android.intent.category.DEFAULT"/>
             </intent-filter>
         </activity>
     </application>
-
-</manifest>
\ No newline at end of file
+</manifest>
diff --git a/nearby/halfsheet/res/layout/activity_half_sheet.xml b/nearby/halfsheet/res/layout/activity_half_sheet.xml
deleted file mode 100644
index 4915d4b..0000000
--- a/nearby/halfsheet/res/layout/activity_half_sheet.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    xmlns:tools="http://schemas.android.com/tools"
-    xmlns:app="http://schemas.android.com/apk/res-auto">
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:orientation="vertical" >
-
-        <TextView
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:text="abc half sheet" />
-    </LinearLayout>
-
-</FrameLayout>
-
diff --git a/nearby/halfsheet/res/layout/fast_pair_app_launch_fragment.xml b/nearby/halfsheet/res/layout/fast_pair_app_launch_fragment.xml
deleted file mode 100644
index ad321b2..0000000
--- a/nearby/halfsheet/res/layout/fast_pair_app_launch_fragment.xml
+++ /dev/null
@@ -1,53 +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" />
-
-    <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" />
-
-  </android.support.constraint.ConstraintLayout>
-
-</android.support.v7.widget.LinearLayoutCompat>
diff --git a/nearby/halfsheet/res/values/strings.xml b/nearby/halfsheet/res/values/strings.xml
index a3a2b00..12e3c23 100644
--- a/nearby/halfsheet/res/values/strings.xml
+++ b/nearby/halfsheet/res/values/strings.xml
@@ -15,7 +15,7 @@
   -->
 
 <resources>
-    <string name="app_name">Nearby HalfSheet Dialog</string>
+
     <string name="common_done" description="After pairing process finish button text to dismiss halfsheet">Done</string>
     <string name="common_save">Save</string>
     <string name="common_connect" description="Button text to start connecting process">Connect</string>
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 672d785..db2d69f 100644
--- a/nearby/service/java/com/android/server/nearby/fastpair/FastPairAdvHandler.java
+++ b/nearby/service/java/com/android/server/nearby/fastpair/FastPairAdvHandler.java
@@ -70,9 +70,6 @@
      */
     public void handleBroadcast(NearbyDevice device) {
         FastPairDevice fastPairDevice = (FastPairDevice) device;
-        if (mBleAddress != null && mBleAddress.equals(fastPairDevice.getBluetoothAddress())) {
-            return;
-        }
         mBleAddress = fastPairDevice.getBluetoothAddress();
         if (FastPairDecoder.checkModelId(fastPairDevice.getData())) {
             byte[] model = FastPairDecoder.getModelId(fastPairDevice.getData());
diff --git a/nearby/service/java/com/android/server/nearby/fastpair/halfsheet/FastPairHalfSheetManager.java b/nearby/service/java/com/android/server/nearby/fastpair/halfsheet/FastPairHalfSheetManager.java
index 9fdd01a..cfac904 100644
--- a/nearby/service/java/com/android/server/nearby/fastpair/halfsheet/FastPairHalfSheetManager.java
+++ b/nearby/service/java/com/android/server/nearby/fastpair/halfsheet/FastPairHalfSheetManager.java
@@ -48,6 +48,8 @@
  */
 public class FastPairHalfSheetManager {
     private static final String ACTIVITY_INTENT_ACTION = "android.nearby.SHOW_HALFSHEET";
+    private static final String HALF_SHEET_CLASS_NAME =
+            "com.android.nearby.halfsheet.HalfSheetActivity";
 
     private String mHalfSheetApkPkgName;
     private Context mContext;
@@ -65,22 +67,28 @@
      * app can't get the correct component name.
      */
     public void showHalfSheet(Cache.ScanFastPairStoreItem scanFastPairStoreItem) {
-        if (mContext != null) {
-            String packageName = getHalfSheetApkPkgName();
-            HalfSheetCallback callback = new HalfSheetCallback();
-            callback.setmFastPairController(Locator.get(mContext, FastPairController.class));
-            Bundle bundle = new Bundle();
-            bundle.putBinder(EXTRA_BINDER, callback);
-            mContext
-                    .startActivityAsUser(new Intent(ACTIVITY_INTENT_ACTION)
-                                    .putExtra(EXTRA_HALF_SHEET_INFO,
-                                            scanFastPairStoreItem.toByteArray())
-                                    .putExtra(EXTRA_HALF_SHEET_TYPE, DEVICE_PAIRING_FRAGMENT_TYPE)
-                                    .putExtra(EXTRA_BUNDLE, bundle)
-                                    .setComponent(new ComponentName(packageName,
-                                            packageName + ".HalfSheetActivity")),
-                            UserHandle.CURRENT);
+        try {
+            if (mContext != null) {
+                String packageName = getHalfSheetApkPkgName();
+                HalfSheetCallback callback = new HalfSheetCallback();
+                callback.setmFastPairController(Locator.get(mContext, FastPairController.class));
+                Bundle bundle = new Bundle();
+                bundle.putBinder(EXTRA_BINDER, callback);
+                mContext
+                        .startActivityAsUser(new Intent(ACTIVITY_INTENT_ACTION)
+                                        .putExtra(EXTRA_HALF_SHEET_INFO,
+                                                scanFastPairStoreItem.toByteArray())
+                                        .putExtra(EXTRA_HALF_SHEET_TYPE,
+                                                DEVICE_PAIRING_FRAGMENT_TYPE)
+                                        .putExtra(EXTRA_BUNDLE, bundle)
+                                        .setComponent(new ComponentName(packageName,
+                                                HALF_SHEET_CLASS_NAME)),
+                                UserHandle.CURRENT);
 
+            }
+        } catch (IllegalStateException e) {
+            Log.e("FastPairHalfSheetManager",
+                    "Can't resolve package that contains half sheet");
         }
     }
 
diff --git a/nearby/service/java/com/android/server/nearby/util/Environment.java b/nearby/service/java/com/android/server/nearby/util/Environment.java
index dc131e7..e7277cd 100644
--- a/nearby/service/java/com/android/server/nearby/util/Environment.java
+++ b/nearby/service/java/com/android/server/nearby/util/Environment.java
@@ -29,7 +29,7 @@
     /**
      * NEARBY apex name.
      */
-    private static final String NEARBY_APEX_NAME = "com.android.nearby";
+    private static final String NEARBY_APEX_NAME = "com.android.tethering";
 
     /**
      * The path where the Nearby apex is mounted.
diff --git a/nearby/tests/unit/Android.bp b/nearby/tests/unit/Android.bp
index 93ab20a..9b5b14c 100644
--- a/nearby/tests/unit/Android.bp
+++ b/nearby/tests/unit/Android.bp
@@ -33,18 +33,14 @@
     compile_multilib: "both",
 
     static_libs: [
-        "Robolectric_all-target",
         "androidx.test.ext.junit",
         "androidx.test.rules",
-        "compatibility-device-util-axt",
         "framework-nearby-static",
         "guava",
         "junit",
         "libprotobuf-java-lite",
         "mockito-target",
         "platform-test-annotations",
-        "robolectric_android-all-stub",
-        "service-appsearch",
         "service-nearby",
         "truth-prebuilt",
     ],