Merge "Add register methods in CallManager "do not merge"" into gingerbread

This commit is contained in:
John Wang
2010-08-04 18:54:55 -07:00
committed by Android (Google) Code Review
3 changed files with 305 additions and 67 deletions

View File

@@ -16,8 +16,6 @@
package com.android.internal.telephony;
import android.content.Context;
import android.os.AsyncResult;
import android.os.Handler;
@@ -25,7 +23,6 @@ import android.os.Message;
import android.os.RegistrantList;
import android.telephony.PhoneStateListener;
import java.util.ArrayList;
import java.util.List;
@@ -49,8 +46,23 @@ import java.util.List;
public final class CallManager {
private static final int EVENT_DISCONNECT = 100;
private static final int EVENT_CALL_STATE_CHANGED = 101;
private static final int EVENT_PRECISE_CALL_STATE_CHANGED = 101;
private static final int EVENT_NEW_RINGING_CONNECTION = 102;
private static final int EVENT_UNKNOWN_CONNECTION = 103;
private static final int EVENT_INCOMING_RING = 104;
private static final int EVENT_RINGBACK_TONE = 105;
private static final int EVENT_IN_CALL_VOICE_PRIVACY_ON = 106;
private static final int EVENT_IN_CALL_VOICE_PRIVACY_OFF = 107;
private static final int EVENT_CALL_WAITING = 108;
private static final int EVENT_DISPLAY_INFO = 109;
private static final int EVENT_SIGNAL_INFO = 110;
private static final int EVENT_CDMA_OTA_STATUS_CHANGE = 111;
private static final int EVENT_RESEND_INCALL_MUTE = 112;
private static final int EVENT_MMI_INITIATE = 113;
private static final int EVENT_MMI_COMPLETE = 114;
private static final int EVENT_ECM_TIMER_RESET = 115;
private static final int EVENT_SUBSCRIPTION_INFO_READY = 116;
private static final int EVENT_SUPP_SERVICE_FAILED = 117;
// Singleton instance
private static final CallManager INSTANCE = new CallManager();
@@ -89,15 +101,48 @@ public final class CallManager {
protected final RegistrantList mServiceStateRegistrants
= new RegistrantList();
protected final RegistrantList mMmiCompleteRegistrants
= new RegistrantList();
protected final RegistrantList mMmiRegistrants
= new RegistrantList();
protected final RegistrantList mUnknownConnectionRegistrants
= new RegistrantList();
protected final RegistrantList mRingbackToneRegistrants
= new RegistrantList();
protected final RegistrantList mInCallVoicePrivacyOnRegistrants
= new RegistrantList();
protected final RegistrantList mInCallVoicePrivacyOffRegistrants
= new RegistrantList();
protected final RegistrantList mCallWaitingRegistrants
= new RegistrantList();
protected final RegistrantList mDisplayInfoRegistrants
= new RegistrantList();
protected final RegistrantList mSignalInfoRegistrants
= new RegistrantList();
protected final RegistrantList mCdmaOtaStatusChangeRegistrants
= new RegistrantList();
protected final RegistrantList mResendIncallMuteRegistrants
= new RegistrantList();
protected final RegistrantList mMmiInitiateRegistrants
= new RegistrantList();
protected final RegistrantList mMmiCompleteRegistrants
= new RegistrantList();
protected final RegistrantList mEcmTimerResetRegistrants
= new RegistrantList();
protected final RegistrantList mSubscriptionInfoReadyRegistrants
= new RegistrantList();
protected final RegistrantList mSuppServiceFailedRegistrants
= new RegistrantList();
@@ -117,10 +162,29 @@ public final class CallManager {
return INSTANCE;
}
/**
* Get current coarse-grained voice call state.
* If the Call Manager has an active call and call waiting occurs,
* then the phone state is RINGING not OFFHOOK
*
*/
public Phone.State getState() {
Phone.State s = Phone.State.IDLE;
for(Phone phone : mPhones) {
if (phone.getState() == Phone.State.RINGING) {
return Phone.State.RINGING;
} else if (phone.getState() == Phone.State.OFFHOOK) {
s = Phone.State.OFFHOOK;
}
}
return s;
}
/**
* Register phone to CallManager
* @param phone
* @return
* @return true if register successfully
*/
public boolean registerPhone(Phone phone) {
if (phone != null && !mPhones.contains(phone)) {
@@ -159,13 +223,45 @@ public final class CallManager {
}
private void registerForPhoneStates(Phone phone) {
phone.registerForPreciseCallStateChanged(mHandler, EVENT_CALL_STATE_CHANGED, null);
phone.registerForPreciseCallStateChanged(mHandler, EVENT_PRECISE_CALL_STATE_CHANGED, null);
phone.registerForDisconnect(mHandler, EVENT_DISCONNECT, null);
phone.registerForNewRingingConnection(mHandler, EVENT_NEW_RINGING_CONNECTION, null);
phone.registerForUnknownConnection(mHandler, EVENT_UNKNOWN_CONNECTION, null);
phone.registerForIncomingRing(mHandler, EVENT_INCOMING_RING, null);
phone.registerForRingbackTone(mHandler, EVENT_RINGBACK_TONE, null);
phone.registerForInCallVoicePrivacyOn(mHandler, EVENT_IN_CALL_VOICE_PRIVACY_ON, null);
phone.registerForInCallVoicePrivacyOff(mHandler, EVENT_IN_CALL_VOICE_PRIVACY_OFF, null);
phone.registerForCallWaiting(mHandler, EVENT_CALL_WAITING, null);
phone.registerForDisplayInfo(mHandler, EVENT_DISPLAY_INFO, null);
phone.registerForSignalInfo(mHandler, EVENT_SIGNAL_INFO, null);
phone.registerForCdmaOtaStatusChange(mHandler, EVENT_CDMA_OTA_STATUS_CHANGE, null);
phone.registerForResendIncallMute(mHandler, EVENT_RESEND_INCALL_MUTE, null);
phone.registerForMmiInitiate(mHandler, EVENT_MMI_INITIATE, null);
phone.registerForMmiComplete(mHandler, EVENT_MMI_COMPLETE, null);
phone.registerForEcmTimerReset(mHandler, EVENT_ECM_TIMER_RESET, null);
phone.registerForSubscriptionInfoReady(mHandler, EVENT_SUBSCRIPTION_INFO_READY, null);
phone.registerForSuppServiceFailed(mHandler, EVENT_SUPP_SERVICE_FAILED, null);
}
private void unregisterForPhoneStates(Phone phone) {
phone.unregisterForPreciseCallStateChanged(mHandler);
phone.unregisterForDisconnect(mHandler);
phone.unregisterForNewRingingConnection(mHandler);
phone.unregisterForUnknownConnection(mHandler);
phone.unregisterForIncomingRing(mHandler);
phone.unregisterForRingbackTone(mHandler);
phone.unregisterForInCallVoicePrivacyOn(mHandler);
phone.unregisterForInCallVoicePrivacyOff(mHandler);
phone.unregisterForCallWaiting(mHandler);
phone.unregisterForDisplayInfo(mHandler);
phone.unregisterForSignalInfo(mHandler);
phone.unregisterForCdmaOtaStatusChange(mHandler);
phone.unregisterForResendIncallMute(mHandler);
phone.unregisterForMmiInitiate(mHandler);
phone.unregisterForMmiComplete(mHandler);
phone.unregisterForEcmTimerReset(mHandler);
phone.unregisterForSubscriptionInfoReady(mHandler);
phone.unregisterForSuppServiceFailed(mHandler);
}
/**
@@ -523,12 +619,16 @@ public final class CallManager {
* Notifies when a previously untracked non-ringing/waiting connection has appeared.
* This is likely due to some other entity (eg, SIM card application) initiating a call.
*/
public void registerForUnknownConnection(Handler h, int what, Object obj){}
public void registerForUnknownConnection(Handler h, int what, Object obj){
mUnknownConnectionRegistrants.addUnique(h, what, obj);
}
/**
* Unregisters for unknown connection notifications.
*/
public void unregisterForUnknownConnection(Handler h){}
public void unregisterForUnknownConnection(Handler h){
mUnknownConnectionRegistrants.remove(h);
}
/**
@@ -543,14 +643,18 @@ public final class CallManager {
* If Connection.isRinging() is true, then
* Connection.getCall() == Phone.getRingingCall()
*/
public void registerForNewRingingConnection(Handler h, int what, Object obj){}
public void registerForNewRingingConnection(Handler h, int what, Object obj){
mNewRingingConnectionRegistrants.addUnique(h, what, obj);
}
/**
* Unregisters for new ringing connection notification.
* Extraneous calls are tolerated silently
*/
public void unregisterForNewRingingConnection(Handler h){}
public void unregisterForNewRingingConnection(Handler h){
mNewRingingConnectionRegistrants.remove(h);
}
/**
* Notifies when an incoming call rings.<p>
@@ -560,14 +664,18 @@ public final class CallManager {
* AsyncResult.userObj = obj
* AsyncResult.result = a Connection. <p>
*/
public void registerForIncomingRing(Handler h, int what, Object obj){}
public void registerForIncomingRing(Handler h, int what, Object obj){
mIncomingRingRegistrants.addUnique(h, what, obj);
}
/**
* Unregisters for ring notification.
* Extraneous calls are tolerated silently
*/
public void unregisterForIncomingRing(Handler h){}
public void unregisterForIncomingRing(Handler h){
mIncomingRingRegistrants.remove(h);
}
/**
* Notifies when out-band ringback tone is needed.<p>
@@ -578,26 +686,32 @@ public final class CallManager {
* AsyncResult.result = boolean, true to start play ringback tone
* and false to stop. <p>
*/
public void registerForRingbackTone(Handler h, int what, Object obj){}
public void registerForRingbackTone(Handler h, int what, Object obj){
mRingbackToneRegistrants.addUnique(h, what, obj);
}
/**
* Unregisters for ringback tone notification.
*/
public void unregisterForRingbackTone(Handler h){}
public void unregisterForRingbackTone(Handler h){
mRingbackToneRegistrants.remove(h);
}
/**
* Registers the handler to reset the uplink mute state to get
* uplink audio.
*/
public void registerForResendIncallMute(Handler h, int what, Object obj){}
public void registerForResendIncallMute(Handler h, int what, Object obj){
mResendIncallMuteRegistrants.addUnique(h, what, obj);
}
/**
* Unregisters for resend incall mute notifications.
*/
public void unregisterForResendIncallMute(Handler h){}
public void unregisterForResendIncallMute(Handler h){
mResendIncallMuteRegistrants.remove(h);
}
/**
* Register for notifications of initiation of a new MMI code request.
@@ -610,13 +724,17 @@ public final class CallManager {
*
* <code>obj.result</code> will be an "MmiCode" object.
*/
public void registerForMmiInitiate(Handler h, int what, Object obj){}
public void registerForMmiInitiate(Handler h, int what, Object obj){
mMmiInitiateRegistrants.addUnique(h, what, obj);
}
/**
* Unregisters for new MMI initiate notification.
* Extraneous calls are tolerated silently
*/
public void unregisterForMmiInitiate(Handler h){}
public void unregisterForMmiInitiate(Handler h){
mMmiInitiateRegistrants.remove(h);
}
/**
* Register for notifications that an MMI request has completed
@@ -626,13 +744,17 @@ public final class CallManager {
* <code>Message.obj</code> will contain an AsyncResult.
* <code>obj.result</code> will be an "MmiCode" object
*/
public void registerForMmiComplete(Handler h, int what, Object obj){}
public void registerForMmiComplete(Handler h, int what, Object obj){
mMmiCompleteRegistrants.addUnique(h, what, obj);
}
/**
* Unregisters for MMI complete notification.
* Extraneous calls are tolerated silently
*/
public void unregisterForMmiComplete(Handler h){}
public void unregisterForMmiComplete(Handler h){
mMmiCompleteRegistrants.remove(h);
}
/**
* Registration point for Ecm timer reset
@@ -640,15 +762,17 @@ public final class CallManager {
* @param what user-defined message code
* @param obj placed in Message.obj
*/
public void registerForEcmTimerReset(Handler h, int what, Object obj){}
public void registerForEcmTimerReset(Handler h, int what, Object obj){
mEcmTimerResetRegistrants.addUnique(h, what, obj);
}
/**
* Unregister for notification for Ecm timer reset
* @param h Handler to be removed from the registrant list.
*/
public void unregisterForEcmTimerReset(Handler h){}
public void unregisterForEcmTimerReset(Handler h){
mEcmTimerResetRegistrants.remove(h);
}
/**
* Register for ServiceState changed.
@@ -663,25 +787,6 @@ public final class CallManager {
*/
public void unregisterForServiceStateChanged(Handler h){}
/**
* Register for Supplementary Service notifications from the network.
* Message.obj will contain an AsyncResult.
* AsyncResult.result will be a SuppServiceNotification instance.
*
* @param h Handler that receives the notification message.
* @param what User-defined message code.
* @param obj User object.
*/
public void registerForSuppServiceNotification(Handler h, int what, Object obj){}
/**
* Unregisters for Supplementary Service notifications.
* Extraneous calls are tolerated silently
*
* @param h Handler to be removed from the registrant list.
*/
public void unregisterForSuppServiceNotification(Handler h){}
/**
* Register for notifications when a supplementary service attempt fails.
* Message.obj will contain an AsyncResult.
@@ -690,7 +795,9 @@ public final class CallManager {
* @param what User-defined message code.
* @param obj User object.
*/
public void registerForSuppServiceFailed(Handler h, int what, Object obj){}
public void registerForSuppServiceFailed(Handler h, int what, Object obj){
mSuppServiceFailedRegistrants.addUnique(h, what, obj);
}
/**
* Unregister for notifications when a supplementary service attempt fails.
@@ -698,7 +805,9 @@ public final class CallManager {
*
* @param h Handler to be removed from the registrant list.
*/
public void unregisterForSuppServiceFailed(Handler h){}
public void unregisterForSuppServiceFailed(Handler h){
mSuppServiceFailedRegistrants.remove(h);
}
/**
* Register for notifications when a sInCall VoicePrivacy is enabled
@@ -707,14 +816,18 @@ public final class CallManager {
* @param what User-defined message code.
* @param obj User object.
*/
public void registerForInCallVoicePrivacyOn(Handler h, int what, Object obj){}
public void registerForInCallVoicePrivacyOn(Handler h, int what, Object obj){
mInCallVoicePrivacyOnRegistrants.addUnique(h, what, obj);
}
/**
* Unegister for notifications when a sInCall VoicePrivacy is enabled
* Unregister for notifications when a sInCall VoicePrivacy is enabled
*
* @param h Handler to be removed from the registrant list.
*/
public void unregisterForInCallVoicePrivacyOn(Handler h){}
public void unregisterForInCallVoicePrivacyOn(Handler h){
mInCallVoicePrivacyOnRegistrants.remove(h);
}
/**
* Register for notifications when a sInCall VoicePrivacy is disabled
@@ -723,14 +836,85 @@ public final class CallManager {
* @param what User-defined message code.
* @param obj User object.
*/
public void registerForInCallVoicePrivacyOff(Handler h, int what, Object obj){}
public void registerForInCallVoicePrivacyOff(Handler h, int what, Object obj){
mInCallVoicePrivacyOffRegistrants.addUnique(h, what, obj);
}
/**
* Unegister for notifications when a sInCall VoicePrivacy is disabled
* Unregister for notifications when a sInCall VoicePrivacy is disabled
*
* @param h Handler to be removed from the registrant list.
*/
public void unregisterForInCallVoicePrivacyOff(Handler h){}
public void unregisterForInCallVoicePrivacyOff(Handler h){
mInCallVoicePrivacyOffRegistrants.remove(h);
}
/**
* Register for notifications when CDMA call waiting comes
*
* @param h Handler that receives the notification message.
* @param what User-defined message code.
* @param obj User object.
*/
public void registerForCallWaiting(Handler h, int what, Object obj){
mCallWaitingRegistrants.addUnique(h, what, obj);
}
/**
* Unregister for notifications when CDMA Call waiting comes
* @param h Handler to be removed from the registrant list.
*/
public void unregisterForCallWaiting(Handler h){
mCallWaitingRegistrants.remove(h);
}
/**
* Register for signal information notifications from the network.
* Message.obj will contain an AsyncResult.
* AsyncResult.result will be a SuppServiceNotification instance.
*
* @param h Handler that receives the notification message.
* @param what User-defined message code.
* @param obj User object.
*/
public void registerForSignalInfo(Handler h, int what, Object obj){
mSignalInfoRegistrants.addUnique(h, what, obj);
}
/**
* Unregisters for signal information notifications.
* Extraneous calls are tolerated silently
*
* @param h Handler to be removed from the registrant list.
*/
public void unregisterForSignalInfo(Handler h){
mSignalInfoRegistrants.remove(h);
}
/**
* Register for display information notifications from the network.
* Message.obj will contain an AsyncResult.
* AsyncResult.result will be a SuppServiceNotification instance.
*
* @param h Handler that receives the notification message.
* @param what User-defined message code.
* @param obj User object.
*/
public void registerForDisplayInfo(Handler h, int what, Object obj){
mDisplayInfoRegistrants.addUnique(h, what, obj);
}
/**
* Unregisters for display information notifications.
* Extraneous calls are tolerated silently
*
* @param h Handler to be removed from the registrant list.
*/
public void unregisterForDisplayInfo(Handler h) {
mDisplayInfoRegistrants.remove(h);
}
/**
* Register for notifications when CDMA OTA Provision status change
@@ -739,13 +923,17 @@ public final class CallManager {
* @param what User-defined message code.
* @param obj User object.
*/
public void registerForCdmaOtaStatusChange(Handler h, int what, Object obj){}
public void registerForCdmaOtaStatusChange(Handler h, int what, Object obj){
mCdmaOtaStatusChangeRegistrants.addUnique(h, what, obj);
}
/**
* Unegister for notifications when CDMA OTA Provision status change
* Unregister for notifications when CDMA OTA Provision status change
* @param h Handler to be removed from the registrant list.
*/
public void unregisterForCdmaOtaStatusChange(Handler h){}
public void unregisterForCdmaOtaStatusChange(Handler h){
mCdmaOtaStatusChangeRegistrants.remove(h);
}
/**
* Registration point for subscription info ready
@@ -753,13 +941,17 @@ public final class CallManager {
* @param what what code of message when delivered
* @param obj placed in Message.obj
*/
public void registerForSubscriptionInfoReady(Handler h, int what, Object obj){}
public void registerForSubscriptionInfoReady(Handler h, int what, Object obj){
mSubscriptionInfoReadyRegistrants.addUnique(h, what, obj);
}
/**
* Unregister for notifications for subscription info
* @param h Handler to be removed from the registrant list.
*/
public void unregisterForSubscriptionInfoReady(Handler h){}
public void unregisterForSubscriptionInfoReady(Handler h){
mSubscriptionInfoReadyRegistrants.remove(h);
}
/* APIs to access foregroudCalls, backgroudCalls, and ringingCalls
* 1. APIs to access list of calls
@@ -974,9 +1166,57 @@ public final class CallManager {
case EVENT_DISCONNECT:
mDisconnectRegistrants.notifyRegistrants((AsyncResult) msg.obj);
break;
case EVENT_CALL_STATE_CHANGED:
case EVENT_PRECISE_CALL_STATE_CHANGED:
mPreciseCallStateRegistrants.notifyRegistrants((AsyncResult) msg.obj);
break;
case EVENT_NEW_RINGING_CONNECTION:
mNewRingingConnectionRegistrants.notifyRegistrants((AsyncResult) msg.obj);
break;
case EVENT_UNKNOWN_CONNECTION:
mUnknownConnectionRegistrants.notifyRegistrants((AsyncResult) msg.obj);
break;
case EVENT_INCOMING_RING:
mIncomingRingRegistrants.notifyRegistrants((AsyncResult) msg.obj);
break;
case EVENT_RINGBACK_TONE:
mRingbackToneRegistrants.notifyRegistrants((AsyncResult) msg.obj);
break;
case EVENT_IN_CALL_VOICE_PRIVACY_ON:
mInCallVoicePrivacyOnRegistrants.notifyRegistrants((AsyncResult) msg.obj);
break;
case EVENT_IN_CALL_VOICE_PRIVACY_OFF:
mInCallVoicePrivacyOffRegistrants.notifyRegistrants((AsyncResult) msg.obj);
break;
case EVENT_CALL_WAITING:
mCallWaitingRegistrants.notifyRegistrants((AsyncResult) msg.obj);
break;
case EVENT_DISPLAY_INFO:
mDisplayInfoRegistrants.notifyRegistrants((AsyncResult) msg.obj);
break;
case EVENT_SIGNAL_INFO:
mSignalInfoRegistrants.notifyRegistrants((AsyncResult) msg.obj);
break;
case EVENT_CDMA_OTA_STATUS_CHANGE:
mCdmaOtaStatusChangeRegistrants.notifyRegistrants((AsyncResult) msg.obj);
break;
case EVENT_RESEND_INCALL_MUTE:
mResendIncallMuteRegistrants.notifyRegistrants((AsyncResult) msg.obj);
break;
case EVENT_MMI_INITIATE:
mMmiInitiateRegistrants.notifyRegistrants((AsyncResult) msg.obj);
break;
case EVENT_MMI_COMPLETE:
mMmiCompleteRegistrants.notifyRegistrants((AsyncResult) msg.obj);
break;
case EVENT_ECM_TIMER_RESET:
mEcmTimerResetRegistrants.notifyRegistrants((AsyncResult) msg.obj);
break;
case EVENT_SUBSCRIPTION_INFO_READY:
mSubscriptionInfoReadyRegistrants.notifyRegistrants((AsyncResult) msg.obj);
break;
case EVENT_SUPP_SERVICE_FAILED:
mSuppServiceFailedRegistrants.notifyRegistrants((AsyncResult) msg.obj);
break;
}
}
};

View File

@@ -75,8 +75,7 @@ public final class CdmaCall extends Call {
public Phone
getPhone() {
//TODO, see GsmCall
return null;
return owner.phone;
}
public boolean isMultiparty() {

View File

@@ -70,8 +70,7 @@ class GsmCall extends Call {
public Phone
getPhone() {
//TODO
return null;
return owner.phone;
}
public boolean