From 5506e0c7326d47bf80e0e4ef610c106d85d4c639 Mon Sep 17 00:00:00 2001 From: Malcolm Chen Date: Tue, 12 Feb 2019 15:55:12 -0800 Subject: [PATCH] Correct behavior of "Mobile data" button on opportunistic subscriptions. A check was added earlier to make sure in DSDS mode only one sub shows data on, which is not true for opportunistic subscriptions. For them, it should always be on (enforced by Telephony) and be disabled as it shouldn't be turned off. Bug: 124331860 Bug: 124683219 Test: manual, robolectric Change-Id: I53c8d881ff71ad25c418085d3eee63e55c786b8f --- .../MobileDataPreferenceController.java | 24 +++++++++++++------ .../MobileDataPreferenceControllerTest.java | 19 +++++++++++++++ 2 files changed, 36 insertions(+), 7 deletions(-) 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(); + } }