SL4A: Expose Voice mail related APIs.
1. Expose TelephonyManager.getVoiceMessageCount
2. Add Listener for LISTEN_MESSAGE_WAITING_INDICATOR
Change-Id: I5e92dd2c55b8f63c9dcc346cbec7d0cb5c52f860
diff --git a/Common/src/com/googlecode/android_scripting/facade/tele/PhoneFacade.java b/Common/src/com/googlecode/android_scripting/facade/tele/PhoneFacade.java
index a325f86..6c5da99 100644
--- a/Common/src/com/googlecode/android_scripting/facade/tele/PhoneFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/tele/PhoneFacade.java
@@ -54,6 +54,8 @@
.DataConnectionStateChangeListener;
import com.googlecode.android_scripting.facade.tele.TelephonyStateListeners
.ServiceStateChangeListener;
+import com.googlecode.android_scripting.facade.tele.TelephonyStateListeners
+ .VoiceMailStateChangeListener;
import com.googlecode.android_scripting.jsonrpc.RpcReceiver;
import com.googlecode.android_scripting.rpc.Rpc;
import com.googlecode.android_scripting.rpc.RpcDefault;
@@ -139,6 +141,8 @@
mStateListeners.mDataConnectionRTInfoChangeListener =
new DataConnectionRealTimeInfoChangeListener(mEventFacade,
subId);
+ mStateListeners.mVoiceMailStateChangeListener =
+ new VoiceMailStateChangeListener(mEventFacade, subId);
StateChangeListeners.put(subId, mStateListeners);
}
@@ -537,6 +541,50 @@
}
}
+ @Rpc(description = "Starts tracking voice mail state change " +
+ "for default subscription ID.")
+ public Boolean phoneStartTrackingVoiceMailStateChange() {
+ return phoneStartTrackingVoiceMailStateChangeForSubscription(
+ SubscriptionManager.getDefaultSubId());
+ }
+
+ @Rpc(description = "Starts tracking voice mail state change " +
+ "for specified subscription ID.")
+ public Boolean phoneStartTrackingVoiceMailStateChangeForSubscription(
+ @RpcParameter(name = "subId") Integer subId) {
+ try {
+ mTelephonyManager.listen(
+ StateChangeListeners.get(subId).mVoiceMailStateChangeListener,
+ VoiceMailStateChangeListener.sListeningStates);
+ return true;
+ } catch (Exception e) {
+ Log.e("Invalid subscription ID");
+ return false;
+ }
+ }
+
+ @Rpc(description = "Stops tracking voice mail state change " +
+ "for default subscription ID.")
+ public Boolean phoneStopTrackingVoiceMailStateChange() {
+ return phoneStopTrackingVoiceMailStateChangeForSubscription(
+ SubscriptionManager.getDefaultSubId());
+ }
+
+ @Rpc(description = "Stops tracking voice mail state change " +
+ "for specified subscription ID.")
+ public Boolean phoneStopTrackingVoiceMailStateChangeForSubscription(
+ @RpcParameter(name = "subId") Integer subId) {
+ try {
+ mTelephonyManager.listen(
+ StateChangeListeners.get(subId).mVoiceMailStateChangeListener,
+ PhoneStateListener.LISTEN_NONE);
+ return true;
+ } catch (Exception e) {
+ Log.e("Invalid subscription ID");
+ return false;
+ }
+ }
+
//FIXME: b/20917712 to support videoCall parameter in Extras
@Deprecated
@Rpc(description = "Calls a phone by resolving a generic URI.")
@@ -950,6 +998,17 @@
return mTelephonyManager.getVoiceMailNumber(subId);
}
+ @Rpc(description = "Get voice message count for specified subscription ID.")
+ public Integer getVoiceMailCountForSubscription(
+ @RpcParameter(name = "subId") Integer subId) {
+ return mTelephonyManager.getVoiceMessageCount(subId);
+ }
+
+ @Rpc(description = "Get voice message count for default subscription ID.")
+ public Integer getVoiceMailCount() {
+ return mTelephonyManager.getVoiceMessageCount();
+ }
+
@Rpc(description = "Returns true if the device is in roaming state" +
"for default subscription ID")
public Boolean checkNetworkRoaming() {
@@ -1200,6 +1259,7 @@
return mTelephonyManager.isVideoCallingEnabled();
}
+
@Rpc(description = "Returns a boolean of isImsRegistered()")
public Boolean isImsRegistered() {
return mTelephonyManager.isImsRegistered();
@@ -1260,6 +1320,8 @@
mDataConnectionStateChangeListener;
private DataConnectionRealTimeInfoChangeListener
mDataConnectionRTInfoChangeListener;
+ private VoiceMailStateChangeListener
+ mVoiceMailStateChangeListener;
}
@Override
diff --git a/Common/src/com/googlecode/android_scripting/facade/tele/TelephonyStateListeners.java b/Common/src/com/googlecode/android_scripting/facade/tele/TelephonyStateListeners.java
index 88888ba..24797e4 100644
--- a/Common/src/com/googlecode/android_scripting/facade/tele/TelephonyStateListeners.java
+++ b/Common/src/com/googlecode/android_scripting/facade/tele/TelephonyStateListeners.java
@@ -308,4 +308,31 @@
}
}
+ public static class VoiceMailStateChangeListener extends PhoneStateListener {
+
+ private final EventFacade mEventFacade;
+
+ public static final int sListeningStates =
+ PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR;
+
+ public VoiceMailStateChangeListener(EventFacade ef) {
+ super();
+ mEventFacade = ef;
+ }
+
+ public VoiceMailStateChangeListener(EventFacade ef, int subId) {
+ super(subId);
+ mEventFacade = ef;
+ }
+
+ @Override
+ public void onMessageWaitingIndicatorChanged(boolean messageWaitingIndicator) {
+ Bundle event = new Bundle();
+ event.putBoolean("MessageWaitingIndicator", messageWaitingIndicator);
+
+ mEventFacade.postEvent(
+ "onMessageWaitingIndicatorChanged", event);
+ }
+ }
+
}