Merge "[Media] Add logging to ResumeMediaBrowser for connections and disconnections." into tm-dev

This commit is contained in:
TreeHugger Robot
2022-04-29 17:47:31 +00:00
committed by Android (Google) Code Review
6 changed files with 131 additions and 10 deletions

View File

@@ -218,6 +218,18 @@ public class LogModule {
return factory.create("MediaTimeout", 100); return factory.create("MediaTimeout", 100);
} }
/**
* Provides a buffer for our connections and disconnections to MediaBrowserService.
*
* See {@link com.android.systemui.media.ResumeMediaBrowser}.
*/
@Provides
@SysUISingleton
@MediaBrowserLog
public static LogBuffer provideMediaBrowserBuffer(LogBufferFactory factory) {
return factory.create("MediaBrowser", 100);
}
/** Allows logging buffers to be tweaked via adb on debug builds but not on prod builds. */ /** Allows logging buffers to be tweaked via adb on debug builds but not on prod builds. */
@Provides @Provides
@SysUISingleton @SysUISingleton

View File

@@ -0,0 +1,35 @@
/*
* 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.log.dagger;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import com.android.systemui.log.LogBuffer;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import javax.inject.Qualifier;
/**
* A {@link LogBuffer} for {@link com.android.systemui.media.ResumeMediaBrowser}
*/
@Qualifier
@Documented
@Retention(RUNTIME)
public @interface MediaBrowserLog {
}

View File

@@ -49,9 +49,11 @@ public class ResumeMediaBrowser {
private static final String TAG = "ResumeMediaBrowser"; private static final String TAG = "ResumeMediaBrowser";
private final Context mContext; private final Context mContext;
@Nullable private final Callback mCallback; @Nullable private final Callback mCallback;
private MediaBrowserFactory mBrowserFactory; private final MediaBrowserFactory mBrowserFactory;
private final ResumeMediaBrowserLogger mLogger;
private final ComponentName mComponentName;
private MediaBrowser mMediaBrowser; private MediaBrowser mMediaBrowser;
private ComponentName mComponentName;
/** /**
* Initialize a new media browser * Initialize a new media browser
@@ -59,12 +61,17 @@ public class ResumeMediaBrowser {
* @param callback used to report media items found * @param callback used to report media items found
* @param componentName Component name of the MediaBrowserService this browser will connect to * @param componentName Component name of the MediaBrowserService this browser will connect to
*/ */
public ResumeMediaBrowser(Context context, @Nullable Callback callback, public ResumeMediaBrowser(
ComponentName componentName, MediaBrowserFactory browserFactory) { Context context,
@Nullable Callback callback,
ComponentName componentName,
MediaBrowserFactory browserFactory,
ResumeMediaBrowserLogger logger) {
mContext = context; mContext = context;
mCallback = callback; mCallback = callback;
mComponentName = componentName; mComponentName = componentName;
mBrowserFactory = browserFactory; mBrowserFactory = browserFactory;
mLogger = logger;
} }
/** /**
@@ -76,7 +83,6 @@ public class ResumeMediaBrowser {
* ResumeMediaBrowser#disconnect will be called automatically with this function. * ResumeMediaBrowser#disconnect will be called automatically with this function.
*/ */
public void findRecentMedia() { public void findRecentMedia() {
Log.d(TAG, "Connecting to " + mComponentName);
disconnect(); disconnect();
Bundle rootHints = new Bundle(); Bundle rootHints = new Bundle();
rootHints.putBoolean(MediaBrowserService.BrowserRoot.EXTRA_RECENT, true); rootHints.putBoolean(MediaBrowserService.BrowserRoot.EXTRA_RECENT, true);
@@ -84,6 +90,7 @@ public class ResumeMediaBrowser {
mComponentName, mComponentName,
mConnectionCallback, mConnectionCallback,
rootHints); rootHints);
mLogger.logConnection(mComponentName, "findRecentMedia");
mMediaBrowser.connect(); mMediaBrowser.connect();
} }
@@ -196,6 +203,7 @@ public class ResumeMediaBrowser {
*/ */
protected void disconnect() { protected void disconnect() {
if (mMediaBrowser != null) { if (mMediaBrowser != null) {
mLogger.logDisconnect(mComponentName);
mMediaBrowser.disconnect(); mMediaBrowser.disconnect();
} }
mMediaBrowser = null; mMediaBrowser = null;
@@ -251,6 +259,7 @@ public class ResumeMediaBrowser {
disconnect(); disconnect();
} }
}, rootHints); }, rootHints);
mLogger.logConnection(mComponentName, "restart");
mMediaBrowser.connect(); mMediaBrowser.connect();
} }
@@ -296,6 +305,7 @@ public class ResumeMediaBrowser {
mComponentName, mComponentName,
mConnectionCallback, mConnectionCallback,
rootHints); rootHints);
mLogger.logConnection(mComponentName, "testConnection");
mMediaBrowser.connect(); mMediaBrowser.connect();
} }

View File

@@ -27,11 +27,14 @@ import javax.inject.Inject;
public class ResumeMediaBrowserFactory { public class ResumeMediaBrowserFactory {
private final Context mContext; private final Context mContext;
private final MediaBrowserFactory mBrowserFactory; private final MediaBrowserFactory mBrowserFactory;
private final ResumeMediaBrowserLogger mLogger;
@Inject @Inject
public ResumeMediaBrowserFactory(Context context, MediaBrowserFactory browserFactory) { public ResumeMediaBrowserFactory(
Context context, MediaBrowserFactory browserFactory, ResumeMediaBrowserLogger logger) {
mContext = context; mContext = context;
mBrowserFactory = browserFactory; mBrowserFactory = browserFactory;
mLogger = logger;
} }
/** /**
@@ -43,6 +46,6 @@ public class ResumeMediaBrowserFactory {
*/ */
public ResumeMediaBrowser create(ResumeMediaBrowser.Callback callback, public ResumeMediaBrowser create(ResumeMediaBrowser.Callback callback,
ComponentName componentName) { ComponentName componentName) {
return new ResumeMediaBrowser(mContext, callback, componentName, mBrowserFactory); return new ResumeMediaBrowser(mContext, callback, componentName, mBrowserFactory, mLogger);
} }
} }

View File

@@ -0,0 +1,53 @@
/*
* 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
import android.content.ComponentName
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.log.LogBuffer
import com.android.systemui.log.LogLevel
import com.android.systemui.log.dagger.MediaBrowserLog
import javax.inject.Inject
/** A logger for events in [ResumeMediaBrowser]. */
@SysUISingleton
class ResumeMediaBrowserLogger @Inject constructor(
@MediaBrowserLog private val buffer: LogBuffer
) {
/** Logs that we've initiated a connection to a [android.media.browse.MediaBrowser]. */
fun logConnection(componentName: ComponentName, reason: String) = buffer.log(
TAG,
LogLevel.DEBUG,
{
str1 = componentName.toShortString()
str2 = reason
},
{ "Connecting browser for component $str1 due to $str2" }
)
/** Logs that we've disconnected from a [android.media.browse.MediaBrowser]. */
fun logDisconnect(componentName: ComponentName) = buffer.log(
TAG,
LogLevel.DEBUG,
{
str1 = componentName.toShortString()
},
{ "Disconnecting browser for component $str1" }
)
}
private const val TAG = "MediaBrowser"

View File

@@ -63,6 +63,7 @@ public class ResumeMediaBrowserTest : SysuiTestCase() {
@Mock lateinit var callback: ResumeMediaBrowser.Callback @Mock lateinit var callback: ResumeMediaBrowser.Callback
@Mock lateinit var listener: MediaResumeListener @Mock lateinit var listener: MediaResumeListener
@Mock lateinit var service: MediaBrowserService @Mock lateinit var service: MediaBrowserService
@Mock lateinit var logger: ResumeMediaBrowserLogger
@Mock lateinit var browserFactory: MediaBrowserFactory @Mock lateinit var browserFactory: MediaBrowserFactory
@Mock lateinit var browser: MediaBrowser @Mock lateinit var browser: MediaBrowser
@Mock lateinit var token: MediaSession.Token @Mock lateinit var token: MediaSession.Token
@@ -81,8 +82,14 @@ public class ResumeMediaBrowserTest : SysuiTestCase() {
whenever(mediaController.transportControls).thenReturn(transportControls) whenever(mediaController.transportControls).thenReturn(transportControls)
resumeBrowser = TestableResumeMediaBrowser(context, callback, component, browserFactory, resumeBrowser = TestableResumeMediaBrowser(
mediaController) context,
callback,
component,
browserFactory,
logger,
mediaController
)
} }
@Test @Test
@@ -282,8 +289,9 @@ public class ResumeMediaBrowserTest : SysuiTestCase() {
callback: Callback, callback: Callback,
componentName: ComponentName, componentName: ComponentName,
browserFactory: MediaBrowserFactory, browserFactory: MediaBrowserFactory,
logger: ResumeMediaBrowserLogger,
private val fakeController: MediaController private val fakeController: MediaController
) : ResumeMediaBrowser(context, callback, componentName, browserFactory) { ) : ResumeMediaBrowser(context, callback, componentName, browserFactory, logger) {
override fun createMediaController(token: MediaSession.Token): MediaController { override fun createMediaController(token: MediaSession.Token): MediaController {
return fakeController return fakeController