Resp. handling of CLIR/P, COLR/P, Call Barring
Adding fixes to properly display service status
on the UI for IMS (UT) CLIR/P, COLR/P and Call
Barring queries.
Bug: 17321315
Change-Id: I17823c3786a0e9a24c89480b7537dccc549c9516
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneMmiCode.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneMmiCode.java
index 540b467..04aab64 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneMmiCode.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneMmiCode.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.content.res.Resources;
import android.os.AsyncResult;
+import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.telephony.PhoneNumberUtils;
@@ -28,6 +29,7 @@
import com.android.ims.ImsException;
import com.android.ims.ImsReasonInfo;
+import com.android.ims.ImsSsInfo;
import com.android.ims.ImsUtInterface;
import com.android.internal.telephony.CallForwardInfo;
import com.android.internal.telephony.CommandException;
@@ -141,6 +143,23 @@
private static final int NUM_PRESENTATION_ALLOWED = 0;
private static final int NUM_PRESENTATION_RESTRICTED = 1;
+ //***** Supplementary Service Query Bundle Keys
+ // Used by IMS Service layer to put supp. serv. query
+ // responses into the ssInfo Bundle.
+ public static final String UT_BUNDLE_KEY_CLIR = "queryClir";
+ public static final String UT_BUNDLE_KEY_SSINFO = "imsSsInfo";
+
+ //***** Calling Line Identity Restriction Constants
+ // The 'm' parameter from TS 27.007 7.7
+ private static final int CLIR_NOT_PROVISIONED = 0;
+ private static final int CLIR_PROVISIONED_PERMANENT = 1;
+ private static final int CLIR_PRESENTATION_RESTRICTED_TEMPORARY = 3;
+ private static final int CLIR_PRESENTATION_ALLOWED_TEMPORARY = 4;
+ // The 'n' parameter from TS 27.007 7.7
+ private static final int CLIR_DEFAULT = 0;
+ private static final int CLIR_INVOCATION = 1;
+ private static final int CLIR_SUPPRESSION = 2;
+
//***** Instance Variables
private ImsPhone mPhone;
@@ -835,7 +854,7 @@
} else if (isInterrogate()) {
try {
mPhone.mCT.getUtInterface()
- .queryCOLR(obtainMessage(EVENT_QUERY_COMPLETE, this));
+ .queryCOLR(obtainMessage(EVENT_SUPP_SVC_QUERY_COMPLETE, this));
} catch (ImsException e) {
Rlog.d(LOG_TAG, "Could not get UT handle for queryCOLR.");
}
@@ -1011,6 +1030,11 @@
onSuppSvcQueryComplete(ar);
break;
+ case EVENT_GET_CLIR_COMPLETE:
+ ar = (AsyncResult) (msg.obj);
+ onQueryClirComplete(ar);
+ break;
+
default:
break;
}
@@ -1294,6 +1318,138 @@
} else {
sb.append(getErrorMessage(ar));
}
+ } else {
+ mState = State.FAILED;
+ ImsSsInfo ssInfo = null;
+ if (ar.result instanceof Bundle) {
+ Rlog.d(LOG_TAG, "Received CLIP/COLP/COLR Response.");
+ // Response for CLIP, COLP and COLR queries.
+ Bundle ssInfoResp = (Bundle) ar.result;
+ ssInfo = (ImsSsInfo) ssInfoResp.getParcelable(UT_BUNDLE_KEY_SSINFO);
+ if (ssInfo != null) {
+ Rlog.d(LOG_TAG, "ImsSsInfo mStatus = " + ssInfo.mStatus);
+ if (ssInfo.mStatus == ImsSsInfo.DISABLED) {
+ sb.append(mContext.getText(com.android.internal.R.string.serviceDisabled));
+ mState = State.COMPLETE;
+ } else if (ssInfo.mStatus == ImsSsInfo.ENABLED) {
+ sb.append(mContext.getText(com.android.internal.R.string.serviceEnabled));
+ mState = State.COMPLETE;
+ } else {
+ sb.append(mContext.getText(com.android.internal.R.string.mmiError));
+ }
+ } else {
+ sb.append(mContext.getText(com.android.internal.R.string.mmiError));
+ }
+
+ } else {
+ Rlog.d(LOG_TAG, "Received Call Barring Response.");
+ // Response for Call Barring queries.
+ int[] cbInfos = (int[]) ar.result;
+ // Check if ImsPhone has received call barring
+ // enabled for service class voice.
+ if (cbInfos[0] == 1) {
+ sb.append(mContext.getText(com.android.internal.R.string.serviceEnabled));
+ mState = State.COMPLETE;
+ } else {
+ sb.append(mContext.getText(com.android.internal.R.string.serviceDisabled));
+ mState = State.COMPLETE;
+ }
+ }
+
+ }
+
+ mMessage = sb;
+ mPhone.onMMIDone(this);
+ }
+
+ private void onQueryClirComplete(AsyncResult ar) {
+ StringBuilder sb = new StringBuilder(getScString());
+ sb.append("\n");
+ mState = State.FAILED;
+
+ if (ar.exception != null) {
+
+ if (ar.exception instanceof ImsException) {
+ ImsException error = (ImsException) ar.exception;
+ if (error.getMessage() != null) {
+ sb.append(error.getMessage());
+ } else {
+ sb.append(getErrorMessage(ar));
+ }
+ }
+ } else {
+ Bundle ssInfo = (Bundle) ar.result;
+ int[] clirInfo = ssInfo.getIntArray(UT_BUNDLE_KEY_CLIR);
+ // clirInfo[0] = The 'n' parameter from TS 27.007 7.7
+ // clirInfo[1] = The 'm' parameter from TS 27.007 7.7
+ Rlog.d(LOG_TAG, "CLIR param n=" + clirInfo[0]
+ + " m=" + clirInfo[1]);
+
+ // 'm' parameter.
+ switch (clirInfo[1]) {
+ case CLIR_NOT_PROVISIONED:
+ sb.append(mContext.getText(
+ com.android.internal.R.string.serviceNotProvisioned));
+ mState = State.COMPLETE;
+ break;
+ case CLIR_PROVISIONED_PERMANENT:
+ sb.append(mContext.getText(
+ com.android.internal.R.string.CLIRPermanent));
+ mState = State.COMPLETE;
+ break;
+ case CLIR_PRESENTATION_RESTRICTED_TEMPORARY:
+ // 'n' parameter.
+ switch (clirInfo[0]) {
+ case CLIR_DEFAULT:
+ sb.append(mContext.getText(
+ com.android.internal.R.string.CLIRDefaultOnNextCallOn));
+ mState = State.COMPLETE;
+ break;
+ case CLIR_INVOCATION:
+ sb.append(mContext.getText(
+ com.android.internal.R.string.CLIRDefaultOnNextCallOn));
+ mState = State.COMPLETE;
+ break;
+ case CLIR_SUPPRESSION:
+ sb.append(mContext.getText(
+ com.android.internal.R.string.CLIRDefaultOnNextCallOff));
+ mState = State.COMPLETE;
+ break;
+ default:
+ sb.append(mContext.getText(
+ com.android.internal.R.string.mmiError));
+ mState = State.FAILED;
+ }
+ break;
+ case CLIR_PRESENTATION_ALLOWED_TEMPORARY:
+ // 'n' parameter.
+ switch (clirInfo[0]) {
+ case CLIR_DEFAULT:
+ sb.append(mContext.getText(
+ com.android.internal.R.string.CLIRDefaultOffNextCallOff));
+ mState = State.COMPLETE;
+ break;
+ case CLIR_INVOCATION:
+ sb.append(mContext.getText(
+ com.android.internal.R.string.CLIRDefaultOffNextCallOn));
+ mState = State.COMPLETE;
+ break;
+ case CLIR_SUPPRESSION:
+ sb.append(mContext.getText(
+ com.android.internal.R.string.CLIRDefaultOffNextCallOff));
+ mState = State.COMPLETE;
+ break;
+ default:
+ sb.append(mContext.getText(
+ com.android.internal.R.string.mmiError));
+ mState = State.FAILED;
+ }
+ break;
+ default:
+ sb.append(mContext.getText(
+ com.android.internal.R.string.mmiError));
+ mState = State.FAILED;
+ }
}
mMessage = sb;