Merge "[Media] Add logging to ResumeMediaBrowser for connections and disconnections." into tm-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
38b22faf89
@@ -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
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user