Map Platform wired routes to new androidx types

Bug: 319386336
Bug: 289034805
Test: Using mr2 implementation for system routing
Relnote: New device types to express wired, bluetooth devices and more.
Change-Id: Iccffa930a861f091135db10b7109bab6c0aa4a94
diff --git a/mediarouter/mediarouter/api/current.txt b/mediarouter/mediarouter/api/current.txt
index 7d7510b..94137ad 100644
--- a/mediarouter/mediarouter/api/current.txt
+++ b/mediarouter/mediarouter/api/current.txt
@@ -457,16 +457,30 @@
     field public static final int CONNECTION_STATE_CONNECTING = 1; // 0x1
     field public static final int CONNECTION_STATE_DISCONNECTED = 0; // 0x0
     field public static final int DEVICE_TYPE_AUDIO_VIDEO_RECEIVER = 4; // 0x4
+    field public static final int DEVICE_TYPE_BLE_HEADSET = 22; // 0x16
+    field public static final int DEVICE_TYPE_BLUETOOTH_A2DP = 3; // 0x3
+    field public static final int DEVICE_TYPE_BUILTIN_SPEAKER = 12; // 0xc
     field public static final int DEVICE_TYPE_CAR = 9; // 0x9
     field public static final int DEVICE_TYPE_COMPUTER = 7; // 0x7
+    field public static final int DEVICE_TYPE_DOCK = 19; // 0x13
     field public static final int DEVICE_TYPE_GAME_CONSOLE = 8; // 0x8
     field public static final int DEVICE_TYPE_GROUP = 1000; // 0x3e8
+    field public static final int DEVICE_TYPE_HDMI = 16; // 0x10
+    field public static final int DEVICE_TYPE_HDMI_ARC = 23; // 0x17
+    field public static final int DEVICE_TYPE_HDMI_EARC = 24; // 0x18
+    field public static final int DEVICE_TYPE_HEARING_AID = 21; // 0x15
+    field public static final int DEVICE_TYPE_REMOTE_SPEAKER = 2; // 0x2
     field public static final int DEVICE_TYPE_SMARTPHONE = 11; // 0xb
     field public static final int DEVICE_TYPE_SMARTWATCH = 10; // 0xa
-    field public static final int DEVICE_TYPE_SPEAKER = 2; // 0x2
+    field @Deprecated public static final int DEVICE_TYPE_SPEAKER = 2; // 0x2
     field public static final int DEVICE_TYPE_TABLET = 5; // 0x5
     field public static final int DEVICE_TYPE_TABLET_DOCKED = 6; // 0x6
     field public static final int DEVICE_TYPE_TV = 1; // 0x1
+    field public static final int DEVICE_TYPE_USB_ACCESSORY = 18; // 0x12
+    field public static final int DEVICE_TYPE_USB_DEVICE = 17; // 0x11
+    field public static final int DEVICE_TYPE_USB_HEADSET = 20; // 0x14
+    field public static final int DEVICE_TYPE_WIRED_HEADPHONES = 14; // 0xe
+    field public static final int DEVICE_TYPE_WIRED_HEADSET = 13; // 0xd
     field public static final int PLAYBACK_TYPE_LOCAL = 0; // 0x0
     field public static final int PLAYBACK_TYPE_REMOTE = 1; // 0x1
     field public static final int PLAYBACK_VOLUME_FIXED = 0; // 0x0
diff --git a/mediarouter/mediarouter/api/restricted_current.txt b/mediarouter/mediarouter/api/restricted_current.txt
index 7d7510b..94137ad 100644
--- a/mediarouter/mediarouter/api/restricted_current.txt
+++ b/mediarouter/mediarouter/api/restricted_current.txt
@@ -457,16 +457,30 @@
     field public static final int CONNECTION_STATE_CONNECTING = 1; // 0x1
     field public static final int CONNECTION_STATE_DISCONNECTED = 0; // 0x0
     field public static final int DEVICE_TYPE_AUDIO_VIDEO_RECEIVER = 4; // 0x4
+    field public static final int DEVICE_TYPE_BLE_HEADSET = 22; // 0x16
+    field public static final int DEVICE_TYPE_BLUETOOTH_A2DP = 3; // 0x3
+    field public static final int DEVICE_TYPE_BUILTIN_SPEAKER = 12; // 0xc
     field public static final int DEVICE_TYPE_CAR = 9; // 0x9
     field public static final int DEVICE_TYPE_COMPUTER = 7; // 0x7
+    field public static final int DEVICE_TYPE_DOCK = 19; // 0x13
     field public static final int DEVICE_TYPE_GAME_CONSOLE = 8; // 0x8
     field public static final int DEVICE_TYPE_GROUP = 1000; // 0x3e8
+    field public static final int DEVICE_TYPE_HDMI = 16; // 0x10
+    field public static final int DEVICE_TYPE_HDMI_ARC = 23; // 0x17
+    field public static final int DEVICE_TYPE_HDMI_EARC = 24; // 0x18
+    field public static final int DEVICE_TYPE_HEARING_AID = 21; // 0x15
+    field public static final int DEVICE_TYPE_REMOTE_SPEAKER = 2; // 0x2
     field public static final int DEVICE_TYPE_SMARTPHONE = 11; // 0xb
     field public static final int DEVICE_TYPE_SMARTWATCH = 10; // 0xa
-    field public static final int DEVICE_TYPE_SPEAKER = 2; // 0x2
+    field @Deprecated public static final int DEVICE_TYPE_SPEAKER = 2; // 0x2
     field public static final int DEVICE_TYPE_TABLET = 5; // 0x5
     field public static final int DEVICE_TYPE_TABLET_DOCKED = 6; // 0x6
     field public static final int DEVICE_TYPE_TV = 1; // 0x1
+    field public static final int DEVICE_TYPE_USB_ACCESSORY = 18; // 0x12
+    field public static final int DEVICE_TYPE_USB_DEVICE = 17; // 0x11
+    field public static final int DEVICE_TYPE_USB_HEADSET = 20; // 0x14
+    field public static final int DEVICE_TYPE_WIRED_HEADPHONES = 14; // 0xe
+    field public static final int DEVICE_TYPE_WIRED_HEADSET = 13; // 0xd
     field public static final int PLAYBACK_TYPE_LOCAL = 0; // 0x0
     field public static final int PLAYBACK_TYPE_REMOTE = 1; // 0x1
     field public static final int PLAYBACK_VOLUME_FIXED = 0; // 0x0
diff --git a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteChooserDialog.java b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteChooserDialog.java
index 3e6004f..ec6a61b 100644
--- a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteChooserDialog.java
+++ b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteChooserDialog.java
@@ -538,7 +538,7 @@
             switch (route.getDeviceType()) {
                 case MediaRouter.RouteInfo.DEVICE_TYPE_TV:
                     return mTvIcon;
-                case MediaRouter.RouteInfo.DEVICE_TYPE_SPEAKER:
+                case MediaRouter.RouteInfo.DEVICE_TYPE_REMOTE_SPEAKER:
                     return mSpeakerIcon;
             }
 
diff --git a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteDynamicChooserDialog.java b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteDynamicChooserDialog.java
index 91cddef..c2819e7 100644
--- a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteDynamicChooserDialog.java
+++ b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteDynamicChooserDialog.java
@@ -392,7 +392,7 @@
             switch (route.getDeviceType()) {
                 case  MediaRouter.RouteInfo.DEVICE_TYPE_TV:
                     return mTvIcon;
-                case MediaRouter.RouteInfo.DEVICE_TYPE_SPEAKER:
+                case MediaRouter.RouteInfo.DEVICE_TYPE_REMOTE_SPEAKER:
                     return mSpeakerIcon;
             }
 
diff --git a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteDynamicControllerDialog.java b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteDynamicControllerDialog.java
index 926f600..07891df 100644
--- a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteDynamicControllerDialog.java
+++ b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteDynamicControllerDialog.java
@@ -1013,7 +1013,7 @@
             switch (route.getDeviceType()) {
                 case MediaRouter.RouteInfo.DEVICE_TYPE_TV:
                     return mTvIcon;
-                case MediaRouter.RouteInfo.DEVICE_TYPE_SPEAKER:
+                case MediaRouter.RouteInfo.DEVICE_TYPE_REMOTE_SPEAKER:
                     return mSpeakerIcon;
             }
 
diff --git a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouter.java b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouter.java
index 7bfccd0..58a5b76 100644
--- a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouter.java
+++ b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouter.java
@@ -1154,7 +1154,8 @@
             DEVICE_TYPE_UNKNOWN,
             DEVICE_TYPE_TV,
             DEVICE_TYPE_SPEAKER,
-            DEVICE_TYPE_BLUETOOTH,
+            DEVICE_TYPE_REMOTE_SPEAKER,
+            DEVICE_TYPE_BLUETOOTH_A2DP,
             DEVICE_TYPE_AUDIO_VIDEO_RECEIVER,
             DEVICE_TYPE_TABLET,
             DEVICE_TYPE_TABLET_DOCKED,
@@ -1163,6 +1164,18 @@
             DEVICE_TYPE_CAR,
             DEVICE_TYPE_SMARTWATCH,
             DEVICE_TYPE_SMARTPHONE,
+            DEVICE_TYPE_BUILTIN_SPEAKER,
+            DEVICE_TYPE_WIRED_HEADSET,
+            DEVICE_TYPE_WIRED_HEADPHONES,
+            DEVICE_TYPE_HDMI,
+            DEVICE_TYPE_USB_DEVICE,
+            DEVICE_TYPE_USB_ACCESSORY,
+            DEVICE_TYPE_DOCK,
+            DEVICE_TYPE_USB_HEADSET,
+            DEVICE_TYPE_HEARING_AID,
+            DEVICE_TYPE_BLE_HEADSET,
+            DEVICE_TYPE_HDMI_ARC,
+            DEVICE_TYPE_HDMI_EARC,
             DEVICE_TYPE_GROUP
         })
         @Retention(RetentionPolicy.SOURCE)
@@ -1189,17 +1202,27 @@
          * on a speaker.
          *
          * @see #getDeviceType
+         * @deprecated use {@link #DEVICE_TYPE_BUILTIN_SPEAKER} and
+         * {@link #DEVICE_TYPE_REMOTE_SPEAKER} instead.
          */
+        @Deprecated
         public static final int DEVICE_TYPE_SPEAKER = 2;
 
         /**
          * A receiver device type of the route indicating the presentation of the media is happening
+         * on a remote speaker.
+         *
+         * @see #getDeviceType
+         */
+        public static final int DEVICE_TYPE_REMOTE_SPEAKER = 2;
+
+        /**
+         * A receiver device type of the route indicating the presentation of the media is happening
          * on a bluetooth device such as a bluetooth speaker.
          *
          * @see #getDeviceType
          */
-        @RestrictTo(LIBRARY)
-        public static final int DEVICE_TYPE_BLUETOOTH = 3;
+        public static final int DEVICE_TYPE_BLUETOOTH_A2DP = 3;
 
         /**
          * A receiver device type indicating that the presentation of the media is happening on an
@@ -1257,6 +1280,103 @@
          * @see #getDeviceType
          */
         public static final int DEVICE_TYPE_SMARTPHONE = 11;
+
+        /**
+         * A receiver device type indicating the presentation of the media is happening on a
+         * speaker system (i.e. a mono speaker or stereo speakers) built into the device.
+         *
+         * @see #getDeviceType
+         */
+        public static final int DEVICE_TYPE_BUILTIN_SPEAKER = 12;
+
+        /**
+         * A receiver device type indicating the presentation of the media is happening on a
+         * headset, which is the combination of a headphones and a microphone.
+         *
+         * @see #getDeviceType
+         */
+        public static final int DEVICE_TYPE_WIRED_HEADSET = 13;
+
+        /**
+         * A receiver device type indicating the presentation of the media is happening on a pair
+         * of wired headphones.
+         *
+         * @see #getDeviceType
+         */
+        public static final int DEVICE_TYPE_WIRED_HEADPHONES = 14;
+
+        /**
+         * A receiver device type indicating the presentation of the media is happening on an
+         * HDMI connection.
+         *
+         * @see #getDeviceType
+         */
+        public static final int DEVICE_TYPE_HDMI = 16;
+
+        /**
+         * A receiver device type indicating the presentation of the media is happening on a USB
+         * audio device.
+         *
+         * @see #getDeviceType
+         */
+        public static final int DEVICE_TYPE_USB_DEVICE = 17;
+
+        /**
+         * A receiver device type indicating the presentation of the media is happening on a USB
+         * audio device in accessory mode.
+         *
+         * @see #getDeviceType
+         */
+        public static final int DEVICE_TYPE_USB_ACCESSORY = 18;
+
+        /**
+         * A receiver device type indicating the presentation of the media is happening on an
+         * audio device associated on a dock.
+         *
+         * @see #getDeviceType
+         */
+        public static final int DEVICE_TYPE_DOCK = 19;
+
+        /**
+         * A receiver device type indicating the presentation of the media is happening on a USB
+         * audio headset.
+         *
+         * @see #getDeviceType
+         */
+        public static final int DEVICE_TYPE_USB_HEADSET = 20;
+
+        /**
+         * A receiver device type indicating the presentation of the media is happening on a
+         * hearing aid device.
+         *
+         * @see #getDeviceType
+         */
+        public static final int DEVICE_TYPE_HEARING_AID = 21;
+
+        /**
+         * A receiver device type indicating the presentation of the media is happening on a
+         * Bluetooth Low Energy (BLE) HEADSET.
+         *
+         * @see #getDeviceType
+         */
+        public static final int DEVICE_TYPE_BLE_HEADSET = 22;
+
+        /**
+         * A receiver device type indicating the presentation of the media is happening on an
+         * Audio Return Channel of an HDMI connection
+         *
+         * @see #getDeviceType
+         */
+        public static final int DEVICE_TYPE_HDMI_ARC = 23;
+
+        /**
+         * A receiver device type indicating the presentation of the media is happening on an
+         * Enhanced Audio Return Channel of an HDMI connection
+         *
+         * @see #getDeviceType
+         */
+        public static final int DEVICE_TYPE_HDMI_EARC = 24;
+
         /**
          * A receiver device type indicating that the presentation of the media is happening on a
          * group of devices.
@@ -1684,7 +1804,7 @@
         /** */
         @RestrictTo(LIBRARY)
         public boolean isDefaultOrBluetooth() {
-            if (isDefault() || mDeviceType == DEVICE_TYPE_BLUETOOTH) {
+            if (isDefault() || mDeviceType == DEVICE_TYPE_BLUETOOTH_A2DP) {
                 return true;
             }
             // This is a workaround for platform version 23 or below where the system route
diff --git a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouter2Utils.java b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouter2Utils.java
index fe25375..2267cba 100644
--- a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouter2Utils.java
+++ b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouter2Utils.java
@@ -21,24 +21,48 @@
 import static android.media.MediaRoute2Info.FEATURE_REMOTE_AUDIO_PLAYBACK;
 import static android.media.MediaRoute2Info.FEATURE_REMOTE_PLAYBACK;
 import static android.media.MediaRoute2Info.FEATURE_REMOTE_VIDEO_PLAYBACK;
+import static android.media.MediaRoute2Info.TYPE_BLE_HEADSET;
+import static android.media.MediaRoute2Info.TYPE_BLUETOOTH_A2DP;
+import static android.media.MediaRoute2Info.TYPE_BUILTIN_SPEAKER;
+import static android.media.MediaRoute2Info.TYPE_DOCK;
 import static android.media.MediaRoute2Info.TYPE_GROUP;
+import static android.media.MediaRoute2Info.TYPE_HDMI;
+import static android.media.MediaRoute2Info.TYPE_HEARING_AID;
 import static android.media.MediaRoute2Info.TYPE_REMOTE_AUDIO_VIDEO_RECEIVER;
 import static android.media.MediaRoute2Info.TYPE_REMOTE_SPEAKER;
 import static android.media.MediaRoute2Info.TYPE_REMOTE_TV;
 import static android.media.MediaRoute2Info.TYPE_UNKNOWN;
+import static android.media.MediaRoute2Info.TYPE_USB_ACCESSORY;
+import static android.media.MediaRoute2Info.TYPE_USB_DEVICE;
+import static android.media.MediaRoute2Info.TYPE_USB_HEADSET;
+import static android.media.MediaRoute2Info.TYPE_WIRED_HEADPHONES;
+import static android.media.MediaRoute2Info.TYPE_WIRED_HEADSET;
 
 import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_AUDIO_VIDEO_RECEIVER;
+import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_BLE_HEADSET;
+import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_BLUETOOTH_A2DP;
+import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_BUILTIN_SPEAKER;
 import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_CAR;
 import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_COMPUTER;
+import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_DOCK;
 import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_GAME_CONSOLE;
 import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_GROUP;
+import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_HDMI;
+import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_HDMI_ARC;
+import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_HDMI_EARC;
+import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_HEARING_AID;
 import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_SMARTPHONE;
 import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_SMARTWATCH;
-import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_SPEAKER;
+import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_REMOTE_SPEAKER;
 import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_TABLET;
 import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_TABLET_DOCKED;
 import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_TV;
 import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_UNKNOWN;
+import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_USB_ACCESSORY;
+import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_USB_DEVICE;
+import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_USB_HEADSET;
+import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_WIRED_HEADPHONES;
+import static androidx.mediarouter.media.MediaRouter.RouteInfo.DEVICE_TYPE_WIRED_HEADSET;
 
 import android.content.IntentFilter;
 import android.media.MediaRoute2Info;
@@ -82,7 +106,6 @@
 
     // TODO(b/282263784): Remove the following constants in favor of using instead SDK constants,
     // once the SDK constants become available.
-    private static final int TYPE_REMOTE_AUDIO_VIDEO_RECEIVER = 1003;
     private static final int TYPE_REMOTE_TABLET = 1004;
     private static final int TYPE_REMOTE_TABLET_DOCKED = 1005;
     private static final int TYPE_REMOTE_COMPUTER = 1006;
@@ -90,7 +113,8 @@
     private static final int TYPE_REMOTE_CAR = 1008;
     private static final int TYPE_REMOTE_SMARTWATCH = 1009;
     private static final int TYPE_REMOTE_SMARTPHONE = 1010;
-    private static final int TYPE_GROUP = 2000;
+    private static final int TYPE_HDMI_ARC = 10;
+    private static final int TYPE_HDMI_EARC = 29;
 
     private MediaRouter2Utils() {}
 
@@ -129,7 +153,7 @@
             case DEVICE_TYPE_TV:
                 builder.addFeature(FEATURE_REMOTE_VIDEO_PLAYBACK);
                 // fall through
-            case DEVICE_TYPE_SPEAKER:
+            case DEVICE_TYPE_REMOTE_SPEAKER:
                 builder.addFeature(FEATURE_REMOTE_AUDIO_PLAYBACK);
         }
         if (!descriptor.getGroupMemberIds().isEmpty()) {
@@ -330,7 +354,7 @@
             case TYPE_REMOTE_TV:
                 return DEVICE_TYPE_TV;
             case TYPE_REMOTE_SPEAKER:
-                return DEVICE_TYPE_SPEAKER;
+                return DEVICE_TYPE_REMOTE_SPEAKER;
             case TYPE_REMOTE_AUDIO_VIDEO_RECEIVER:
                 return DEVICE_TYPE_AUDIO_VIDEO_RECEIVER;
             case TYPE_REMOTE_TABLET:
@@ -347,6 +371,32 @@
                 return DEVICE_TYPE_SMARTWATCH;
             case TYPE_REMOTE_SMARTPHONE:
                 return DEVICE_TYPE_SMARTPHONE;
+            case TYPE_BUILTIN_SPEAKER:
+                return DEVICE_TYPE_BUILTIN_SPEAKER;
+            case TYPE_WIRED_HEADSET:
+                return DEVICE_TYPE_WIRED_HEADSET;
+            case TYPE_WIRED_HEADPHONES:
+                return DEVICE_TYPE_WIRED_HEADPHONES;
+            case TYPE_HDMI:
+                return DEVICE_TYPE_HDMI;
+            case TYPE_HDMI_ARC:
+                return DEVICE_TYPE_HDMI_ARC;
+            case TYPE_HDMI_EARC:
+                return DEVICE_TYPE_HDMI_EARC;
+            case TYPE_USB_DEVICE:
+                return DEVICE_TYPE_USB_DEVICE;
+            case TYPE_USB_ACCESSORY:
+                return DEVICE_TYPE_USB_ACCESSORY;
+            case TYPE_DOCK:
+                return DEVICE_TYPE_DOCK;
+            case TYPE_USB_HEADSET:
+                return DEVICE_TYPE_USB_HEADSET;
+            case TYPE_HEARING_AID:
+                return DEVICE_TYPE_HEARING_AID;
+            case TYPE_BLE_HEADSET:
+                return DEVICE_TYPE_BLE_HEADSET;
+            case TYPE_BLUETOOTH_A2DP:
+                return DEVICE_TYPE_BLUETOOTH_A2DP;
             case TYPE_GROUP:
                 return DEVICE_TYPE_GROUP;
             default:
@@ -359,7 +409,7 @@
         switch (androidXDeviceType) {
             case DEVICE_TYPE_TV:
                 return TYPE_REMOTE_TV;
-            case DEVICE_TYPE_SPEAKER:
+            case DEVICE_TYPE_REMOTE_SPEAKER:
                 return TYPE_REMOTE_SPEAKER;
             case DEVICE_TYPE_AUDIO_VIDEO_RECEIVER:
                 return TYPE_REMOTE_AUDIO_VIDEO_RECEIVER;
@@ -377,6 +427,32 @@
                 return TYPE_REMOTE_SMARTWATCH;
             case DEVICE_TYPE_SMARTPHONE:
                 return TYPE_REMOTE_SMARTPHONE;
+            case DEVICE_TYPE_BUILTIN_SPEAKER:
+                return TYPE_BUILTIN_SPEAKER;
+            case DEVICE_TYPE_WIRED_HEADSET:
+                return TYPE_WIRED_HEADSET;
+            case DEVICE_TYPE_WIRED_HEADPHONES:
+                return TYPE_WIRED_HEADPHONES;
+            case DEVICE_TYPE_HDMI:
+                return TYPE_HDMI;
+            case DEVICE_TYPE_HDMI_ARC:
+                return TYPE_HDMI_ARC;
+            case DEVICE_TYPE_HDMI_EARC:
+                return TYPE_HDMI_EARC;
+            case DEVICE_TYPE_USB_DEVICE:
+                return TYPE_USB_DEVICE;
+            case DEVICE_TYPE_USB_ACCESSORY:
+                return TYPE_USB_ACCESSORY;
+            case DEVICE_TYPE_DOCK:
+                return TYPE_DOCK;
+            case DEVICE_TYPE_USB_HEADSET:
+                return TYPE_USB_HEADSET;
+            case DEVICE_TYPE_HEARING_AID:
+                return TYPE_HEARING_AID;
+            case DEVICE_TYPE_BLE_HEADSET:
+                return TYPE_BLE_HEADSET;
+            case DEVICE_TYPE_BLUETOOTH_A2DP:
+                return TYPE_BLUETOOTH_A2DP;
             case DEVICE_TYPE_GROUP:
                 return TYPE_GROUP;
             default:
diff --git a/samples/MediaRoutingDemo/src/main/java/com/example/androidx/mediarouting/data/RouteItem.java b/samples/MediaRoutingDemo/src/main/java/com/example/androidx/mediarouting/data/RouteItem.java
index d047bb4..b093db9 100644
--- a/samples/MediaRoutingDemo/src/main/java/com/example/androidx/mediarouting/data/RouteItem.java
+++ b/samples/MediaRoutingDemo/src/main/java/com/example/androidx/mediarouting/data/RouteItem.java
@@ -153,8 +153,8 @@
 
     public enum DeviceType {
         TV(MediaRouter.RouteInfo.DEVICE_TYPE_TV),
-        SPEAKER(MediaRouter.RouteInfo.DEVICE_TYPE_SPEAKER),
-        BLUETOOTH(MediaRouter.RouteInfo.DEVICE_TYPE_BLUETOOTH),
+        SPEAKER(MediaRouter.RouteInfo.DEVICE_TYPE_REMOTE_SPEAKER),
+        BLUETOOTH(MediaRouter.RouteInfo.DEVICE_TYPE_BLUETOOTH_A2DP),
         AUDIO_VIDEO_RECEIVER(MediaRouter.RouteInfo.DEVICE_TYPE_AUDIO_VIDEO_RECEIVER),
         TABLET(MediaRouter.RouteInfo.DEVICE_TYPE_TABLET),
         TABLET_DOCKED(MediaRouter.RouteInfo.DEVICE_TYPE_TABLET_DOCKED),