OSDN Git Service

Rename AudioState to CallAudioState
authorYorke Lee <yorkelee@google.com>
Wed, 13 May 2015 21:14:54 +0000 (14:14 -0700)
committerYorke Lee <yorkelee@google.com>
Wed, 13 May 2015 21:58:15 +0000 (14:58 -0700)
Deprecate AudioState class and make methods @SystemApi where
necessary to minimize impact to SystemApi
Replace usages of AudioState inside Telecom sub-systems
Fire both onCallAudioStateChanged and onAudioStateChanged callbacks
for backward compatibility
Support both setAudioState and setCallAudioState for all classes

Bug: 21040387
Bug: 21088300
Change-Id: I3ec7b3afdaa344c6d639d1c421f1842d67f7d0f7

15 files changed:
api/current.txt
api/system-current.txt
telecomm/java/android/telecom/AudioState.java
telecomm/java/android/telecom/CallAudioState.aidl [new file with mode: 0644]
telecomm/java/android/telecom/CallAudioState.java [new file with mode: 0644]
telecomm/java/android/telecom/Conference.java
telecomm/java/android/telecom/Connection.java
telecomm/java/android/telecom/ConnectionService.java
telecomm/java/android/telecom/InCallAdapter.java
telecomm/java/android/telecom/InCallService.java
telecomm/java/android/telecom/Phone.java
telecomm/java/android/telecom/RemoteConference.java
telecomm/java/android/telecom/RemoteConnection.java
telecomm/java/com/android/internal/telecom/IConnectionService.aidl
telecomm/java/com/android/internal/telecom/IInCallService.aidl

index 08d6a9d..3e3e2c1 100644 (file)
@@ -29937,23 +29937,6 @@ package android.system {
 
 package android.telecom {
 
-  public final class AudioState implements android.os.Parcelable {
-    ctor public AudioState(boolean, int, int);
-    ctor public AudioState(android.telecom.AudioState);
-    method public static java.lang.String audioRouteToString(int);
-    method public int describeContents();
-    method public int getRoute();
-    method public int getSupportedRouteMask();
-    method public boolean isMuted();
-    method public void writeToParcel(android.os.Parcel, int);
-    field public static final android.os.Parcelable.Creator<android.telecom.AudioState> CREATOR;
-    field public static final int ROUTE_BLUETOOTH = 2; // 0x2
-    field public static final int ROUTE_EARPIECE = 1; // 0x1
-    field public static final int ROUTE_SPEAKER = 8; // 0x8
-    field public static final int ROUTE_WIRED_HEADSET = 4; // 0x4
-    field public static final int ROUTE_WIRED_OR_EARPIECE = 5; // 0x5
-  }
-
   public final class Call {
     method public void answer(int);
     method public void conference(android.telecom.Call);
@@ -30047,11 +30030,27 @@ package android.telecom {
     field public static final int PROPERTY_WIFI = 8; // 0x8
   }
 
+  public final class CallAudioState implements android.os.Parcelable {
+    ctor public CallAudioState(boolean, int, int);
+    method public static java.lang.String audioRouteToString(int);
+    method public int describeContents();
+    method public int getRoute();
+    method public int getSupportedRouteMask();
+    method public boolean isMuted();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.telecom.CallAudioState> CREATOR;
+    field public static final int ROUTE_BLUETOOTH = 2; // 0x2
+    field public static final int ROUTE_EARPIECE = 1; // 0x1
+    field public static final int ROUTE_SPEAKER = 8; // 0x8
+    field public static final int ROUTE_WIRED_HEADSET = 4; // 0x4
+    field public static final int ROUTE_WIRED_OR_EARPIECE = 5; // 0x5
+  }
+
   public abstract class Conference implements android.telecom.Conferenceable {
     ctor public Conference(android.telecom.PhoneAccountHandle);
     method public final boolean addConnection(android.telecom.Connection);
     method public final void destroy();
-    method public final android.telecom.AudioState getAudioState();
+    method public final android.telecom.CallAudioState getCallAudioState();
     method public final java.util.List<android.telecom.Connection> getConferenceableConnections();
     method public final int getConnectionCapabilities();
     method public final long getConnectionTime();
@@ -30062,7 +30061,7 @@ package android.telecom {
     method public final android.telecom.StatusHints getStatusHints();
     method public android.telecom.Connection.VideoProvider getVideoProvider();
     method public int getVideoState();
-    method public void onAudioStateChanged(android.telecom.AudioState);
+    method public void onCallAudioStateChanged(android.telecom.CallAudioState);
     method public void onConnectionAdded(android.telecom.Connection);
     method public void onDisconnect();
     method public void onHold();
@@ -30098,7 +30097,7 @@ package android.telecom {
     method public final android.net.Uri getAddress();
     method public final int getAddressPresentation();
     method public final boolean getAudioModeIsVoip();
-    method public final android.telecom.AudioState getAudioState();
+    method public final android.telecom.CallAudioState getCallAudioState();
     method public final java.lang.String getCallerDisplayName();
     method public final int getCallerDisplayNamePresentation();
     method public final android.telecom.Conference getConference();
@@ -30112,7 +30111,7 @@ package android.telecom {
     method public void onAbort();
     method public void onAnswer(int);
     method public void onAnswer();
-    method public void onAudioStateChanged(android.telecom.AudioState);
+    method public void onCallAudioStateChanged(android.telecom.CallAudioState);
     method public void onDisconnect();
     method public void onHold();
     method public void onPlayDtmfTone(char);
@@ -30270,12 +30269,12 @@ package android.telecom {
   public abstract class InCallService extends android.app.Service {
     ctor public InCallService();
     method public final boolean canAddCall();
-    method public final android.telecom.AudioState getAudioState();
+    method public final android.telecom.CallAudioState getCallAudioState();
     method public final java.util.List<android.telecom.Call> getCalls();
-    method public void onAudioStateChanged(android.telecom.AudioState);
     method public android.os.IBinder onBind(android.content.Intent);
     method public void onBringToForeground(boolean);
     method public void onCallAdded(android.telecom.Call);
+    method public void onCallAudioStateChanged(android.telecom.CallAudioState);
     method public void onCallRemoved(android.telecom.Call);
     method public void onCanAddCallChanged(boolean);
     method public final void setAudioRoute(int);
@@ -30387,7 +30386,7 @@ package android.telecom {
     method public final void registerCallback(android.telecom.RemoteConference.Callback);
     method public final void registerCallback(android.telecom.RemoteConference.Callback, android.os.Handler);
     method public void separate(android.telecom.RemoteConnection);
-    method public void setAudioState(android.telecom.AudioState);
+    method public void setCallAudioState(android.telecom.CallAudioState);
     method public void stopDtmfTone();
     method public void swap();
     method public void unhold();
@@ -30427,7 +30426,7 @@ package android.telecom {
     method public void registerCallback(android.telecom.RemoteConnection.Callback);
     method public void registerCallback(android.telecom.RemoteConnection.Callback, android.os.Handler);
     method public void reject();
-    method public void setAudioState(android.telecom.AudioState);
+    method public void setCallAudioState(android.telecom.CallAudioState);
     method public void stopDtmfTone();
     method public void unhold();
     method public void unregisterCallback(android.telecom.RemoteConnection.Callback);
index 7cf49e8..1b9bbe8 100644 (file)
@@ -32062,9 +32062,10 @@ package android.system {
 
 package android.telecom {
 
-  public final class AudioState implements android.os.Parcelable {
+  public deprecated class AudioState implements android.os.Parcelable {
     ctor public AudioState(boolean, int, int);
     ctor public AudioState(android.telecom.AudioState);
+    ctor public AudioState(android.telecom.CallAudioState);
     method public static java.lang.String audioRouteToString(int);
     method public int describeContents();
     method public int getRoute();
@@ -32179,11 +32180,28 @@ package android.telecom {
     ctor public Call.Listener();
   }
 
+  public final class CallAudioState implements android.os.Parcelable {
+    ctor public CallAudioState(boolean, int, int);
+    method public static java.lang.String audioRouteToString(int);
+    method public int describeContents();
+    method public int getRoute();
+    method public int getSupportedRouteMask();
+    method public boolean isMuted();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.telecom.CallAudioState> CREATOR;
+    field public static final int ROUTE_BLUETOOTH = 2; // 0x2
+    field public static final int ROUTE_EARPIECE = 1; // 0x1
+    field public static final int ROUTE_SPEAKER = 8; // 0x8
+    field public static final int ROUTE_WIRED_HEADSET = 4; // 0x4
+    field public static final int ROUTE_WIRED_OR_EARPIECE = 5; // 0x5
+  }
+
   public abstract class Conference implements android.telecom.Conferenceable {
     ctor public Conference(android.telecom.PhoneAccountHandle);
     method public final boolean addConnection(android.telecom.Connection);
     method public final void destroy();
-    method public final android.telecom.AudioState getAudioState();
+    method public final deprecated android.telecom.AudioState getAudioState();
+    method public final android.telecom.CallAudioState getCallAudioState();
     method public final java.util.List<android.telecom.Connection> getConferenceableConnections();
     method public final deprecated long getConnectTimeMillis();
     method public final int getConnectionCapabilities();
@@ -32196,7 +32214,8 @@ package android.telecom {
     method public final android.telecom.StatusHints getStatusHints();
     method public android.telecom.Connection.VideoProvider getVideoProvider();
     method public int getVideoState();
-    method public void onAudioStateChanged(android.telecom.AudioState);
+    method public deprecated void onAudioStateChanged(android.telecom.AudioState);
+    method public void onCallAudioStateChanged(android.telecom.CallAudioState);
     method public void onConnectionAdded(android.telecom.Connection);
     method public void onDisconnect();
     method public void onHold();
@@ -32233,7 +32252,8 @@ package android.telecom {
     method public final android.net.Uri getAddress();
     method public final int getAddressPresentation();
     method public final boolean getAudioModeIsVoip();
-    method public final android.telecom.AudioState getAudioState();
+    method public final deprecated android.telecom.AudioState getAudioState();
+    method public final android.telecom.CallAudioState getCallAudioState();
     method public final java.lang.String getCallerDisplayName();
     method public final int getCallerDisplayNamePresentation();
     method public final android.telecom.Conference getConference();
@@ -32247,7 +32267,8 @@ package android.telecom {
     method public void onAbort();
     method public void onAnswer(int);
     method public void onAnswer();
-    method public void onAudioStateChanged(android.telecom.AudioState);
+    method public deprecated void onAudioStateChanged(android.telecom.AudioState);
+    method public void onCallAudioStateChanged(android.telecom.CallAudioState);
     method public void onDisconnect();
     method public void onHold();
     method public void onPlayDtmfTone(char);
@@ -32405,13 +32426,13 @@ package android.telecom {
   public abstract class InCallService extends android.app.Service {
     ctor public InCallService();
     method public final boolean canAddCall();
-    method public final android.telecom.AudioState getAudioState();
+    method public final android.telecom.CallAudioState getCallAudioState();
     method public final java.util.List<android.telecom.Call> getCalls();
     method public deprecated android.telecom.Phone getPhone();
-    method public void onAudioStateChanged(android.telecom.AudioState);
     method public android.os.IBinder onBind(android.content.Intent);
     method public void onBringToForeground(boolean);
     method public void onCallAdded(android.telecom.Call);
+    method public void onCallAudioStateChanged(android.telecom.CallAudioState);
     method public void onCallRemoved(android.telecom.Call);
     method public void onCanAddCallChanged(boolean);
     method public deprecated void onPhoneCreated(android.telecom.Phone);
@@ -32452,7 +32473,8 @@ package android.telecom {
   public final deprecated class Phone {
     method public final void addListener(android.telecom.Phone.Listener);
     method public final boolean canAddCall();
-    method public final android.telecom.AudioState getAudioState();
+    method public final deprecated android.telecom.AudioState getAudioState();
+    method public final android.telecom.CallAudioState getCallAudioState();
     method public final java.util.List<android.telecom.Call> getCalls();
     method public final void removeListener(android.telecom.Phone.Listener);
     method public final void setAudioRoute(int);
@@ -32461,9 +32483,10 @@ package android.telecom {
 
   public static abstract class Phone.Listener {
     ctor public Phone.Listener();
-    method public void onAudioStateChanged(android.telecom.Phone, android.telecom.AudioState);
+    method public deprecated void onAudioStateChanged(android.telecom.Phone, android.telecom.AudioState);
     method public void onBringToForeground(android.telecom.Phone, boolean);
     method public void onCallAdded(android.telecom.Phone, android.telecom.Call);
+    method public void onCallAudioStateChanged(android.telecom.Phone, android.telecom.CallAudioState);
     method public void onCallRemoved(android.telecom.Phone, android.telecom.Call);
     method public void onCanAddCallChanged(android.telecom.Phone, boolean);
   }
@@ -32545,7 +32568,8 @@ package android.telecom {
     method public final void registerCallback(android.telecom.RemoteConference.Callback);
     method public final void registerCallback(android.telecom.RemoteConference.Callback, android.os.Handler);
     method public void separate(android.telecom.RemoteConnection);
-    method public void setAudioState(android.telecom.AudioState);
+    method public deprecated void setAudioState(android.telecom.AudioState);
+    method public void setCallAudioState(android.telecom.CallAudioState);
     method public void stopDtmfTone();
     method public void swap();
     method public void unhold();
@@ -32585,7 +32609,8 @@ package android.telecom {
     method public void registerCallback(android.telecom.RemoteConnection.Callback);
     method public void registerCallback(android.telecom.RemoteConnection.Callback, android.os.Handler);
     method public void reject();
-    method public void setAudioState(android.telecom.AudioState);
+    method public deprecated void setAudioState(android.telecom.AudioState);
+    method public void setCallAudioState(android.telecom.CallAudioState);
     method public void stopDtmfTone();
     method public void unhold();
     method public void unregisterCallback(android.telecom.RemoteConnection.Callback);
index 465c5f4..33013ac 100644 (file)
@@ -16,6 +16,7 @@
 
 package android.telecom;
 
+import android.annotation.SystemApi;
 import android.os.Parcel;
 import android.os.Parcelable;
 
@@ -24,8 +25,12 @@ import java.util.Locale;
 /**
  *  Encapsulates the telecom audio state, including the current audio routing, supported audio
  *  routing and mute.
+ *  @deprecated - use {@link CallAudioState} instead.
+ *  @hide
  */
-public final class AudioState implements Parcelable {
+@Deprecated
+@SystemApi
+public class AudioState implements Parcelable {
     /** Direct the audio stream through the device's earpiece. */
     public static final int ROUTE_EARPIECE      = 0x00000001;
 
@@ -64,6 +69,12 @@ public final class AudioState implements Parcelable {
         supportedRouteMask = state.getSupportedRouteMask();
     }
 
+    public AudioState(CallAudioState state) {
+        isMuted = state.isMuted();
+        route = state.getRoute();
+        supportedRouteMask = state.getSupportedRouteMask();
+    }
+
     @Override
     public boolean equals(Object obj) {
         if (obj == null) {
diff --git a/telecomm/java/android/telecom/CallAudioState.aidl b/telecomm/java/android/telecom/CallAudioState.aidl
new file mode 100644 (file)
index 0000000..90dbbe5
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * 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.telecom;
+
+/**
+ * {@hide}
+ */
+parcelable CallAudioState;
diff --git a/telecomm/java/android/telecom/CallAudioState.java b/telecomm/java/android/telecom/CallAudioState.java
new file mode 100644 (file)
index 0000000..2b16722
--- /dev/null
@@ -0,0 +1,209 @@
+/*
+ * 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.telecom;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Locale;
+
+/**
+ *  Encapsulates the telecom audio state, including the current audio routing, supported audio
+ *  routing and mute.
+ */
+public final class CallAudioState implements Parcelable {
+    /** Direct the audio stream through the device's earpiece. */
+    public static final int ROUTE_EARPIECE      = 0x00000001;
+
+    /** Direct the audio stream through Bluetooth. */
+    public static final int ROUTE_BLUETOOTH     = 0x00000002;
+
+    /** Direct the audio stream through a wired headset. */
+    public static final int ROUTE_WIRED_HEADSET = 0x00000004;
+
+    /** Direct the audio stream through the device's speakerphone. */
+    public static final int ROUTE_SPEAKER       = 0x00000008;
+
+    /**
+     * Direct the audio stream through the device's earpiece or wired headset if one is
+     * connected.
+     */
+    public static final int ROUTE_WIRED_OR_EARPIECE = ROUTE_EARPIECE | ROUTE_WIRED_HEADSET;
+
+    /** Bit mask of all possible audio routes. */
+    private static final int ROUTE_ALL = ROUTE_EARPIECE | ROUTE_BLUETOOTH | ROUTE_WIRED_HEADSET |
+            ROUTE_SPEAKER;
+
+    private final boolean isMuted;
+    private final int route;
+    private final int supportedRouteMask;
+
+    /**
+     * Constructor for a {@link CallAudioState} object.
+     *
+     * @param muted {@code true} if the call is muted, {@code false} otherwise.
+     * @param route The current audio route being used.
+     * Allowed values:
+     * {@link #ROUTE_EARPIECE}
+     * {@link #ROUTE_BLUETOOTH}
+     * {@link #ROUTE_WIRED_HEADSET}
+     * {@link #ROUTE_SPEAKER}
+     * @param supportedRouteMask Bit mask of all routes supported by this call. This should be a
+     * bitwise combination of the following values:
+     * {@link #ROUTE_EARPIECE}
+     * {@link #ROUTE_BLUETOOTH}
+     * {@link #ROUTE_WIRED_HEADSET}
+     * {@link #ROUTE_SPEAKER}
+     */
+    public CallAudioState(boolean muted, int route, int supportedRouteMask) {
+        this.isMuted = muted;
+        this.route = route;
+        this.supportedRouteMask = supportedRouteMask;
+    }
+
+    /** @hide */
+    public CallAudioState(CallAudioState state) {
+        isMuted = state.isMuted();
+        route = state.getRoute();
+        supportedRouteMask = state.getSupportedRouteMask();
+    }
+
+    /** @hide */
+    @SuppressWarnings("deprecation")
+    public CallAudioState(AudioState state) {
+        isMuted = state.isMuted();
+        route = state.getRoute();
+        supportedRouteMask = state.getSupportedRouteMask();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (!(obj instanceof CallAudioState)) {
+            return false;
+        }
+        CallAudioState state = (CallAudioState) obj;
+        return isMuted() == state.isMuted() && getRoute() == state.getRoute() &&
+                getSupportedRouteMask() == state.getSupportedRouteMask();
+    }
+
+    @Override
+    public String toString() {
+        return String.format(Locale.US,
+                "[AudioState isMuted: %b, route: %s, supportedRouteMask: %s]",
+                isMuted,
+                audioRouteToString(route),
+                audioRouteToString(supportedRouteMask));
+    }
+
+    /**
+     * @return {@code true} if the call is muted, {@code false} otherwise.
+     */
+    public boolean isMuted() {
+        return isMuted;
+    }
+
+    /**
+     * @return The current audio route being used.
+     */
+    public int getRoute() {
+        return route;
+    }
+
+    /**
+     * @return Bit mask of all routes supported by this call.
+     */
+    public int getSupportedRouteMask() {
+        return supportedRouteMask;
+    }
+
+    /**
+     * Converts the provided audio route into a human readable string representation.
+     *
+     * @param route to convert into a string.
+     *
+     * @return String representation of the provided audio route.
+     */
+    public static String audioRouteToString(int route) {
+        if (route == 0 || (route & ~ROUTE_ALL) != 0x0) {
+            return "UNKNOWN";
+        }
+
+        StringBuffer buffer = new StringBuffer();
+        if ((route & ROUTE_EARPIECE) == ROUTE_EARPIECE) {
+            listAppend(buffer, "EARPIECE");
+        }
+        if ((route & ROUTE_BLUETOOTH) == ROUTE_BLUETOOTH) {
+            listAppend(buffer, "BLUETOOTH");
+        }
+        if ((route & ROUTE_WIRED_HEADSET) == ROUTE_WIRED_HEADSET) {
+            listAppend(buffer, "WIRED_HEADSET");
+        }
+        if ((route & ROUTE_SPEAKER) == ROUTE_SPEAKER) {
+            listAppend(buffer, "SPEAKER");
+        }
+
+        return buffer.toString();
+    }
+
+    /**
+     * Responsible for creating AudioState objects for deserialized Parcels.
+     */
+    public static final Parcelable.Creator<CallAudioState> CREATOR =
+            new Parcelable.Creator<CallAudioState> () {
+
+        @Override
+        public CallAudioState createFromParcel(Parcel source) {
+            boolean isMuted = source.readByte() == 0 ? false : true;
+            int route = source.readInt();
+            int supportedRouteMask = source.readInt();
+            return new CallAudioState(isMuted, route, supportedRouteMask);
+        }
+
+        @Override
+        public CallAudioState[] newArray(int size) {
+            return new CallAudioState[size];
+        }
+    };
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    /**
+     * Writes AudioState object into a serializeable Parcel.
+     */
+    @Override
+    public void writeToParcel(Parcel destination, int flags) {
+        destination.writeByte((byte) (isMuted ? 1 : 0));
+        destination.writeInt(route);
+        destination.writeInt(supportedRouteMask);
+    }
+
+    private static void listAppend(StringBuffer buffer, String str) {
+        if (buffer.length() > 0) {
+            buffer.append(", ");
+        }
+        buffer.append(str);
+    }
+}
index 6fa94b9..d8d9ab6 100644 (file)
@@ -63,7 +63,7 @@ public abstract class Conference implements Conferenceable {
             Collections.unmodifiableList(mConferenceableConnections);
 
     private PhoneAccountHandle mPhoneAccount;
-    private AudioState mAudioState;
+    private CallAudioState mCallAudioState;
     private int mState = Connection.STATE_NEW;
     private DisconnectCause mDisconnectCause;
     private int mConnectionCapabilities;
@@ -173,9 +173,22 @@ public abstract class Conference implements Conferenceable {
      * @return The audio state of the conference, describing how its audio is currently
      *         being routed by the system. This is {@code null} if this Conference
      *         does not directly know about its audio state.
+     * @deprecated Use {@link #getCallAudioState()} instead.
+     * @hide
      */
+    @Deprecated
+    @SystemApi
     public final AudioState getAudioState() {
-        return mAudioState;
+        return new AudioState(mCallAudioState);
+    }
+
+    /**
+     * @return The audio state of the conference, describing how its audio is currently
+     *         being routed by the system. This is {@code null} if this Conference
+     *         does not directly know about its audio state.
+     */
+    public final CallAudioState getCallAudioState() {
+        return mCallAudioState;
     }
 
     /**
@@ -249,10 +262,21 @@ public abstract class Conference implements Conferenceable {
      * Notifies this conference that the {@link #getAudioState()} property has a new value.
      *
      * @param state The new call audio state.
+     * @deprecated Use {@link #onCallAudioStateChanged(CallAudioState)} instead.
+     * @hide
      */
+    @SystemApi
+    @Deprecated
     public void onAudioStateChanged(AudioState state) {}
 
     /**
+     * Notifies this conference that the {@link #getCallAudioState()} property has a new value.
+     *
+     * @param state The new call audio state.
+     */
+    public void onCallAudioStateChanged(CallAudioState state) {}
+
+    /**
      * Notifies this conference that a connection has been added to it.
      *
      * @param connection The newly added connection.
@@ -515,10 +539,11 @@ public abstract class Conference implements Conferenceable {
      * @param state The new audio state.
      * @hide
      */
-    final void setAudioState(AudioState state) {
-        Log.d(this, "setAudioState %s", state);
-        mAudioState = state;
-        onAudioStateChanged(state);
+    final void setCallAudioState(CallAudioState state) {
+        Log.d(this, "setCallAudioState %s", state);
+        mCallAudioState = state;
+        onAudioStateChanged(getAudioState());
+        onCallAudioStateChanged(state);
     }
 
     private void setState(int newState) {
index 2ee5d25..f39f813 100644 (file)
@@ -20,6 +20,7 @@ import com.android.internal.os.SomeArgs;
 import com.android.internal.telecom.IVideoCallback;
 import com.android.internal.telecom.IVideoProvider;
 
+import android.annotation.SystemApi;
 import android.net.Uri;
 import android.os.Handler;
 import android.os.IBinder;
@@ -817,7 +818,7 @@ public abstract class Connection implements Conferenceable {
             Collections.unmodifiableList(mConferenceables);
 
     private int mState = STATE_NEW;
-    private AudioState mAudioState;
+    private CallAudioState mCallAudioState;
     private Uri mAddress;
     private int mAddressPresentation;
     private String mCallerDisplayName;
@@ -892,9 +893,22 @@ public abstract class Connection implements Conferenceable {
      * @return The audio state of the connection, describing how its audio is currently
      *         being routed by the system. This is {@code null} if this Connection
      *         does not directly know about its audio state.
+     * @deprecated Use {@link #getCallAudioState()} instead.
+     * @hide
      */
+    @SystemApi
+    @Deprecated
     public final AudioState getAudioState() {
-        return mAudioState;
+        return new AudioState(mCallAudioState);
+    }
+
+    /**
+     * @return The audio state of the connection, describing how its audio is currently
+     *         being routed by the system. This is {@code null} if this Connection
+     *         does not directly know about its audio state.
+     */
+    public final CallAudioState getCallAudioState() {
+        return mCallAudioState;
     }
 
     /**
@@ -968,11 +982,12 @@ public abstract class Connection implements Conferenceable {
      * @param state The new audio state.
      * @hide
      */
-    final void setAudioState(AudioState state) {
+    final void setCallAudioState(CallAudioState state) {
         checkImmutable();
         Log.d(this, "setAudioState %s", state);
-        mAudioState = state;
-        onAudioStateChanged(state);
+        mCallAudioState = state;
+        onAudioStateChanged(getAudioState());
+        onCallAudioStateChanged(state);
     }
 
     /**
@@ -1359,10 +1374,21 @@ public abstract class Connection implements Conferenceable {
      * Notifies this Connection that the {@link #getAudioState()} property has a new value.
      *
      * @param state The new connection audio state.
+     * @deprecated Use {@link #onCallAudioStateChanged(CallAudioState)} instead.
+     * @hide
      */
+    @SystemApi
+    @Deprecated
     public void onAudioStateChanged(AudioState state) {}
 
     /**
+     * Notifies this Connection that the {@link #getCallAudioState()} property has a new value.
+     *
+     * @param state The new connection audio state.
+     */
+    public void onCallAudioStateChanged(CallAudioState state) {}
+
+    /**
      * Notifies this Connection of an internal state change. This method is called after the
      * state is changed.
      *
index 13eb016..6b8ca69 100644 (file)
@@ -90,7 +90,7 @@ public abstract class ConnectionService extends Service {
     private static final int MSG_DISCONNECT = 6;
     private static final int MSG_HOLD = 7;
     private static final int MSG_UNHOLD = 8;
-    private static final int MSG_ON_AUDIO_STATE_CHANGED = 9;
+    private static final int MSG_ON_CALL_AUDIO_STATE_CHANGED = 9;
     private static final int MSG_PLAY_DTMF_TONE = 10;
     private static final int MSG_STOP_DTMF_TONE = 11;
     private static final int MSG_CONFERENCE = 12;
@@ -180,11 +180,11 @@ public abstract class ConnectionService extends Service {
         }
 
         @Override
-        public void onAudioStateChanged(String callId, AudioState audioState) {
+        public void onCallAudioStateChanged(String callId, CallAudioState callAudioState) {
             SomeArgs args = SomeArgs.obtain();
             args.arg1 = callId;
-            args.arg2 = audioState;
-            mHandler.obtainMessage(MSG_ON_AUDIO_STATE_CHANGED, args).sendToTarget();
+            args.arg2 = callAudioState;
+            mHandler.obtainMessage(MSG_ON_CALL_AUDIO_STATE_CHANGED, args).sendToTarget();
         }
 
         @Override
@@ -304,12 +304,12 @@ public abstract class ConnectionService extends Service {
                 case MSG_UNHOLD:
                     unhold((String) msg.obj);
                     break;
-                case MSG_ON_AUDIO_STATE_CHANGED: {
+                case MSG_ON_CALL_AUDIO_STATE_CHANGED: {
                     SomeArgs args = (SomeArgs) msg.obj;
                     try {
                         String callId = (String) args.arg1;
-                        AudioState audioState = (AudioState) args.arg2;
-                        onAudioStateChanged(callId, audioState);
+                        CallAudioState audioState = (CallAudioState) args.arg2;
+                        onCallAudioStateChanged(callId, new CallAudioState(audioState));
                     } finally {
                         args.recycle();
                     }
@@ -688,12 +688,14 @@ public abstract class ConnectionService extends Service {
         }
     }
 
-    private void onAudioStateChanged(String callId, AudioState audioState) {
-        Log.d(this, "onAudioStateChanged %s %s", callId, audioState);
+    private void onCallAudioStateChanged(String callId, CallAudioState callAudioState) {
+        Log.d(this, "onAudioStateChanged %s %s", callId, callAudioState);
         if (mConnectionById.containsKey(callId)) {
-            findConnectionForAction(callId, "onAudioStateChanged").setAudioState(audioState);
+            findConnectionForAction(callId, "onCallAudioStateChanged").setCallAudioState(
+                    callAudioState);
         } else {
-            findConferenceForAction(callId, "onAudioStateChanged").setAudioState(audioState);
+            findConferenceForAction(callId, "onCallAudioStateChanged").setCallAudioState(
+                    callAudioState);
         }
     }
 
index 62b8dea..0cf7212 100644 (file)
@@ -119,7 +119,7 @@ public final class InCallAdapter {
     }
 
     /**
-     * Sets the audio route (speaker, bluetooth, etc...). See {@link AudioState}.
+     * Sets the audio route (speaker, bluetooth, etc...). See {@link CallAudioState}.
      *
      * @param route The audio route to use.
      */
index 182a7f5..e37cff7 100644 (file)
@@ -52,7 +52,7 @@ public abstract class InCallService extends Service {
     private static final int MSG_ADD_CALL = 2;
     private static final int MSG_UPDATE_CALL = 3;
     private static final int MSG_SET_POST_DIAL_WAIT = 4;
-    private static final int MSG_ON_AUDIO_STATE_CHANGED = 5;
+    private static final int MSG_ON_CALL_AUDIO_STATE_CHANGED = 5;
     private static final int MSG_BRING_TO_FOREGROUND = 6;
     private static final int MSG_ON_CAN_ADD_CALL_CHANGED = 7;
 
@@ -87,8 +87,8 @@ public abstract class InCallService extends Service {
                     }
                     break;
                 }
-                case MSG_ON_AUDIO_STATE_CHANGED:
-                    mPhone.internalAudioStateChanged((AudioState) msg.obj);
+                case MSG_ON_CALL_AUDIO_STATE_CHANGED:
+                    mPhone.internalCallAudioStateChanged((CallAudioState) msg.obj);
                     break;
                 case MSG_BRING_TO_FOREGROUND:
                     mPhone.internalBringToForeground(msg.arg1 == 1);
@@ -133,8 +133,8 @@ public abstract class InCallService extends Service {
         }
 
         @Override
-        public void onAudioStateChanged(AudioState audioState) {
-            mHandler.obtainMessage(MSG_ON_AUDIO_STATE_CHANGED, audioState).sendToTarget();
+        public void onCallAudioStateChanged(CallAudioState callAudioState) {
+            mHandler.obtainMessage(MSG_ON_CALL_AUDIO_STATE_CHANGED, callAudioState).sendToTarget();
         }
 
         @Override
@@ -156,6 +156,10 @@ public abstract class InCallService extends Service {
             InCallService.this.onAudioStateChanged(audioState);
         }
 
+        public void onCallAudioStateChanged(Phone phone, CallAudioState callAudioState) {
+            InCallService.this.onCallAudioStateChanged(callAudioState);
+        };
+
         /** ${inheritDoc} */
         @Override
         public void onBringToForeground(Phone phone, boolean showDialpad) {
@@ -248,14 +252,27 @@ public abstract class InCallService extends Service {
      *
      * @return An object encapsulating the audio state. Returns null if the service is not
      *         fully initialized.
+     * @deprecated Use {@link #getCallAudioState()} instead.
+     * @hide
      */
+    @Deprecated
     public final AudioState getAudioState() {
         return mPhone == null ? null : mPhone.getAudioState();
     }
 
     /**
+     * Obtains the current phone call audio state.
+     *
+     * @return An object encapsulating the audio state. Returns null if the service is not
+     *         fully initialized.
+     */
+    public final CallAudioState getCallAudioState() {
+        return mPhone == null ? null : mPhone.getCallAudioState();
+    }
+
+    /**
      * Sets the microphone mute state. When this request is honored, there will be change to
-     * the {@link #getAudioState()}.
+     * the {@link #getCallAudioState()}.
      *
      * @param state {@code true} if the microphone should be muted; {@code false} otherwise.
      */
@@ -267,7 +284,7 @@ public abstract class InCallService extends Service {
 
     /**
      * Sets the audio route (speaker, bluetooth, etc...).  When this request is honored, there will
-     * be change to the {@link #getAudioState()}.
+     * be change to the {@link #getCallAudioState()}.
      *
      * @param route The audio route to use.
      */
@@ -311,11 +328,22 @@ public abstract class InCallService extends Service {
      * Called when the audio state changes.
      *
      * @param audioState The new {@link AudioState}.
+     * @deprecated Use {@link #onCallAudioStateChanged(CallAudioState) instead}.
+     * @hide
      */
+    @Deprecated
     public void onAudioStateChanged(AudioState audioState) {
     }
 
     /**
+     * Called when the audio state changes.
+     *
+     * @param audioState The new {@link CallAudioState}.
+     */
+    public void onCallAudioStateChanged(CallAudioState audioState) {
+    }
+
+    /**
      * Called to bring the in-call screen to the foreground. The in-call experience should
      * respond immediately by coming to the foreground to inform the user of the state of
      * ongoing {@code Call}s.
index 4cdfd2e..8eb091b 100644 (file)
@@ -41,10 +41,21 @@ public final class Phone {
          *
          * @param phone The {@code Phone} calling this method.
          * @param audioState The new {@link AudioState}.
+         *
+         * @deprecated Use {@link #onCallAudioStateChanged(Phone, CallAudioState)} instead.
          */
+        @Deprecated
         public void onAudioStateChanged(Phone phone, AudioState audioState) { }
 
         /**
+         * Called when the audio state changes.
+         *
+         * @param phone The {@code Phone} calling this method.
+         * @param callAudioState The new {@link CallAudioState}.
+         */
+        public void onCallAudioStateChanged(Phone phone, CallAudioState callAudioState) { }
+
+        /**
          * Called to bring the in-call screen to the foreground. The in-call experience should
          * respond immediately by coming to the foreground to inform the user of the state of
          * ongoing {@code Call}s.
@@ -100,7 +111,7 @@ public final class Phone {
 
     private final InCallAdapter mInCallAdapter;
 
-    private AudioState mAudioState;
+    private CallAudioState mCallAudioState;
 
     private final List<Listener> mListeners = new CopyOnWriteArrayList<>();
 
@@ -145,10 +156,10 @@ public final class Phone {
         }
     }
 
-    final void internalAudioStateChanged(AudioState audioState) {
-        if (!Objects.equals(mAudioState, audioState)) {
-            mAudioState = audioState;
-            fireAudioStateChanged(audioState);
+    final void internalCallAudioStateChanged(CallAudioState callAudioState) {
+        if (!Objects.equals(mCallAudioState, callAudioState)) {
+            mCallAudioState = callAudioState;
+            fireCallAudioStateChanged(callAudioState);
         }
     }
 
@@ -271,9 +282,20 @@ public final class Phone {
      * Obtains the current phone call audio state of the {@code Phone}.
      *
      * @return An object encapsulating the audio state.
+     * @deprecated Use {@link #getCallAudioState()} instead.
      */
+    @Deprecated
     public final AudioState getAudioState() {
-        return mAudioState;
+        return new AudioState(mCallAudioState);
+    }
+
+    /**
+     * Obtains the current phone call audio state of the {@code Phone}.
+     *
+     * @return An object encapsulating the audio state.
+     */
+    public final CallAudioState getCallAudioState() {
+        return mCallAudioState;
     }
 
     private void fireCallAdded(Call call) {
@@ -288,9 +310,10 @@ public final class Phone {
         }
     }
 
-    private void fireAudioStateChanged(AudioState audioState) {
+    private void fireCallAudioStateChanged(CallAudioState audioState) {
         for (Listener listener : mListeners) {
-            listener.onAudioStateChanged(this, audioState);
+            listener.onCallAudioStateChanged(this, audioState);
+            listener.onAudioStateChanged(this, new AudioState(audioState));
         }
     }
 
index b59584b..095a88f 100644 (file)
@@ -18,6 +18,7 @@ package android.telecom;
 
 import com.android.internal.telecom.IConnectionService;
 
+import android.annotation.SystemApi;
 import android.os.Handler;
 import android.os.RemoteException;
 
@@ -355,14 +356,27 @@ public final class RemoteConference {
      * can include audio routing (Bluetooth, Speaker, etc) and muting state.
      *
      * @see android.telecom.AudioState
+     * @deprecated Use {@link #setCallAudioState(CallAudioState)} instead.
+     * @hide
      */
+    @SystemApi
+    @Deprecated
     public void setAudioState(AudioState state) {
+        setCallAudioState(new CallAudioState(state));
+    }
+
+    /**
+     * Request to change the conference's audio routing to the specified state. The specified state
+     * can include audio routing (Bluetooth, Speaker, etc) and muting state.
+     */
+    public void setCallAudioState(CallAudioState state) {
         try {
-            mConnectionService.onAudioStateChanged(mId, state);
+            mConnectionService.onCallAudioStateChanged(mId, state);
         } catch (RemoteException e) {
         }
     }
 
+
     /**
      * Returns a list of independent connections that can me merged with this conference.
      *
index 19bb3f1..08485a3 100644 (file)
@@ -20,6 +20,7 @@ import com.android.internal.telecom.IConnectionService;
 import com.android.internal.telecom.IVideoCallback;
 import com.android.internal.telecom.IVideoProvider;
 
+import android.annotation.SystemApi;
 import android.net.Uri;
 import android.os.Handler;
 import android.os.IBinder;
@@ -776,11 +777,24 @@ public final class RemoteConnection {
      * Set the audio state of this {@code RemoteConnection}.
      *
      * @param state The audio state of this {@code RemoteConnection}.
+     * @hide
+     * @deprecated Use {@link #setCallAudioState(CallAudioState) instead.
      */
+    @SystemApi
+    @Deprecated
     public void setAudioState(AudioState state) {
+        setCallAudioState(new CallAudioState(state));
+    }
+
+    /**
+     * Set the audio state of this {@code RemoteConnection}.
+     *
+     * @param state The audio state of this {@code RemoteConnection}.
+     */
+    public void setCallAudioState(CallAudioState state) {
         try {
             if (mConnected) {
-                mConnectionService.onAudioStateChanged(mConnectionId, state);
+                mConnectionService.onCallAudioStateChanged(mConnectionId, state);
             }
         } catch (RemoteException ignored) {
         }
index 339a982..c2e8530 100644 (file)
@@ -17,7 +17,7 @@
 package com.android.internal.telecom;
 
 import android.os.Bundle;
-import android.telecom.AudioState;
+import android.telecom.CallAudioState;
 import android.telecom.ConnectionRequest;
 import android.telecom.PhoneAccountHandle;
 
@@ -56,7 +56,7 @@ oneway interface IConnectionService {
 
     void unhold(String callId);
 
-    void onAudioStateChanged(String activeCallId, in AudioState audioState);
+    void onCallAudioStateChanged(String activeCallId, in CallAudioState callAudioState);
 
     void playDtmfTone(String callId, char digit);
 
index d26f6cb..ded47d5 100644 (file)
@@ -17,7 +17,7 @@
 package com.android.internal.telecom;
 
 import android.app.PendingIntent;
-import android.telecom.AudioState;
+import android.telecom.CallAudioState;
 import android.telecom.ParcelableCall;
 
 import com.android.internal.telecom.IInCallAdapter;
@@ -40,7 +40,7 @@ oneway interface IInCallService {
 
     void setPostDialWait(String callId, String remaining);
 
-    void onAudioStateChanged(in AudioState audioState);
+    void onCallAudioStateChanged(in CallAudioState callAudioState);
 
     void bringToForeground(boolean showDialpad);