diff --git a/telephony/java/com/android/internal/telephony/BaseCommands.java b/telephony/java/com/android/internal/telephony/BaseCommands.java index 3edca6669de0f..52f25f6b691c9 100644 --- a/telephony/java/com/android/internal/telephony/BaseCommands.java +++ b/telephony/java/com/android/internal/telephony/BaseCommands.java @@ -64,6 +64,7 @@ public abstract class BaseCommands implements CommandsInterface { protected RegistrantList mLineControlInfoRegistrants = new RegistrantList(); protected RegistrantList mT53ClirInfoRegistrants = new RegistrantList(); protected RegistrantList mT53AudCntrlInfoRegistrants = new RegistrantList(); + protected RegistrantList mRingbackToneRegistrants = new RegistrantList(); protected Registrant mSMSRegistrant; protected Registrant mNITZTimeRegistrant; @@ -569,6 +570,15 @@ public abstract class BaseCommands implements CommandsInterface { mT53AudCntrlInfoRegistrants.remove(h); } + public void registerForRingbackTone(Handler h, int what, Object obj) { + Registrant r = new Registrant (h, what, obj); + mRingbackToneRegistrants.add(r); + } + + public void unregisterForRingbackTone(Handler h) { + mRingbackToneRegistrants.remove(h); + } + //***** Protected Methods /** * Store new RadioState and send notification based on the changes diff --git a/telephony/java/com/android/internal/telephony/CommandsInterface.java b/telephony/java/com/android/internal/telephony/CommandsInterface.java index 63bdc2c422c62..9d835561be89a 100644 --- a/telephony/java/com/android/internal/telephony/CommandsInterface.java +++ b/telephony/java/com/android/internal/telephony/CommandsInterface.java @@ -525,6 +525,17 @@ public interface CommandsInterface { void registerForCdmaOtaProvision(Handler h,int what, Object obj); void unregisterForCdmaOtaProvision(Handler h); + /** + * Registers the handler when out-band ringback tone is needed.

+ * + * Messages received from this: + * Message.obj will be an AsyncResult + * AsyncResult.userObj = obj + * AsyncResult.result = boolean.

+ */ + void registerForRingbackTone(Handler h, int what, Object obj); + void unregisterForRingbackTone(Handler h); + /** * Supply the ICC PIN to the ICC card * diff --git a/telephony/java/com/android/internal/telephony/Phone.java b/telephony/java/com/android/internal/telephony/Phone.java index f32837fae4b68..fffd128b79a73 100644 --- a/telephony/java/com/android/internal/telephony/Phone.java +++ b/telephony/java/com/android/internal/telephony/Phone.java @@ -379,6 +379,23 @@ public interface Phone { void unregisterForIncomingRing(Handler h); + /** + * Notifies when out-band ringback tone is needed.

+ * + * Messages received from this: + * Message.obj will be an AsyncResult + * AsyncResult.userObj = obj + * AsyncResult.result = boolean, true to start play ringback tone + * and false to stop.

+ */ + void registerForRingbackTone(Handler h, int what, Object obj); + + /** + * Unregisters for ringback tone notification. + */ + + void unregisterForRingbackTone(Handler h); + /** * Notifies when a voice connection has disconnected, either due to local diff --git a/telephony/java/com/android/internal/telephony/PhoneBase.java b/telephony/java/com/android/internal/telephony/PhoneBase.java index e340f850e198d..1c62a82780b58 100644 --- a/telephony/java/com/android/internal/telephony/PhoneBase.java +++ b/telephony/java/com/android/internal/telephony/PhoneBase.java @@ -482,6 +482,16 @@ public abstract class PhoneBase extends Handler implements Phone { mServiceStateRegistrants.remove(h); } + // Inherited documentation suffices. + public void registerForRingbackTone(Handler h, int what, Object obj) { + mCM.registerForRingbackTone(h,what,obj); + } + + // Inherited documentation suffices. + public void unregisterForRingbackTone(Handler h) { + mCM.unregisterForRingbackTone(h); + } + /** * Subclasses of Phone probably want to replace this with a * version scoped to their packages diff --git a/telephony/java/com/android/internal/telephony/PhoneProxy.java b/telephony/java/com/android/internal/telephony/PhoneProxy.java index 711a48c8050f6..c4f663a20b89e 100644 --- a/telephony/java/com/android/internal/telephony/PhoneProxy.java +++ b/telephony/java/com/android/internal/telephony/PhoneProxy.java @@ -331,6 +331,14 @@ public class PhoneProxy extends Handler implements Phone { mActivePhone.unregisterForEcmTimerReset(h); } + public void registerForRingbackTone(Handler h, int what, Object obj) { + mActivePhone.registerForRingbackTone(h,what,obj); + } + + public void unregisterForRingbackTone(Handler h) { + mActivePhone.unregisterForRingbackTone(h); + } + public boolean getIccRecordsLoaded() { return mActivePhone.getIccRecordsLoaded(); } diff --git a/telephony/java/com/android/internal/telephony/RIL.java b/telephony/java/com/android/internal/telephony/RIL.java index cd6340e140602..d1b446be81b79 100644 --- a/telephony/java/com/android/internal/telephony/RIL.java +++ b/telephony/java/com/android/internal/telephony/RIL.java @@ -2313,6 +2313,7 @@ public final class RIL extends BaseCommands implements CommandsInterface { case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: ret = responseInts(p); break; case RIL_UNSOL_CDMA_INFO_REC: ret = responseCdmaInformationRecord(p); break; case RIL_UNSOL_OEM_HOOK_RAW: ret = responseRaw(p); break; + case RIL_UNSOL_RINGBACK_TONE: ret = responseInts(p); break; default: throw new RuntimeException("Unrecognized unsol response: " + response); @@ -2597,6 +2598,14 @@ public final class RIL extends BaseCommands implements CommandsInterface { mUnsolOemHookRawRegistrant.notifyRegistrant(new AsyncResult(null, ret, null)); } break; + + case RIL_UNSOL_RINGBACK_TONE: + if (RILJ_LOGD) unsljLogvRet(response, ret); + if (mRingbackToneRegistrants != null) { + boolean playtone = (((int[])ret)[0] == 1); + mRingbackToneRegistrants.notifyRegistrants( + new AsyncResult (null, playtone, null)); + } } } @@ -3209,6 +3218,7 @@ public final class RIL extends BaseCommands implements CommandsInterface { case RIL_UNSOL_CDMA_OTA_PROVISION_STATUS: return "UNSOL_CDMA_OTA_PROVISION_STATUS"; case RIL_UNSOL_CDMA_INFO_REC: return "UNSOL_CDMA_INFO_REC"; case RIL_UNSOL_OEM_HOOK_RAW: return "UNSOL_OEM_HOOK_RAW"; + case RIL_UNSOL_RINGBACK_TONE: return "UNSOL_RINGBACK_TONG"; default: return ""; } } diff --git a/telephony/java/com/android/internal/telephony/RILConstants.java b/telephony/java/com/android/internal/telephony/RILConstants.java index 90a82f9082323..3e9d8ad5bb1ac 100644 --- a/telephony/java/com/android/internal/telephony/RILConstants.java +++ b/telephony/java/com/android/internal/telephony/RILConstants.java @@ -258,4 +258,5 @@ cat include/telephony/ril.h | \ int RIL_UNSOL_CDMA_OTA_PROVISION_STATUS = 1026; int RIL_UNSOL_CDMA_INFO_REC = 1027; int RIL_UNSOL_OEM_HOOK_RAW = 1028; + int RIL_UNSOL_RINGBACK_TONE = 1029; }