From bb07e9bc5c94bc80a6b8d0f2503a32e1c0201030 Mon Sep 17 00:00:00 2001 From: Hyundo Moon Date: Thu, 9 May 2019 16:03:51 +0900 Subject: [PATCH] Remove MediaParceledListSlice Bug: 132233794 Test: atest CtsMediaTestCases:android.media.cts.MediaSessionTest; atest CtsMediaTestCases:android.media.cts.MediaControllerTest; atest CtsMediaTestCases:android.media.cts.MediaBrowserTest; atest CtsMediaTestCases:android.media.cts.MediaSessionManagerTest; atest CtsMediaTestCases:android.media.cts.MediaSession2Test; atest CtsMediaTestCases:android.media.cts.MediaController2Test; atest CtsMediaTestCases:android.media.cts.MediaSession2ServiceTest; Change-Id: I0a5c576b3fc9d2e236256d8f9f4e992914b147be --- config/boot-image-profile.txt | 9 +- .../android/media/MediaParceledListSlice.aidl | 20 -- .../android/media/MediaParceledListSlice.java | 200 ------------------ .../android/media/browse/MediaBrowser.java | 8 +- .../java/android/media/session/ISession.aidl | 4 +- .../media/session/ISessionController.aidl | 4 +- .../session/ISessionControllerCallback.aidl | 4 +- .../media/session/MediaController.java | 8 +- .../android/media/session/MediaSession.java | 4 +- .../media/IMediaBrowserServiceCallbacks.aidl | 6 +- .../service/media/MediaBrowserService.java | 6 +- .../server/media/MediaSessionRecord.java | 10 +- 12 files changed, 28 insertions(+), 255 deletions(-) delete mode 100644 media/java/android/media/MediaParceledListSlice.aidl delete mode 100644 media/java/android/media/MediaParceledListSlice.java diff --git a/config/boot-image-profile.txt b/config/boot-image-profile.txt index 8c2b59df3b57d..09a8546627403 100644 --- a/config/boot-image-profile.txt +++ b/config/boot-image-profile.txt @@ -9193,13 +9193,6 @@ HPLandroid/media/MediaMetadata$Builder;->(Landroid/media/MediaMetadata;)V HSPLandroid/media/MediaMetadata$Builder;->build()Landroid/media/MediaMetadata; HPLandroid/media/MediaMetadata;->size()I HSPLandroid/media/MediaMetadata;->writeToParcel(Landroid/os/Parcel;I)V -HSPLandroid/media/MediaParceledListSlice$2;->()V -HSPLandroid/media/MediaParceledListSlice$2;->createFromParcel(Landroid/os/Parcel;)Landroid/media/MediaParceledListSlice; -HSPLandroid/media/MediaParceledListSlice$2;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object; -HSPLandroid/media/MediaParceledListSlice;->(Landroid/os/Parcel;)V -HPLandroid/media/MediaParceledListSlice;->(Ljava/util/List;)V -HSPLandroid/media/MediaParceledListSlice;->getList()Ljava/util/List; -HSPLandroid/media/MediaParceledListSlice;->writeToParcel(Landroid/os/Parcel;I)V HSPLandroid/media/MediaPlayer$2$1;->getSubtitleLooper()Landroid/os/Looper; HSPLandroid/media/MediaPlayer$2$1;->setSubtitleWidget(Landroid/media/SubtitleTrack$RenderingWidget;)V HSPLandroid/media/MediaPlayer$2;->run()V @@ -9446,7 +9439,7 @@ HPLandroid/media/session/ISessionController$Stub;->onTransact(ILandroid/os/Parce HPLandroid/media/session/ISessionControllerCallback$Stub$Proxy;->asBinder()Landroid/os/IBinder; HPLandroid/media/session/ISessionControllerCallback$Stub$Proxy;->onMetadataChanged(Landroid/media/MediaMetadata;)V HPLandroid/media/session/ISessionControllerCallback$Stub$Proxy;->onPlaybackStateChanged(Landroid/media/session/PlaybackState;)V -HPLandroid/media/session/ISessionControllerCallback$Stub$Proxy;->onQueueChanged(Landroid/media/MediaParceledListSlice;)V +HPLandroid/media/session/ISessionControllerCallback$Stub$Proxy;->onQueueChanged(Landroid/media/ParceledListSlice;)V HPLandroid/media/session/ISessionControllerCallback$Stub$Proxy;->onSessionDestroyed()V HSPLandroid/media/session/ISessionManager$Stub$Proxy;->getSessions(Landroid/content/ComponentName;I)Ljava/util/List; HSPLandroid/media/session/ISessionManager$Stub;->()V diff --git a/media/java/android/media/MediaParceledListSlice.aidl b/media/java/android/media/MediaParceledListSlice.aidl deleted file mode 100644 index 5c0e5bc84720e..0000000000000 --- a/media/java/android/media/MediaParceledListSlice.aidl +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2019 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 android.media; - -/** @hide */ -parcelable MediaParceledListSlice; diff --git a/media/java/android/media/MediaParceledListSlice.java b/media/java/android/media/MediaParceledListSlice.java deleted file mode 100644 index e90d9a4000ba0..0000000000000 --- a/media/java/android/media/MediaParceledListSlice.java +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright 2019 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 android.media; - -import android.os.Binder; -import android.os.IBinder; -import android.os.Parcel; -import android.os.Parcelable; -import android.os.RemoteException; -import android.util.Log; - -import java.util.ArrayList; -import java.util.List; - -/** - * Transfer a large list of objects across an IPC. Splits into multiple transactions if needed. - * Note: Only use classes declared final in order to avoid subclasses overriding reading/writing - * parcel logic. - * - * TODO: Add test for sending large data - * @param A Parcelable class which will be sent over the binder calls. - * @hide - */ -public class MediaParceledListSlice implements Parcelable { - private static final String TAG = "MediaParceledListSlice"; - private static final boolean DEBUG = false; - - private static final int MAX_IPC_SIZE = 64 * 1024; // IBinder.MAX_IPC_SIZE - - final List mList; - - public MediaParceledListSlice(List list) { - if (list == null) { - throw new IllegalArgumentException("list shouldn't be null"); - } - mList = list; - } - - MediaParceledListSlice(Parcel p) { - final int itemCount = p.readInt(); - mList = new ArrayList<>(itemCount); - if (DEBUG) { - Log.d(TAG, "Retrieving " + itemCount + " items"); - } - if (itemCount <= 0) { - return; - } - - int i = 0; - while (i < itemCount) { - if (p.readInt() == 0) { - break; - } - - final T parcelable = p.readParcelable(null); - mList.add(parcelable); - - if (DEBUG) { - Log.d(TAG, "Read inline #" + i + ": " + mList.get(mList.size() - 1)); - } - i++; - } - if (i >= itemCount) { - return; - } - final IBinder retriever = p.readStrongBinder(); - while (i < itemCount) { - if (DEBUG) { - Log.d(TAG, "Reading more @" + i + " of " + itemCount + ": retriever=" + retriever); - } - Parcel data = Parcel.obtain(); - Parcel reply = Parcel.obtain(); - data.writeInt(i); - try { - retriever.transact(IBinder.FIRST_CALL_TRANSACTION, data, reply, 0); - } catch (RemoteException e) { - Log.w(TAG, "Failure retrieving array; only received " + i + " of " + itemCount, e); - return; - } - while (i < itemCount && reply.readInt() != 0) { - final T parcelable = reply.readParcelable(null); - mList.add(parcelable); - - if (DEBUG) { - Log.d(TAG, "Read extra #" + i + ": " + mList.get(mList.size() - 1)); - } - i++; - } - reply.recycle(); - data.recycle(); - } - } - - public List getList() { - return mList; - } - - /** - * Write this to another Parcel. Note that this discards the internal Parcel - * and should not be used anymore. This is so we can pass this to a Binder - * where we won't have a chance to call recycle on this. - */ - @Override - public void writeToParcel(Parcel dest, int flags) { - final int itemCount = mList.size(); - dest.writeInt(itemCount); - if (DEBUG) { - Log.d(TAG, "Writing " + itemCount + " items"); - } - if (itemCount > 0) { - int i = 0; - while (i < itemCount && dest.dataSize() < MAX_IPC_SIZE) { - dest.writeInt(1); - - final T parcelable = mList.get(i); - dest.writeParcelable(parcelable, flags); - - if (DEBUG) { - Log.d(TAG, "Wrote inline #" + i + ": " + mList.get(i)); - } - i++; - } - if (i < itemCount) { - dest.writeInt(0); - Binder retriever = new Binder() { - @Override - protected boolean onTransact(int code, Parcel data, Parcel reply, int flags) - throws RemoteException { - if (code != FIRST_CALL_TRANSACTION) { - return super.onTransact(code, data, reply, flags); - } - int i = data.readInt(); - if (DEBUG) { - Log.d(TAG, "Writing more @" + i + " of " + itemCount); - } - while (i < itemCount && reply.dataSize() < MAX_IPC_SIZE) { - reply.writeInt(1); - - final T parcelable = mList.get(i); - reply.writeParcelable(parcelable, flags); - - if (DEBUG) { - Log.d(TAG, "Wrote extra #" + i + ": " + mList.get(i)); - } - i++; - } - if (i < itemCount) { - if (DEBUG) { - Log.d(TAG, "Breaking @" + i + " of " + itemCount); - } - reply.writeInt(0); - } - return true; - } - }; - if (DEBUG) { - Log.d(TAG, "Breaking @" + i + " of " + itemCount + ": retriever=" + retriever); - } - dest.writeStrongBinder(retriever); - } - } - } - - @Override - public int describeContents() { - int contents = 0; - final List list = getList(); - for (int i = 0; i < list.size(); i++) { - contents |= list.get(i).describeContents(); - } - return contents; - } - - public static final @android.annotation.NonNull Parcelable.Creator CREATOR = - new Parcelable.Creator() { - @Override - public MediaParceledListSlice createFromParcel(Parcel in) { - return new MediaParceledListSlice(in); - } - - @Override - public MediaParceledListSlice[] newArray(int size) { - return new MediaParceledListSlice[size]; - } - }; -} diff --git a/media/java/android/media/browse/MediaBrowser.java b/media/java/android/media/browse/MediaBrowser.java index 65255a1bebf7a..3c2be5f93e307 100644 --- a/media/java/android/media/browse/MediaBrowser.java +++ b/media/java/android/media/browse/MediaBrowser.java @@ -23,8 +23,8 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; +import android.content.pm.ParceledListSlice; import android.media.MediaDescription; -import android.media.MediaParceledListSlice; import android.media.session.MediaController; import android.media.session.MediaSession; import android.os.Binder; @@ -653,7 +653,7 @@ public final class MediaBrowser { } private void onLoadChildren(final IMediaBrowserServiceCallbacks callback, - final String parentId, final MediaParceledListSlice list, final Bundle options) { + final String parentId, final ParceledListSlice list, final Bundle options) { mHandler.post(new Runnable() { @Override public void run() { @@ -1107,12 +1107,12 @@ public final class MediaBrowser { } @Override - public void onLoadChildren(String parentId, MediaParceledListSlice list) { + public void onLoadChildren(String parentId, ParceledListSlice list) { onLoadChildrenWithOptions(parentId, list, null); } @Override - public void onLoadChildrenWithOptions(String parentId, MediaParceledListSlice list, + public void onLoadChildrenWithOptions(String parentId, ParceledListSlice list, final Bundle options) { MediaBrowser mediaBrowser = mMediaBrowser.get(); if (mediaBrowser != null) { diff --git a/media/java/android/media/session/ISession.aidl b/media/java/android/media/session/ISession.aidl index fcde95aa38a21..4d68a6ae52e41 100644 --- a/media/java/android/media/session/ISession.aidl +++ b/media/java/android/media/session/ISession.aidl @@ -16,9 +16,9 @@ package android.media.session; import android.app.PendingIntent; +import android.content.pm.ParceledListSlice; import android.media.AudioAttributes; import android.media.MediaMetadata; -import android.media.MediaParceledListSlice; import android.media.session.ISessionController; import android.media.session.PlaybackState; import android.media.session.MediaSession; @@ -41,7 +41,7 @@ interface ISession { // These commands are for the TransportPerformer void setMetadata(in MediaMetadata metadata, long duration, String metadataDescription); void setPlaybackState(in PlaybackState state); - void setQueue(in MediaParceledListSlice queue); + void setQueue(in ParceledListSlice queue); void setQueueTitle(CharSequence title); void setExtras(in Bundle extras); void setRatingType(int type); diff --git a/media/java/android/media/session/ISessionController.aidl b/media/java/android/media/session/ISessionController.aidl index 9b1223cc48bac..e1039fd269408 100644 --- a/media/java/android/media/session/ISessionController.aidl +++ b/media/java/android/media/session/ISessionController.aidl @@ -17,8 +17,8 @@ package android.media.session; import android.app.PendingIntent; import android.content.Intent; +import android.content.pm.ParceledListSlice; import android.media.MediaMetadata; -import android.media.MediaParceledListSlice; import android.media.Rating; import android.media.session.ISessionControllerCallback; import android.media.session.MediaController; @@ -82,7 +82,7 @@ interface ISessionController { String action, in Bundle args); MediaMetadata getMetadata(); PlaybackState getPlaybackState(); - MediaParceledListSlice getQueue(); + ParceledListSlice getQueue(); CharSequence getQueueTitle(); Bundle getExtras(); int getRatingType(); diff --git a/media/java/android/media/session/ISessionControllerCallback.aidl b/media/java/android/media/session/ISessionControllerCallback.aidl index f284133708fef..9da3e3bb114b6 100644 --- a/media/java/android/media/session/ISessionControllerCallback.aidl +++ b/media/java/android/media/session/ISessionControllerCallback.aidl @@ -15,8 +15,8 @@ package android.media.session; +import android.content.pm.ParceledListSlice; import android.media.MediaMetadata; -import android.media.MediaParceledListSlice; import android.media.session.MediaController; import android.media.session.PlaybackState; import android.os.Bundle; @@ -31,7 +31,7 @@ oneway interface ISessionControllerCallback { // These callbacks are for the TransportController void onPlaybackStateChanged(in PlaybackState state); void onMetadataChanged(in MediaMetadata metadata); - void onQueueChanged(in MediaParceledListSlice queue); + void onQueueChanged(in ParceledListSlice queue); void onQueueTitleChanged(CharSequence title); void onExtrasChanged(in Bundle extras); void onVolumeInfoChanged(in MediaController.PlaybackInfo info); diff --git a/media/java/android/media/session/MediaController.java b/media/java/android/media/session/MediaController.java index 55692437d8d52..c1c7fcac0a8dc 100644 --- a/media/java/android/media/session/MediaController.java +++ b/media/java/android/media/session/MediaController.java @@ -21,10 +21,10 @@ import android.annotation.Nullable; import android.annotation.UnsupportedAppUsage; import android.app.PendingIntent; import android.content.Context; +import android.content.pm.ParceledListSlice; import android.media.AudioAttributes; import android.media.AudioManager; import android.media.MediaMetadata; -import android.media.MediaParceledListSlice; import android.media.Rating; import android.media.VolumeProvider; import android.media.session.MediaSession.QueueItem; @@ -174,7 +174,7 @@ public final class MediaController { */ public @Nullable List getQueue() { try { - MediaParceledListSlice list = mSessionBinder.getQueue(); + ParceledListSlice list = mSessionBinder.getQueue(); return list == null ? null : list.getList(); } catch (RemoteException e) { Log.wtf(TAG, "Error calling getQueue.", e); @@ -1116,7 +1116,7 @@ public final class MediaController { } @Override - public void onQueueChanged(MediaParceledListSlice queue) { + public void onQueueChanged(ParceledListSlice queue) { MediaController controller = mController.get(); if (controller != null) { controller.postMessage(MSG_UPDATE_QUEUE, queue, null); @@ -1174,7 +1174,7 @@ public final class MediaController { break; case MSG_UPDATE_QUEUE: mCallback.onQueueChanged(msg.obj == null ? null : - (List) ((MediaParceledListSlice) msg.obj).getList()); + (List) ((ParceledListSlice) msg.obj).getList()); break; case MSG_UPDATE_QUEUE_TITLE: mCallback.onQueueTitleChanged((CharSequence) msg.obj); diff --git a/media/java/android/media/session/MediaSession.java b/media/java/android/media/session/MediaSession.java index cee869ba4808e..c4085f8761367 100644 --- a/media/java/android/media/session/MediaSession.java +++ b/media/java/android/media/session/MediaSession.java @@ -24,10 +24,10 @@ import android.app.Activity; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; +import android.content.pm.ParceledListSlice; import android.media.AudioAttributes; import android.media.MediaDescription; import android.media.MediaMetadata; -import android.media.MediaParceledListSlice; import android.media.Rating; import android.media.VolumeProvider; import android.media.session.MediaSessionManager.RemoteUserInfo; @@ -473,7 +473,7 @@ public final class MediaSession { */ public void setQueue(@Nullable List queue) { try { - mBinder.setQueue(queue == null ? null : new MediaParceledListSlice(queue)); + mBinder.setQueue(queue == null ? null : new ParceledListSlice(queue)); } catch (RemoteException e) { Log.wtf("Dead object in setQueue.", e); } diff --git a/media/java/android/service/media/IMediaBrowserServiceCallbacks.aidl b/media/java/android/service/media/IMediaBrowserServiceCallbacks.aidl index 507a8f72ea578..8238b8c4898d1 100644 --- a/media/java/android/service/media/IMediaBrowserServiceCallbacks.aidl +++ b/media/java/android/service/media/IMediaBrowserServiceCallbacks.aidl @@ -2,7 +2,7 @@ package android.service.media; -import android.media.MediaParceledListSlice; +import android.content.pm.ParceledListSlice; import android.media.session.MediaSession; import android.os.Bundle; @@ -21,7 +21,7 @@ oneway interface IMediaBrowserServiceCallbacks { */ void onConnect(String root, in MediaSession.Token session, in Bundle extras); void onConnectFailed(); - void onLoadChildren(String mediaId, in MediaParceledListSlice list); - void onLoadChildrenWithOptions(String mediaId, in MediaParceledListSlice list, + void onLoadChildren(String mediaId, in ParceledListSlice list); + void onLoadChildrenWithOptions(String mediaId, in ParceledListSlice list, in Bundle options); } diff --git a/media/java/android/service/media/MediaBrowserService.java b/media/java/android/service/media/MediaBrowserService.java index d9ef6ae40dfb4..86a1076af1229 100644 --- a/media/java/android/service/media/MediaBrowserService.java +++ b/media/java/android/service/media/MediaBrowserService.java @@ -25,7 +25,7 @@ import android.annotation.UnsupportedAppUsage; import android.app.Service; import android.content.Intent; import android.content.pm.PackageManager; -import android.media.MediaParceledListSlice; +import android.content.pm.ParceledListSlice; import android.media.browse.MediaBrowser; import android.media.browse.MediaBrowserUtils; import android.media.session.MediaSession; @@ -684,8 +684,8 @@ public abstract class MediaBrowserService extends Service { List filteredList = (flag & RESULT_FLAG_OPTION_NOT_HANDLED) != 0 ? applyOptions(list, options) : list; - final MediaParceledListSlice pls = - filteredList == null ? null : new MediaParceledListSlice<>(filteredList); + final ParceledListSlice pls = + filteredList == null ? null : new ParceledListSlice<>(filteredList); try { connection.callbacks.onLoadChildrenWithOptions(parentId, pls, options); } catch (RemoteException ex) { diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java index 896ea4f462fcf..e2087e6ca8225 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -19,12 +19,12 @@ package com.android.server.media; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; +import android.content.pm.ParceledListSlice; import android.media.AudioAttributes; import android.media.AudioManager; import android.media.AudioManagerInternal; import android.media.AudioSystem; import android.media.MediaMetadata; -import android.media.MediaParceledListSlice; import android.media.Rating; import android.media.VolumeProvider; import android.media.session.ISession; @@ -612,7 +612,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { ISessionControllerCallbackHolder holder = mControllerCallbackHolders.get(i); try { holder.mCallback.onQueueChanged(mQueue == null ? null : - new MediaParceledListSlice<>(mQueue)); + new ParceledListSlice<>(mQueue)); } catch (DeadObjectException e) { mControllerCallbackHolders.remove(i); logCallbackException("Removing dead callback in pushQueueUpdate", holder, e); @@ -904,7 +904,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } @Override - public void setQueue(MediaParceledListSlice queue) throws RemoteException { + public void setQueue(ParceledListSlice queue) throws RemoteException { synchronized (mLock) { mQueue = queue == null ? null : (List) queue.getList(); } @@ -1469,9 +1469,9 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } @Override - public MediaParceledListSlice getQueue() { + public ParceledListSlice getQueue() { synchronized (mLock) { - return mQueue == null ? null : new MediaParceledListSlice<>(mQueue); + return mQueue == null ? null : new ParceledListSlice<>(mQueue); } }