Merge "Change isRinging and isInAPhoneCall to execute from binder thread."
diff --git a/src/com/android/telecomm/CallsManager.java b/src/com/android/telecomm/CallsManager.java
index 3811de1..99731d7 100644
--- a/src/com/android/telecomm/CallsManager.java
+++ b/src/com/android/telecomm/CallsManager.java
@@ -33,6 +33,7 @@
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
+import java.util.concurrent.CopyOnWriteArraySet;
/**
* Singleton.
@@ -72,7 +73,7 @@
* The main call repository. Keeps an instance of all live calls. New incoming and outgoing
* calls are added to the map and removed when the calls move to the disconnected state.
*/
- private final Set<Call> mCalls = new LinkedHashSet<>();
+ private final Set<Call> mCalls = new CopyOnWriteArraySet<Call>();
private final DtmfLocalTonePlayer mDtmfLocalTonePlayer = new DtmfLocalTonePlayer();
private final InCallController mInCallController = new InCallController();
diff --git a/src/com/android/telecomm/TelecommServiceImpl.java b/src/com/android/telecomm/TelecommServiceImpl.java
index 9aa4687..f1ab6c0 100644
--- a/src/com/android/telecomm/TelecommServiceImpl.java
+++ b/src/com/android/telecomm/TelecommServiceImpl.java
@@ -68,12 +68,6 @@
case MSG_SHOW_CALL_SCREEN:
mCallsManager.getInCallController().bringToForeground(msg.arg1 == 1);
break;
- case MSG_IS_IN_A_PHONE_CALL:
- result = mCallsManager.hasAnyCalls();
- break;
- case MSG_IS_RINGING:
- result = mCallsManager.hasRingingCall();
- break;
case MSG_END_CALL:
result = endCallInternal();
break;
@@ -102,11 +96,9 @@
private static final int MSG_SILENCE_RINGER = 1;
private static final int MSG_SHOW_CALL_SCREEN = 2;
- private static final int MSG_IS_IN_A_PHONE_CALL = 3;
- private static final int MSG_IS_RINGING = 4;
- private static final int MSG_END_CALL = 5;
- private static final int MSG_ACCEPT_RINGING_CALL = 6;
- private static final int MSG_CANCEL_MISSED_CALLS_NOTIFICATION = 7;
+ private static final int MSG_END_CALL = 3;
+ private static final int MSG_ACCEPT_RINGING_CALL = 4;
+ private static final int MSG_CANCEL_MISSED_CALLS_NOTIFICATION = 5;
/** The singleton instance. */
private static TelecommServiceImpl sInstance;
@@ -226,7 +218,9 @@
@Override
public boolean isInAPhoneCall() {
enforceReadPermission();
- return (boolean) sendRequest(MSG_IS_IN_A_PHONE_CALL);
+ // Do not use sendRequest() with this method since it could cause a deadlock with
+ // audio service, which we call into from the main thread: AudioManager.setMode().
+ return mCallsManager.hasAnyCalls();
}
/**
@@ -235,7 +229,7 @@
@Override
public boolean isRinging() {
enforceReadPermission();
- return (boolean) sendRequest(MSG_IS_RINGING);
+ return mCallsManager.hasRingingCall();
}
/**