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