diff options
13 files changed, 100 insertions, 158 deletions
diff --git a/CleanSpec.mk b/CleanSpec.mk index abec4c8429a8..fff8a858069c 100644 --- a/CleanSpec.mk +++ b/CleanSpec.mk @@ -213,6 +213,7 @@ $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framew $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework_intermediates) $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/framework.* $(PRODUCT_OUT)/system/framework2.*) $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates) +$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/docs/api-stubs-timestamp) # ****************************************************************** # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST ABOVE THIS BANNER diff --git a/api/current.txt b/api/current.txt index f5a4973f578a..680ff697949e 100644 --- a/api/current.txt +++ b/api/current.txt @@ -16580,6 +16580,7 @@ package android.media.session { method public long getFlags(); method public android.app.PendingIntent getLaunchActivity(); method public android.media.MediaMetadata getMetadata(); + method public java.lang.String getPackageName(); method public android.media.session.PlaybackState getPlaybackState(); method public java.util.List<android.media.session.MediaSession.Track> getQueue(); method public int getRatingType(); diff --git a/cmds/media/src/com/android/commands/media/Media.java b/cmds/media/src/com/android/commands/media/Media.java index c771f6506f57..cb9b49339337 100644 --- a/cmds/media/src/com/android/commands/media/Media.java +++ b/cmds/media/src/com/android/commands/media/Media.java @@ -23,12 +23,10 @@ import android.media.MediaMetadata; import android.media.session.ISessionController; import android.media.session.ISessionManager; import android.media.session.MediaController; -import android.media.session.MediaSessionInfo; import android.media.session.PlaybackState; import android.os.Bundle; import android.os.HandlerThread; import android.os.IBinder; -import android.os.Looper; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; @@ -62,14 +60,14 @@ public class Media extends BaseCommand { "usage: media [subcommand] [options]\n" + " media dispatch KEY\n" + " media list-sessions\n" + - " media monitor <sessionId>\n" + + " media monitor <tag>\n" + "\n" + "media dispatch: dispatch a media key to the system.\n" + " KEY may be: play, pause, play-pause, mute, headsethook,\n" + " stop, next, previous, rewind, record, fast-forword.\n" + "media list-sessions: print a list of the current sessions.\n" + "media monitor: monitor updates to the specified session.\n" + - " Use the sessionId from list-sessions.\n" + " Use the tag from list-sessions.\n" ); } @@ -116,7 +114,7 @@ public class Media extends BaseCommand { for (IBinder session : sessions) { MediaController controller = new MediaController(ISessionController.Stub .asInterface(session)); - if (controller != null && controller.getSessionInfo().getId().equals(id)) { + if (controller != null && id.equals(controller.getTag())) { ControllerMonitor monitor = new ControllerMonitor(controller); monitor.run(); success = true; @@ -192,7 +190,7 @@ public class Media extends BaseCommand { } void printUsageMessage() { - System.out.println("V2Monitoring session " + mController.getSessionInfo().getId() + System.out.println("V2Monitoring session " + mController.getTag() + "... available commands:"); System.out.println("(q)uit: finish monitoring"); } @@ -251,9 +249,9 @@ public class Media extends BaseCommand { MediaController controller = new MediaController(ISessionController.Stub .asInterface(session)); if (controller != null) { - MediaSessionInfo info = controller.getSessionInfo(); - System.out.println(" id=" + info.getId() + ", package=" - + info.getPackageName()); + String pkg = controller.getPackageName(); + System.out.println(" tag=" + controller.getTag() + + ", package=" + pkg); } } } catch (Exception e) { diff --git a/media/java/android/media/RemoteController.java b/media/java/android/media/RemoteController.java index 75a89528374d..f9d3115d0467 100644 --- a/media/java/android/media/RemoteController.java +++ b/media/java/android/media/RemoteController.java @@ -214,7 +214,7 @@ import java.util.List; public String getRemoteControlClientPackageName() { if (USE_SESSIONS) { synchronized (mInfoLock) { - return mCurrentSession != null ? mCurrentSession.getSessionInfo().getPackageName() + return mCurrentSession != null ? mCurrentSession.getPackageName() : null; } } else { @@ -980,8 +980,8 @@ import java.util.List; 0 /* genId */, 1 /* clearing */, null /* obj */, 0 /* delay */); } } else if (mCurrentSession == null - || !controller.getSessionInfo().getId() - .equals(mCurrentSession.getSessionInfo().getId())) { + || !controller.getSessionToken() + .equals(mCurrentSession.getSessionToken())) { if (mCurrentSession != null) { mCurrentSession.removeCallback(mSessionCb); } diff --git a/media/java/android/media/session/ISessionController.aidl b/media/java/android/media/session/ISessionController.aidl index 198309594b39..3518458fe706 100644 --- a/media/java/android/media/session/ISessionController.aidl +++ b/media/java/android/media/session/ISessionController.aidl @@ -23,7 +23,6 @@ import android.media.Rating; import android.media.routing.IMediaRouterDelegate; import android.media.routing.IMediaRouterStateCallback; import android.media.session.ISessionControllerCallback; -import android.media.session.MediaSessionInfo; import android.media.session.ParcelableVolumeInfo; import android.media.session.PlaybackState; import android.media.session.MediaSession; @@ -44,7 +43,8 @@ interface ISessionController { void registerCallbackListener(in ISessionControllerCallback cb); void unregisterCallbackListener(in ISessionControllerCallback cb); boolean isTransportControlEnabled(); - MediaSessionInfo getSessionInfo(); + String getPackageName(); + String getTag(); PendingIntent getLaunchPendingIntent(); long getFlags(); ParcelableVolumeInfo getVolumeAttributes(); diff --git a/media/java/android/media/session/MediaController.java b/media/java/android/media/session/MediaController.java index 776bbaa75fbc..cb9fe55ac77d 100644 --- a/media/java/android/media/session/MediaController.java +++ b/media/java/android/media/session/MediaController.java @@ -71,7 +71,8 @@ public final class MediaController { private final Object mLock = new Object(); private boolean mCbRegistered = false; - private MediaSessionInfo mInfo; + private String mPackageName; + private String mTag; private final TransportControls mTransportControls; @@ -371,20 +372,36 @@ public final class MediaController { } /** - * Get the info for the session this controller is connected to. + * Get the session owner's package name. * - * @return The session info for the connected session. + * @return The package name of of the session owner. + */ + public String getPackageName() { + if (mPackageName == null) { + try { + mPackageName = mSessionBinder.getPackageName(); + } catch (RemoteException e) { + Log.d(TAG, "Dead object in getPackageName.", e); + } + } + return mPackageName; + } + + /** + * Get the session's tag for debugging purposes. + * + * @return The session's tag. * @hide */ - public MediaSessionInfo getSessionInfo() { - if (mInfo == null) { + public String getTag() { + if (mTag == null) { try { - mInfo = mSessionBinder.getSessionInfo(); + mTag = mSessionBinder.getTag(); } catch (RemoteException e) { - Log.e(TAG, "Error in getSessionInfo.", e); + Log.d(TAG, "Dead object in getTag.", e); } } - return mInfo; + return mTag; } /* diff --git a/media/java/android/media/session/MediaSession.java b/media/java/android/media/session/MediaSession.java index a8786335fa67..ddf30329f2f6 100644 --- a/media/java/android/media/session/MediaSession.java +++ b/media/java/android/media/session/MediaSession.java @@ -715,6 +715,7 @@ public final class MediaSession { * the session. */ public static final class Token implements Parcelable { + private ISessionController mBinder; /** @@ -734,6 +735,31 @@ public final class MediaSession { dest.writeStrongBinder(mBinder.asBinder()); } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((mBinder == null) ? 0 : mBinder.asBinder().hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Token other = (Token) obj; + if (mBinder == null) { + if (other.mBinder != null) + return false; + } else if (!mBinder.asBinder().equals(other.mBinder.asBinder())) + return false; + return true; + } + ISessionController getBinder() { return mBinder; } diff --git a/media/java/android/media/session/MediaSessionInfo.aidl b/media/java/android/media/session/MediaSessionInfo.aidl deleted file mode 100644 index 63dca9a102b0..000000000000 --- a/media/java/android/media/session/MediaSessionInfo.aidl +++ /dev/null @@ -1,18 +0,0 @@ -/* Copyright 2014, 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.session; - -parcelable MediaSessionInfo; diff --git a/media/java/android/media/session/MediaSessionInfo.java b/media/java/android/media/session/MediaSessionInfo.java deleted file mode 100644 index 4dc1c09b6aee..000000000000 --- a/media/java/android/media/session/MediaSessionInfo.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (C) 2014 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.session; - -import android.os.Parcel; -import android.os.Parcelable; - -/** - * Information about a media session, including the owner's package name. - * - * @hide - */ -public final class MediaSessionInfo implements Parcelable { - private final String mId; - private final String mPackageName; - private final int mPid; - - /** - * @hide - */ - public MediaSessionInfo(String id, String packageName, int pid) { - mId = id; - mPackageName = packageName; - mPid = pid; - } - - private MediaSessionInfo(Parcel in) { - mId = in.readString(); - mPackageName = in.readString(); - mPid = in.readInt(); - } - - /** - * Get the package name of the owner of this session. - * - * @return The owner's package name - */ - public String getPackageName() { - return mPackageName; - } - - /** - * Get the unique id for this session. - * - * @return The id for the session. - */ - public String getId() { - return mId; - } - - public int getPid() { - return mPid; - } - - @Override - public String toString() { - return "SessionInfo {id=" + mId + ", pkg=" + mPackageName + ", pid=" + mPid + "}"; - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeString(mId); - dest.writeString(mPackageName); - dest.writeInt(mPid); - } - - public static final Parcelable.Creator<MediaSessionInfo> CREATOR - = new Parcelable.Creator<MediaSessionInfo>() { - @Override - public MediaSessionInfo createFromParcel(Parcel in) { - return new MediaSessionInfo(in); - } - - @Override - public MediaSessionInfo[] newArray(int size) { - return new MediaSessionInfo[size]; - } - }; -} diff --git a/media/java/android/media/session/MediaSessionLegacyHelper.java b/media/java/android/media/session/MediaSessionLegacyHelper.java index 8ea2039625bc..f075ded90f45 100644 --- a/media/java/android/media/session/MediaSessionLegacyHelper.java +++ b/media/java/android/media/session/MediaSessionLegacyHelper.java @@ -369,7 +369,7 @@ public class MediaSessionLegacyHelper { SessionHolder holder = mSessions.get(pi); if (holder == null && createIfMissing) { MediaSession session; - session = new MediaSession(mContext, TAG); + session = new MediaSession(mContext, TAG + "-" + pi.getCreatorPackage()); session.setActive(true); holder = new SessionHolder(session, pi); mSessions.put(pi, holder); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 13fad7b34d3d..af6314d18121 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -1659,7 +1659,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, continue; default: // now to see if we have one like this - final String pkg = aController.getSessionInfo().getPackageName(); + final String pkg = aController.getPackageName(); for (int i = 0; i < N; i++) { final Entry entry = mNotificationData.get(i); diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java index d0bcfd408ff9..2f1bd60fe36b 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -34,14 +34,9 @@ import android.media.session.ISessionController; import android.media.session.ISessionControllerCallback; import android.media.session.MediaController; import android.media.session.MediaSession; -import android.media.session.MediaSessionInfo; import android.media.session.ParcelableVolumeInfo; import android.media.session.PlaybackState; import android.media.AudioAttributes; -import android.media.AudioManager; -import android.media.MediaMetadata; -import android.media.Rating; -import android.media.VolumeProvider; import android.net.Uri; import android.os.Binder; import android.os.Bundle; @@ -86,7 +81,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { private final int mOwnerPid; private final int mOwnerUid; private final int mUserId; - private final MediaSessionInfo mSessionInfo; + private final String mPackageName; private final String mTag; private final ControllerStub mController; private final SessionStub mSession; @@ -131,8 +126,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { mOwnerPid = ownerPid; mOwnerUid = ownerUid; mUserId = userId; - mSessionInfo = new MediaSessionInfo(UUID.randomUUID().toString(), ownerPackageName, - ownerPid); + mPackageName = ownerPackageName; mTag = tag; mController = new ControllerStub(); mSession = new SessionStub(); @@ -166,8 +160,17 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { * * @return Info that identifies this session. */ - public MediaSessionInfo getSessionInfo() { - return mSessionInfo; + public String getPackageName() { + return mPackageName; + } + + /** + * Get the tag for the session. + * + * @return The session's tag. + */ + public String getTag() { + return mTag; } /** @@ -409,9 +412,10 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { pw.println(prefix + mTag + " " + this); final String indent = prefix + " "; + // We print the hashcode for matching with the list in user records pw.println(indent + "ownerPid=" + mOwnerPid + ", ownerUid=" + mOwnerUid + ", userId=" + mUserId); - pw.println(indent + "info=" + mSessionInfo.toString()); + pw.println(indent + "package=" + mPackageName); pw.println(indent + "active=" + mIsActive); pw.println(indent + "flags=" + mFlags); pw.println(indent + "rating type=" + mRatingType); @@ -420,6 +424,11 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { pw.println(indent + "metadata:" + getShortMetadataString()); } + @Override + public String toString() { + return mPackageName + "/" + mTag; + } + private String getShortMetadataString() { int fields = mMetadata == null ? 0 : mMetadata.size(); String title = mMetadata == null ? null : mMetadata @@ -928,8 +937,13 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } @Override - public MediaSessionInfo getSessionInfo() { - return mSessionInfo; + public String getPackageName() { + return mPackageName; + } + + @Override + public String getTag() { + return mTag; } @Override diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java index ce2899d3f24e..92644ce85c2a 100644 --- a/services/core/java/com/android/server/media/MediaSessionService.java +++ b/services/core/java/com/android/server/media/MediaSessionService.java @@ -516,9 +516,9 @@ public class MediaSessionService extends SystemService implements Monitor { int size = mSessions.size(); pw.println(indent + size + " Sessions:"); for (int i = 0; i < size; i++) { - // Just print the session info, the full session dump will + // Just print the short version, the full session dump will // already be in the list of all sessions. - pw.println(indent + mSessions.get(i).getSessionInfo()); + pw.println(indent + mSessions.get(i).toString()); } } } @@ -759,9 +759,9 @@ public class MediaSessionService extends SystemService implements Monitor { private void dispatchAdjustVolumeLocked(int suggestedStream, int direction, int flags, MediaSessionRecord session) { if (DEBUG) { - String sessionInfo = session == null ? null : session.getSessionInfo().toString(); - Log.d(TAG, "Adjusting session " + sessionInfo + " by " + direction + ". flags=" + flags - + ", suggestedStream=" + suggestedStream); + String description = session == null ? null : session.toString(); + Log.d(TAG, "Adjusting session " + description + " by " + direction + ". flags=" + + flags + ", suggestedStream=" + suggestedStream); } if (session == null) { @@ -824,7 +824,7 @@ public class MediaSessionService extends SystemService implements Monitor { MediaSessionRecord session) { if (session != null) { if (DEBUG) { - Log.d(TAG, "Sending media key to " + session.getSessionInfo()); + Log.d(TAG, "Sending media key to " + session.toString()); } if (needWakeLock) { mKeyEventReceiver.aquireWakeLockLocked(); |