Loading src/java/com/android/internal/telephony/GsmCdmaPhone.java +17 −7 Original line number Diff line number Diff line Loading @@ -1498,10 +1498,12 @@ public class GsmCdmaPhone extends Phone { private void storeVoiceMailNumber(String number) { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); SharedPreferences.Editor editor = sp.edit(); setVmSimImsi(getSubscriberId()); logd("storeVoiceMailNumber: mPrecisePhoneType=" + mPrecisePhoneType + " vmNumber=" + number); if (isPhoneTypeGsm()) { editor.putString(VM_NUMBER + getPhoneId(), number); editor.apply(); setVmSimImsi(getSubscriberId()); } else { editor.putString(VM_NUMBER_CDMA + getPhoneId(), number); editor.apply(); Loading @@ -1511,17 +1513,23 @@ public class GsmCdmaPhone extends Phone { @Override public String getVoiceMailNumber() { String number = null; if (isPhoneTypeGsm()) { if (isPhoneTypeGsm() || mSimRecords != null) { // Read from the SIM. If its null, try reading from the shared preference area. IccRecords r = mIccRecords.get(); IccRecords r = isPhoneTypeGsm() ? mIccRecords.get() : mSimRecords; number = (r != null) ? r.getVoiceMailNumber() : ""; if (TextUtils.isEmpty(number)) { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); number = sp.getString(VM_NUMBER + getPhoneId(), null); } String spName = isPhoneTypeGsm() ? VM_NUMBER : VM_NUMBER_CDMA; number = sp.getString(spName + getPhoneId(), null); logd("getVoiceMailNumber: from " + spName + " number=" + number); } else { logd("getVoiceMailNumber: from IccRecords number=" + number); } } if (!isPhoneTypeGsm() && TextUtils.isEmpty(number)) { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); number = sp.getString(VM_NUMBER_CDMA + getPhoneId(), null); logd("getVoiceMailNumber: from VM_NUMBER_CDMA number=" + number); } if (TextUtils.isEmpty(number)) { Loading Loading @@ -2674,8 +2682,10 @@ public class GsmCdmaPhone extends Phone { case EVENT_SET_VM_NUMBER_DONE: ar = (AsyncResult)msg.obj; if ((isPhoneTypeGsm() && IccVmNotSupportedException.class.isInstance(ar.exception)) || (!isPhoneTypeGsm() && IccException.class.isInstance(ar.exception))){ if (((isPhoneTypeGsm() || mSimRecords != null) && IccVmNotSupportedException.class.isInstance(ar.exception)) || (!isPhoneTypeGsm() && mSimRecords == null && IccException.class.isInstance(ar.exception))) { storeVoiceMailNumber(mVmNumber); ar.exception = null; } Loading tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java +22 −2 Original line number Diff line number Diff line Loading @@ -64,8 +64,8 @@ import androidx.test.filters.FlakyTest; import com.android.internal.telephony.test.SimulatedCommands; import com.android.internal.telephony.uicc.IccCardApplicationStatus; import com.android.internal.telephony.uicc.IccException; import com.android.internal.telephony.uicc.IccRecords; import com.android.internal.telephony.uicc.IccVmNotSupportedException; import com.android.internal.telephony.uicc.UiccController; import com.android.internal.telephony.uicc.UiccProfile; import com.android.internal.telephony.uicc.UiccSlot; Loading Loading @@ -565,18 +565,38 @@ public class GsmCdmaPhoneTest extends TelephonyTest { assertEquals(voiceMailNumber, mPhoneUT.getVoiceMailNumber()); // voicemail number from sharedPreference voiceMailNumber = "1234567893"; mPhoneUT.setVoiceMailNumber("alphaTag", voiceMailNumber, null); ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); verify(mSimRecords).setVoiceMailNumber(eq("alphaTag"), eq(voiceMailNumber), messageArgumentCaptor.capture()); // SIM does not support voicemail number (IccVmNotSupportedException) so should be saved in // shared pref Message msg = messageArgumentCaptor.getValue(); AsyncResult.forMessage(msg).exception = new IccException("setVoiceMailNumber not implemented"); new IccVmNotSupportedException("setVoiceMailNumber not implemented"); msg.sendToTarget(); waitForMs(50); assertEquals(voiceMailNumber, mPhoneUT.getVoiceMailNumber()); // voicemail number from SIM voiceMailNumber = "1234567894"; mPhoneUT.setVoiceMailNumber("alphaTag", voiceMailNumber, null); messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); verify(mSimRecords).setVoiceMailNumber(eq("alphaTag"), eq(voiceMailNumber), messageArgumentCaptor.capture()); // successfully saved on SIM msg = messageArgumentCaptor.getValue(); AsyncResult.forMessage(msg); msg.sendToTarget(); waitForMs(50); doReturn(voiceMailNumber).when(mSimRecords).getVoiceMailNumber(); assertEquals(voiceMailNumber, mPhoneUT.getVoiceMailNumber()); } @FlakyTest Loading Loading
src/java/com/android/internal/telephony/GsmCdmaPhone.java +17 −7 Original line number Diff line number Diff line Loading @@ -1498,10 +1498,12 @@ public class GsmCdmaPhone extends Phone { private void storeVoiceMailNumber(String number) { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); SharedPreferences.Editor editor = sp.edit(); setVmSimImsi(getSubscriberId()); logd("storeVoiceMailNumber: mPrecisePhoneType=" + mPrecisePhoneType + " vmNumber=" + number); if (isPhoneTypeGsm()) { editor.putString(VM_NUMBER + getPhoneId(), number); editor.apply(); setVmSimImsi(getSubscriberId()); } else { editor.putString(VM_NUMBER_CDMA + getPhoneId(), number); editor.apply(); Loading @@ -1511,17 +1513,23 @@ public class GsmCdmaPhone extends Phone { @Override public String getVoiceMailNumber() { String number = null; if (isPhoneTypeGsm()) { if (isPhoneTypeGsm() || mSimRecords != null) { // Read from the SIM. If its null, try reading from the shared preference area. IccRecords r = mIccRecords.get(); IccRecords r = isPhoneTypeGsm() ? mIccRecords.get() : mSimRecords; number = (r != null) ? r.getVoiceMailNumber() : ""; if (TextUtils.isEmpty(number)) { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); number = sp.getString(VM_NUMBER + getPhoneId(), null); } String spName = isPhoneTypeGsm() ? VM_NUMBER : VM_NUMBER_CDMA; number = sp.getString(spName + getPhoneId(), null); logd("getVoiceMailNumber: from " + spName + " number=" + number); } else { logd("getVoiceMailNumber: from IccRecords number=" + number); } } if (!isPhoneTypeGsm() && TextUtils.isEmpty(number)) { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); number = sp.getString(VM_NUMBER_CDMA + getPhoneId(), null); logd("getVoiceMailNumber: from VM_NUMBER_CDMA number=" + number); } if (TextUtils.isEmpty(number)) { Loading Loading @@ -2674,8 +2682,10 @@ public class GsmCdmaPhone extends Phone { case EVENT_SET_VM_NUMBER_DONE: ar = (AsyncResult)msg.obj; if ((isPhoneTypeGsm() && IccVmNotSupportedException.class.isInstance(ar.exception)) || (!isPhoneTypeGsm() && IccException.class.isInstance(ar.exception))){ if (((isPhoneTypeGsm() || mSimRecords != null) && IccVmNotSupportedException.class.isInstance(ar.exception)) || (!isPhoneTypeGsm() && mSimRecords == null && IccException.class.isInstance(ar.exception))) { storeVoiceMailNumber(mVmNumber); ar.exception = null; } Loading
tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java +22 −2 Original line number Diff line number Diff line Loading @@ -64,8 +64,8 @@ import androidx.test.filters.FlakyTest; import com.android.internal.telephony.test.SimulatedCommands; import com.android.internal.telephony.uicc.IccCardApplicationStatus; import com.android.internal.telephony.uicc.IccException; import com.android.internal.telephony.uicc.IccRecords; import com.android.internal.telephony.uicc.IccVmNotSupportedException; import com.android.internal.telephony.uicc.UiccController; import com.android.internal.telephony.uicc.UiccProfile; import com.android.internal.telephony.uicc.UiccSlot; Loading Loading @@ -565,18 +565,38 @@ public class GsmCdmaPhoneTest extends TelephonyTest { assertEquals(voiceMailNumber, mPhoneUT.getVoiceMailNumber()); // voicemail number from sharedPreference voiceMailNumber = "1234567893"; mPhoneUT.setVoiceMailNumber("alphaTag", voiceMailNumber, null); ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); verify(mSimRecords).setVoiceMailNumber(eq("alphaTag"), eq(voiceMailNumber), messageArgumentCaptor.capture()); // SIM does not support voicemail number (IccVmNotSupportedException) so should be saved in // shared pref Message msg = messageArgumentCaptor.getValue(); AsyncResult.forMessage(msg).exception = new IccException("setVoiceMailNumber not implemented"); new IccVmNotSupportedException("setVoiceMailNumber not implemented"); msg.sendToTarget(); waitForMs(50); assertEquals(voiceMailNumber, mPhoneUT.getVoiceMailNumber()); // voicemail number from SIM voiceMailNumber = "1234567894"; mPhoneUT.setVoiceMailNumber("alphaTag", voiceMailNumber, null); messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); verify(mSimRecords).setVoiceMailNumber(eq("alphaTag"), eq(voiceMailNumber), messageArgumentCaptor.capture()); // successfully saved on SIM msg = messageArgumentCaptor.getValue(); AsyncResult.forMessage(msg); msg.sendToTarget(); waitForMs(50); doReturn(voiceMailNumber).when(mSimRecords).getVoiceMailNumber(); assertEquals(voiceMailNumber, mPhoneUT.getVoiceMailNumber()); } @FlakyTest Loading