AudioFocusInfo.java revision 6156017c2217d0fbbbb03434986250ec6bbd69d8
10212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi/*
20212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi * Copyright (C) 2014 The Android Open Source Project
30212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi *
40212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi * Licensed under the Apache License, Version 2.0 (the "License");
50212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi * you may not use this file except in compliance with the License.
60212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi * You may obtain a copy of the License at
70212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi *
80212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi *      http://www.apache.org/licenses/LICENSE-2.0
90212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi *
100212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi * Unless required by applicable law or agreed to in writing, software
110212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi * distributed under the License is distributed on an "AS IS" BASIS,
120212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi * See the License for the specific language governing permissions and
140212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi * limitations under the License.
150212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi */
160212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
170212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivipackage android.media;
180212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
190212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Triviimport android.annotation.SystemApi;
200212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Triviimport android.os.Parcel;
210212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Triviimport android.os.Parcelable;
220212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
230212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Triviimport java.util.Objects;
240212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
250212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi/**
260212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi * @hide
270212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi * A class to encapsulate information about an audio focus owner or request.
280212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi */
290212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi@SystemApi
300212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivipublic final class AudioFocusInfo implements Parcelable {
310212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
320212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    private AudioAttributes mAttributes;
330212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    private String mClientId;
340212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    private String mPackageName;
350212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    private int mGainRequest;
360212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    private int mLossReceived;
370212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    private int mFlags;
380212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
390212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
400212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    /**
410212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     * Class constructor
420212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     * @param aa
430212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     * @param clientId
440212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     * @param packageName
450212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     * @param gainRequest
460212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     * @param lossReceived
470212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     * @param flags
486156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock     * @hide
490212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     */
506156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock    public AudioFocusInfo(AudioAttributes aa, String clientId, String packageName,
510212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi            int gainRequest, int lossReceived, int flags) {
520212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        mAttributes = aa == null ? new AudioAttributes.Builder().build() : aa;
530212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        mClientId = clientId == null ? "" : clientId;
540212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        mPackageName = packageName == null ? "" : packageName;
550212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        mGainRequest = gainRequest;
560212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        mLossReceived = lossReceived;
570212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        mFlags = flags;
580212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    }
590212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
600212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
610212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    /**
620212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     * The audio attributes for the audio focus request.
630212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     * @return non-null {@link AudioAttributes}.
640212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     */
650212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    @SystemApi
660212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    public AudioAttributes getAttributes() { return mAttributes; }
670212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
680212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    @SystemApi
690212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    public String getClientId() { return mClientId; }
700212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
710212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    @SystemApi
720212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    public String getPackageName() { return mPackageName; }
730212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
740212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    /**
750212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     * The type of audio focus gain request.
760212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     * @return one of {@link AudioManager#AUDIOFOCUS_GAIN},
770212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     *     {@link AudioManager#AUDIOFOCUS_GAIN_TRANSIENT},
780212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     *     {@link AudioManager#AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK},
790212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     *     {@link AudioManager#AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE}.
800212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     */
810212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    @SystemApi
820212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    public int getGainRequest() { return mGainRequest; }
830212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
840212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    /**
850212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     * The type of audio focus loss that was received by the
860212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     * {@link AudioManager.OnAudioFocusChangeListener} if one was set.
870212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     * @return 0 if focus wasn't lost, or one of {@link AudioManager#AUDIOFOCUS_LOSS},
880212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     *   {@link AudioManager#AUDIOFOCUS_LOSS_TRANSIENT} or
890212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     *   {@link AudioManager#AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK}.
900212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     */
910212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    @SystemApi
920212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    public int getLossReceived() { return mLossReceived; }
930212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
940212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    /** @hide */
956156017c2217d0fbbbb03434986250ec6bbd69d8John Spurlock    public void clearLossReceived() { mLossReceived = 0; }
960212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
970212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    /**
980212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     * The flags set in the audio focus request.
990212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     * @return 0 or a combination of {link AudioManager#AUDIOFOCUS_FLAG_DELAY_OK},
1000212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     *     {@link AudioManager#AUDIOFOCUS_FLAG_PAUSES_ON_DUCKABLE_LOSS}, and
1010212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     *     {@link AudioManager#AUDIOFOCUS_FLAG_LOCK}.
1020212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi     */
1030212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    @SystemApi
1040212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    public int getFlags() { return mFlags; }
1050212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
1060212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    @Override
1070212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    public int describeContents() {
1080212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        return 0;
1090212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    }
1100212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
1110212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    @Override
1120212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    public void writeToParcel(Parcel dest, int flags) {
1130212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        mAttributes.writeToParcel(dest, flags);
1140212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        dest.writeString(mClientId);
1150212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        dest.writeString(mPackageName);
1160212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        dest.writeInt(mGainRequest);
1170212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        dest.writeInt(mLossReceived);
1180212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        dest.writeInt(mFlags);
1190212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    }
1200212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
1210212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    @SystemApi
1220212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    @Override
1230212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    public int hashCode() {
1240212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        return Objects.hash(mAttributes, mClientId, mPackageName, mGainRequest, mFlags);
1250212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    }
1260212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
1270212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    @SystemApi
1280212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    @Override
1290212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    public boolean equals(Object obj) {
1300212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        if (this == obj)
1310212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi            return true;
1320212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        if (obj == null)
1330212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi            return false;
1340212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        if (getClass() != obj.getClass())
1350212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi            return false;
1360212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        AudioFocusInfo other = (AudioFocusInfo) obj;
1370212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        if (!mAttributes.equals(other.mAttributes)) {
1380212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi            return false;
1390212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        }
1400212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        if (!mClientId.equals(other.mClientId)) {
1410212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi            return false;
1420212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        }
1430212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        if (!mPackageName.equals(other.mPackageName)) {
1440212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi            return false;
1450212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        }
1460212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        if (mGainRequest != other.mGainRequest) {
1470212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi            return false;
1480212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        }
1490212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        if (mLossReceived != other.mLossReceived) {
1500212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi            return false;
1510212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        }
1520212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        if (mFlags != other.mFlags) {
1530212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi            return false;
1540212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        }
1550212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        return true;
1560212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    }
1570212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
1580212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    public static final Parcelable.Creator<AudioFocusInfo> CREATOR
1590212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi            = new Parcelable.Creator<AudioFocusInfo>() {
1600212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
1610212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        public AudioFocusInfo createFromParcel(Parcel in) {
1620212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi            return new AudioFocusInfo(
1630212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi                    AudioAttributes.CREATOR.createFromParcel(in), //AudioAttributes aa
1640212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi                    in.readString(), //String clientId
1650212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi                    in.readString(), //String packageName
1660212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi                    in.readInt(), //int gainRequest
1670212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi                    in.readInt(), //int lossReceived
1680212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi                    in.readInt() //int flags
1690212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi                    );
1700212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        }
1710212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi
1720212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        public AudioFocusInfo[] newArray(int size) {
1730212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi            return new AudioFocusInfo[size];
1740212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi        }
1750212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi    };
1760212be5150fb9fb3c340f3c7e51f6126372cc6f9Jean-Michel Trivi}
177