aboutsummaryrefslogtreecommitdiffstats
path: root/sdk/src/java/cyanogenmod/media/AudioSessionInfo.java
diff options
context:
space:
mode:
Diffstat (limited to 'sdk/src/java/cyanogenmod/media/AudioSessionInfo.java')
-rw-r--r--sdk/src/java/cyanogenmod/media/AudioSessionInfo.java176
1 files changed, 176 insertions, 0 deletions
diff --git a/sdk/src/java/cyanogenmod/media/AudioSessionInfo.java b/sdk/src/java/cyanogenmod/media/AudioSessionInfo.java
new file mode 100644
index 0000000..5f688cc
--- /dev/null
+++ b/sdk/src/java/cyanogenmod/media/AudioSessionInfo.java
@@ -0,0 +1,176 @@
+/*
+ * Copyright (C) 2016 The CyanogenMod 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 cyanogenmod.media;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Objects;
+
+import cyanogenmod.os.Build;
+import cyanogenmod.os.Concierge;
+import cyanogenmod.os.Concierge.ParcelInfo;
+
+/**
+ * AudioSessionInfo represents a single instance of an audio session.
+ * Audio sessions are created when a new AudioTrack is started, and
+ * removed when the track is released. Audio session identifiers
+ * are unique (but may be reused) and are used as a handle by which
+ * an application may create audio effects on the output stream.
+ *
+ * A list of global audio sessions can be obtained by calling
+ * listAudioSessions() via {@link CMAudioManager}, or a component can listen
+ * for the {@link CMAudioManager#ACTION_AUDIO_SESSIONS_CHANGED} broadcast.
+ *
+ * @hide
+ */
+public final class AudioSessionInfo implements Parcelable {
+
+ /**
+ * Unique session id
+ */
+ private final int mSessionId;
+ /**
+ * Stream type - see audio_stream_type_t
+ */
+ private final int mStream;
+ /**
+ * Output flags - see audio_output_flags_t
+ */
+ private final int mFlags;
+ /**
+ * Channel mask - see audio_channel_mask_t
+ */
+ private final int mChannelMask;
+ /**
+ * UID of the source application
+ */
+ private final int mUid;
+
+ public AudioSessionInfo(int sessionId, int stream, int flags, int channelMask, int uid) {
+ mSessionId = sessionId;
+ mStream = stream;
+ mFlags = flags;
+ mChannelMask = channelMask;
+ mUid = uid;
+ }
+
+ private AudioSessionInfo(Parcel in) {
+ // Read parcelable version via the Concierge
+ ParcelInfo parcelInfo = Concierge.receiveParcel(in);
+ int parcelableVersion = parcelInfo.getParcelVersion();
+
+ /* -- FIG -- */
+ mSessionId = in.readInt();
+ mStream = in.readInt();
+ mFlags = in.readInt();
+ mChannelMask = in.readInt();
+ mUid = in.readInt();
+
+ if (parcelableVersion > Build.CM_VERSION_CODES.FIG) {
+ // next-gen mind-altering shit goes here
+ }
+
+ // Complete parcel info for the concierge
+ parcelInfo.complete();
+ }
+
+ public int getSessionId() {
+ return mSessionId;
+ }
+
+ public int getStream() {
+ return mStream;
+ }
+
+ public int getFlags() {
+ return mFlags;
+ }
+
+ public int getChannelMask() {
+ return mChannelMask;
+ }
+
+ public int getUid() {
+ return mUid;
+ }
+
+ @Override
+ public String toString() {
+ return String.format(
+ "audioSessionInfo[sessionId=%d, stream=%d, flags=%d, channelMask=%d, uid=%d",
+ mSessionId, mStream, mFlags, mChannelMask, mUid);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(mSessionId, mStream, mFlags, mChannelMask, mUid);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == null || !(obj instanceof AudioSessionInfo)) {
+ return false;
+ }
+
+ final AudioSessionInfo other = (AudioSessionInfo)obj;
+ return this == other ||
+ (mSessionId == other.mSessionId &&
+ mStream == other.mStream &&
+ mFlags == other.mFlags &&
+ mChannelMask == other.mChannelMask &&
+ mUid == other.mUid);
+ }
+
+ /** @hide */
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ /** @hide */
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ // Tell the concierge to prepare the parcel
+ ParcelInfo parcelInfo = Concierge.prepareParcel(dest);
+
+ /* -- FIG -- */
+ dest.writeInt(mSessionId);
+ dest.writeInt(mStream);
+ dest.writeInt(mFlags);
+ dest.writeInt(mChannelMask);
+ dest.writeInt(mUid);
+
+ parcelInfo.complete();
+ }
+
+ /** @hide */
+ public static final Creator<AudioSessionInfo> CREATOR = new Creator<AudioSessionInfo>() {
+
+ @Override
+ public AudioSessionInfo createFromParcel(Parcel source) {
+ return new AudioSessionInfo(source);
+ }
+
+ @Override
+ public AudioSessionInfo[] newArray(int size) {
+ return new AudioSessionInfo[size];
+ }
+ };
+}
+
+