Fix ImsPhone.processDisconnectReason() function
- Escape "|" (pipe) symbol.
- Add unit test
Bug: 29581592
Change-Id: I4c7f5758478ab8360fad8a7b97055bbaaa7805bf
diff --git a/src/java/com/android/internal/telephony/Phone.java b/src/java/com/android/internal/telephony/Phone.java
index abf7100..4c97c25 100644
--- a/src/java/com/android/internal/telephony/Phone.java
+++ b/src/java/com/android/internal/telephony/Phone.java
@@ -267,7 +267,7 @@
public static final String EXTRA_KEY_ALERT_TITLE = "alertTitle";
public static final String EXTRA_KEY_ALERT_MESSAGE = "alertMessage";
public static final String EXTRA_KEY_ALERT_SHOW = "alertShow";
- protected static final String EXTRA_KEY_NOTIFICATION_MESSAGE = "notificationMessage";
+ public static final String EXTRA_KEY_NOTIFICATION_MESSAGE = "notificationMessage";
private final RegistrantList mPreciseCallStateRegistrants
= new RegistrantList();
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhone.java b/src/java/com/android/internal/telephony/imsphone/ImsPhone.java
index a18b8b2..8a6726b 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhone.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhone.java
@@ -1476,7 +1476,7 @@
com.android.internal.R.array.wfcOperatorErrorNotificationMessages);
for (int i = 0; i < wfcOperatorErrorCodes.length; i++) {
- String[] codes = wfcOperatorErrorCodes[i].split("|");
+ String[] codes = wfcOperatorErrorCodes[i].split("\\|");
if (codes.length != 2) {
Rlog.e(LOG_TAG, "Invalid carrier config: " + wfcOperatorErrorCodes[i]);
continue;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java b/tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java
index 612be4a..ef841f2 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java
@@ -303,6 +303,40 @@
}
@Override
+ public void sendOrderedBroadcast(Intent intent, String receiverPermission) {
+ logd("sendOrderedBroadcast called for " + intent.getAction());
+ sendBroadcast(intent);
+ }
+
+ @Override
+ public void sendOrderedBroadcast(Intent intent, String receiverPermission,
+ BroadcastReceiver resultReceiver, Handler scheduler, int initialCode,
+ String initialData, Bundle initialExtras) {
+ sendOrderedBroadcast(intent, receiverPermission);
+ if (resultReceiver != null) {
+ synchronized (mOrderedBroadcastReceivers) {
+ mOrderedBroadcastReceivers.put(intent, resultReceiver);
+ }
+ }
+ }
+
+ @Override
+ public void sendOrderedBroadcast(Intent intent, String receiverPermission, Bundle options,
+ BroadcastReceiver resultReceiver, Handler scheduler, int initialCode,
+ String initialData, Bundle initialExtras) {
+ sendOrderedBroadcast(intent, receiverPermission, resultReceiver, scheduler,
+ initialCode, initialData, initialExtras);
+ }
+
+ @Override
+ public void sendOrderedBroadcast(Intent intent, String receiverPermission, int appOp,
+ BroadcastReceiver resultReceiver, Handler scheduler, int initialCode,
+ String initialData, Bundle initialExtras) {
+ sendOrderedBroadcast(intent, receiverPermission, resultReceiver, scheduler,
+ initialCode, initialData, initialExtras);
+ }
+
+ @Override
public void sendBroadcastAsUser(Intent intent, UserHandle user) {
sendBroadcast(intent);
}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java
index f0ca274..ecac444 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java
@@ -18,6 +18,7 @@
import android.app.Activity;
import android.app.IApplicationThread;
+import android.content.BroadcastReceiver;
import android.content.IIntentReceiver;
import android.content.Intent;
import android.os.AsyncResult;
@@ -25,11 +26,15 @@
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
+import android.os.PersistableBundle;
import android.os.SystemProperties;
+import android.telephony.CarrierConfigManager;
import android.test.suitebuilder.annotation.SmallTest;
import com.android.ims.ImsCallProfile;
import com.android.ims.ImsEcbmStateListener;
+import com.android.ims.ImsManager;
+import com.android.ims.ImsReasonInfo;
import com.android.ims.ImsStreamMediaProfile;
import com.android.ims.ImsUtInterface;
import com.android.internal.telephony.Call;
@@ -64,6 +69,7 @@
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.times;
@@ -566,4 +572,42 @@
// verify wakeLock released
assertEquals(false, mImsPhoneUT.getWakeLock().isHeld());
}
+
+ @Test
+ @SmallTest
+ public void testProcessDisconnectReason() throws Exception {
+ // set up CarrierConfig
+ PersistableBundle bundle = mContextFixture.getCarrierConfigBundle();
+ bundle.putStringArray(CarrierConfigManager.KEY_WFC_OPERATOR_ERROR_CODES_STRING_ARRAY,
+ new String[]{"REG09|0"});
+
+ // set up overlays
+ String title = "title";
+ String messageAlert = "Alert!";
+ String messageNotification = "Notification!";
+ mContextFixture.putStringArrayResource(
+ com.android.internal.R.array.wfcOperatorErrorAlertMessages,
+ new String[]{messageAlert});
+ mContextFixture.putStringArrayResource(
+ com.android.internal.R.array.wfcOperatorErrorNotificationMessages,
+ new String[]{messageNotification});
+ mContextFixture.putResource(com.android.internal.R.string.wfcRegErrorTitle, title);
+
+ mImsPhoneUT.processDisconnectReason(
+ new ImsReasonInfo(ImsReasonInfo.CODE_REGISTRATION_ERROR, 0, "REG09"));
+
+ // TODO: Verify that WFC has been turned off (can't do it right now because
+ // setWfcSetting is static).
+ //verify(mImsManager).setWfcSetting(any(), eq(false));
+
+ ArgumentCaptor<Intent> intent = ArgumentCaptor.forClass(Intent.class);
+ verify(mContext).sendOrderedBroadcast(
+ intent.capture(), anyString(), any(BroadcastReceiver.class), any(),
+ eq(Activity.RESULT_OK), anyString(), any());
+ assertEquals(ImsManager.ACTION_IMS_REGISTRATION_ERROR, intent.getValue().getAction());
+ assertEquals(title, intent.getValue().getStringExtra(Phone.EXTRA_KEY_ALERT_TITLE));
+ assertEquals(messageAlert, intent.getValue().getStringExtra(Phone.EXTRA_KEY_ALERT_MESSAGE));
+ assertEquals(messageNotification,
+ intent.getValue().getStringExtra(Phone.EXTRA_KEY_NOTIFICATION_MESSAGE));
+ }
}