From 15c57882875d46eca14959eb31e97711a2d76e49 Mon Sep 17 00:00:00 2001 From: Anton Potapov Date: Thu, 25 May 2023 12:39:01 +0100 Subject: Remove ControlsProviderSelectorActivity finish on ControlsFavoritingActivity start When ControlsProviderSelectorActivity starts ControlsFavouritingActivity it uses ControlsActivity instance for transitions. ControlsActivity interacts with ControlsBindingController to get a list of controls. This interaction prevents load from happening because ControlsBindingController has a global state, and prevents users from adding a second Controls app. Removing finishing ControlsProviderSelectorActivity prevents ControlsActivity from being started. Test: manual with the steps from the bug Test: atest ControlsProviderSelectorActivityTest Fixes: 283070266 (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:442c1002a8563c291c149d18e143e1880a82a27e) Merged-In: I02ddaa5e823379510e9c81a8d803d5269e6d85ad Change-Id: I02ddaa5e823379510e9c81a8d803d5269e6d85ad --- .../systemui/controls/management/ControlsProviderSelectorActivity.kt | 1 - .../controls/management/ControlsProviderSelectorActivityTest.kt | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsProviderSelectorActivity.kt b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsProviderSelectorActivity.kt index 3808e73ca085..5a3d21eacc14 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsProviderSelectorActivity.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsProviderSelectorActivity.kt @@ -214,7 +214,6 @@ open class ControlsProviderSelectorActivity @Inject constructor( putExtra(ControlsFavoritingActivity.EXTRA_FROM_PROVIDER_SELECTOR, true) } startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle()) - animateExitAndFinish() } } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsProviderSelectorActivityTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsProviderSelectorActivityTest.kt index 8dfd22378a14..82aaccdbbf0a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsProviderSelectorActivityTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsProviderSelectorActivityTest.kt @@ -144,7 +144,7 @@ class ControlsProviderSelectorActivityTest : SysuiTestCase() { assertThat(activityRule.activity.lastStartedActivity?.component?.className) .isEqualTo(ControlsFavoritingActivity::class.java.name) - assertThat(activityRule.activity.triedToFinish).isTrue() + assertThat(activityRule.activity.triedToFinish).isFalse() } @Test -- cgit v1.2.3 From bf75a05886e1234ce5edfcf4fc0f53abe95d1087 Mon Sep 17 00:00:00 2001 From: jiabin Date: Tue, 25 Apr 2023 17:39:04 +0000 Subject: USB: update logic for reporting playback and capture capability of USB devices. Report USB devices support audio capture when there is a terminal whose subtype is ACI_OUTPUT_TERMINAL and terminal type is USB streaming and there is another terminal whose subtype is ACI_INPUT_TERMINAL and terminal type is not USB streaming. Report USB devices support audio playback when there is a terminal whose subtype is ACI_INPUT_TERMINAL and terminal type is USB streaming and there is another terminal whose subtype is ACI_OUTPUT_TERMINAL and terminal type is not USB streaming. Bug: 279151646 Bug: 278603582 Test: connect usb headset, dumpsys audio policy (cherry picked from commit 9a5cab13b4b31ba9bf66e90ef07312959aa391d3) (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:e8e0134c04822f8f08a6dfad1a0cb9441c95c361) Merged-In: If1c14cc0a4e3fbdfbed2c105d37ece9a866f18ed Change-Id: If1c14cc0a4e3fbdfbed2c105d37ece9a866f18ed --- .../usb/descriptors/UsbDescriptorParser.java | 42 +++++++++++++++++----- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java b/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java index 626ce8927158..55419a80b604 100644 --- a/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java +++ b/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java @@ -584,15 +584,34 @@ public final class UsbDescriptorParser { } /** + * Returns true only if there is a terminal whose subtype and terminal type are the same as + * the given values. * @hide */ - public boolean hasAudioTerminal(int subType) { + public boolean hasAudioTerminal(int subType, int terminalType) { for (UsbDescriptor descriptor : mDescriptors) { - if (descriptor instanceof UsbACInterface) { - if (((UsbACInterface) descriptor).getSubclass() - == UsbDescriptor.AUDIO_AUDIOCONTROL - && ((UsbACInterface) descriptor).getSubtype() - == subType) { + if (descriptor instanceof UsbACTerminal) { + if (((UsbACTerminal) descriptor).getSubclass() == UsbDescriptor.AUDIO_AUDIOCONTROL + && ((UsbACTerminal) descriptor).getSubtype() == subType + && ((UsbACTerminal) descriptor).getTerminalType() == terminalType) { + return true; + } + } + } + return false; + } + + /** + * Returns true only if there is an interface whose subtype is the same as the given one and + * terminal type is different from the given one. + * @hide + */ + public boolean hasAudioTerminalExcludeType(int subType, int excludedTerminalType) { + for (UsbDescriptor descriptor : mDescriptors) { + if (descriptor instanceof UsbACTerminal) { + if (((UsbACTerminal) descriptor).getSubclass() == UsbDescriptor.AUDIO_AUDIOCONTROL + && ((UsbACTerminal) descriptor).getSubtype() == subType + && ((UsbACTerminal) descriptor).getTerminalType() != excludedTerminalType) { return true; } } @@ -604,14 +623,21 @@ public final class UsbDescriptorParser { * @hide */ public boolean hasAudioPlayback() { - return hasAudioTerminal(UsbACInterface.ACI_OUTPUT_TERMINAL); + return hasAudioTerminalExcludeType( + UsbACInterface.ACI_OUTPUT_TERMINAL, UsbTerminalTypes.TERMINAL_USB_STREAMING) + && hasAudioTerminal( + UsbACInterface.ACI_INPUT_TERMINAL, UsbTerminalTypes.TERMINAL_USB_STREAMING); } /** * @hide */ public boolean hasAudioCapture() { - return hasAudioTerminal(UsbACInterface.ACI_INPUT_TERMINAL); + return hasAudioTerminalExcludeType( + UsbACInterface.ACI_INPUT_TERMINAL, UsbTerminalTypes.TERMINAL_USB_STREAMING) + && hasAudioTerminal( + UsbACInterface.ACI_OUTPUT_TERMINAL, + UsbTerminalTypes.TERMINAL_USB_STREAMING); } /** -- cgit v1.2.3