diff --git a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java index f678e08032a..de54879abc2 100644 --- a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java +++ b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java @@ -22,21 +22,21 @@ import android.net.Uri; import android.os.Handler; import android.os.Looper; import android.provider.Settings; +import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.text.TextUtils; +import com.android.settingslib.core.lifecycle.LifecycleObserver; +import com.android.settingslib.core.lifecycle.events.OnStart; +import com.android.settingslib.core.lifecycle.events.OnStop; + import androidx.annotation.VisibleForTesting; import androidx.fragment.app.FragmentManager; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import androidx.preference.SwitchPreference; -import com.android.settings.core.TogglePreferenceController; -import com.android.settingslib.core.lifecycle.LifecycleObserver; -import com.android.settingslib.core.lifecycle.events.OnStart; -import com.android.settingslib.core.lifecycle.events.OnStop; - /** * Preference controller for "Mobile data" */ @@ -115,8 +115,18 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon @Override public boolean isChecked() { - return mTelephonyManager.isDataEnabled() - && mSubId == SubscriptionManager.getDefaultDataSubscriptionId(); + return mTelephonyManager.isDataEnabled(); + } + + @Override + public void updateState(Preference preference) { + super.updateState(preference); + preference.setEnabled(!isOpportunistic()); + } + + private boolean isOpportunistic() { + SubscriptionInfo info = mSubscriptionManager.getActiveSubscriptionInfo(mSubId); + return info != null && info.isOpportunistic(); } public static Uri getObservableUri(int subId) { diff --git a/tests/robotests/src/com/android/settings/network/telephony/MobileDataPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/MobileDataPreferenceControllerTest.java index 4c242c147d0..1b7b4b47fc3 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/MobileDataPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/MobileDataPreferenceControllerTest.java @@ -149,4 +149,23 @@ public class MobileDataPreferenceControllerTest { verify(mTelephonyManager).setDataEnabled(true); } + + @Test + public void isChecked_returnUserDataEnabled() { + mController.init(mFragmentManager, SUB_ID); + assertThat(mController.isChecked()).isFalse(); + + doReturn(true).when(mTelephonyManager).isDataEnabled(); + assertThat(mController.isChecked()).isTrue(); + } + + @Test + public void updateState_opportunistic_disabled() { + doReturn(mSubscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(SUB_ID); + mController.init(mFragmentManager, SUB_ID); + doReturn(true).when(mSubscriptionInfo).isOpportunistic(); + mController.updateState(mPreference); + + assertThat(mPreference.isEnabled()).isFalse(); + } }