Loading src/java/com/android/internal/telephony/GsmCdmaPhone.java +1 −0 Original line number Diff line number Diff line Loading @@ -2065,6 +2065,7 @@ public class GsmCdmaPhone extends Phone { private void syncClirSetting() { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); int clirSetting = sp.getInt(CLIR_KEY + getPhoneId(), -1); Rlog.i(LOG_TAG, "syncClirSetting: " + CLIR_KEY + getPhoneId() + "=" + clirSetting); if (clirSetting >= 0) { mCi.setCLIR(clirSetting, null); } Loading src/java/com/android/internal/telephony/Phone.java +2 −0 Original line number Diff line number Diff line Loading @@ -1333,6 +1333,8 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); SharedPreferences.Editor editor = sp.edit(); editor.putInt(CLIR_KEY + getPhoneId(), commandInterfaceCLIRMode); Rlog.i(LOG_TAG, "saveClirSetting: " + CLIR_KEY + getPhoneId() + "=" + commandInterfaceCLIRMode); // Commit and log the result. if (!editor.commit()) { Loading src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java +31 −2 Original line number Diff line number Diff line Loading @@ -113,6 +113,10 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { void onPhoneStateChanged(PhoneConstants.State oldState, PhoneConstants.State newState); } public interface SharedPreferenceProxy { SharedPreferences getDefaultSharedPreferences(Context context); } private static final boolean DBG = true; // When true, dumps the state of ImsPhoneCallTracker after changes to foreground and background Loading Loading @@ -598,6 +602,13 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { */ private boolean mShouldUpdateImsConfigOnDisconnect = false; /** * Default implementation for retrieving shared preferences; uses the actual PreferencesManager. */ private SharedPreferenceProxy mSharedPreferenceProxy = (Context context) -> { return PreferenceManager.getDefaultSharedPreferences(context); }; // Callback fires when ImsManager MMTel Feature changes state private ImsServiceProxy.INotifyStatusChanged mNotifyStatusChangedCallback = () -> { try { Loading Loading @@ -678,6 +689,16 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { sendEmptyMessage(EVENT_GET_IMS_SERVICE); } /** * Test-only method used to mock out access to the shared preferences through the * {@link PreferenceManager}. * @param sharedPreferenceProxy */ @VisibleForTesting public void setSharedPreferenceProxy(SharedPreferenceProxy sharedPreferenceProxy) { mSharedPreferenceProxy = sharedPreferenceProxy; } private int getPackageUid(Context context, String pkg) { if (pkg == null) { return NetworkStats.UID_ALL; Loading Loading @@ -794,8 +815,16 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { public Connection dial(String dialString, int videoState, Bundle intentExtras) throws CallStateException { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mPhone.getContext()); int oirMode = sp.getInt(Phone.CLIR_KEY, CommandsInterface.CLIR_DEFAULT); int oirMode; if (mSharedPreferenceProxy != null && mPhone.getDefaultPhone() != null) { SharedPreferences sp = mSharedPreferenceProxy.getDefaultSharedPreferences( mPhone.getContext()); oirMode = sp.getInt(Phone.CLIR_KEY + mPhone.getDefaultPhone().getPhoneId(), CommandsInterface.CLIR_DEFAULT); } else { loge("dial; could not get default CLIR mode."); oirMode = CommandsInterface.CLIR_DEFAULT; } return dial(dialString, oirMode, videoState, intentExtras); } Loading tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneCallTrackerTest.java +32 −0 Original line number Diff line number Diff line Loading @@ -37,12 +37,14 @@ import static org.mockito.Mockito.verify; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; import android.os.Message; import android.support.test.filters.FlakyTest; import android.telephony.DisconnectCause; import android.telecom.VideoProfile; import android.telephony.PhoneNumberUtils; import android.telephony.ims.feature.ImsFeature; import android.test.suitebuilder.annotation.SmallTest; Loading @@ -57,6 +59,8 @@ import com.android.ims.ImsReasonInfo; import com.android.ims.ImsServiceClass; import com.android.ims.internal.ImsCallSession; import com.android.internal.telephony.Call; import com.android.internal.telephony.CallStateException; import com.android.internal.telephony.CommandsInterface; import com.android.internal.telephony.Connection; import com.android.internal.telephony.PhoneConstants; import com.android.internal.telephony.TelephonyTest; Loading @@ -66,6 +70,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; Loading @@ -81,6 +86,8 @@ public class ImsPhoneCallTrackerTest extends TelephonyTest { private int mServiceId; @Mock private ImsCallSession mImsCallSession; @Mock private SharedPreferences mSharedPreferences; private Handler mCTHander; private class ImsCTHandlerThread extends HandlerThread { Loading Loading @@ -348,6 +355,31 @@ public class ImsPhoneCallTrackerTest extends TelephonyTest { assertEquals(Call.State.HOLDING, mCTUT.mBackgroundCall.getState()); } /** * Ensures that the dial method will perform a shared preferences lookup using the correct * shared preference key to determine the CLIR mode. */ @Test @SmallTest public void testDialClirMode() { mCTUT.setSharedPreferenceProxy((Context context) -> { return mSharedPreferences; }); ArgumentCaptor<String> mStringCaptor = ArgumentCaptor.forClass(String.class); doReturn(CommandsInterface.CLIR_INVOCATION).when(mSharedPreferences).getInt( mStringCaptor.capture(), anyInt()); try { mCTUT.dial("+17005554141", VideoProfile.STATE_AUDIO_ONLY, null); } catch (CallStateException cse) { cse.printStackTrace(); Assert.fail("unexpected exception thrown" + cse.getMessage()); } // Ensure that the correct key was queried from the shared prefs. assertEquals("clir_key0", mStringCaptor.getValue()); } @FlakyTest @Test @SmallTest Loading Loading
src/java/com/android/internal/telephony/GsmCdmaPhone.java +1 −0 Original line number Diff line number Diff line Loading @@ -2065,6 +2065,7 @@ public class GsmCdmaPhone extends Phone { private void syncClirSetting() { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); int clirSetting = sp.getInt(CLIR_KEY + getPhoneId(), -1); Rlog.i(LOG_TAG, "syncClirSetting: " + CLIR_KEY + getPhoneId() + "=" + clirSetting); if (clirSetting >= 0) { mCi.setCLIR(clirSetting, null); } Loading
src/java/com/android/internal/telephony/Phone.java +2 −0 Original line number Diff line number Diff line Loading @@ -1333,6 +1333,8 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext()); SharedPreferences.Editor editor = sp.edit(); editor.putInt(CLIR_KEY + getPhoneId(), commandInterfaceCLIRMode); Rlog.i(LOG_TAG, "saveClirSetting: " + CLIR_KEY + getPhoneId() + "=" + commandInterfaceCLIRMode); // Commit and log the result. if (!editor.commit()) { Loading
src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java +31 −2 Original line number Diff line number Diff line Loading @@ -113,6 +113,10 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { void onPhoneStateChanged(PhoneConstants.State oldState, PhoneConstants.State newState); } public interface SharedPreferenceProxy { SharedPreferences getDefaultSharedPreferences(Context context); } private static final boolean DBG = true; // When true, dumps the state of ImsPhoneCallTracker after changes to foreground and background Loading Loading @@ -598,6 +602,13 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { */ private boolean mShouldUpdateImsConfigOnDisconnect = false; /** * Default implementation for retrieving shared preferences; uses the actual PreferencesManager. */ private SharedPreferenceProxy mSharedPreferenceProxy = (Context context) -> { return PreferenceManager.getDefaultSharedPreferences(context); }; // Callback fires when ImsManager MMTel Feature changes state private ImsServiceProxy.INotifyStatusChanged mNotifyStatusChangedCallback = () -> { try { Loading Loading @@ -678,6 +689,16 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { sendEmptyMessage(EVENT_GET_IMS_SERVICE); } /** * Test-only method used to mock out access to the shared preferences through the * {@link PreferenceManager}. * @param sharedPreferenceProxy */ @VisibleForTesting public void setSharedPreferenceProxy(SharedPreferenceProxy sharedPreferenceProxy) { mSharedPreferenceProxy = sharedPreferenceProxy; } private int getPackageUid(Context context, String pkg) { if (pkg == null) { return NetworkStats.UID_ALL; Loading Loading @@ -794,8 +815,16 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { public Connection dial(String dialString, int videoState, Bundle intentExtras) throws CallStateException { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mPhone.getContext()); int oirMode = sp.getInt(Phone.CLIR_KEY, CommandsInterface.CLIR_DEFAULT); int oirMode; if (mSharedPreferenceProxy != null && mPhone.getDefaultPhone() != null) { SharedPreferences sp = mSharedPreferenceProxy.getDefaultSharedPreferences( mPhone.getContext()); oirMode = sp.getInt(Phone.CLIR_KEY + mPhone.getDefaultPhone().getPhoneId(), CommandsInterface.CLIR_DEFAULT); } else { loge("dial; could not get default CLIR mode."); oirMode = CommandsInterface.CLIR_DEFAULT; } return dial(dialString, oirMode, videoState, intentExtras); } Loading
tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneCallTrackerTest.java +32 −0 Original line number Diff line number Diff line Loading @@ -37,12 +37,14 @@ import static org.mockito.Mockito.verify; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; import android.os.Message; import android.support.test.filters.FlakyTest; import android.telephony.DisconnectCause; import android.telecom.VideoProfile; import android.telephony.PhoneNumberUtils; import android.telephony.ims.feature.ImsFeature; import android.test.suitebuilder.annotation.SmallTest; Loading @@ -57,6 +59,8 @@ import com.android.ims.ImsReasonInfo; import com.android.ims.ImsServiceClass; import com.android.ims.internal.ImsCallSession; import com.android.internal.telephony.Call; import com.android.internal.telephony.CallStateException; import com.android.internal.telephony.CommandsInterface; import com.android.internal.telephony.Connection; import com.android.internal.telephony.PhoneConstants; import com.android.internal.telephony.TelephonyTest; Loading @@ -66,6 +70,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; Loading @@ -81,6 +86,8 @@ public class ImsPhoneCallTrackerTest extends TelephonyTest { private int mServiceId; @Mock private ImsCallSession mImsCallSession; @Mock private SharedPreferences mSharedPreferences; private Handler mCTHander; private class ImsCTHandlerThread extends HandlerThread { Loading Loading @@ -348,6 +355,31 @@ public class ImsPhoneCallTrackerTest extends TelephonyTest { assertEquals(Call.State.HOLDING, mCTUT.mBackgroundCall.getState()); } /** * Ensures that the dial method will perform a shared preferences lookup using the correct * shared preference key to determine the CLIR mode. */ @Test @SmallTest public void testDialClirMode() { mCTUT.setSharedPreferenceProxy((Context context) -> { return mSharedPreferences; }); ArgumentCaptor<String> mStringCaptor = ArgumentCaptor.forClass(String.class); doReturn(CommandsInterface.CLIR_INVOCATION).when(mSharedPreferences).getInt( mStringCaptor.capture(), anyInt()); try { mCTUT.dial("+17005554141", VideoProfile.STATE_AUDIO_ONLY, null); } catch (CallStateException cse) { cse.printStackTrace(); Assert.fail("unexpected exception thrown" + cse.getMessage()); } // Ensure that the correct key was queried from the shared prefs. assertEquals("clir_key0", mStringCaptor.getValue()); } @FlakyTest @Test @SmallTest Loading