• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.telecom;
18 
19 import android.annotation.SystemApi;
20 import android.os.Parcel;
21 import android.os.Parcelable;
22 
23 import java.util.Locale;
24 
25 /**
26  *  Encapsulates the telecom audio state, including the current audio routing, supported audio
27  *  routing and mute.
28  *  @hide
29  */
30 @SystemApi
31 public final class AudioState implements Parcelable {
32     /** Direct the audio stream through the device's earpiece. */
33     public static final int ROUTE_EARPIECE      = 0x00000001;
34 
35     /** Direct the audio stream through Bluetooth. */
36     public static final int ROUTE_BLUETOOTH     = 0x00000002;
37 
38     /** Direct the audio stream through a wired headset. */
39     public static final int ROUTE_WIRED_HEADSET = 0x00000004;
40 
41     /** Direct the audio stream through the device's speakerphone. */
42     public static final int ROUTE_SPEAKER       = 0x00000008;
43 
44     /**
45      * Direct the audio stream through the device's earpiece or wired headset if one is
46      * connected.
47      */
48     public static final int ROUTE_WIRED_OR_EARPIECE = ROUTE_EARPIECE | ROUTE_WIRED_HEADSET;
49 
50     /** Bit mask of all possible audio routes.
51      *
52      * @hide
53      */
54     public static final int ROUTE_ALL = ROUTE_EARPIECE | ROUTE_BLUETOOTH | ROUTE_WIRED_HEADSET |
55             ROUTE_SPEAKER;
56 
57     /** Note: Deprecated, please do not use if possible. */
58     @SystemApi public final boolean isMuted;
59 
60     /** Note: Deprecated, please do not use if possible. */
61     @SystemApi public final int route;
62 
63     /** Note: Deprecated, please do not use if possible. */
64     @SystemApi public final int supportedRouteMask;
65 
AudioState(boolean muted, int route, int supportedRouteMask)66     public AudioState(boolean muted, int route, int supportedRouteMask) {
67         this.isMuted = muted;
68         this.route = route;
69         this.supportedRouteMask = supportedRouteMask;
70     }
71 
AudioState(AudioState state)72     public AudioState(AudioState state) {
73         isMuted = state.isMuted();
74         route = state.getRoute();
75         supportedRouteMask = state.getSupportedRouteMask();
76     }
77 
78     @Override
equals(Object obj)79     public boolean equals(Object obj) {
80         if (obj == null) {
81             return false;
82         }
83         if (!(obj instanceof AudioState)) {
84             return false;
85         }
86         AudioState state = (AudioState) obj;
87         return isMuted() == state.isMuted() && getRoute() == state.getRoute() &&
88                 getSupportedRouteMask() == state.getSupportedRouteMask();
89     }
90 
91     @Override
toString()92     public String toString() {
93         return String.format(Locale.US,
94                 "[AudioState isMuted: %b, route: %s, supportedRouteMask: %s]",
95                 isMuted,
96                 audioRouteToString(route),
97                 audioRouteToString(supportedRouteMask));
98     }
99 
100     /** @hide */
audioRouteToString(int route)101     public static String audioRouteToString(int route) {
102         if (route == 0 || (route & ~ROUTE_ALL) != 0x0) {
103             return "UNKNOWN";
104         }
105 
106         StringBuffer buffer = new StringBuffer();
107         if ((route & ROUTE_EARPIECE) == ROUTE_EARPIECE) {
108             listAppend(buffer, "EARPIECE");
109         }
110         if ((route & ROUTE_BLUETOOTH) == ROUTE_BLUETOOTH) {
111             listAppend(buffer, "BLUETOOTH");
112         }
113         if ((route & ROUTE_WIRED_HEADSET) == ROUTE_WIRED_HEADSET) {
114             listAppend(buffer, "WIRED_HEADSET");
115         }
116         if ((route & ROUTE_SPEAKER) == ROUTE_SPEAKER) {
117             listAppend(buffer, "SPEAKER");
118         }
119 
120         return buffer.toString();
121     }
122 
listAppend(StringBuffer buffer, String str)123     private static void listAppend(StringBuffer buffer, String str) {
124         if (buffer.length() > 0) {
125             buffer.append(", ");
126         }
127         buffer.append(str);
128     }
129 
130     /**
131      * Responsible for creating AudioState objects for deserialized Parcels.
132      */
133     public static final Parcelable.Creator<AudioState> CREATOR =
134             new Parcelable.Creator<AudioState> () {
135 
136         @Override
137         public AudioState createFromParcel(Parcel source) {
138             boolean isMuted = source.readByte() == 0 ? false : true;
139             int route = source.readInt();
140             int supportedRouteMask = source.readInt();
141             return new AudioState(isMuted, route, supportedRouteMask);
142         }
143 
144         @Override
145         public AudioState[] newArray(int size) {
146             return new AudioState[size];
147         }
148     };
149 
150     /**
151      * {@inheritDoc}
152      */
153     @Override
describeContents()154     public int describeContents() {
155         return 0;
156     }
157 
158     /**
159      * Writes AudioState object into a serializeable Parcel.
160      */
161     @Override
writeToParcel(Parcel destination, int flags)162     public void writeToParcel(Parcel destination, int flags) {
163         destination.writeByte((byte) (isMuted ? 1 : 0));
164         destination.writeInt(route);
165         destination.writeInt(supportedRouteMask);
166     }
167 
168     /**
169      * @return {@code true} if the call is muted, false otherwise.
170      */
isMuted()171     public boolean isMuted() {
172         return isMuted;
173     }
174 
175     /**
176      * @return The current audio route being used.
177      */
getRoute()178     public int getRoute() {
179         return route;
180     }
181 
182     /**
183      * @return Bit mask of all routes supported by this call.
184      */
getSupportedRouteMask()185     public int getSupportedRouteMask() {
186         return supportedRouteMask;
187     }
188 }
189