summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CleanSpec.mk1
-rw-r--r--api/current.txt1
-rw-r--r--cmds/media/src/com/android/commands/media/Media.java16
-rw-r--r--media/java/android/media/RemoteController.java6
-rw-r--r--media/java/android/media/session/ISessionController.aidl4
-rw-r--r--media/java/android/media/session/MediaController.java33
-rw-r--r--media/java/android/media/session/MediaSession.java26
-rw-r--r--media/java/android/media/session/MediaSessionInfo.aidl18
-rw-r--r--media/java/android/media/session/MediaSessionInfo.java97
-rw-r--r--media/java/android/media/session/MediaSessionLegacyHelper.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java2
-rw-r--r--services/core/java/com/android/server/media/MediaSessionRecord.java40
-rw-r--r--services/core/java/com/android/server/media/MediaSessionService.java12
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();