Merge "[LE] Add intent action for MediaOutputBroadcastDialog" into tm-dev
This commit is contained in:
@@ -47,6 +47,12 @@ public class MediaOutputConstants {
|
|||||||
public static final String ACTION_LAUNCH_MEDIA_OUTPUT_DIALOG =
|
public static final String ACTION_LAUNCH_MEDIA_OUTPUT_DIALOG =
|
||||||
"com.android.systemui.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.
|
* Settings package name.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -931,6 +931,7 @@
|
|||||||
android:exported="true">
|
android:exported="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="com.android.systemui.action.LAUNCH_MEDIA_OUTPUT_DIALOG" />
|
<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" />
|
<action android:name="com.android.systemui.action.DISMISS_MEDIA_OUTPUT_DIALOG" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</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
|
* BroadcastReceiver for handling media output intent
|
||||||
*/
|
*/
|
||||||
class MediaOutputDialogReceiver @Inject constructor(
|
class MediaOutputDialogReceiver @Inject constructor(
|
||||||
private val mediaOutputDialogFactory: MediaOutputDialogFactory
|
private val mediaOutputDialogFactory: MediaOutputDialogFactory,
|
||||||
|
private val mediaOutputBroadcastDialogFactory: MediaOutputBroadcastDialogFactory
|
||||||
) : BroadcastReceiver() {
|
) : BroadcastReceiver() {
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
if (TextUtils.equals(MediaOutputConstants.ACTION_LAUNCH_MEDIA_OUTPUT_DIALOG,
|
if (TextUtils.equals(MediaOutputConstants.ACTION_LAUNCH_MEDIA_OUTPUT_DIALOG,
|
||||||
@@ -43,6 +44,16 @@ class MediaOutputDialogReceiver @Inject constructor(
|
|||||||
} else if (DEBUG) {
|
} else if (DEBUG) {
|
||||||
Log.e(TAG, "Unable to launch media output dialog. Package name is empty.")
|
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