Skip to content
Snippets Groups Projects
Commit 5383e774 authored by Caitlin Shkuratov's avatar Caitlin Shkuratov
Browse files

[Media TTT] Split up the media sender and receiver loggers.

There were already a few sender-specific log methods in the common
class, and more will be added so it's better to split them up.

Bug: 265455911
Test: manual: Verified `MediaTttSender` and `MediaTttReceiver` logs
still appear.
Test: atest com.android.systemui.media.taptotransfer

Change-Id: I97ff8e60b63f7b460dcfcba72bfcf6b2f2d02952
parent 41125ee8
No related branches found
No related tags found
No related merge requests found
Showing
with 429 additions and 105 deletions
......@@ -197,13 +197,10 @@
-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/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/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/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/navigationbar/gestural/BackPanel.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/nearby/NearbyMediaDevicesManagerTest.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/sender/MediaTttSenderUiEventLoggerTest.kt
-packages/SystemUI/tests/src/com/android/systemui/navigationbar/gestural/FloatingRotationButtonPositionCalculatorTest.kt
......
......@@ -199,28 +199,6 @@ public class LogModule {
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
* {@link com.android.systemui.media.muteawait.MediaMuteAwaitConnectionManager}.
......
......@@ -17,8 +17,7 @@
package com.android.systemui.media.dagger;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.log.dagger.MediaTttReceiverLogBuffer;
import com.android.systemui.log.dagger.MediaTttSenderLogBuffer;
import com.android.systemui.log.LogBufferFactory;
import com.android.systemui.media.controls.pipeline.MediaDataManager;
import com.android.systemui.media.controls.ui.MediaHierarchyManager;
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.taptotransfer.MediaTttCommandLineHelper;
import com.android.systemui.media.taptotransfer.MediaTttFlags;
import com.android.systemui.media.taptotransfer.common.MediaTttLogger;
import com.android.systemui.media.taptotransfer.receiver.ChipReceiverInfo;
import com.android.systemui.media.taptotransfer.receiver.MediaTttReceiverLogger;
import com.android.systemui.media.taptotransfer.sender.MediaTttSenderLogger;
import com.android.systemui.media.taptotransfer.receiver.MediaTttReceiverLogBuffer;
import com.android.systemui.media.taptotransfer.sender.MediaTttSenderLogBuffer;
import com.android.systemui.plugins.log.LogBuffer;
import com.android.systemui.temporarydisplay.chipbar.ChipbarInfo;
import java.util.Optional;
......@@ -94,22 +90,22 @@ public interface MediaModule {
return new MediaHost(stateHolder, hierarchyManager, dataManager, statesManager);
}
/** Provides a logging buffer related to the media tap-to-transfer chip on the sender device. */
@Provides
@SysUISingleton
@MediaTttSenderLogger
static MediaTttLogger<ChipbarInfo> providesMediaTttSenderLogger(
@MediaTttSenderLogBuffer LogBuffer buffer
) {
return new MediaTttLogger<>("Sender", buffer);
@MediaTttSenderLogBuffer
static LogBuffer provideMediaTttSenderLogBuffer(LogBufferFactory factory) {
return factory.create("MediaTttSender", 30);
}
/**
* Provides a logging buffer related to the media tap-to-transfer chip on the receiver device.
*/
@Provides
@SysUISingleton
@MediaTttReceiverLogger
static MediaTttLogger<ChipReceiverInfo> providesMediaTttReceiverLogger(
@MediaTttReceiverLogBuffer LogBuffer buffer
) {
return new MediaTttLogger<>("Receiver", buffer);
@MediaTttReceiverLogBuffer
static LogBuffer provideMediaTttReceiverLogBuffer(LogBufferFactory factory) {
return factory.create("MediaTttReceiver", 20);
}
/** */
......
......@@ -18,23 +18,16 @@ 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?) {
/** 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,
......@@ -47,13 +40,7 @@ class MediaTttLogger<T : TemporaryViewInfo>(
)
}
/**
* 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) {
fun logStateChangeError(buffer: LogBuffer, tag: String, displayState: Int) {
buffer.log(
tag,
LogLevel.ERROR,
......@@ -62,29 +49,7 @@ class MediaTttLogger<T : TemporaryViewInfo>(
)
}
/**
* 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) {
fun logPackageNotFound(buffer: LogBuffer, tag: String, packageName: String) {
buffer.log(
tag,
LogLevel.DEBUG,
......@@ -92,23 +57,4 @@ class MediaTttLogger<T : TemporaryViewInfo>(
{ "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"
......@@ -25,7 +25,6 @@ import com.android.systemui.R
import com.android.systemui.common.shared.model.ContentDescription
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.common.shared.model.TintedIcon
import com.android.systemui.temporarydisplay.TemporaryViewInfo
/** Utility methods for media tap-to-transfer. */
class MediaTttUtils {
......@@ -43,12 +42,13 @@ class MediaTttUtils {
* 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 logger the logger to use for any errors.
* @param onPackageNotFoundException a function run if a
* [PackageManager.NameNotFoundException] occurs.
*/
fun getIconInfoFromPackageName(
context: Context,
appPackageName: String?,
logger: MediaTttLogger<out TemporaryViewInfo>
onPackageNotFoundException: () -> Unit,
): IconInfo {
if (appPackageName != null) {
val packageManager = context.packageManager
......@@ -70,7 +70,7 @@ class MediaTttUtils {
isAppIcon = true
)
} catch (e: PackageManager.NameNotFoundException) {
logger.logPackageNotFound(appPackageName)
onPackageNotFoundException.invoke()
}
}
return IconInfo(
......
......@@ -39,7 +39,6 @@ import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.dump.DumpManager
import com.android.systemui.media.taptotransfer.MediaTttFlags
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.statusbar.CommandQueue
import com.android.systemui.statusbar.policy.ConfigurationController
......@@ -64,7 +63,7 @@ import javax.inject.Inject
open class MediaTttChipControllerReceiver @Inject constructor(
private val commandQueue: CommandQueue,
context: Context,
@MediaTttReceiverLogger logger: MediaTttLogger<ChipReceiverInfo>,
logger: MediaTttReceiverLogger,
windowManager: WindowManager,
mainExecutor: DelayableExecutor,
accessibilityManager: AccessibilityManager,
......@@ -78,7 +77,7 @@ open class MediaTttChipControllerReceiver @Inject constructor(
wakeLockBuilder: WakeLock.Builder,
systemClock: SystemClock,
private val rippleController: MediaTttReceiverRippleController,
) : TemporaryViewDisplayController<ChipReceiverInfo, MediaTttLogger<ChipReceiverInfo>>(
) : TemporaryViewDisplayController<ChipReceiverInfo, MediaTttReceiverLogger>(
context,
logger,
windowManager,
......@@ -172,9 +171,10 @@ open class MediaTttChipControllerReceiver @Inject constructor(
}
override fun updateView(newInfo: ChipReceiverInfo, currentView: ViewGroup) {
var iconInfo = MediaTttUtils.getIconInfoFromPackageName(
context, newInfo.routeInfo.clientPackageName, logger
)
val packageName = newInfo.routeInfo.clientPackageName
var iconInfo = MediaTttUtils.getIconInfoFromPackageName(context, packageName) {
logger.logPackageNotFound(packageName)
}
if (newInfo.appNameOverride != null) {
iconInfo = iconInfo.copy(
......
......@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.systemui.log.dagger;
package com.android.systemui.media.taptotransfer.receiver;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
......@@ -26,8 +26,7 @@ import java.lang.annotation.Retention;
import javax.inject.Qualifier;
/**
* A {@link LogBuffer} for
* {@link com.android.systemui.media.taptotransfer.receiver.MediaTttReceiverLogger}.
* A {@link LogBuffer} for receiver logs.
*/
@Qualifier
@Documented
......
......@@ -13,14 +13,44 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui.media.taptotransfer.receiver
import java.lang.annotation.Documented
import java.lang.annotation.Retention
import java.lang.annotation.RetentionPolicy
import javax.inject.Qualifier
import android.app.StatusBarManager
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.media.taptotransfer.common.MediaTttLoggerUtils
import com.android.systemui.plugins.log.LogBuffer
import com.android.systemui.temporarydisplay.TemporaryViewLogger
import javax.inject.Inject
/** A logger for all events related to the media tap-to-transfer receiver experience. */
@SysUISingleton
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)
}
@Qualifier
@Documented
@Retention(RetentionPolicy.RUNTIME)
annotation class MediaTttReceiverLogger
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.dagger.SysUISingleton
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.statusbar.CommandQueue
import com.android.systemui.temporarydisplay.TemporaryViewDisplayController
......@@ -48,7 +47,7 @@ constructor(
private val chipbarCoordinator: ChipbarCoordinator,
private val commandQueue: CommandQueue,
private val context: Context,
@MediaTttSenderLogger private val logger: MediaTttLogger<ChipbarInfo>,
private val logger: MediaTttSenderLogger,
private val mediaTttFlags: MediaTttFlags,
private val uiEventLogger: MediaTttSenderUiEventLogger,
) : CoreStartable {
......@@ -150,7 +149,7 @@ constructor(
routeInfo: MediaRoute2Info,
undoCallback: IUndoMediaTransferCallback?,
context: Context,
logger: MediaTttLogger<ChipbarInfo>,
logger: MediaTttSenderLogger,
): ChipbarInfo {
val packageName = routeInfo.clientPackageName
val otherDeviceName =
......@@ -159,12 +158,14 @@ constructor(
} else {
routeInfo.name.toString()
}
val icon =
MediaTttUtils.getIconInfoFromPackageName(context, packageName) {
logger.logPackageNotFound(packageName)
}
return ChipbarInfo(
// Display the app's icon as the start icon
startIcon =
MediaTttUtils.getIconInfoFromPackageName(context, packageName, logger)
.toTintedIcon(),
startIcon = icon.toTintedIcon(),
text = chipStateSender.getChipTextString(context, otherDeviceName),
endItem =
when (chipStateSender.endItem) {
......
......@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.systemui.log.dagger;
package com.android.systemui.media.taptotransfer.sender;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
......@@ -26,8 +26,7 @@ import java.lang.annotation.Retention;
import javax.inject.Qualifier;
/**
* A {@link LogBuffer} for
* {@link com.android.systemui.media.taptotransfer.sender.MediaTttSenderLogger}.
* A {@link LogBuffer} for sender logs.
*/
@Qualifier
@Documented
......
......@@ -13,14 +13,79 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui.media.taptotransfer.sender
import java.lang.annotation.Documented
import java.lang.annotation.Retention
import java.lang.annotation.RetentionPolicy
import javax.inject.Qualifier
import android.app.StatusBarManager
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.media.taptotransfer.common.MediaTttLoggerUtils
import com.android.systemui.plugins.log.LogBuffer
import com.android.systemui.plugins.log.LogLevel
import javax.inject.Inject
/** A logger for all events related to the media tap-to-transfer sender experience. */
@SysUISingleton
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" }
)
}
@Qualifier
@Documented
@Retention(RetentionPolicy.RUNTIME)
annotation class MediaTttSenderLogger
companion object {
private const val TAG = "MediaTttSender"
}
}
/*
* 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.Companion.loadContentDescription
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.temporarydisplay.TemporaryViewInfo
import com.android.systemui.util.mockito.any
import com.google.common.truth.Truth.assertThat
import org.junit.Before
......@@ -41,7 +40,6 @@ class MediaTttUtilsTest : SysuiTestCase() {
private lateinit var appIconFromPackageName: Drawable
@Mock private lateinit var packageManager: PackageManager
@Mock private lateinit var applicationInfo: ApplicationInfo
@Mock private lateinit var logger: MediaTttLogger<TemporaryViewInfo>
@Before
fun setUp() {
......@@ -67,8 +65,7 @@ class MediaTttUtilsTest : SysuiTestCase() {
@Test
fun getIconInfoFromPackageName_nullPackageName_returnsDefault() {
val iconInfo =
MediaTttUtils.getIconInfoFromPackageName(context, appPackageName = null, logger)
val iconInfo = MediaTttUtils.getIconInfoFromPackageName(context, appPackageName = null) {}
assertThat(iconInfo.isAppIcon).isFalse()
assertThat(iconInfo.contentDescription.loadContentDescription(context))
......@@ -76,9 +73,20 @@ class MediaTttUtilsTest : SysuiTestCase() {
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
fun getIconInfoFromPackageName_invalidPackageName_returnsDefault() {
val iconInfo = MediaTttUtils.getIconInfoFromPackageName(context, "fakePackageName", logger)
val iconInfo = MediaTttUtils.getIconInfoFromPackageName(context, "fakePackageName") {}
assertThat(iconInfo.isAppIcon).isFalse()
assertThat(iconInfo.contentDescription.loadContentDescription(context))
......@@ -86,15 +94,37 @@ class MediaTttUtilsTest : SysuiTestCase() {
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
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.icon).isEqualTo(MediaTttIcon.Loaded(appIconFromPackageName))
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
fun iconInfo_toTintedIcon_loaded() {
val contentDescription = ContentDescription.Loaded("test")
......
......@@ -24,7 +24,6 @@ import android.view.WindowManager
import android.view.accessibility.AccessibilityManager
import com.android.systemui.dump.DumpManager
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.policy.ConfigurationController
import com.android.systemui.util.concurrency.DelayableExecutor
......@@ -35,7 +34,7 @@ import com.android.systemui.util.wakelock.WakeLock
class FakeMediaTttChipControllerReceiver(
commandQueue: CommandQueue,
context: Context,
logger: MediaTttLogger<ChipReceiverInfo>,
logger: MediaTttReceiverLogger,
windowManager: WindowManager,
mainExecutor: DelayableExecutor,
accessibilityManager: AccessibilityManager,
......
......@@ -36,7 +36,6 @@ import com.android.systemui.R
import com.android.systemui.SysuiTestCase
import com.android.systemui.dump.DumpManager
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.policy.ConfigurationController
import com.android.systemui.util.concurrency.FakeExecutor
......@@ -68,7 +67,7 @@ class MediaTttChipControllerReceiverTest : SysuiTestCase() {
@Mock
private lateinit var applicationInfo: ApplicationInfo
@Mock
private lateinit var logger: MediaTttLogger<ChipReceiverInfo>
private lateinit var logger: MediaTttReceiverLogger
@Mock
private lateinit var accessibilityManager: AccessibilityManager
@Mock
......
/*
* 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.dump.DumpManager
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.statusbar.CommandQueue
import com.android.systemui.statusbar.VibratorHelper
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.temporarydisplay.TemporaryViewDisplayController
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.FakeChipbarCoordinator
import com.android.systemui.temporarydisplay.chipbar.SwipeChipbarAwayGestureHandler
......@@ -92,7 +90,7 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() {
@Mock private lateinit var falsingManager: FalsingManager
@Mock private lateinit var falsingCollector: FalsingCollector
@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 packageManager: PackageManager
@Mock private lateinit var powerManager: PowerManager
......
......@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.systemui.media.taptotransfer.common
package com.android.systemui.media.taptotransfer.sender
import androidx.test.filters.SmallTest
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.plugins.log.LogBuffer
import com.android.systemui.plugins.log.LogcatEchoTracker
import com.android.systemui.temporarydisplay.TemporaryViewInfo
import com.google.common.truth.Truth.assertThat
import java.io.PrintWriter
import java.io.StringWriter
......@@ -31,16 +30,17 @@ import org.junit.Test
import org.mockito.Mockito.mock
@SmallTest
class MediaTttLoggerTest : SysuiTestCase() {
class MediaTttSenderLoggerTest : SysuiTestCase() {
private lateinit var buffer: LogBuffer
private lateinit var logger: MediaTttLogger<TemporaryViewInfo>
private lateinit var logger: MediaTttSenderLogger
@Before
fun setUp () {
buffer = LogBufferFactory(DumpManager(), mock(LogcatEchoTracker::class.java))
.create("buffer", 10)
logger = MediaTttLogger(DEVICE_TYPE_TAG, buffer)
fun setUp() {
buffer =
LogBufferFactory(DumpManager(), mock(LogcatEchoTracker::class.java))
.create("buffer", 10)
logger = MediaTttSenderLogger(buffer)
}
@Test
......@@ -52,12 +52,19 @@ class MediaTttLoggerTest : SysuiTestCase() {
logger.logStateChange(stateName, id, packageName)
val actualString = getStringFromBuffer()
assertThat(actualString).contains(DEVICE_TYPE_TAG)
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"
......@@ -86,5 +93,3 @@ class MediaTttLoggerTest : SysuiTestCase() {
return stringWriter.toString()
}
}
private const val DEVICE_TYPE_TAG = "TEST TYPE"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment