Skip to content

Commit 637cf60

Browse files
Add provision for custom package name while launching output switcher (#2471)
* Add provision for custom package name while launching output switcher. * Add provision for custom package name while launching output switcher.
1 parent 47b08c4 commit 637cf60

File tree

14 files changed

+35
-23
lines changed

14 files changed

+35
-23
lines changed

Diff for: media/audio-ui-model/api/current.api

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ package com.google.android.horologist.audio.ui {
2828
method public final kotlinx.coroutines.flow.StateFlow<com.google.android.horologist.audio.ui.VolumeUiState> getVolumeUiState();
2929
method public final void increaseVolume();
3030
method public final void increaseVolumeWithHaptics();
31-
method public final void launchOutputSelection();
31+
method public final void launchOutputSelection(optional String? clientPackageName);
3232
method public final void onVolumeChangeByScroll(float pixels);
3333
method public final void setVolume(int volume);
3434
property public final kotlinx.coroutines.flow.StateFlow<com.google.android.horologist.audio.AudioOutput> audioOutput;

Diff for: media/audio-ui-model/src/main/java/com/google/android/horologist/audio/ui/VolumeViewModel.kt

+5-2
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,11 @@ public open class VolumeViewModel(
9595
volumeRepository.decreaseVolume()
9696
}
9797

98-
public fun launchOutputSelection() {
99-
audioOutputRepository.launchOutputSelection(closeOnConnect = false)
98+
public fun launchOutputSelection(clientPackageName: String? = null) {
99+
audioOutputRepository.launchOutputSelection(
100+
closeOnConnect = false,
101+
clientPackageName = clientPackageName,
102+
)
100103
}
101104

102105
override fun onCleared() {

Diff for: media/audio-ui/src/test/kotlin/com/google/android/horologist/audio/ui/FakeAudioOutputRepository.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class FakeAudioOutputRepository : AudioOutputRepository {
2323
override val audioOutput: MutableStateFlow<AudioOutput> = MutableStateFlow(AudioOutput.None)
2424
override val available: MutableStateFlow<List<AudioOutput>> = MutableStateFlow(listOf())
2525

26-
override fun launchOutputSelection(closeOnConnect: Boolean) {
26+
override fun launchOutputSelection(closeOnConnect: Boolean, clientPackageName: String?) {
2727
}
2828

2929
override fun close() {

Diff for: media/audio/api/current.api

+3-3
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ package com.google.android.horologist.audio {
8080
public interface AudioOutputRepository extends java.lang.AutoCloseable {
8181
method public kotlinx.coroutines.flow.StateFlow<com.google.android.horologist.audio.AudioOutput> getAudioOutput();
8282
method public kotlinx.coroutines.flow.StateFlow<java.util.List<com.google.android.horologist.audio.AudioOutput>> getAvailable();
83-
method public void launchOutputSelection(boolean closeOnConnect);
83+
method public void launchOutputSelection(boolean closeOnConnect, optional String? clientPackageName);
8484
property public abstract kotlinx.coroutines.flow.StateFlow<com.google.android.horologist.audio.AudioOutput> audioOutput;
8585
property public abstract kotlinx.coroutines.flow.StateFlow<java.util.List<com.google.android.horologist.audio.AudioOutput>> available;
8686
}
@@ -91,7 +91,7 @@ package com.google.android.horologist.audio {
9191
}
9292

9393
public final class OutputSwitcher {
94-
method public boolean launchSystemMediaOutputSwitcherUi(android.content.Context);
94+
method public boolean launchSystemMediaOutputSwitcherUi(android.content.Context, optional String? callingPkgName);
9595
field public static final com.google.android.horologist.audio.OutputSwitcher INSTANCE;
9696
}
9797

@@ -103,7 +103,7 @@ package com.google.android.horologist.audio {
103103
method public kotlinx.coroutines.flow.StateFlow<java.util.List<com.google.android.horologist.audio.AudioOutput>> getAvailable();
104104
method public kotlinx.coroutines.flow.StateFlow<com.google.android.horologist.audio.VolumeState> getVolumeState();
105105
method public void increaseVolume();
106-
method public void launchOutputSelection(boolean closeOnConnect);
106+
method public void launchOutputSelection(boolean closeOnConnect, String? clientPackageName);
107107
method public void setVolume(int volume);
108108
property public kotlinx.coroutines.flow.StateFlow<com.google.android.horologist.audio.AudioOutput> audioOutput;
109109
property public kotlinx.coroutines.flow.StateFlow<java.util.List<com.google.android.horologist.audio.AudioOutput>> available;

Diff for: media/audio/src/main/java/com/google/android/horologist/audio/AudioOutputRepository.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,5 @@ public interface AudioOutputRepository : AutoCloseable {
3535
/**
3636
* Action to launch output selection by the user.
3737
*/
38-
public fun launchOutputSelection(closeOnConnect: Boolean)
38+
public fun launchOutputSelection(closeOnConnect: Boolean, clientPackageName: String? = null)
3939
}

Diff for: media/audio/src/main/java/com/google/android/horologist/audio/OutputSwitcher.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ public object OutputSwitcher {
3131
/**
3232
* Open the Output Switcher Dialog.
3333
*/
34-
public fun Context.launchSystemMediaOutputSwitcherUi(): Boolean {
34+
public fun Context.launchSystemMediaOutputSwitcherUi(callingPkgName: String? = null): Boolean {
3535
val outputSwitcherLaunchIntent: Intent = Intent(OUTPUT_SWITCHER_INTENT_ACTION_NAME)
3636
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
37-
.putExtra(EXTRA_OUTPUT_SWITCHER_PACKAGE_NAME, packageName)
37+
.putExtra(EXTRA_OUTPUT_SWITCHER_PACKAGE_NAME, callingPkgName ?: packageName)
3838
val outputSwitcherSystemComponentName =
3939
getSystemOrSystemUpdatedAppComponent(outputSwitcherLaunchIntent)
4040
if (outputSwitcherSystemComponentName != null) {

Diff for: media/audio/src/main/java/com/google/android/horologist/audio/SystemAudioRepository.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,8 @@ public class SystemAudioRepository(
135135
}
136136
}
137137

138-
override fun launchOutputSelection(closeOnConnect: Boolean) {
139-
if (!application.launchSystemMediaOutputSwitcherUi()) {
138+
override fun launchOutputSelection(closeOnConnect: Boolean, clientPackageName: String?) {
139+
if (!application.launchSystemMediaOutputSwitcherUi(clientPackageName)) {
140140
application.launchBluetoothSettings(closeOnConnect)
141141
}
142142
}

Diff for: media/backend-media3/src/test/java/com/google/android/horologist/media3/FakeAudioOutputRepository.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ open class FakeAudioOutputRepository : AudioOutputRepository {
2424
override val audioOutput: MutableStateFlow<AudioOutput> = MutableStateFlow(AudioOutput.None)
2525
override val available: MutableStateFlow<List<AudioOutput>> = MutableStateFlow(listOf())
2626

27-
override fun launchOutputSelection(closeOnConnect: Boolean) {
27+
override fun launchOutputSelection(closeOnConnect: Boolean, clientPackageName: String?) {
2828
}
2929

3030
override fun close() {

Diff for: media/core/api/current.api

+7-4
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,21 @@ package com.google.android.horologist.media.model {
2525
}
2626

2727
public final class Media {
28-
ctor public Media(String id, String uri, String title, String artist, optional String? artworkUri, optional Integer? artworkColor, optional java.util.Map<java.lang.String,?> extras);
28+
ctor public Media(String id, String uri, String title, String artist, optional String? clientPackageName, optional String? artworkUri, optional Integer? artworkColor, optional java.util.Map<java.lang.String,?> extras);
2929
method public String component1();
3030
method public String component2();
3131
method public String component3();
3232
method public String component4();
3333
method public String? component5();
34-
method public Integer? component6();
35-
method public java.util.Map<java.lang.String,java.lang.Object> component7();
36-
method public com.google.android.horologist.media.model.Media copy(String id, String uri, String title, String artist, String? artworkUri, Integer? artworkColor, java.util.Map<java.lang.String,?> extras);
34+
method public String? component6();
35+
method public Integer? component7();
36+
method public java.util.Map<java.lang.String,java.lang.Object> component8();
37+
method public com.google.android.horologist.media.model.Media copy(String id, String uri, String title, String artist, String? clientPackageName, String? artworkUri, Integer? artworkColor, java.util.Map<java.lang.String,?> extras);
3738
method public boolean equals(Object? other);
3839
method public String getArtist();
3940
method public Integer? getArtworkColor();
4041
method public String? getArtworkUri();
42+
method public String? getClientPackageName();
4143
method public java.util.Map<java.lang.String,java.lang.Object> getExtras();
4244
method public String getId();
4345
method public String getTitle();
@@ -47,6 +49,7 @@ package com.google.android.horologist.media.model {
4749
property public final String artist;
4850
property public final Integer? artworkColor;
4951
property public final String? artworkUri;
52+
property public final String? clientPackageName;
5053
property public final java.util.Map<java.lang.String,java.lang.Object> extras;
5154
property public final String id;
5255
property public final String title;

Diff for: media/core/src/main/java/com/google/android/horologist/media/model/Media.kt

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public data class Media(
2727
val uri: String,
2828
val title: String,
2929
val artist: String,
30+
val clientPackageName: String? = null,
3031
val artworkUri: String? = null,
3132
val artworkColor: Int? = null,
3233
val extras: Map<String, Any> = emptyMap(),

Diff for: media/ui-model/api/current.api

+8-5
Original file line numberDiff line numberDiff line change
@@ -270,22 +270,25 @@ package com.google.android.horologist.media.ui.state.model {
270270
}
271271

272272
public static final class MediaUiModel.Ready extends com.google.android.horologist.media.ui.state.model.MediaUiModel {
273-
ctor public MediaUiModel.Ready(String id, String title, optional String subtitle, optional com.google.android.horologist.images.base.paintable.Paintable? artwork, optional androidx.compose.ui.graphics.Color? artworkColor, optional com.google.android.horologist.images.base.paintable.Paintable? titleIcon);
273+
ctor public MediaUiModel.Ready(String id, String title, optional String subtitle, optional String? clientPackageName, optional com.google.android.horologist.images.base.paintable.Paintable? artwork, optional androidx.compose.ui.graphics.Color? artworkColor, optional com.google.android.horologist.images.base.paintable.Paintable? titleIcon);
274274
method public String component1();
275275
method public String component2();
276276
method public String component3();
277-
method public com.google.android.horologist.images.base.paintable.Paintable? component4();
278-
method public androidx.compose.ui.graphics.Color? component5-QN2ZGVo();
279-
method public com.google.android.horologist.images.base.paintable.Paintable? component6();
280-
method public com.google.android.horologist.media.ui.state.model.MediaUiModel.Ready copy-gCxFOHY(String id, String title, String subtitle, com.google.android.horologist.images.base.paintable.Paintable? artwork, androidx.compose.ui.graphics.Color? artworkColor, com.google.android.horologist.images.base.paintable.Paintable? titleIcon);
277+
method public String? component4();
278+
method public com.google.android.horologist.images.base.paintable.Paintable? component5();
279+
method public androidx.compose.ui.graphics.Color? component6-QN2ZGVo();
280+
method public com.google.android.horologist.images.base.paintable.Paintable? component7();
281+
method public com.google.android.horologist.media.ui.state.model.MediaUiModel.Ready copy-lMAxDYE(String id, String title, String subtitle, String? clientPackageName, com.google.android.horologist.images.base.paintable.Paintable? artwork, androidx.compose.ui.graphics.Color? artworkColor, com.google.android.horologist.images.base.paintable.Paintable? titleIcon);
281282
method public com.google.android.horologist.images.base.paintable.Paintable? getArtwork();
282283
method public androidx.compose.ui.graphics.Color? getArtworkColor();
284+
method public String? getClientPackageName();
283285
method public String getId();
284286
method public String getSubtitle();
285287
method public String getTitle();
286288
method public com.google.android.horologist.images.base.paintable.Paintable? getTitleIcon();
287289
property public final com.google.android.horologist.images.base.paintable.Paintable? artwork;
288290
property public final androidx.compose.ui.graphics.Color? artworkColor;
291+
property public final String? clientPackageName;
289292
property public final String id;
290293
property public final String subtitle;
291294
property public final String title;

Diff for: media/ui-model/src/main/java/com/google/android/horologist/media/ui/state/mapper/MediaUiModelMapper.kt

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public object MediaUiModelMapper {
3939
id = media.id,
4040
title = title,
4141
subtitle = artist,
42+
clientPackageName = media.clientPackageName,
4243
artwork = media.artworkUri?.let { CoilPaintable(it) },
4344
artworkColor = media.artworkColor?.let { Color(it) },
4445
)

Diff for: media/ui-model/src/main/java/com/google/android/horologist/media/ui/state/model/MediaUiModel.kt

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public sealed class MediaUiModel {
2626
val id: String,
2727
val title: String,
2828
val subtitle: String = "",
29+
val clientPackageName: String? = null,
2930
val artwork: Paintable? = null,
3031
val artworkColor: Color? = null,
3132
val titleIcon: Paintable? = null,

Diff for: media/ui/src/test/java/com/google/android/horologist/test/toolbox/testdoubles/FakeAudioOutputRepository.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class FakeAudioOutputRepository : AudioOutputRepository {
2424
override val audioOutput: MutableStateFlow<AudioOutput> = MutableStateFlow(AudioOutput.None)
2525
override val available: MutableStateFlow<List<AudioOutput>> = MutableStateFlow(listOf())
2626

27-
override fun launchOutputSelection(closeOnConnect: Boolean) {
27+
override fun launchOutputSelection(closeOnConnect: Boolean, clientPackageName: String?) {
2828
}
2929

3030
override fun close() {

0 commit comments

Comments
 (0)