[LE] Add intent action for MediaOutputBroadcastDialog
- Add MediaOutputConstants.ACTION_LAUNCH_MEDIA_OUTPUT_BROADCAST_DIALOG - Add MediaOutputBroadcastDialogFactory for creating the MediaOutputBroadcastDialog Bug: 229577323 Test: Manual test Change-Id: Ic8fc3d2a07e3752b03e08c08dd8f0bcf2df429a2
This commit is contained in:
@@ -47,6 +47,12 @@ public class MediaOutputConstants {
|
||||
public static final String ACTION_LAUNCH_MEDIA_OUTPUT_DIALOG =
|
||||
"com.android.systemui.action.LAUNCH_MEDIA_OUTPUT_DIALOG";
|
||||
|
||||
/**
|
||||
* An intent action to launch media output broadcast dialog.
|
||||
*/
|
||||
public static final String ACTION_LAUNCH_MEDIA_OUTPUT_BROADCAST_DIALOG =
|
||||
"com.android.systemui.action.LAUNCH_MEDIA_OUTPUT_BROADCAST_DIALOG";
|
||||
|
||||
/**
|
||||
* Settings package name.
|
||||
*/
|
||||
|
||||
@@ -931,6 +931,7 @@
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="com.android.systemui.action.LAUNCH_MEDIA_OUTPUT_DIALOG" />
|
||||
<action android:name="com.android.systemui.action.LAUNCH_MEDIA_OUTPUT_BROADCAST_DIALOG" />
|
||||
<action android:name="com.android.systemui.action.DISMISS_MEDIA_OUTPUT_DIALOG" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright (C) 2022 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.systemui.media.dialog
|
||||
|
||||
import android.content.Context
|
||||
import android.media.session.MediaSessionManager
|
||||
import android.view.View
|
||||
import com.android.internal.logging.UiEventLogger
|
||||
import com.android.settingslib.bluetooth.LocalBluetoothManager
|
||||
import com.android.systemui.animation.DialogLaunchAnimator
|
||||
import com.android.systemui.broadcast.BroadcastSender
|
||||
import com.android.systemui.media.nearby.NearbyMediaDevicesManager
|
||||
import com.android.systemui.plugins.ActivityStarter
|
||||
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection
|
||||
import java.util.Optional
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
* Factory to create [MediaOutputBroadcastDialog] objects.
|
||||
*/
|
||||
class MediaOutputBroadcastDialogFactory @Inject constructor(
|
||||
private val context: Context,
|
||||
private val mediaSessionManager: MediaSessionManager,
|
||||
private val lbm: LocalBluetoothManager?,
|
||||
private val starter: ActivityStarter,
|
||||
private val broadcastSender: BroadcastSender,
|
||||
private val notifCollection: CommonNotifCollection,
|
||||
private val uiEventLogger: UiEventLogger,
|
||||
private val dialogLaunchAnimator: DialogLaunchAnimator,
|
||||
private val nearbyMediaDevicesManagerOptional: Optional<NearbyMediaDevicesManager>
|
||||
) {
|
||||
var mediaOutputBroadcastDialog: MediaOutputBroadcastDialog? = null
|
||||
|
||||
/** Creates a [MediaOutputBroadcastDialog] for the given package. */
|
||||
fun create(packageName: String, aboveStatusBar: Boolean, view: View? = null) {
|
||||
// Dismiss the previous dialog, if any.
|
||||
mediaOutputBroadcastDialog?.dismiss()
|
||||
|
||||
val controller = MediaOutputController(context, packageName,
|
||||
mediaSessionManager, lbm, starter, notifCollection,
|
||||
dialogLaunchAnimator, nearbyMediaDevicesManagerOptional)
|
||||
val dialog =
|
||||
MediaOutputBroadcastDialog(context, aboveStatusBar, broadcastSender, controller)
|
||||
mediaOutputBroadcastDialog = dialog
|
||||
|
||||
// Show the dialog.
|
||||
if (view != null) {
|
||||
dialogLaunchAnimator.showFromView(dialog, view)
|
||||
} else {
|
||||
dialog.show()
|
||||
}
|
||||
}
|
||||
|
||||
/** dismiss [MediaOutputBroadcastDialog] if exist. */
|
||||
fun dismiss() {
|
||||
mediaOutputBroadcastDialog?.dismiss()
|
||||
mediaOutputBroadcastDialog = null
|
||||
}
|
||||
}
|
||||
@@ -31,7 +31,8 @@ private val DEBUG = Log.isLoggable(TAG, Log.DEBUG)
|
||||
* BroadcastReceiver for handling media output intent
|
||||
*/
|
||||
class MediaOutputDialogReceiver @Inject constructor(
|
||||
private val mediaOutputDialogFactory: MediaOutputDialogFactory
|
||||
private val mediaOutputDialogFactory: MediaOutputDialogFactory,
|
||||
private val mediaOutputBroadcastDialogFactory: MediaOutputBroadcastDialogFactory
|
||||
) : BroadcastReceiver() {
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
if (TextUtils.equals(MediaOutputConstants.ACTION_LAUNCH_MEDIA_OUTPUT_DIALOG,
|
||||
@@ -43,6 +44,16 @@ class MediaOutputDialogReceiver @Inject constructor(
|
||||
} else if (DEBUG) {
|
||||
Log.e(TAG, "Unable to launch media output dialog. Package name is empty.")
|
||||
}
|
||||
} else if (TextUtils.equals(
|
||||
MediaOutputConstants.ACTION_LAUNCH_MEDIA_OUTPUT_BROADCAST_DIALOG,
|
||||
intent.action)) {
|
||||
val packageName: String? =
|
||||
intent.getStringExtra(MediaOutputConstants.EXTRA_PACKAGE_NAME)
|
||||
if (!TextUtils.isEmpty(packageName)) {
|
||||
mediaOutputBroadcastDialogFactory.create(packageName!!, false)
|
||||
} else if (DEBUG) {
|
||||
Log.e(TAG, "Unable to launch media output broadcast dialog. Package name is empty.")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user