diff --git a/src/com/android/settings/network/telephony/MmsMessagePreferenceController.java b/src/com/android/settings/network/telephony/MmsMessagePreferenceController.java index 54a106a2f68..8f59f0e5752 100644 --- a/src/com/android/settings/network/telephony/MmsMessagePreferenceController.java +++ b/src/com/android/settings/network/telephony/MmsMessagePreferenceController.java @@ -23,6 +23,7 @@ import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.data.ApnSetting; +import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settings.network.MobileDataContentObserver; @@ -38,6 +39,7 @@ public class MmsMessagePreferenceController extends TelephonyTogglePreferenceCon private TelephonyManager mTelephonyManager; private MobileDataContentObserver mMobileDataContentObserver; private PreferenceScreen mScreen; + private Preference mPreference; public MmsMessagePreferenceController(Context context, String key) { super(context, key); @@ -61,6 +63,7 @@ public class MmsMessagePreferenceController extends TelephonyTogglePreferenceCon public void onStart() { if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { mMobileDataContentObserver.register(mContext, mSubId); + updateState(mPreference); } } @@ -75,6 +78,7 @@ public class MmsMessagePreferenceController extends TelephonyTogglePreferenceCon public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); mScreen = screen; + mPreference = screen.findPreference(getPreferenceKey()); } diff --git a/tests/unit/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.java index a0219a02891..127cdfdbad7 100644 --- a/tests/unit/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.java @@ -21,15 +21,20 @@ import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_U import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; +import android.os.Looper; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.data.ApnSetting; +import androidx.preference.PreferenceManager; +import androidx.preference.PreferenceScreen; import androidx.preference.SwitchPreference; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -63,7 +68,7 @@ public class MmsMessagePreferenceControllerTest { when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager); when(mTelephonyManager.createForSubscriptionId(SUB_ID)).thenReturn(mTelephonyManager); - mPreference = new SwitchPreference(mContext); + mPreference = spy(new SwitchPreference(mContext)); mController = new MmsMessagePreferenceController(mContext, "mms_message"); mController.init(SUB_ID); mPreference.setKey(mController.getPreferenceKey()); @@ -118,4 +123,20 @@ public class MmsMessagePreferenceControllerTest { verify(mTelephonyManager).setMobileDataPolicyEnabled( TelephonyManager.MOBILE_DATA_POLICY_MMS_ALWAYS_ALLOWED, false); } + + @Test + public void onStart_updatePreferenceUiState() { + if (Looper.myLooper() == null) { + Looper.prepare(); + } + PreferenceManager preferenceManager = new PreferenceManager(mContext); + PreferenceScreen preferenceScreen = preferenceManager.createPreferenceScreen(mContext); + preferenceScreen.addPreference(mPreference); + mController.displayPreference(preferenceScreen); + + mController.onStart(); + + // First is preference initialization, and second is in onStart(); + verify(mPreference, times(2)).setChecked(anyBoolean()); + } }