Merge "[Media TTT] Split up the media sender and receiver loggers." into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
6e355aa7af
@@ -197,13 +197,10 @@
|
|||||||
-packages/SystemUI/src/com/android/systemui/media/nearby/NearbyMediaDevicesManager.kt
|
-packages/SystemUI/src/com/android/systemui/media/nearby/NearbyMediaDevicesManager.kt
|
||||||
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/MediaTttCommandLineHelper.kt
|
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/MediaTttCommandLineHelper.kt
|
||||||
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/MediaTttFlags.kt
|
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/MediaTttFlags.kt
|
||||||
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttLogger.kt
|
|
||||||
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/ChipStateReceiver.kt
|
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/ChipStateReceiver.kt
|
||||||
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiver.kt
|
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiver.kt
|
||||||
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttReceiverLogger.kt
|
|
||||||
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/ReceiverChipRippleView.kt
|
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/ReceiverChipRippleView.kt
|
||||||
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/ChipStateSender.kt
|
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/ChipStateSender.kt
|
||||||
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderLogger.kt
|
|
||||||
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderUiEventLogger.kt
|
-packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderUiEventLogger.kt
|
||||||
-packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanel.kt
|
-packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanel.kt
|
||||||
-packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt
|
-packages/SystemUI/src/com/android/systemui/navigationbar/gestural/BackPanelController.kt
|
||||||
@@ -611,7 +608,6 @@
|
|||||||
-packages/SystemUI/tests/src/com/android/systemui/media/muteawait/MediaMuteAwaitConnectionManagerTest.kt
|
-packages/SystemUI/tests/src/com/android/systemui/media/muteawait/MediaMuteAwaitConnectionManagerTest.kt
|
||||||
-packages/SystemUI/tests/src/com/android/systemui/media/nearby/NearbyMediaDevicesManagerTest.kt
|
-packages/SystemUI/tests/src/com/android/systemui/media/nearby/NearbyMediaDevicesManagerTest.kt
|
||||||
-packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/MediaTttCommandLineHelperTest.kt
|
-packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/MediaTttCommandLineHelperTest.kt
|
||||||
-packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/common/MediaTttLoggerTest.kt
|
|
||||||
-packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiverTest.kt
|
-packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiverTest.kt
|
||||||
-packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderUiEventLoggerTest.kt
|
-packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderUiEventLoggerTest.kt
|
||||||
-packages/SystemUI/tests/src/com/android/systemui/navigationbar/gestural/FloatingRotationButtonPositionCalculatorTest.kt
|
-packages/SystemUI/tests/src/com/android/systemui/navigationbar/gestural/FloatingRotationButtonPositionCalculatorTest.kt
|
||||||
|
|||||||
@@ -199,28 +199,6 @@ public class LogModule {
|
|||||||
return factory.create("SwipeUpLog", 30);
|
return factory.create("SwipeUpLog", 30);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides a logging buffer for logs related to the media tap-to-transfer chip on the sender
|
|
||||||
* device. See {@link com.android.systemui.media.taptotransfer.sender.MediaTttSenderLogger}.
|
|
||||||
*/
|
|
||||||
@Provides
|
|
||||||
@SysUISingleton
|
|
||||||
@MediaTttSenderLogBuffer
|
|
||||||
public static LogBuffer provideMediaTttSenderLogBuffer(LogBufferFactory factory) {
|
|
||||||
return factory.create("MediaTttSender", 20);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides a logging buffer for logs related to the media tap-to-transfer chip on the receiver
|
|
||||||
* device. See {@link com.android.systemui.media.taptotransfer.receiver.MediaTttReceiverLogger}.
|
|
||||||
*/
|
|
||||||
@Provides
|
|
||||||
@SysUISingleton
|
|
||||||
@MediaTttReceiverLogBuffer
|
|
||||||
public static LogBuffer provideMediaTttReceiverLogBuffer(LogBufferFactory factory) {
|
|
||||||
return factory.create("MediaTttReceiver", 20);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides a logging buffer for logs related to the media mute-await connections. See
|
* Provides a logging buffer for logs related to the media mute-await connections. See
|
||||||
* {@link com.android.systemui.media.muteawait.MediaMuteAwaitConnectionManager}.
|
* {@link com.android.systemui.media.muteawait.MediaMuteAwaitConnectionManager}.
|
||||||
|
|||||||
@@ -17,8 +17,7 @@
|
|||||||
package com.android.systemui.media.dagger;
|
package com.android.systemui.media.dagger;
|
||||||
|
|
||||||
import com.android.systemui.dagger.SysUISingleton;
|
import com.android.systemui.dagger.SysUISingleton;
|
||||||
import com.android.systemui.log.dagger.MediaTttReceiverLogBuffer;
|
import com.android.systemui.log.LogBufferFactory;
|
||||||
import com.android.systemui.log.dagger.MediaTttSenderLogBuffer;
|
|
||||||
import com.android.systemui.media.controls.pipeline.MediaDataManager;
|
import com.android.systemui.media.controls.pipeline.MediaDataManager;
|
||||||
import com.android.systemui.media.controls.ui.MediaHierarchyManager;
|
import com.android.systemui.media.controls.ui.MediaHierarchyManager;
|
||||||
import com.android.systemui.media.controls.ui.MediaHost;
|
import com.android.systemui.media.controls.ui.MediaHost;
|
||||||
@@ -29,12 +28,9 @@ import com.android.systemui.media.muteawait.MediaMuteAwaitConnectionCli;
|
|||||||
import com.android.systemui.media.nearby.NearbyMediaDevicesManager;
|
import com.android.systemui.media.nearby.NearbyMediaDevicesManager;
|
||||||
import com.android.systemui.media.taptotransfer.MediaTttCommandLineHelper;
|
import com.android.systemui.media.taptotransfer.MediaTttCommandLineHelper;
|
||||||
import com.android.systemui.media.taptotransfer.MediaTttFlags;
|
import com.android.systemui.media.taptotransfer.MediaTttFlags;
|
||||||
import com.android.systemui.media.taptotransfer.common.MediaTttLogger;
|
import com.android.systemui.media.taptotransfer.receiver.MediaTttReceiverLogBuffer;
|
||||||
import com.android.systemui.media.taptotransfer.receiver.ChipReceiverInfo;
|
import com.android.systemui.media.taptotransfer.sender.MediaTttSenderLogBuffer;
|
||||||
import com.android.systemui.media.taptotransfer.receiver.MediaTttReceiverLogger;
|
|
||||||
import com.android.systemui.media.taptotransfer.sender.MediaTttSenderLogger;
|
|
||||||
import com.android.systemui.plugins.log.LogBuffer;
|
import com.android.systemui.plugins.log.LogBuffer;
|
||||||
import com.android.systemui.temporarydisplay.chipbar.ChipbarInfo;
|
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@@ -94,22 +90,22 @@ public interface MediaModule {
|
|||||||
return new MediaHost(stateHolder, hierarchyManager, dataManager, statesManager);
|
return new MediaHost(stateHolder, hierarchyManager, dataManager, statesManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Provides a logging buffer related to the media tap-to-transfer chip on the sender device. */
|
||||||
@Provides
|
@Provides
|
||||||
@SysUISingleton
|
@SysUISingleton
|
||||||
@MediaTttSenderLogger
|
@MediaTttSenderLogBuffer
|
||||||
static MediaTttLogger<ChipbarInfo> providesMediaTttSenderLogger(
|
static LogBuffer provideMediaTttSenderLogBuffer(LogBufferFactory factory) {
|
||||||
@MediaTttSenderLogBuffer LogBuffer buffer
|
return factory.create("MediaTttSender", 30);
|
||||||
) {
|
|
||||||
return new MediaTttLogger<>("Sender", buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides a logging buffer related to the media tap-to-transfer chip on the receiver device.
|
||||||
|
*/
|
||||||
@Provides
|
@Provides
|
||||||
@SysUISingleton
|
@SysUISingleton
|
||||||
@MediaTttReceiverLogger
|
@MediaTttReceiverLogBuffer
|
||||||
static MediaTttLogger<ChipReceiverInfo> providesMediaTttReceiverLogger(
|
static LogBuffer provideMediaTttReceiverLogBuffer(LogBufferFactory factory) {
|
||||||
@MediaTttReceiverLogBuffer LogBuffer buffer
|
return factory.create("MediaTttReceiver", 20);
|
||||||
) {
|
|
||||||
return new MediaTttLogger<>("Receiver", buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
|
|||||||
@@ -1,114 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.taptotransfer.common
|
|
||||||
|
|
||||||
import com.android.systemui.plugins.log.LogBuffer
|
|
||||||
import com.android.systemui.plugins.log.LogLevel
|
|
||||||
import com.android.systemui.temporarydisplay.TemporaryViewInfo
|
|
||||||
import com.android.systemui.temporarydisplay.TemporaryViewLogger
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A logger for media tap-to-transfer events.
|
|
||||||
*
|
|
||||||
* @param deviceTypeTag the type of device triggering the logs -- "Sender" or "Receiver".
|
|
||||||
*
|
|
||||||
* TODO(b/245610654): We should de-couple the sender and receiver loggers, since they're vastly
|
|
||||||
* different experiences.
|
|
||||||
*/
|
|
||||||
class MediaTttLogger<T : TemporaryViewInfo>(
|
|
||||||
deviceTypeTag: String,
|
|
||||||
buffer: LogBuffer
|
|
||||||
) : TemporaryViewLogger<T>(buffer, BASE_TAG + deviceTypeTag) {
|
|
||||||
/** Logs a change in the chip state for the given [mediaRouteId]. */
|
|
||||||
fun logStateChange(stateName: String, mediaRouteId: String, packageName: String?) {
|
|
||||||
buffer.log(
|
|
||||||
tag,
|
|
||||||
LogLevel.DEBUG,
|
|
||||||
{
|
|
||||||
str1 = stateName
|
|
||||||
str2 = mediaRouteId
|
|
||||||
str3 = packageName
|
|
||||||
},
|
|
||||||
{ "State changed to $str1 for ID=$str2 package=$str3" }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Logs an error in trying to update to [displayState].
|
|
||||||
*
|
|
||||||
* [displayState] is either a [android.app.StatusBarManager.MediaTransferSenderState] or
|
|
||||||
* a [android.app.StatusBarManager.MediaTransferReceiverState].
|
|
||||||
*/
|
|
||||||
fun logStateChangeError(displayState: Int) {
|
|
||||||
buffer.log(
|
|
||||||
tag,
|
|
||||||
LogLevel.ERROR,
|
|
||||||
{ int1 = displayState },
|
|
||||||
{ "Cannot display state=$int1; aborting" }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Logs an invalid sender state transition error in trying to update to [desiredState].
|
|
||||||
*
|
|
||||||
* @param currentState the previous state of the chip.
|
|
||||||
* @param desiredState the new state of the chip.
|
|
||||||
*/
|
|
||||||
fun logInvalidStateTransitionError(
|
|
||||||
currentState: String,
|
|
||||||
desiredState: String
|
|
||||||
) {
|
|
||||||
buffer.log(
|
|
||||||
tag,
|
|
||||||
LogLevel.ERROR,
|
|
||||||
{
|
|
||||||
str1 = currentState
|
|
||||||
str2 = desiredState
|
|
||||||
},
|
|
||||||
{ "Cannot display state=$str2 after state=$str1; invalid transition" }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Logs that we couldn't find information for [packageName]. */
|
|
||||||
fun logPackageNotFound(packageName: String) {
|
|
||||||
buffer.log(
|
|
||||||
tag,
|
|
||||||
LogLevel.DEBUG,
|
|
||||||
{ str1 = packageName },
|
|
||||||
{ "Package $str1 could not be found" }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Logs that a removal request has been bypassed (ignored).
|
|
||||||
*
|
|
||||||
* @param removalReason the reason that the chip removal was requested.
|
|
||||||
* @param bypassReason the reason that the request was bypassed.
|
|
||||||
*/
|
|
||||||
fun logRemovalBypass(removalReason: String, bypassReason: String) {
|
|
||||||
buffer.log(
|
|
||||||
tag,
|
|
||||||
LogLevel.DEBUG,
|
|
||||||
{
|
|
||||||
str1 = removalReason
|
|
||||||
str2 = bypassReason
|
|
||||||
},
|
|
||||||
{ "Chip removal requested due to $str1; however, removal was ignored because $str2" })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private const val BASE_TAG = "MediaTtt"
|
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
/*
|
||||||
|
* 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.taptotransfer.common
|
||||||
|
|
||||||
|
import com.android.systemui.plugins.log.LogBuffer
|
||||||
|
import com.android.systemui.plugins.log.LogLevel
|
||||||
|
|
||||||
|
/** A helper for logging media tap-to-transfer events. */
|
||||||
|
object MediaTttLoggerUtils {
|
||||||
|
fun logStateChange(
|
||||||
|
buffer: LogBuffer,
|
||||||
|
tag: String,
|
||||||
|
stateName: String,
|
||||||
|
mediaRouteId: String,
|
||||||
|
packageName: String?,
|
||||||
|
) {
|
||||||
|
buffer.log(
|
||||||
|
tag,
|
||||||
|
LogLevel.DEBUG,
|
||||||
|
{
|
||||||
|
str1 = stateName
|
||||||
|
str2 = mediaRouteId
|
||||||
|
str3 = packageName
|
||||||
|
},
|
||||||
|
{ "State changed to $str1 for ID=$str2 package=$str3" }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun logStateChangeError(buffer: LogBuffer, tag: String, displayState: Int) {
|
||||||
|
buffer.log(
|
||||||
|
tag,
|
||||||
|
LogLevel.ERROR,
|
||||||
|
{ int1 = displayState },
|
||||||
|
{ "Cannot display state=$int1; aborting" }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun logPackageNotFound(buffer: LogBuffer, tag: String, packageName: String) {
|
||||||
|
buffer.log(
|
||||||
|
tag,
|
||||||
|
LogLevel.DEBUG,
|
||||||
|
{ str1 = packageName },
|
||||||
|
{ "Package $str1 could not be found" }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -25,7 +25,6 @@ import com.android.systemui.R
|
|||||||
import com.android.systemui.common.shared.model.ContentDescription
|
import com.android.systemui.common.shared.model.ContentDescription
|
||||||
import com.android.systemui.common.shared.model.Icon
|
import com.android.systemui.common.shared.model.Icon
|
||||||
import com.android.systemui.common.shared.model.TintedIcon
|
import com.android.systemui.common.shared.model.TintedIcon
|
||||||
import com.android.systemui.temporarydisplay.TemporaryViewInfo
|
|
||||||
|
|
||||||
/** Utility methods for media tap-to-transfer. */
|
/** Utility methods for media tap-to-transfer. */
|
||||||
class MediaTttUtils {
|
class MediaTttUtils {
|
||||||
@@ -43,12 +42,13 @@ class MediaTttUtils {
|
|||||||
* default name and icon if we can't find the app name/icon.
|
* default name and icon if we can't find the app name/icon.
|
||||||
*
|
*
|
||||||
* @param appPackageName the package name of the app playing the media.
|
* @param appPackageName the package name of the app playing the media.
|
||||||
* @param logger the logger to use for any errors.
|
* @param onPackageNotFoundException a function run if a
|
||||||
|
* [PackageManager.NameNotFoundException] occurs.
|
||||||
*/
|
*/
|
||||||
fun getIconInfoFromPackageName(
|
fun getIconInfoFromPackageName(
|
||||||
context: Context,
|
context: Context,
|
||||||
appPackageName: String?,
|
appPackageName: String?,
|
||||||
logger: MediaTttLogger<out TemporaryViewInfo>
|
onPackageNotFoundException: () -> Unit,
|
||||||
): IconInfo {
|
): IconInfo {
|
||||||
if (appPackageName != null) {
|
if (appPackageName != null) {
|
||||||
val packageManager = context.packageManager
|
val packageManager = context.packageManager
|
||||||
@@ -70,7 +70,7 @@ class MediaTttUtils {
|
|||||||
isAppIcon = true
|
isAppIcon = true
|
||||||
)
|
)
|
||||||
} catch (e: PackageManager.NameNotFoundException) {
|
} catch (e: PackageManager.NameNotFoundException) {
|
||||||
logger.logPackageNotFound(appPackageName)
|
onPackageNotFoundException.invoke()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return IconInfo(
|
return IconInfo(
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ import com.android.systemui.dagger.qualifiers.Main
|
|||||||
import com.android.systemui.dump.DumpManager
|
import com.android.systemui.dump.DumpManager
|
||||||
import com.android.systemui.media.taptotransfer.MediaTttFlags
|
import com.android.systemui.media.taptotransfer.MediaTttFlags
|
||||||
import com.android.systemui.media.taptotransfer.common.MediaTttIcon
|
import com.android.systemui.media.taptotransfer.common.MediaTttIcon
|
||||||
import com.android.systemui.media.taptotransfer.common.MediaTttLogger
|
|
||||||
import com.android.systemui.media.taptotransfer.common.MediaTttUtils
|
import com.android.systemui.media.taptotransfer.common.MediaTttUtils
|
||||||
import com.android.systemui.statusbar.CommandQueue
|
import com.android.systemui.statusbar.CommandQueue
|
||||||
import com.android.systemui.statusbar.policy.ConfigurationController
|
import com.android.systemui.statusbar.policy.ConfigurationController
|
||||||
@@ -65,7 +64,7 @@ import javax.inject.Inject
|
|||||||
open class MediaTttChipControllerReceiver @Inject constructor(
|
open class MediaTttChipControllerReceiver @Inject constructor(
|
||||||
private val commandQueue: CommandQueue,
|
private val commandQueue: CommandQueue,
|
||||||
context: Context,
|
context: Context,
|
||||||
@MediaTttReceiverLogger logger: MediaTttLogger<ChipReceiverInfo>,
|
logger: MediaTttReceiverLogger,
|
||||||
windowManager: WindowManager,
|
windowManager: WindowManager,
|
||||||
mainExecutor: DelayableExecutor,
|
mainExecutor: DelayableExecutor,
|
||||||
accessibilityManager: AccessibilityManager,
|
accessibilityManager: AccessibilityManager,
|
||||||
@@ -79,7 +78,7 @@ open class MediaTttChipControllerReceiver @Inject constructor(
|
|||||||
wakeLockBuilder: WakeLock.Builder,
|
wakeLockBuilder: WakeLock.Builder,
|
||||||
systemClock: SystemClock,
|
systemClock: SystemClock,
|
||||||
private val rippleController: MediaTttReceiverRippleController,
|
private val rippleController: MediaTttReceiverRippleController,
|
||||||
) : TemporaryViewDisplayController<ChipReceiverInfo, MediaTttLogger<ChipReceiverInfo>>(
|
) : TemporaryViewDisplayController<ChipReceiverInfo, MediaTttReceiverLogger>(
|
||||||
context,
|
context,
|
||||||
logger,
|
logger,
|
||||||
windowManager,
|
windowManager,
|
||||||
@@ -173,9 +172,10 @@ open class MediaTttChipControllerReceiver @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun updateView(newInfo: ChipReceiverInfo, currentView: ViewGroup) {
|
override fun updateView(newInfo: ChipReceiverInfo, currentView: ViewGroup) {
|
||||||
var iconInfo = MediaTttUtils.getIconInfoFromPackageName(
|
val packageName = newInfo.routeInfo.clientPackageName
|
||||||
context, newInfo.routeInfo.clientPackageName, logger
|
var iconInfo = MediaTttUtils.getIconInfoFromPackageName(context, packageName) {
|
||||||
)
|
logger.logPackageNotFound(packageName)
|
||||||
|
}
|
||||||
|
|
||||||
if (newInfo.appNameOverride != null) {
|
if (newInfo.appNameOverride != null) {
|
||||||
iconInfo = iconInfo.copy(
|
iconInfo = iconInfo.copy(
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.android.systemui.log.dagger;
|
package com.android.systemui.media.taptotransfer.receiver;
|
||||||
|
|
||||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||||
|
|
||||||
@@ -26,8 +26,7 @@ import java.lang.annotation.Retention;
|
|||||||
import javax.inject.Qualifier;
|
import javax.inject.Qualifier;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A {@link LogBuffer} for
|
* A {@link LogBuffer} for receiver logs.
|
||||||
* {@link com.android.systemui.media.taptotransfer.receiver.MediaTttReceiverLogger}.
|
|
||||||
*/
|
*/
|
||||||
@Qualifier
|
@Qualifier
|
||||||
@Documented
|
@Documented
|
||||||
@@ -13,14 +13,44 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.android.systemui.media.taptotransfer.receiver
|
package com.android.systemui.media.taptotransfer.receiver
|
||||||
|
|
||||||
import java.lang.annotation.Documented
|
import android.app.StatusBarManager
|
||||||
import java.lang.annotation.Retention
|
import com.android.systemui.dagger.SysUISingleton
|
||||||
import java.lang.annotation.RetentionPolicy
|
import com.android.systemui.media.taptotransfer.common.MediaTttLoggerUtils
|
||||||
import javax.inject.Qualifier
|
import com.android.systemui.plugins.log.LogBuffer
|
||||||
|
import com.android.systemui.temporarydisplay.TemporaryViewLogger
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
@Qualifier
|
/** A logger for all events related to the media tap-to-transfer receiver experience. */
|
||||||
@Documented
|
@SysUISingleton
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
class MediaTttReceiverLogger
|
||||||
annotation class MediaTttReceiverLogger
|
@Inject
|
||||||
|
constructor(
|
||||||
|
@MediaTttReceiverLogBuffer buffer: LogBuffer,
|
||||||
|
) : TemporaryViewLogger<ChipReceiverInfo>(buffer, TAG) {
|
||||||
|
|
||||||
|
/** Logs a change in the chip state for the given [mediaRouteId]. */
|
||||||
|
fun logStateChange(
|
||||||
|
stateName: String,
|
||||||
|
mediaRouteId: String,
|
||||||
|
packageName: String?,
|
||||||
|
) {
|
||||||
|
MediaTttLoggerUtils.logStateChange(buffer, TAG, stateName, mediaRouteId, packageName)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Logs an error in trying to update to [displayState]. */
|
||||||
|
fun logStateChangeError(@StatusBarManager.MediaTransferReceiverState displayState: Int) {
|
||||||
|
MediaTttLoggerUtils.logStateChangeError(buffer, TAG, displayState)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Logs that we couldn't find information for [packageName]. */
|
||||||
|
fun logPackageNotFound(packageName: String) {
|
||||||
|
MediaTttLoggerUtils.logPackageNotFound(buffer, TAG, packageName)
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private const val TAG = "MediaTttReceiver"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ import com.android.systemui.R
|
|||||||
import com.android.systemui.common.shared.model.Text
|
import com.android.systemui.common.shared.model.Text
|
||||||
import com.android.systemui.dagger.SysUISingleton
|
import com.android.systemui.dagger.SysUISingleton
|
||||||
import com.android.systemui.media.taptotransfer.MediaTttFlags
|
import com.android.systemui.media.taptotransfer.MediaTttFlags
|
||||||
import com.android.systemui.media.taptotransfer.common.MediaTttLogger
|
|
||||||
import com.android.systemui.media.taptotransfer.common.MediaTttUtils
|
import com.android.systemui.media.taptotransfer.common.MediaTttUtils
|
||||||
import com.android.systemui.statusbar.CommandQueue
|
import com.android.systemui.statusbar.CommandQueue
|
||||||
import com.android.systemui.temporarydisplay.TemporaryViewDisplayController
|
import com.android.systemui.temporarydisplay.TemporaryViewDisplayController
|
||||||
@@ -48,7 +47,7 @@ constructor(
|
|||||||
private val chipbarCoordinator: ChipbarCoordinator,
|
private val chipbarCoordinator: ChipbarCoordinator,
|
||||||
private val commandQueue: CommandQueue,
|
private val commandQueue: CommandQueue,
|
||||||
private val context: Context,
|
private val context: Context,
|
||||||
@MediaTttSenderLogger private val logger: MediaTttLogger<ChipbarInfo>,
|
private val logger: MediaTttSenderLogger,
|
||||||
private val mediaTttFlags: MediaTttFlags,
|
private val mediaTttFlags: MediaTttFlags,
|
||||||
private val uiEventLogger: MediaTttSenderUiEventLogger,
|
private val uiEventLogger: MediaTttSenderUiEventLogger,
|
||||||
) : CoreStartable {
|
) : CoreStartable {
|
||||||
@@ -150,7 +149,7 @@ constructor(
|
|||||||
routeInfo: MediaRoute2Info,
|
routeInfo: MediaRoute2Info,
|
||||||
undoCallback: IUndoMediaTransferCallback?,
|
undoCallback: IUndoMediaTransferCallback?,
|
||||||
context: Context,
|
context: Context,
|
||||||
logger: MediaTttLogger<ChipbarInfo>,
|
logger: MediaTttSenderLogger,
|
||||||
): ChipbarInfo {
|
): ChipbarInfo {
|
||||||
val packageName = routeInfo.clientPackageName
|
val packageName = routeInfo.clientPackageName
|
||||||
val otherDeviceName =
|
val otherDeviceName =
|
||||||
@@ -159,12 +158,14 @@ constructor(
|
|||||||
} else {
|
} else {
|
||||||
routeInfo.name.toString()
|
routeInfo.name.toString()
|
||||||
}
|
}
|
||||||
|
val icon =
|
||||||
|
MediaTttUtils.getIconInfoFromPackageName(context, packageName) {
|
||||||
|
logger.logPackageNotFound(packageName)
|
||||||
|
}
|
||||||
|
|
||||||
return ChipbarInfo(
|
return ChipbarInfo(
|
||||||
// Display the app's icon as the start icon
|
// Display the app's icon as the start icon
|
||||||
startIcon =
|
startIcon = icon.toTintedIcon(),
|
||||||
MediaTttUtils.getIconInfoFromPackageName(context, packageName, logger)
|
|
||||||
.toTintedIcon(),
|
|
||||||
text = chipStateSender.getChipTextString(context, otherDeviceName),
|
text = chipStateSender.getChipTextString(context, otherDeviceName),
|
||||||
endItem =
|
endItem =
|
||||||
when (chipStateSender.endItem) {
|
when (chipStateSender.endItem) {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.android.systemui.log.dagger;
|
package com.android.systemui.media.taptotransfer.sender;
|
||||||
|
|
||||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||||
|
|
||||||
@@ -26,8 +26,7 @@ import java.lang.annotation.Retention;
|
|||||||
import javax.inject.Qualifier;
|
import javax.inject.Qualifier;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A {@link LogBuffer} for
|
* A {@link LogBuffer} for sender logs.
|
||||||
* {@link com.android.systemui.media.taptotransfer.sender.MediaTttSenderLogger}.
|
|
||||||
*/
|
*/
|
||||||
@Qualifier
|
@Qualifier
|
||||||
@Documented
|
@Documented
|
||||||
@@ -13,14 +13,79 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.android.systemui.media.taptotransfer.sender
|
package com.android.systemui.media.taptotransfer.sender
|
||||||
|
|
||||||
import java.lang.annotation.Documented
|
import android.app.StatusBarManager
|
||||||
import java.lang.annotation.Retention
|
import com.android.systemui.dagger.SysUISingleton
|
||||||
import java.lang.annotation.RetentionPolicy
|
import com.android.systemui.media.taptotransfer.common.MediaTttLoggerUtils
|
||||||
import javax.inject.Qualifier
|
import com.android.systemui.plugins.log.LogBuffer
|
||||||
|
import com.android.systemui.plugins.log.LogLevel
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
@Qualifier
|
/** A logger for all events related to the media tap-to-transfer sender experience. */
|
||||||
@Documented
|
@SysUISingleton
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
class MediaTttSenderLogger
|
||||||
annotation class MediaTttSenderLogger
|
@Inject
|
||||||
|
constructor(
|
||||||
|
@MediaTttSenderLogBuffer private val buffer: LogBuffer,
|
||||||
|
) {
|
||||||
|
/** Logs a change in the chip state for the given [mediaRouteId]. */
|
||||||
|
fun logStateChange(
|
||||||
|
stateName: String,
|
||||||
|
mediaRouteId: String,
|
||||||
|
packageName: String?,
|
||||||
|
) {
|
||||||
|
MediaTttLoggerUtils.logStateChange(buffer, TAG, stateName, mediaRouteId, packageName)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Logs an error in trying to update to [displayState]. */
|
||||||
|
fun logStateChangeError(@StatusBarManager.MediaTransferSenderState displayState: Int) {
|
||||||
|
MediaTttLoggerUtils.logStateChangeError(buffer, TAG, displayState)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Logs that we couldn't find information for [packageName]. */
|
||||||
|
fun logPackageNotFound(packageName: String) {
|
||||||
|
MediaTttLoggerUtils.logPackageNotFound(buffer, TAG, packageName)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs an invalid sender state transition error in trying to update to [desiredState].
|
||||||
|
*
|
||||||
|
* @param currentState the previous state of the chip.
|
||||||
|
* @param desiredState the new state of the chip.
|
||||||
|
*/
|
||||||
|
fun logInvalidStateTransitionError(currentState: String, desiredState: String) {
|
||||||
|
buffer.log(
|
||||||
|
TAG,
|
||||||
|
LogLevel.ERROR,
|
||||||
|
{
|
||||||
|
str1 = currentState
|
||||||
|
str2 = desiredState
|
||||||
|
},
|
||||||
|
{ "Cannot display state=$str2 after state=$str1; invalid transition" }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs that a removal request has been bypassed (ignored).
|
||||||
|
*
|
||||||
|
* @param removalReason the reason that the chip removal was requested.
|
||||||
|
* @param bypassReason the reason that the request was bypassed.
|
||||||
|
*/
|
||||||
|
fun logRemovalBypass(removalReason: String, bypassReason: String) {
|
||||||
|
buffer.log(
|
||||||
|
TAG,
|
||||||
|
LogLevel.DEBUG,
|
||||||
|
{
|
||||||
|
str1 = removalReason
|
||||||
|
str2 = bypassReason
|
||||||
|
},
|
||||||
|
{ "Chip removal requested due to $str1; however, removal was ignored because $str2" }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private const val TAG = "MediaTttSender"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,86 @@
|
|||||||
|
/*
|
||||||
|
* 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.taptotransfer.common
|
||||||
|
|
||||||
|
import androidx.test.filters.SmallTest
|
||||||
|
import com.android.systemui.SysuiTestCase
|
||||||
|
import com.android.systemui.dump.DumpManager
|
||||||
|
import com.android.systemui.log.LogBufferFactory
|
||||||
|
import com.android.systemui.plugins.log.LogBuffer
|
||||||
|
import com.android.systemui.plugins.log.LogcatEchoTracker
|
||||||
|
import com.google.common.truth.Truth.assertThat
|
||||||
|
import java.io.PrintWriter
|
||||||
|
import java.io.StringWriter
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Test
|
||||||
|
import org.mockito.Mockito.mock
|
||||||
|
|
||||||
|
@SmallTest
|
||||||
|
class MediaTttLoggerUtilsTest : SysuiTestCase() {
|
||||||
|
|
||||||
|
private lateinit var buffer: LogBuffer
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setUp() {
|
||||||
|
buffer =
|
||||||
|
LogBufferFactory(DumpManager(), mock(LogcatEchoTracker::class.java))
|
||||||
|
.create("buffer", 10)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun logStateChange_bufferHasDeviceTypeTagAndParamInfo() {
|
||||||
|
val stateName = "test state name"
|
||||||
|
val id = "test id"
|
||||||
|
val packageName = "this.is.a.package"
|
||||||
|
|
||||||
|
MediaTttLoggerUtils.logStateChange(buffer, TAG, stateName, id, packageName)
|
||||||
|
|
||||||
|
val actualString = getStringFromBuffer()
|
||||||
|
assertThat(actualString).contains(TAG)
|
||||||
|
assertThat(actualString).contains(stateName)
|
||||||
|
assertThat(actualString).contains(id)
|
||||||
|
assertThat(actualString).contains(packageName)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun logStateChangeError_hasState() {
|
||||||
|
MediaTttLoggerUtils.logStateChangeError(buffer, TAG, 3456)
|
||||||
|
|
||||||
|
val actualString = getStringFromBuffer()
|
||||||
|
assertThat(actualString).contains(TAG)
|
||||||
|
assertThat(actualString).contains("3456")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun logPackageNotFound_bufferHasPackageName() {
|
||||||
|
val packageName = "this.is.a.package"
|
||||||
|
|
||||||
|
MediaTttLoggerUtils.logPackageNotFound(buffer, TAG, packageName)
|
||||||
|
|
||||||
|
val actualString = getStringFromBuffer()
|
||||||
|
assertThat(actualString).contains(TAG)
|
||||||
|
assertThat(actualString).contains(packageName)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getStringFromBuffer(): String {
|
||||||
|
val stringWriter = StringWriter()
|
||||||
|
buffer.dump(PrintWriter(stringWriter), tailLength = 0)
|
||||||
|
return stringWriter.toString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private const val TAG = "TEST TAG"
|
||||||
@@ -25,7 +25,6 @@ import com.android.systemui.SysuiTestCase
|
|||||||
import com.android.systemui.common.shared.model.ContentDescription
|
import com.android.systemui.common.shared.model.ContentDescription
|
||||||
import com.android.systemui.common.shared.model.ContentDescription.Companion.loadContentDescription
|
import com.android.systemui.common.shared.model.ContentDescription.Companion.loadContentDescription
|
||||||
import com.android.systemui.common.shared.model.Icon
|
import com.android.systemui.common.shared.model.Icon
|
||||||
import com.android.systemui.temporarydisplay.TemporaryViewInfo
|
|
||||||
import com.android.systemui.util.mockito.any
|
import com.android.systemui.util.mockito.any
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
@@ -41,7 +40,6 @@ class MediaTttUtilsTest : SysuiTestCase() {
|
|||||||
private lateinit var appIconFromPackageName: Drawable
|
private lateinit var appIconFromPackageName: Drawable
|
||||||
@Mock private lateinit var packageManager: PackageManager
|
@Mock private lateinit var packageManager: PackageManager
|
||||||
@Mock private lateinit var applicationInfo: ApplicationInfo
|
@Mock private lateinit var applicationInfo: ApplicationInfo
|
||||||
@Mock private lateinit var logger: MediaTttLogger<TemporaryViewInfo>
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
fun setUp() {
|
fun setUp() {
|
||||||
@@ -67,8 +65,7 @@ class MediaTttUtilsTest : SysuiTestCase() {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun getIconInfoFromPackageName_nullPackageName_returnsDefault() {
|
fun getIconInfoFromPackageName_nullPackageName_returnsDefault() {
|
||||||
val iconInfo =
|
val iconInfo = MediaTttUtils.getIconInfoFromPackageName(context, appPackageName = null) {}
|
||||||
MediaTttUtils.getIconInfoFromPackageName(context, appPackageName = null, logger)
|
|
||||||
|
|
||||||
assertThat(iconInfo.isAppIcon).isFalse()
|
assertThat(iconInfo.isAppIcon).isFalse()
|
||||||
assertThat(iconInfo.contentDescription.loadContentDescription(context))
|
assertThat(iconInfo.contentDescription.loadContentDescription(context))
|
||||||
@@ -76,9 +73,20 @@ class MediaTttUtilsTest : SysuiTestCase() {
|
|||||||
assertThat(iconInfo.icon).isEqualTo(MediaTttIcon.Resource(R.drawable.ic_cast))
|
assertThat(iconInfo.icon).isEqualTo(MediaTttIcon.Resource(R.drawable.ic_cast))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun getIconInfoFromPackageName_nullPackageName_exceptionFnNotTriggered() {
|
||||||
|
var exceptionTriggered = false
|
||||||
|
|
||||||
|
MediaTttUtils.getIconInfoFromPackageName(context, appPackageName = null) {
|
||||||
|
exceptionTriggered = true
|
||||||
|
}
|
||||||
|
|
||||||
|
assertThat(exceptionTriggered).isFalse()
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun getIconInfoFromPackageName_invalidPackageName_returnsDefault() {
|
fun getIconInfoFromPackageName_invalidPackageName_returnsDefault() {
|
||||||
val iconInfo = MediaTttUtils.getIconInfoFromPackageName(context, "fakePackageName", logger)
|
val iconInfo = MediaTttUtils.getIconInfoFromPackageName(context, "fakePackageName") {}
|
||||||
|
|
||||||
assertThat(iconInfo.isAppIcon).isFalse()
|
assertThat(iconInfo.isAppIcon).isFalse()
|
||||||
assertThat(iconInfo.contentDescription.loadContentDescription(context))
|
assertThat(iconInfo.contentDescription.loadContentDescription(context))
|
||||||
@@ -86,15 +94,37 @@ class MediaTttUtilsTest : SysuiTestCase() {
|
|||||||
assertThat(iconInfo.icon).isEqualTo(MediaTttIcon.Resource(R.drawable.ic_cast))
|
assertThat(iconInfo.icon).isEqualTo(MediaTttIcon.Resource(R.drawable.ic_cast))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun getIconInfoFromPackageName_invalidPackageName_exceptionFnTriggered() {
|
||||||
|
var exceptionTriggered = false
|
||||||
|
|
||||||
|
MediaTttUtils.getIconInfoFromPackageName(context, appPackageName = "fakePackageName") {
|
||||||
|
exceptionTriggered = true
|
||||||
|
}
|
||||||
|
|
||||||
|
assertThat(exceptionTriggered).isTrue()
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun getIconInfoFromPackageName_validPackageName_returnsAppInfo() {
|
fun getIconInfoFromPackageName_validPackageName_returnsAppInfo() {
|
||||||
val iconInfo = MediaTttUtils.getIconInfoFromPackageName(context, PACKAGE_NAME, logger)
|
val iconInfo = MediaTttUtils.getIconInfoFromPackageName(context, PACKAGE_NAME) {}
|
||||||
|
|
||||||
assertThat(iconInfo.isAppIcon).isTrue()
|
assertThat(iconInfo.isAppIcon).isTrue()
|
||||||
assertThat(iconInfo.icon).isEqualTo(MediaTttIcon.Loaded(appIconFromPackageName))
|
assertThat(iconInfo.icon).isEqualTo(MediaTttIcon.Loaded(appIconFromPackageName))
|
||||||
assertThat(iconInfo.contentDescription.loadContentDescription(context)).isEqualTo(APP_NAME)
|
assertThat(iconInfo.contentDescription.loadContentDescription(context)).isEqualTo(APP_NAME)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun getIconInfoFromPackageName_validPackageName_exceptionFnNotTriggered() {
|
||||||
|
var exceptionTriggered = false
|
||||||
|
|
||||||
|
MediaTttUtils.getIconInfoFromPackageName(context, PACKAGE_NAME) {
|
||||||
|
exceptionTriggered = true
|
||||||
|
}
|
||||||
|
|
||||||
|
assertThat(exceptionTriggered).isFalse()
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun iconInfo_toTintedIcon_loaded() {
|
fun iconInfo_toTintedIcon_loaded() {
|
||||||
val contentDescription = ContentDescription.Loaded("test")
|
val contentDescription = ContentDescription.Loaded("test")
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ import android.view.WindowManager
|
|||||||
import android.view.accessibility.AccessibilityManager
|
import android.view.accessibility.AccessibilityManager
|
||||||
import com.android.systemui.dump.DumpManager
|
import com.android.systemui.dump.DumpManager
|
||||||
import com.android.systemui.media.taptotransfer.MediaTttFlags
|
import com.android.systemui.media.taptotransfer.MediaTttFlags
|
||||||
import com.android.systemui.media.taptotransfer.common.MediaTttLogger
|
|
||||||
import com.android.systemui.statusbar.CommandQueue
|
import com.android.systemui.statusbar.CommandQueue
|
||||||
import com.android.systemui.statusbar.policy.ConfigurationController
|
import com.android.systemui.statusbar.policy.ConfigurationController
|
||||||
import com.android.systemui.util.concurrency.DelayableExecutor
|
import com.android.systemui.util.concurrency.DelayableExecutor
|
||||||
@@ -35,7 +34,7 @@ import com.android.systemui.util.wakelock.WakeLock
|
|||||||
class FakeMediaTttChipControllerReceiver(
|
class FakeMediaTttChipControllerReceiver(
|
||||||
commandQueue: CommandQueue,
|
commandQueue: CommandQueue,
|
||||||
context: Context,
|
context: Context,
|
||||||
logger: MediaTttLogger<ChipReceiverInfo>,
|
logger: MediaTttReceiverLogger,
|
||||||
windowManager: WindowManager,
|
windowManager: WindowManager,
|
||||||
mainExecutor: DelayableExecutor,
|
mainExecutor: DelayableExecutor,
|
||||||
accessibilityManager: AccessibilityManager,
|
accessibilityManager: AccessibilityManager,
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ import com.android.systemui.R
|
|||||||
import com.android.systemui.SysuiTestCase
|
import com.android.systemui.SysuiTestCase
|
||||||
import com.android.systemui.dump.DumpManager
|
import com.android.systemui.dump.DumpManager
|
||||||
import com.android.systemui.media.taptotransfer.MediaTttFlags
|
import com.android.systemui.media.taptotransfer.MediaTttFlags
|
||||||
import com.android.systemui.media.taptotransfer.common.MediaTttLogger
|
|
||||||
import com.android.systemui.statusbar.CommandQueue
|
import com.android.systemui.statusbar.CommandQueue
|
||||||
import com.android.systemui.statusbar.policy.ConfigurationController
|
import com.android.systemui.statusbar.policy.ConfigurationController
|
||||||
import com.android.systemui.util.concurrency.FakeExecutor
|
import com.android.systemui.util.concurrency.FakeExecutor
|
||||||
@@ -68,7 +67,7 @@ class MediaTttChipControllerReceiverTest : SysuiTestCase() {
|
|||||||
@Mock
|
@Mock
|
||||||
private lateinit var applicationInfo: ApplicationInfo
|
private lateinit var applicationInfo: ApplicationInfo
|
||||||
@Mock
|
@Mock
|
||||||
private lateinit var logger: MediaTttLogger<ChipReceiverInfo>
|
private lateinit var logger: MediaTttReceiverLogger
|
||||||
@Mock
|
@Mock
|
||||||
private lateinit var accessibilityManager: AccessibilityManager
|
private lateinit var accessibilityManager: AccessibilityManager
|
||||||
@Mock
|
@Mock
|
||||||
|
|||||||
@@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
* 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.taptotransfer.receiver
|
||||||
|
|
||||||
|
import androidx.test.filters.SmallTest
|
||||||
|
import com.android.systemui.SysuiTestCase
|
||||||
|
import com.android.systemui.dump.DumpManager
|
||||||
|
import com.android.systemui.log.LogBufferFactory
|
||||||
|
import com.android.systemui.plugins.log.LogBuffer
|
||||||
|
import com.android.systemui.plugins.log.LogcatEchoTracker
|
||||||
|
import com.google.common.truth.Truth.assertThat
|
||||||
|
import java.io.PrintWriter
|
||||||
|
import java.io.StringWriter
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Test
|
||||||
|
import org.mockito.Mockito.mock
|
||||||
|
|
||||||
|
@SmallTest
|
||||||
|
class MediaTttReceiverLoggerTest : SysuiTestCase() {
|
||||||
|
|
||||||
|
private lateinit var buffer: LogBuffer
|
||||||
|
private lateinit var logger: MediaTttReceiverLogger
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setUp() {
|
||||||
|
buffer =
|
||||||
|
LogBufferFactory(DumpManager(), mock(LogcatEchoTracker::class.java))
|
||||||
|
.create("buffer", 10)
|
||||||
|
logger = MediaTttReceiverLogger(buffer)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun logStateChange_bufferHasDeviceTypeTagAndParamInfo() {
|
||||||
|
val stateName = "test state name"
|
||||||
|
val id = "test id"
|
||||||
|
val packageName = "this.is.a.package"
|
||||||
|
|
||||||
|
logger.logStateChange(stateName, id, packageName)
|
||||||
|
|
||||||
|
val actualString = getStringFromBuffer()
|
||||||
|
assertThat(actualString).contains(stateName)
|
||||||
|
assertThat(actualString).contains(id)
|
||||||
|
assertThat(actualString).contains(packageName)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun logStateChangeError_hasState() {
|
||||||
|
logger.logStateChangeError(3456)
|
||||||
|
|
||||||
|
val actualString = getStringFromBuffer()
|
||||||
|
assertThat(actualString).contains("3456")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun logPackageNotFound_bufferHasPackageName() {
|
||||||
|
val packageName = "this.is.a.package"
|
||||||
|
|
||||||
|
logger.logPackageNotFound(packageName)
|
||||||
|
|
||||||
|
val actualString = getStringFromBuffer()
|
||||||
|
assertThat(actualString).contains(packageName)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getStringFromBuffer(): String {
|
||||||
|
val stringWriter = StringWriter()
|
||||||
|
buffer.dump(PrintWriter(stringWriter), tailLength = 0)
|
||||||
|
return stringWriter.toString()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -40,14 +40,12 @@ import com.android.systemui.classifier.FalsingCollector
|
|||||||
import com.android.systemui.common.shared.model.Text.Companion.loadText
|
import com.android.systemui.common.shared.model.Text.Companion.loadText
|
||||||
import com.android.systemui.dump.DumpManager
|
import com.android.systemui.dump.DumpManager
|
||||||
import com.android.systemui.media.taptotransfer.MediaTttFlags
|
import com.android.systemui.media.taptotransfer.MediaTttFlags
|
||||||
import com.android.systemui.media.taptotransfer.common.MediaTttLogger
|
|
||||||
import com.android.systemui.plugins.FalsingManager
|
import com.android.systemui.plugins.FalsingManager
|
||||||
import com.android.systemui.statusbar.CommandQueue
|
import com.android.systemui.statusbar.CommandQueue
|
||||||
import com.android.systemui.statusbar.VibratorHelper
|
import com.android.systemui.statusbar.VibratorHelper
|
||||||
import com.android.systemui.statusbar.policy.ConfigurationController
|
import com.android.systemui.statusbar.policy.ConfigurationController
|
||||||
import com.android.systemui.temporarydisplay.TemporaryViewDisplayController
|
import com.android.systemui.temporarydisplay.TemporaryViewDisplayController
|
||||||
import com.android.systemui.temporarydisplay.chipbar.ChipbarCoordinator
|
import com.android.systemui.temporarydisplay.chipbar.ChipbarCoordinator
|
||||||
import com.android.systemui.temporarydisplay.chipbar.ChipbarInfo
|
|
||||||
import com.android.systemui.temporarydisplay.chipbar.ChipbarLogger
|
import com.android.systemui.temporarydisplay.chipbar.ChipbarLogger
|
||||||
import com.android.systemui.temporarydisplay.chipbar.FakeChipbarCoordinator
|
import com.android.systemui.temporarydisplay.chipbar.FakeChipbarCoordinator
|
||||||
import com.android.systemui.temporarydisplay.chipbar.SwipeChipbarAwayGestureHandler
|
import com.android.systemui.temporarydisplay.chipbar.SwipeChipbarAwayGestureHandler
|
||||||
@@ -92,7 +90,7 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() {
|
|||||||
@Mock private lateinit var falsingManager: FalsingManager
|
@Mock private lateinit var falsingManager: FalsingManager
|
||||||
@Mock private lateinit var falsingCollector: FalsingCollector
|
@Mock private lateinit var falsingCollector: FalsingCollector
|
||||||
@Mock private lateinit var chipbarLogger: ChipbarLogger
|
@Mock private lateinit var chipbarLogger: ChipbarLogger
|
||||||
@Mock private lateinit var logger: MediaTttLogger<ChipbarInfo>
|
@Mock private lateinit var logger: MediaTttSenderLogger
|
||||||
@Mock private lateinit var mediaTttFlags: MediaTttFlags
|
@Mock private lateinit var mediaTttFlags: MediaTttFlags
|
||||||
@Mock private lateinit var packageManager: PackageManager
|
@Mock private lateinit var packageManager: PackageManager
|
||||||
@Mock private lateinit var powerManager: PowerManager
|
@Mock private lateinit var powerManager: PowerManager
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.android.systemui.media.taptotransfer.common
|
package com.android.systemui.media.taptotransfer.sender
|
||||||
|
|
||||||
import androidx.test.filters.SmallTest
|
import androidx.test.filters.SmallTest
|
||||||
import com.android.systemui.SysuiTestCase
|
import com.android.systemui.SysuiTestCase
|
||||||
@@ -22,7 +22,6 @@ import com.android.systemui.dump.DumpManager
|
|||||||
import com.android.systemui.log.LogBufferFactory
|
import com.android.systemui.log.LogBufferFactory
|
||||||
import com.android.systemui.plugins.log.LogBuffer
|
import com.android.systemui.plugins.log.LogBuffer
|
||||||
import com.android.systemui.plugins.log.LogcatEchoTracker
|
import com.android.systemui.plugins.log.LogcatEchoTracker
|
||||||
import com.android.systemui.temporarydisplay.TemporaryViewInfo
|
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import java.io.PrintWriter
|
import java.io.PrintWriter
|
||||||
import java.io.StringWriter
|
import java.io.StringWriter
|
||||||
@@ -31,16 +30,17 @@ import org.junit.Test
|
|||||||
import org.mockito.Mockito.mock
|
import org.mockito.Mockito.mock
|
||||||
|
|
||||||
@SmallTest
|
@SmallTest
|
||||||
class MediaTttLoggerTest : SysuiTestCase() {
|
class MediaTttSenderLoggerTest : SysuiTestCase() {
|
||||||
|
|
||||||
private lateinit var buffer: LogBuffer
|
private lateinit var buffer: LogBuffer
|
||||||
private lateinit var logger: MediaTttLogger<TemporaryViewInfo>
|
private lateinit var logger: MediaTttSenderLogger
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
fun setUp() {
|
fun setUp() {
|
||||||
buffer = LogBufferFactory(DumpManager(), mock(LogcatEchoTracker::class.java))
|
buffer =
|
||||||
|
LogBufferFactory(DumpManager(), mock(LogcatEchoTracker::class.java))
|
||||||
.create("buffer", 10)
|
.create("buffer", 10)
|
||||||
logger = MediaTttLogger(DEVICE_TYPE_TAG, buffer)
|
logger = MediaTttSenderLogger(buffer)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -52,12 +52,19 @@ class MediaTttLoggerTest : SysuiTestCase() {
|
|||||||
logger.logStateChange(stateName, id, packageName)
|
logger.logStateChange(stateName, id, packageName)
|
||||||
|
|
||||||
val actualString = getStringFromBuffer()
|
val actualString = getStringFromBuffer()
|
||||||
assertThat(actualString).contains(DEVICE_TYPE_TAG)
|
|
||||||
assertThat(actualString).contains(stateName)
|
assertThat(actualString).contains(stateName)
|
||||||
assertThat(actualString).contains(id)
|
assertThat(actualString).contains(id)
|
||||||
assertThat(actualString).contains(packageName)
|
assertThat(actualString).contains(packageName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun logStateChangeError_hasState() {
|
||||||
|
logger.logStateChangeError(3456)
|
||||||
|
|
||||||
|
val actualString = getStringFromBuffer()
|
||||||
|
assertThat(actualString).contains("3456")
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun logPackageNotFound_bufferHasPackageName() {
|
fun logPackageNotFound_bufferHasPackageName() {
|
||||||
val packageName = "this.is.a.package"
|
val packageName = "this.is.a.package"
|
||||||
@@ -86,5 +93,3 @@ class MediaTttLoggerTest : SysuiTestCase() {
|
|||||||
return stringWriter.toString()
|
return stringWriter.toString()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private const val DEVICE_TYPE_TAG = "TEST TYPE"
|
|
||||||
Reference in New Issue
Block a user