Add [is|set]IndependentPlaybackConfig TestApi
Tests need to have access to the playback config.
Bug: 150725872
Test: rvc-dev/out/host/linux-x86/ats/android-ats/tools$ ./ats-tradefed
ats-tf> run ats -m AtsCarTests
-t com.google.android.car.ats.CarMediaManagerTest
Change-Id: Id62f52c13830c70dc017f7a969e6b34a24bff857
diff --git a/car-lib/src/android/car/media/CarMediaManager.java b/car-lib/src/android/car/media/CarMediaManager.java
index 180c6cd..0a8392f 100644
--- a/car-lib/src/android/car/media/CarMediaManager.java
+++ b/car-lib/src/android/car/media/CarMediaManager.java
@@ -19,6 +19,7 @@
import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
+import android.annotation.TestApi;
import android.car.Car;
import android.car.CarManagerBase;
import android.content.ComponentName;
@@ -214,4 +215,35 @@
mCallbackMap.clear();
}
}
+
+ /**
+ * Returns whether the browse and playback sources can be changed independently.
+ * @return true if the browse and playback sources can be changed independently, false if it
+ * isn't or if the value could not be determined.
+ * @hide
+ */
+ @TestApi
+ @RequiresPermission(value = android.Manifest.permission.MEDIA_CONTENT_CONTROL)
+ public boolean isIndependentPlaybackConfig() {
+ try {
+ return mService.isIndependentPlaybackConfig();
+ } catch (RemoteException e) {
+ return handleRemoteExceptionFromCarService(e, null);
+ }
+ }
+
+ /**
+ * Sets whether the browse and playback sources can be changed independently.
+ * @param independent whether the browse and playback sources can be changed independently.
+ * @hide
+ */
+ @TestApi
+ @RequiresPermission(value = android.Manifest.permission.MEDIA_CONTENT_CONTROL)
+ public void setIndependentPlaybackConfig(boolean independent) {
+ try {
+ mService.setIndependentPlaybackConfig(independent);
+ } catch (RemoteException e) {
+ handleRemoteExceptionFromCarService(e);
+ }
+ }
}
diff --git a/car-lib/src/android/car/media/ICarMedia.aidl b/car-lib/src/android/car/media/ICarMedia.aidl
index 5600b7d..ab73536 100644
--- a/car-lib/src/android/car/media/ICarMedia.aidl
+++ b/car-lib/src/android/car/media/ICarMedia.aidl
@@ -36,4 +36,8 @@
void unregisterMediaSourceListener(in ICarMediaSourceListener callback, int mode);
/** Retrieve a list of media sources, ordered by most recently used */
List<ComponentName> getLastMediaSources(int mode);
+ /** Returns whether the browse and playback sources can be changed independently. */
+ boolean isIndependentPlaybackConfig();
+ /** Sets whether the browse and playback sources can be changed independently. */
+ void setIndependentPlaybackConfig(boolean independent);
}
diff --git a/service/src/com/android/car/CarMediaService.java b/service/src/com/android/car/CarMediaService.java
index 254a611..9447096 100644
--- a/service/src/com/android/car/CarMediaService.java
+++ b/service/src/com/android/car/CarMediaService.java
@@ -18,10 +18,12 @@
import static android.car.media.CarMediaManager.MEDIA_SOURCE_MODE_BROWSE;
import static android.car.media.CarMediaManager.MEDIA_SOURCE_MODE_PLAYBACK;
+import android.annotation.TestApi;
import android.app.ActivityManager;
import android.car.Car;
import android.car.media.CarMediaManager;
import android.car.media.CarMediaManager.MediaSourceChangedListener;
+import android.car.media.CarMediaManager.MediaSourceMode;
import android.car.media.ICarMedia;
import android.car.media.ICarMediaSourceListener;
import android.content.BroadcastReceiver;
@@ -335,7 +337,7 @@
*/
@Override
public void setMediaSource(@NonNull ComponentName componentName,
- @CarMediaManager.MediaSourceMode int mode) {
+ @MediaSourceMode int mode) {
ICarImpl.assertPermission(mContext, android.Manifest.permission.MEDIA_CONTENT_CONTROL);
if (Log.isLoggable(CarLog.TAG_MEDIA, Log.DEBUG)) {
Log.d(CarLog.TAG_MEDIA, "Changing media source to: " + componentName.getPackageName());
@@ -359,7 +361,7 @@
*/
@Override
public void registerMediaSourceListener(ICarMediaSourceListener callback,
- @CarMediaManager.MediaSourceMode int mode) {
+ @MediaSourceMode int mode) {
ICarImpl.assertPermission(mContext, android.Manifest.permission.MEDIA_CONTENT_CONTROL);
synchronized (mLock) {
mMediaSourceListeners[mode].register(callback);
@@ -371,7 +373,7 @@
*/
@Override
public void unregisterMediaSourceListener(ICarMediaSourceListener callback,
- @CarMediaManager.MediaSourceMode int mode) {
+ @MediaSourceMode int mode) {
ICarImpl.assertPermission(mContext, android.Manifest.permission.MEDIA_CONTENT_CONTROL);
synchronized (mLock) {
mMediaSourceListeners[mode].unregister(callback);
@@ -386,6 +388,26 @@
.map(name -> ComponentName.unflattenFromString(name)).collect(Collectors.toList());
}
+ /** See {@link CarMediaManager#isIndependentPlaybackConfig}. */
+ @Override
+ @TestApi
+ public boolean isIndependentPlaybackConfig() {
+ ICarImpl.assertPermission(mContext, android.Manifest.permission.MEDIA_CONTENT_CONTROL);
+ synchronized (mLock) {
+ return mIndependentPlaybackConfig;
+ }
+ }
+
+ /** See {@link CarMediaManager#setIndependentPlaybackConfig}. */
+ @Override
+ @TestApi
+ public void setIndependentPlaybackConfig(boolean independent) {
+ ICarImpl.assertPermission(mContext, android.Manifest.permission.MEDIA_CONTENT_CONTROL);
+ synchronized (mLock) {
+ mIndependentPlaybackConfig = independent;
+ }
+ }
+
/**
* Sets user lock / unlocking status on main thread. This is coming from system server through
* ICar binder call.