Adding phone-style state
Change-Id: I8d8ed6249ccc52b4d67c4c7d6a7329ba381f6fb6
diff --git a/common/src/com/android/services/telephony/common/Call.java b/common/src/com/android/services/telephony/common/Call.java
index 66851a7..0b0c80c 100644
--- a/common/src/com/android/services/telephony/common/Call.java
+++ b/common/src/com/android/services/telephony/common/Call.java
@@ -28,6 +28,7 @@
public static final int INVALID_CALL_ID = -1;
private int mCallId = INVALID_CALL_ID;
+ private String mNumber = "";
// TODO(klp): Add call state type
public Call(int callId) {
@@ -38,9 +39,18 @@
return mCallId;
}
+ public String getNumber() {
+ return mNumber;
+ }
+
+ /**
+ * Parcelable implementation
+ */
+
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(mCallId);
+ dest.writeString(mNumber);
}
@Override
@@ -62,6 +72,7 @@
private Call(Parcel in) {
mCallId = in.readInt();
+ mNumber = in.readString();
}
}
diff --git a/src/com/android/phone/CallHandlerServiceProxy.java b/src/com/android/phone/CallHandlerServiceProxy.java
index 7415f92..c4d1468 100644
--- a/src/com/android/phone/CallHandlerServiceProxy.java
+++ b/src/com/android/phone/CallHandlerServiceProxy.java
@@ -59,10 +59,10 @@
}
@Override
- public void onNewCall(int callId) {
+ public void onNewCall(Call call) {
if (mCallHandlerService != null) {
try {
- mCallHandlerService.onIncomingCall(new Call(callId));
+ mCallHandlerService.onIncomingCall(call);
} catch (RemoteException e) {
Log.e(TAG, "Remote exception handling onIncomingCall", e);
}
@@ -72,10 +72,10 @@
}
@Override
- public void onDisconnect(int callId) {
+ public void onDisconnect(Call call) {
if (mCallHandlerService != null) {
try {
- mCallHandlerService.onDisconnect(new Call(callId));
+ mCallHandlerService.onDisconnect(call);
} catch (RemoteException e) {
Log.e(TAG, "Remote exception handling onDisconnect ", e);
}
diff --git a/src/com/android/phone/CallModeler.java b/src/com/android/phone/CallModeler.java
index 018c771..b6504eb 100644
--- a/src/com/android/phone/CallModeler.java
+++ b/src/com/android/phone/CallModeler.java
@@ -26,6 +26,7 @@
import android.util.Log;
import com.android.internal.telephony.Connection;
+import com.android.services.telephony.common.Call;
import java.util.ArrayList;
import java.util.HashMap;
@@ -65,10 +66,9 @@
private static final String TAG = CallModeler.class.getSimpleName();
private static final int CALL_ID_START_VALUE = 1;
- private static final int INVALID_CALL_ID = -1;
private CallStateMonitor mCallStateMonitor;
- private HashMap<Connection, Integer> mCallIdMap = Maps.newHashMap();
+ private HashMap<Connection, Call> mCallMap = Maps.newHashMap();
private List<Listener> mListeners = Lists.newArrayList();
private AtomicInteger mNextCallId = new AtomicInteger(CALL_ID_START_VALUE);
@@ -86,6 +86,10 @@
break;
case CallStateMonitor.PHONE_DISCONNECT:
onDisconnect((AsyncResult) msg.obj);
+ break;
+ case CallStateMonitor.PHONE_STATE_CHANGED:
+ onPhoneStateChanged((AsyncResult) msg.obj);
+ break;
default:
break;
}
@@ -99,38 +103,44 @@
private void onNewRingingConnection(AsyncResult r) {
final Connection conn = (Connection) r.result;
- final int callId = getCallId(conn, true);
+ final Call call = getCallFromConnection(conn, true);
- for (Listener l : mListeners) {
- l.onNewCall(callId);
+ if (call != null) {
+ for (Listener l : mListeners) {
+ l.onNewCall(call);
+ }
}
}
private void onDisconnect(AsyncResult r) {
final Connection conn = (Connection) r.result;
- final int callId = getCallId(conn, false);
+ final Call call = getCallFromConnection(conn, false);
- if (INVALID_CALL_ID != callId) {
- mCallIdMap.remove(conn);
+ if (call != null) {
+ mCallMap.remove(conn);
for (Listener l : mListeners) {
- l.onDisconnect(callId);
+ l.onDisconnect(call);
}
}
}
+ private void onPhoneStateChanged(AsyncResult r) {
+ }
+
/**
* Gets an existing callId for a connection, or creates one
* if none exists.
*/
- private int getCallId(Connection conn, boolean createIfMissing) {
- int callId = INVALID_CALL_ID;
+ private Call getCallFromConnection(Connection conn, boolean createIfMissing) {
+ Call call = null;
// Find the call id or create if missing and requested.
if (conn != null) {
- if (mCallIdMap.containsKey(conn)) {
- callId = mCallIdMap.get(conn).intValue();
+ if (mCallMap.containsKey(conn)) {
+ call = mCallMap.get(conn);
} else if (createIfMissing) {
+ int callId;
int newNextCallId;
do {
callId = mNextCallId.get();
@@ -143,19 +153,20 @@
// The call to containsValue() is linear, however, most devices support a
// maximum of 7 connections so it's not expensive.
} while (!mNextCallId.compareAndSet(callId, newNextCallId) ||
- mCallIdMap.containsValue(callId));
+ mCallMap.containsValue(callId));
- mCallIdMap.put(conn, callId);
+ call = new Call(callId);
+ mCallMap.put(conn, call);
}
}
- return callId;
+ return call;
}
/**
* Listener interface for changes to Calls.
*/
public interface Listener {
- void onNewCall(int callId);
- void onDisconnect(int callId);
+ void onNewCall(Call call);
+ void onDisconnect(Call call);
}
}