Loading src/java/com/android/internal/telephony/Phone.java +74 −43 Original line number Diff line number Diff line Loading @@ -39,7 +39,6 @@ import android.telecom.VideoProfile; import android.telephony.CellIdentityCdma; import android.telephony.CellInfo; import android.telephony.CellInfoCdma; import android.telephony.DataConnectionRealTimeInfo; import android.telephony.PhoneStateListener; import android.telephony.RadioAccessFamily; import android.telephony.Rlog; Loading Loading @@ -1621,31 +1620,53 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { private int getCallForwardingIndicatorFromSharedPref() { int status = IccRecords.CALL_FORWARDING_STATUS_DISABLED; int subId = getSubId(); if (SubscriptionManager.isValidSubscriptionId(subId)) { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext); status = sp.getInt(CF_STATUS + subId, IccRecords.CALL_FORWARDING_STATUS_UNKNOWN); Rlog.d(LOG_TAG, "getCallForwardingIndicatorFromSharedPref: for subId " + subId + "= " + status); // Check for old preference if status is UNKNOWN for current subId. This part of the // code is needed only when upgrading from M to N. if (status == IccRecords.CALL_FORWARDING_STATUS_UNKNOWN) { String subscriberId = sp.getString(CF_ID, null); if (subscriberId != null) { String currentSubscriberId = getSubscriberId(); if (currentSubscriberId != null && currentSubscriberId.equals(subscriberId)) { if (subscriberId.equals(currentSubscriberId)) { // get call forwarding status from preferences status = sp.getInt(CF_STATUS, IccRecords.CALL_FORWARDING_STATUS_DISABLED); Rlog.d(LOG_TAG, "Call forwarding status from preference = " + status); setCallForwardingIndicatorInSharedPref( status == IccRecords.CALL_FORWARDING_STATUS_ENABLED ? true : false); Rlog.d(LOG_TAG, "getCallForwardingIndicatorFromSharedPref: " + status); } else { Rlog.d(LOG_TAG, "Call forwarding status retrieval returning DISABLED as status for " + "matching subscriberId not found"); Rlog.d(LOG_TAG, "getCallForwardingIndicatorFromSharedPref: returning " + "DISABLED as status for matching subscriberId not found"); } // get rid of old preferences. SharedPreferences.Editor editor = sp.edit(); editor.remove(CF_ID); editor.remove(CF_STATUS); editor.apply(); } } } else { Rlog.e(LOG_TAG, "getCallForwardingIndicatorFromSharedPref: invalid subId " + subId); } return status; } private void setCallForwardingIndicatorInSharedPref(boolean enable) { int status = enable ? IccRecords.CALL_FORWARDING_STATUS_ENABLED : IccRecords.CALL_FORWARDING_STATUS_DISABLED; int subId = getSubId(); Rlog.d(LOG_TAG, "setCallForwardingIndicatorInSharedPref: Storing status = " + status + " in pref " + CF_STATUS + subId); SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext); SharedPreferences.Editor editor = sp.edit(); String imsi = getSubscriberId(); editor.putInt(CF_STATUS, enable ? IccRecords.CALL_FORWARDING_STATUS_ENABLED : IccRecords.CALL_FORWARDING_STATUS_DISABLED); editor.putString(CF_ID, imsi); editor.putInt(CF_STATUS + subId, status); editor.apply(); } Loading Loading @@ -2060,13 +2081,14 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { /** sets the voice mail count of the phone and notifies listeners. */ public void setVoiceMessageCount(int countWaiting) { mVmCount = countWaiting; int subId = getSubId(); Rlog.d(LOG_TAG, "setVoiceMessageCount: Storing Voice Mail Count = " + countWaiting + " for mVmCountKey = " + VM_COUNT + getSubId() + " in preferences."); " for mVmCountKey = " + VM_COUNT + subId + " in preferences."); SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext); SharedPreferences.Editor editor = sp.edit(); editor.putInt(VM_COUNT + getSubId(), countWaiting); editor.putInt(VM_COUNT + subId, countWaiting); editor.apply(); // notify listeners of voice mail Loading @@ -2076,14 +2098,18 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { /** gets the voice mail count from preferences */ protected int getStoredVoiceMessageCount() { int countVoiceMessages = 0; int subId = getSubId(); if (SubscriptionManager.isValidSubscriptionId(subId)) { int invalidCount = -2; //-1 is not really invalid. It is used for unknown number of vm SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext); int countFromSP = sp.getInt(VM_COUNT + getSubId(), invalidCount); int countFromSP = sp.getInt(VM_COUNT + subId, invalidCount); if (countFromSP != invalidCount) { countVoiceMessages = countFromSP; Rlog.d(LOG_TAG, "getStoredVoiceMessageCount: from preference for subId " + subId + "= " + countVoiceMessages); } else { // Check for old preference if count not found for current subId. This part of the code // is needed only when upgrading from M to N. // Check for old preference if count not found for current subId. This part of the // code is needed only when upgrading from M to N. String subscriberId = sp.getString(VM_ID, null); if (subscriberId != null) { String currentSubscriberId = getSubscriberId(); Loading @@ -2091,10 +2117,12 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { if (currentSubscriberId != null && currentSubscriberId.equals(subscriberId)) { // get voice mail count from preferences countVoiceMessages = sp.getInt(VM_COUNT, 0); Rlog.d(LOG_TAG, "Voice Mail Count from preference = " + countVoiceMessages); setVoiceMessageCount(countVoiceMessages); Rlog.d(LOG_TAG, "getStoredVoiceMessageCount: from preference = " + countVoiceMessages); } else { Rlog.d(LOG_TAG, "Voicemail count retrieval returning 0 as count for matching " + "subscriberId not found"); Rlog.d(LOG_TAG, "getStoredVoiceMessageCount: returning 0 as count for " + "matching subscriberId not found"); } // get rid of old preferences. Loading @@ -2104,6 +2132,9 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { editor.apply(); } } } else { Rlog.e(LOG_TAG, "getStoredVoiceMessageCount: invalid subId " + subId); } return countVoiceMessages; } Loading tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java +61 −2 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.provider.Settings; import android.telephony.CarrierConfigManager; import android.telephony.CellLocation; import android.telephony.ServiceState; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.cdma.CdmaCellLocation; import android.telephony.gsm.GsmCellLocation; Loading Loading @@ -470,9 +471,13 @@ public class GsmCdmaPhoneTest extends TelephonyTest { SharedPreferences sharedPreferences = PreferenceManager. getDefaultSharedPreferences(mContext); assertEquals(IccRecords.CALL_FORWARDING_STATUS_DISABLED, sharedPreferences.getInt(Phone.CF_STATUS, sharedPreferences.getInt(Phone.CF_STATUS + mPhoneUT.getSubId(), IccRecords.CALL_FORWARDING_STATUS_ENABLED)); assertEquals(imsi, sharedPreferences.getString(Phone.CF_ID, null)); // clean up SharedPreferences.Editor editor = sharedPreferences.edit(); editor.remove(Phone.CF_STATUS + mPhoneUT.getSubId()); editor.apply(); } @Test Loading Loading @@ -636,4 +641,58 @@ public class GsmCdmaPhoneTest extends TelephonyTest { // verify wakeLock released assertEquals(false, mPhoneUT.getWakeLock().isHeld()); } @Test @SmallTest public void testCallForwardingIndicator() { doReturn(IccRecords.CALL_FORWARDING_STATUS_UNKNOWN).when(mSimRecords). getVoiceCallForwardingFlag(); // invalid subId doReturn(SubscriptionManager.INVALID_SUBSCRIPTION_ID).when(mSubscriptionController). getSubIdUsingPhoneId(anyInt()); assertEquals(false, mPhoneUT.getCallForwardingIndicator()); // valid subId, sharedPreference not present int subId1 = 0; int subId2 = 1; doReturn(subId1).when(mSubscriptionController).getSubIdUsingPhoneId(anyInt()); assertEquals(false, mPhoneUT.getCallForwardingIndicator()); // old sharedPreference present String imsi = "1234"; doReturn(imsi).when(mSimRecords).getIMSI(); SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext); SharedPreferences.Editor editor = sp.edit(); editor.putString(Phone.CF_ID, imsi); editor.putInt(Phone.CF_STATUS, IccRecords.CALL_FORWARDING_STATUS_ENABLED); editor.apply(); assertEquals(true, mPhoneUT.getCallForwardingIndicator()); // old sharedPreference should be removed now assertEquals(null, sp.getString(Phone.CF_ID, null)); assertEquals(IccRecords.CALL_FORWARDING_STATUS_UNKNOWN, sp.getInt(Phone.CF_ID, IccRecords.CALL_FORWARDING_STATUS_UNKNOWN)); // now verify value from new sharedPreference assertEquals(true, mPhoneUT.getCallForwardingIndicator()); // check for another subId doReturn(subId2).when(mSubscriptionController).getSubIdUsingPhoneId(anyInt()); assertEquals(false, mPhoneUT.getCallForwardingIndicator()); // set value for the new subId in sharedPreference editor.putInt(Phone.CF_STATUS + subId2, IccRecords.CALL_FORWARDING_STATUS_ENABLED); editor.apply(); assertEquals(true, mPhoneUT.getCallForwardingIndicator()); // switching back to previous subId, stored value should still be available doReturn(subId1).when(mSubscriptionController).getSubIdUsingPhoneId(anyInt()); assertEquals(true, mPhoneUT.getCallForwardingIndicator()); // cleanup editor.remove(Phone.CF_STATUS + subId1); editor.remove(Phone.CF_STATUS + subId2); editor.apply(); } } Loading
src/java/com/android/internal/telephony/Phone.java +74 −43 Original line number Diff line number Diff line Loading @@ -39,7 +39,6 @@ import android.telecom.VideoProfile; import android.telephony.CellIdentityCdma; import android.telephony.CellInfo; import android.telephony.CellInfoCdma; import android.telephony.DataConnectionRealTimeInfo; import android.telephony.PhoneStateListener; import android.telephony.RadioAccessFamily; import android.telephony.Rlog; Loading Loading @@ -1621,31 +1620,53 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { private int getCallForwardingIndicatorFromSharedPref() { int status = IccRecords.CALL_FORWARDING_STATUS_DISABLED; int subId = getSubId(); if (SubscriptionManager.isValidSubscriptionId(subId)) { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext); status = sp.getInt(CF_STATUS + subId, IccRecords.CALL_FORWARDING_STATUS_UNKNOWN); Rlog.d(LOG_TAG, "getCallForwardingIndicatorFromSharedPref: for subId " + subId + "= " + status); // Check for old preference if status is UNKNOWN for current subId. This part of the // code is needed only when upgrading from M to N. if (status == IccRecords.CALL_FORWARDING_STATUS_UNKNOWN) { String subscriberId = sp.getString(CF_ID, null); if (subscriberId != null) { String currentSubscriberId = getSubscriberId(); if (currentSubscriberId != null && currentSubscriberId.equals(subscriberId)) { if (subscriberId.equals(currentSubscriberId)) { // get call forwarding status from preferences status = sp.getInt(CF_STATUS, IccRecords.CALL_FORWARDING_STATUS_DISABLED); Rlog.d(LOG_TAG, "Call forwarding status from preference = " + status); setCallForwardingIndicatorInSharedPref( status == IccRecords.CALL_FORWARDING_STATUS_ENABLED ? true : false); Rlog.d(LOG_TAG, "getCallForwardingIndicatorFromSharedPref: " + status); } else { Rlog.d(LOG_TAG, "Call forwarding status retrieval returning DISABLED as status for " + "matching subscriberId not found"); Rlog.d(LOG_TAG, "getCallForwardingIndicatorFromSharedPref: returning " + "DISABLED as status for matching subscriberId not found"); } // get rid of old preferences. SharedPreferences.Editor editor = sp.edit(); editor.remove(CF_ID); editor.remove(CF_STATUS); editor.apply(); } } } else { Rlog.e(LOG_TAG, "getCallForwardingIndicatorFromSharedPref: invalid subId " + subId); } return status; } private void setCallForwardingIndicatorInSharedPref(boolean enable) { int status = enable ? IccRecords.CALL_FORWARDING_STATUS_ENABLED : IccRecords.CALL_FORWARDING_STATUS_DISABLED; int subId = getSubId(); Rlog.d(LOG_TAG, "setCallForwardingIndicatorInSharedPref: Storing status = " + status + " in pref " + CF_STATUS + subId); SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext); SharedPreferences.Editor editor = sp.edit(); String imsi = getSubscriberId(); editor.putInt(CF_STATUS, enable ? IccRecords.CALL_FORWARDING_STATUS_ENABLED : IccRecords.CALL_FORWARDING_STATUS_DISABLED); editor.putString(CF_ID, imsi); editor.putInt(CF_STATUS + subId, status); editor.apply(); } Loading Loading @@ -2060,13 +2081,14 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { /** sets the voice mail count of the phone and notifies listeners. */ public void setVoiceMessageCount(int countWaiting) { mVmCount = countWaiting; int subId = getSubId(); Rlog.d(LOG_TAG, "setVoiceMessageCount: Storing Voice Mail Count = " + countWaiting + " for mVmCountKey = " + VM_COUNT + getSubId() + " in preferences."); " for mVmCountKey = " + VM_COUNT + subId + " in preferences."); SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext); SharedPreferences.Editor editor = sp.edit(); editor.putInt(VM_COUNT + getSubId(), countWaiting); editor.putInt(VM_COUNT + subId, countWaiting); editor.apply(); // notify listeners of voice mail Loading @@ -2076,14 +2098,18 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { /** gets the voice mail count from preferences */ protected int getStoredVoiceMessageCount() { int countVoiceMessages = 0; int subId = getSubId(); if (SubscriptionManager.isValidSubscriptionId(subId)) { int invalidCount = -2; //-1 is not really invalid. It is used for unknown number of vm SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext); int countFromSP = sp.getInt(VM_COUNT + getSubId(), invalidCount); int countFromSP = sp.getInt(VM_COUNT + subId, invalidCount); if (countFromSP != invalidCount) { countVoiceMessages = countFromSP; Rlog.d(LOG_TAG, "getStoredVoiceMessageCount: from preference for subId " + subId + "= " + countVoiceMessages); } else { // Check for old preference if count not found for current subId. This part of the code // is needed only when upgrading from M to N. // Check for old preference if count not found for current subId. This part of the // code is needed only when upgrading from M to N. String subscriberId = sp.getString(VM_ID, null); if (subscriberId != null) { String currentSubscriberId = getSubscriberId(); Loading @@ -2091,10 +2117,12 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { if (currentSubscriberId != null && currentSubscriberId.equals(subscriberId)) { // get voice mail count from preferences countVoiceMessages = sp.getInt(VM_COUNT, 0); Rlog.d(LOG_TAG, "Voice Mail Count from preference = " + countVoiceMessages); setVoiceMessageCount(countVoiceMessages); Rlog.d(LOG_TAG, "getStoredVoiceMessageCount: from preference = " + countVoiceMessages); } else { Rlog.d(LOG_TAG, "Voicemail count retrieval returning 0 as count for matching " + "subscriberId not found"); Rlog.d(LOG_TAG, "getStoredVoiceMessageCount: returning 0 as count for " + "matching subscriberId not found"); } // get rid of old preferences. Loading @@ -2104,6 +2132,9 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { editor.apply(); } } } else { Rlog.e(LOG_TAG, "getStoredVoiceMessageCount: invalid subId " + subId); } return countVoiceMessages; } Loading
tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java +61 −2 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.provider.Settings; import android.telephony.CarrierConfigManager; import android.telephony.CellLocation; import android.telephony.ServiceState; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.cdma.CdmaCellLocation; import android.telephony.gsm.GsmCellLocation; Loading Loading @@ -470,9 +471,13 @@ public class GsmCdmaPhoneTest extends TelephonyTest { SharedPreferences sharedPreferences = PreferenceManager. getDefaultSharedPreferences(mContext); assertEquals(IccRecords.CALL_FORWARDING_STATUS_DISABLED, sharedPreferences.getInt(Phone.CF_STATUS, sharedPreferences.getInt(Phone.CF_STATUS + mPhoneUT.getSubId(), IccRecords.CALL_FORWARDING_STATUS_ENABLED)); assertEquals(imsi, sharedPreferences.getString(Phone.CF_ID, null)); // clean up SharedPreferences.Editor editor = sharedPreferences.edit(); editor.remove(Phone.CF_STATUS + mPhoneUT.getSubId()); editor.apply(); } @Test Loading Loading @@ -636,4 +641,58 @@ public class GsmCdmaPhoneTest extends TelephonyTest { // verify wakeLock released assertEquals(false, mPhoneUT.getWakeLock().isHeld()); } @Test @SmallTest public void testCallForwardingIndicator() { doReturn(IccRecords.CALL_FORWARDING_STATUS_UNKNOWN).when(mSimRecords). getVoiceCallForwardingFlag(); // invalid subId doReturn(SubscriptionManager.INVALID_SUBSCRIPTION_ID).when(mSubscriptionController). getSubIdUsingPhoneId(anyInt()); assertEquals(false, mPhoneUT.getCallForwardingIndicator()); // valid subId, sharedPreference not present int subId1 = 0; int subId2 = 1; doReturn(subId1).when(mSubscriptionController).getSubIdUsingPhoneId(anyInt()); assertEquals(false, mPhoneUT.getCallForwardingIndicator()); // old sharedPreference present String imsi = "1234"; doReturn(imsi).when(mSimRecords).getIMSI(); SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext); SharedPreferences.Editor editor = sp.edit(); editor.putString(Phone.CF_ID, imsi); editor.putInt(Phone.CF_STATUS, IccRecords.CALL_FORWARDING_STATUS_ENABLED); editor.apply(); assertEquals(true, mPhoneUT.getCallForwardingIndicator()); // old sharedPreference should be removed now assertEquals(null, sp.getString(Phone.CF_ID, null)); assertEquals(IccRecords.CALL_FORWARDING_STATUS_UNKNOWN, sp.getInt(Phone.CF_ID, IccRecords.CALL_FORWARDING_STATUS_UNKNOWN)); // now verify value from new sharedPreference assertEquals(true, mPhoneUT.getCallForwardingIndicator()); // check for another subId doReturn(subId2).when(mSubscriptionController).getSubIdUsingPhoneId(anyInt()); assertEquals(false, mPhoneUT.getCallForwardingIndicator()); // set value for the new subId in sharedPreference editor.putInt(Phone.CF_STATUS + subId2, IccRecords.CALL_FORWARDING_STATUS_ENABLED); editor.apply(); assertEquals(true, mPhoneUT.getCallForwardingIndicator()); // switching back to previous subId, stored value should still be available doReturn(subId1).when(mSubscriptionController).getSubIdUsingPhoneId(anyInt()); assertEquals(true, mPhoneUT.getCallForwardingIndicator()); // cleanup editor.remove(Phone.CF_STATUS + subId1); editor.remove(Phone.CF_STATUS + subId2); editor.apply(); } }