Loading core/res/res/values/strings.xml +18 −0 Original line number Diff line number Diff line Loading @@ -4678,6 +4678,24 @@ <!-- Name of the default audio route when USB is connected. [CHAR LIMIT=50] --> <string name="default_audio_route_name_usb">USB</string> <!-- Name of the default audio route when HDMI is connected on a TV device. [CHAR LIMIT=50] --> <string name="default_audio_route_name_hdmi_tv">TV Audio</string> <!-- Name of the default audio route for TV when ARC audio device is connected. [CHAR LIMIT=50] --> <string name="default_audio_route_name_arc">ARC</string> <!-- Name of the default audio route for TV when eARC audio device is connected. [CHAR LIMIT=50] --> <string name="default_audio_route_name_earc">eARC</string> <!-- Name of the default audio route for TV when analog audio device is connected. [CHAR LIMIT=50] --> <string name="default_audio_route_name_analog">Analog</string> <!-- Name of the default audio route for TV when digital audio device is connected. [CHAR LIMIT=50] --> <string name="default_audio_route_name_digital">Digital</string> <!-- Name of the default audio route for TV when AUX audio device is connected. [CHAR LIMIT=50] --> <string name="default_audio_route_name_aux">AUX</string> <!-- Name of the default audio route category. [CHAR LIMIT=50] --> <string name="default_audio_route_category_name">System</string> Loading core/res/res/values/symbols.xml +6 −0 Original line number Diff line number Diff line Loading @@ -1087,9 +1087,15 @@ <java-symbol type="string" name="granularity_label_line" /> <java-symbol type="string" name="default_audio_route_id" /> <java-symbol type="string" name="default_audio_route_name" /> <java-symbol type="string" name="default_audio_route_name_analog" /> <java-symbol type="string" name="default_audio_route_name_arc" /> <java-symbol type="string" name="default_audio_route_name_aux" /> <java-symbol type="string" name="default_audio_route_name_digital" /> <java-symbol type="string" name="default_audio_route_name_dock_speakers" /> <java-symbol type="string" name="default_audio_route_name_earc" /> <java-symbol type="string" name="default_audio_route_name_external_device" /> <java-symbol type="string" name="default_audio_route_name_headphones" /> <java-symbol type="string" name="default_audio_route_name_hdmi_tv" /> <java-symbol type="string" name="default_audio_route_name_usb" /> <java-symbol type="string" name="default_audio_route_category_name" /> <java-symbol type="string" name="stk_cc_ss_to_dial" /> Loading services/core/java/com/android/server/media/AudioManagerRouteController.java +21 −5 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.server.media; import static android.media.MediaRoute2Info.FEATURE_LIVE_AUDIO; import static android.media.MediaRoute2Info.FEATURE_LOCAL_PLAYBACK; import static android.media.MediaRoute2Info.TYPE_BUILTIN_SPEAKER; import static android.media.MediaRoute2Info.TYPE_HDMI; import android.Manifest; import android.annotation.NonNull; Loading @@ -26,6 +28,7 @@ import android.annotation.RequiresPermission; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.content.Context; import android.content.pm.PackageManager; import android.media.AudioAttributes; import android.media.AudioDeviceAttributes; import android.media.AudioDeviceCallback; Loading @@ -35,6 +38,7 @@ import android.media.MediaRoute2Info; import android.media.RoutingSessionInfo; import android.media.audio.Flags; import android.media.audiopolicy.AudioProductStrategy; import android.os.Build; import android.os.Handler; import android.os.HandlerExecutor; import android.os.Looper; Loading Loading @@ -124,6 +128,9 @@ import java.util.concurrent.CopyOnWriteArrayList; // A flag indicating if the start function has been called. private boolean mStarted = false; // Whether this is a TV device. private final boolean mIsTv; // Get the singleton AudioManagerRouteController. Create a new one if it's not available yet. public static AudioManagerRouteController getInstance( @NonNull Context context, Loading Loading @@ -165,6 +172,7 @@ import java.util.concurrent.CopyOnWriteArrayList; mAudioManager = Objects.requireNonNull(audioManager); mHandler = new Handler(Objects.requireNonNull(looper)); mStrategyForMedia = Objects.requireNonNull(strategyForMedia); mIsTv = mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_LEANBACK); mBuiltInSpeakerSuitabilityStatus = DeviceRouteController.getBuiltInSpeakerSuitabilityStatus(mContext); Loading Loading @@ -532,6 +540,14 @@ import java.util.concurrent.CopyOnWriteArrayList; return null; } CharSequence humanReadableName = deviceName; if (mIsTv) { if (systemRouteInfo.mMediaRoute2InfoType == TYPE_BUILTIN_SPEAKER) { humanReadableName = Build.MODEL; } else if (systemRouteInfo.mMediaRoute2InfoType == TYPE_HDMI) { humanReadableName = mContext.getResources().getText( R.string.default_audio_route_name_hdmi_tv); } } if (TextUtils.isEmpty(humanReadableName)) { humanReadableName = mContext.getResources().getText(systemRouteInfo.mNameResource); } Loading Loading @@ -733,13 +749,13 @@ import java.util.concurrent.CopyOnWriteArrayList; new SystemRouteInfo( MediaRoute2Info.TYPE_HDMI_ARC, /* defaultRouteId= */ "ROUTE_ID_HDMI_ARC", /* nameResource= */ R.string.default_audio_route_name_external_device)); /* nameResource= */ R.string.default_audio_route_name_arc)); AUDIO_DEVICE_INFO_TYPE_TO_ROUTE_INFO.put( AudioDeviceInfo.TYPE_HDMI_EARC, new SystemRouteInfo( MediaRoute2Info.TYPE_HDMI_EARC, /* defaultRouteId= */ "ROUTE_ID_HDMI_EARC", /* nameResource= */ R.string.default_audio_route_name_external_device)); /* nameResource= */ R.string.default_audio_route_name_earc)); AUDIO_DEVICE_INFO_TYPE_TO_ROUTE_INFO.put( AudioDeviceInfo.TYPE_HEARING_AID, new SystemRouteInfo( Loading Loading @@ -770,21 +786,21 @@ import java.util.concurrent.CopyOnWriteArrayList; com.android.media.flags.Flags.enableNewWiredMediaRoute2InfoTypes() ? MediaRoute2Info.TYPE_LINE_DIGITAL : MediaRoute2Info.TYPE_UNKNOWN, /* defaultRouteId= */ "ROUTE_ID_LINE_DIGITAL", /* nameResource= */ R.string.default_audio_route_name_external_device)); /* nameResource= */ R.string.default_audio_route_name_digital)); AUDIO_DEVICE_INFO_TYPE_TO_ROUTE_INFO.put( AudioDeviceInfo.TYPE_LINE_ANALOG, new SystemRouteInfo( com.android.media.flags.Flags.enableNewWiredMediaRoute2InfoTypes() ? MediaRoute2Info.TYPE_LINE_ANALOG : MediaRoute2Info.TYPE_UNKNOWN, /* defaultRouteId= */ "ROUTE_ID_LINE_ANALOG", /* nameResource= */ R.string.default_audio_route_name_external_device)); /* nameResource= */ R.string.default_audio_route_name_analog)); AUDIO_DEVICE_INFO_TYPE_TO_ROUTE_INFO.put( AudioDeviceInfo.TYPE_AUX_LINE, new SystemRouteInfo( com.android.media.flags.Flags.enableNewWiredMediaRoute2InfoTypes() ? MediaRoute2Info.TYPE_AUX_LINE : MediaRoute2Info.TYPE_UNKNOWN, /* defaultRouteId= */ "ROUTE_ID_AUX_LINE", /* nameResource= */ R.string.default_audio_route_name_external_device)); /* nameResource= */ R.string.default_audio_route_name_aux)); AUDIO_DEVICE_INFO_TYPE_TO_ROUTE_INFO.put( AudioDeviceInfo.TYPE_DOCK_ANALOG, new SystemRouteInfo( Loading services/tests/media/mediarouterservicetest/src/com/android/server/media/AudioManagerRouteControllerTest.java +2 −0 Original line number Diff line number Diff line Loading @@ -124,6 +124,8 @@ public class AudioManagerRouteControllerTest { // concrete class is package private, so we just return the application info through the // mock. when(mockContext.getApplicationInfo()).thenReturn(realContext.getApplicationInfo()); // Needed to check if it is a TV device. when(mockContext.getPackageManager()).thenReturn(realContext.getPackageManager()); // Setup the initial state so that the route controller is created in a sensible state. mSelectedAudioDeviceInfo = FAKE_AUDIO_DEVICE_INFO_BUILTIN_SPEAKER; Loading Loading
core/res/res/values/strings.xml +18 −0 Original line number Diff line number Diff line Loading @@ -4678,6 +4678,24 @@ <!-- Name of the default audio route when USB is connected. [CHAR LIMIT=50] --> <string name="default_audio_route_name_usb">USB</string> <!-- Name of the default audio route when HDMI is connected on a TV device. [CHAR LIMIT=50] --> <string name="default_audio_route_name_hdmi_tv">TV Audio</string> <!-- Name of the default audio route for TV when ARC audio device is connected. [CHAR LIMIT=50] --> <string name="default_audio_route_name_arc">ARC</string> <!-- Name of the default audio route for TV when eARC audio device is connected. [CHAR LIMIT=50] --> <string name="default_audio_route_name_earc">eARC</string> <!-- Name of the default audio route for TV when analog audio device is connected. [CHAR LIMIT=50] --> <string name="default_audio_route_name_analog">Analog</string> <!-- Name of the default audio route for TV when digital audio device is connected. [CHAR LIMIT=50] --> <string name="default_audio_route_name_digital">Digital</string> <!-- Name of the default audio route for TV when AUX audio device is connected. [CHAR LIMIT=50] --> <string name="default_audio_route_name_aux">AUX</string> <!-- Name of the default audio route category. [CHAR LIMIT=50] --> <string name="default_audio_route_category_name">System</string> Loading
core/res/res/values/symbols.xml +6 −0 Original line number Diff line number Diff line Loading @@ -1087,9 +1087,15 @@ <java-symbol type="string" name="granularity_label_line" /> <java-symbol type="string" name="default_audio_route_id" /> <java-symbol type="string" name="default_audio_route_name" /> <java-symbol type="string" name="default_audio_route_name_analog" /> <java-symbol type="string" name="default_audio_route_name_arc" /> <java-symbol type="string" name="default_audio_route_name_aux" /> <java-symbol type="string" name="default_audio_route_name_digital" /> <java-symbol type="string" name="default_audio_route_name_dock_speakers" /> <java-symbol type="string" name="default_audio_route_name_earc" /> <java-symbol type="string" name="default_audio_route_name_external_device" /> <java-symbol type="string" name="default_audio_route_name_headphones" /> <java-symbol type="string" name="default_audio_route_name_hdmi_tv" /> <java-symbol type="string" name="default_audio_route_name_usb" /> <java-symbol type="string" name="default_audio_route_category_name" /> <java-symbol type="string" name="stk_cc_ss_to_dial" /> Loading
services/core/java/com/android/server/media/AudioManagerRouteController.java +21 −5 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.server.media; import static android.media.MediaRoute2Info.FEATURE_LIVE_AUDIO; import static android.media.MediaRoute2Info.FEATURE_LOCAL_PLAYBACK; import static android.media.MediaRoute2Info.TYPE_BUILTIN_SPEAKER; import static android.media.MediaRoute2Info.TYPE_HDMI; import android.Manifest; import android.annotation.NonNull; Loading @@ -26,6 +28,7 @@ import android.annotation.RequiresPermission; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.content.Context; import android.content.pm.PackageManager; import android.media.AudioAttributes; import android.media.AudioDeviceAttributes; import android.media.AudioDeviceCallback; Loading @@ -35,6 +38,7 @@ import android.media.MediaRoute2Info; import android.media.RoutingSessionInfo; import android.media.audio.Flags; import android.media.audiopolicy.AudioProductStrategy; import android.os.Build; import android.os.Handler; import android.os.HandlerExecutor; import android.os.Looper; Loading Loading @@ -124,6 +128,9 @@ import java.util.concurrent.CopyOnWriteArrayList; // A flag indicating if the start function has been called. private boolean mStarted = false; // Whether this is a TV device. private final boolean mIsTv; // Get the singleton AudioManagerRouteController. Create a new one if it's not available yet. public static AudioManagerRouteController getInstance( @NonNull Context context, Loading Loading @@ -165,6 +172,7 @@ import java.util.concurrent.CopyOnWriteArrayList; mAudioManager = Objects.requireNonNull(audioManager); mHandler = new Handler(Objects.requireNonNull(looper)); mStrategyForMedia = Objects.requireNonNull(strategyForMedia); mIsTv = mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_LEANBACK); mBuiltInSpeakerSuitabilityStatus = DeviceRouteController.getBuiltInSpeakerSuitabilityStatus(mContext); Loading Loading @@ -532,6 +540,14 @@ import java.util.concurrent.CopyOnWriteArrayList; return null; } CharSequence humanReadableName = deviceName; if (mIsTv) { if (systemRouteInfo.mMediaRoute2InfoType == TYPE_BUILTIN_SPEAKER) { humanReadableName = Build.MODEL; } else if (systemRouteInfo.mMediaRoute2InfoType == TYPE_HDMI) { humanReadableName = mContext.getResources().getText( R.string.default_audio_route_name_hdmi_tv); } } if (TextUtils.isEmpty(humanReadableName)) { humanReadableName = mContext.getResources().getText(systemRouteInfo.mNameResource); } Loading Loading @@ -733,13 +749,13 @@ import java.util.concurrent.CopyOnWriteArrayList; new SystemRouteInfo( MediaRoute2Info.TYPE_HDMI_ARC, /* defaultRouteId= */ "ROUTE_ID_HDMI_ARC", /* nameResource= */ R.string.default_audio_route_name_external_device)); /* nameResource= */ R.string.default_audio_route_name_arc)); AUDIO_DEVICE_INFO_TYPE_TO_ROUTE_INFO.put( AudioDeviceInfo.TYPE_HDMI_EARC, new SystemRouteInfo( MediaRoute2Info.TYPE_HDMI_EARC, /* defaultRouteId= */ "ROUTE_ID_HDMI_EARC", /* nameResource= */ R.string.default_audio_route_name_external_device)); /* nameResource= */ R.string.default_audio_route_name_earc)); AUDIO_DEVICE_INFO_TYPE_TO_ROUTE_INFO.put( AudioDeviceInfo.TYPE_HEARING_AID, new SystemRouteInfo( Loading Loading @@ -770,21 +786,21 @@ import java.util.concurrent.CopyOnWriteArrayList; com.android.media.flags.Flags.enableNewWiredMediaRoute2InfoTypes() ? MediaRoute2Info.TYPE_LINE_DIGITAL : MediaRoute2Info.TYPE_UNKNOWN, /* defaultRouteId= */ "ROUTE_ID_LINE_DIGITAL", /* nameResource= */ R.string.default_audio_route_name_external_device)); /* nameResource= */ R.string.default_audio_route_name_digital)); AUDIO_DEVICE_INFO_TYPE_TO_ROUTE_INFO.put( AudioDeviceInfo.TYPE_LINE_ANALOG, new SystemRouteInfo( com.android.media.flags.Flags.enableNewWiredMediaRoute2InfoTypes() ? MediaRoute2Info.TYPE_LINE_ANALOG : MediaRoute2Info.TYPE_UNKNOWN, /* defaultRouteId= */ "ROUTE_ID_LINE_ANALOG", /* nameResource= */ R.string.default_audio_route_name_external_device)); /* nameResource= */ R.string.default_audio_route_name_analog)); AUDIO_DEVICE_INFO_TYPE_TO_ROUTE_INFO.put( AudioDeviceInfo.TYPE_AUX_LINE, new SystemRouteInfo( com.android.media.flags.Flags.enableNewWiredMediaRoute2InfoTypes() ? MediaRoute2Info.TYPE_AUX_LINE : MediaRoute2Info.TYPE_UNKNOWN, /* defaultRouteId= */ "ROUTE_ID_AUX_LINE", /* nameResource= */ R.string.default_audio_route_name_external_device)); /* nameResource= */ R.string.default_audio_route_name_aux)); AUDIO_DEVICE_INFO_TYPE_TO_ROUTE_INFO.put( AudioDeviceInfo.TYPE_DOCK_ANALOG, new SystemRouteInfo( Loading
services/tests/media/mediarouterservicetest/src/com/android/server/media/AudioManagerRouteControllerTest.java +2 −0 Original line number Diff line number Diff line Loading @@ -124,6 +124,8 @@ public class AudioManagerRouteControllerTest { // concrete class is package private, so we just return the application info through the // mock. when(mockContext.getApplicationInfo()).thenReturn(realContext.getApplicationInfo()); // Needed to check if it is a TV device. when(mockContext.getPackageManager()).thenReturn(realContext.getPackageManager()); // Setup the initial state so that the route controller is created in a sensible state. mSelectedAudioDeviceInfo = FAKE_AUDIO_DEVICE_INFO_BUILTIN_SPEAKER; Loading