DO NOT MERGE Rename AudioState to CallAudioState
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
This commit is contained in:
@@ -28317,23 +28317,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);
|
||||
@@ -28427,6 +28410,22 @@ 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 final class CameraCapabilities implements android.os.Parcelable {
|
||||
ctor public CameraCapabilities(int, int);
|
||||
method public int describeContents();
|
||||
@@ -28440,7 +28439,7 @@ package android.telecom {
|
||||
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 long getConnectTimeMillis();
|
||||
method public final int getConnectionCapabilities();
|
||||
@@ -28452,7 +28451,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();
|
||||
@@ -28485,7 +28484,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();
|
||||
@@ -28499,7 +28498,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);
|
||||
@@ -28659,12 +28658,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);
|
||||
@@ -28776,7 +28775,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();
|
||||
@@ -28816,7 +28815,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);
|
||||
|
||||
@@ -30132,9 +30132,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();
|
||||
@@ -30249,6 +30250,22 @@ 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 final class CameraCapabilities implements android.os.Parcelable {
|
||||
ctor public CameraCapabilities(int, int);
|
||||
method public int describeContents();
|
||||
@@ -30262,7 +30279,8 @@ package android.telecom {
|
||||
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 long getConnectTimeMillis();
|
||||
method public final int getConnectionCapabilities();
|
||||
@@ -30274,7 +30292,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();
|
||||
@@ -30307,7 +30326,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();
|
||||
@@ -30321,7 +30341,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);
|
||||
@@ -30481,13 +30502,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);
|
||||
@@ -30528,7 +30549,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);
|
||||
@@ -30537,9 +30559,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);
|
||||
}
|
||||
@@ -30621,7 +30644,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();
|
||||
@@ -30661,7 +30685,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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
22
telecomm/java/android/telecom/CallAudioState.aidl
Normal file
22
telecomm/java/android/telecom/CallAudioState.aidl
Normal file
@@ -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;
|
||||
209
telecomm/java/android/telecom/CallAudioState.java
Normal file
209
telecomm/java/android/telecom/CallAudioState.java
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package android.telecom;
|
||||
|
||||
import android.annotation.SystemApi;
|
||||
import android.telecom.Connection.VideoProvider;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -62,7 +63,7 @@ public abstract class Conference implements IConferenceable {
|
||||
Collections.unmodifiableList(mConferenceableConnections);
|
||||
|
||||
private PhoneAccountHandle mPhoneAccount;
|
||||
private AudioState mAudioState;
|
||||
private CallAudioState mCallAudioState;
|
||||
private int mState = Connection.STATE_NEW;
|
||||
private DisconnectCause mDisconnectCause;
|
||||
private int mConnectionCapabilities;
|
||||
@@ -172,9 +173,22 @@ public abstract class Conference implements IConferenceable {
|
||||
* @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;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -248,9 +262,20 @@ public abstract class Conference implements IConferenceable {
|
||||
* 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.
|
||||
*
|
||||
@@ -492,10 +517,11 @@ public abstract class Conference implements IConferenceable {
|
||||
* @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) {
|
||||
|
||||
@@ -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;
|
||||
@@ -800,7 +801,7 @@ public abstract class Connection implements IConferenceable {
|
||||
Collections.unmodifiableList(mConferenceables);
|
||||
|
||||
private int mState = STATE_NEW;
|
||||
private AudioState mAudioState;
|
||||
private CallAudioState mCallAudioState;
|
||||
private Uri mAddress;
|
||||
private int mAddressPresentation;
|
||||
private String mCallerDisplayName;
|
||||
@@ -875,9 +876,22 @@ public abstract class Connection implements IConferenceable {
|
||||
* @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;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -951,11 +965,12 @@ public abstract class Connection implements IConferenceable {
|
||||
* @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);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1345,9 +1360,20 @@ public abstract class Connection implements IConferenceable {
|
||||
* 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.
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -51,7 +51,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;
|
||||
|
||||
@@ -86,8 +86,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);
|
||||
@@ -132,8 +132,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
|
||||
@@ -155,6 +155,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) {
|
||||
@@ -247,14 +251,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.
|
||||
*/
|
||||
@@ -266,7 +283,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.
|
||||
*/
|
||||
@@ -310,10 +327,21 @@ 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
|
||||
|
||||
@@ -41,9 +41,20 @@ 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
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -279,13 +280,36 @@ public final class RemoteConference {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
* @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.
|
||||
*
|
||||
* @return A list of conferenceable connections.
|
||||
*/
|
||||
public List<RemoteConnection> getConferenceableConnections() {
|
||||
return mUnmodifiableConferenceableConnections;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -775,11 +776,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) {
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user