[Settings] "Data during calls" in DDS SUB is still in advanced option.

The DataDuringCallsPreferenceController didn't listen the mobile data changed and update the preference.

Bug: 149344454
Test: make RunSettingsRoboTests ROBOTEST_FILTER=DataDuringCallsPreferenceControllerTest

Merged-In: I0121f06efb5257dccc05ad06b93a9db263f012b5
Change-Id: I6c8802aeb7b4f4850cb143e70a9e06de9fd93902
This commit is contained in:
Bonian Chen
2020-04-07 20:11:09 +08:00
parent 9371311309
commit 5a31b13971
2 changed files with 45 additions and 2 deletions

View File

@@ -20,6 +20,8 @@ import static androidx.lifecycle.Lifecycle.Event.ON_PAUSE;
import static androidx.lifecycle.Lifecycle.Event.ON_RESUME; import static androidx.lifecycle.Lifecycle.Event.ON_RESUME;
import android.content.Context; import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
@@ -30,6 +32,8 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreference; import androidx.preference.SwitchPreference;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.network.MobileDataContentObserver;
import com.android.settings.network.SubscriptionsChangeListener; import com.android.settings.network.SubscriptionsChangeListener;
public class DataDuringCallsPreferenceController extends TelephonyTogglePreferenceController public class DataDuringCallsPreferenceController extends TelephonyTogglePreferenceController
@@ -39,11 +43,16 @@ public class DataDuringCallsPreferenceController extends TelephonyTogglePreferen
private SwitchPreference mPreference; private SwitchPreference mPreference;
private SubscriptionsChangeListener mChangeListener; private SubscriptionsChangeListener mChangeListener;
private TelephonyManager mManager; private TelephonyManager mManager;
private MobileDataContentObserver mMobileDataContentObserver;
private PreferenceScreen mScreen;
public DataDuringCallsPreferenceController(Context context, public DataDuringCallsPreferenceController(Context context,
String preferenceKey) { String preferenceKey) {
super(context, preferenceKey); super(context, preferenceKey);
mChangeListener = new SubscriptionsChangeListener(mContext, this); mChangeListener = new SubscriptionsChangeListener(mContext, this);
mMobileDataContentObserver = new MobileDataContentObserver(
new Handler(Looper.getMainLooper()));
mMobileDataContentObserver.setOnMobileDataChangedListener(()->refreshPreference());
} }
public void init(Lifecycle lifecycle, int subId) { public void init(Lifecycle lifecycle, int subId) {
@@ -55,17 +64,20 @@ public class DataDuringCallsPreferenceController extends TelephonyTogglePreferen
@OnLifecycleEvent(ON_RESUME) @OnLifecycleEvent(ON_RESUME)
public void onResume() { public void onResume() {
mChangeListener.start(); mChangeListener.start();
mMobileDataContentObserver.register(mContext, mSubId);
} }
@OnLifecycleEvent(ON_PAUSE) @OnLifecycleEvent(ON_PAUSE)
public void onPause() { public void onPause() {
mChangeListener.stop(); mChangeListener.stop();
mMobileDataContentObserver.unRegister(mContext);
} }
@Override @Override
public void displayPreference(PreferenceScreen screen) { public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen); super.displayPreference(screen);
mPreference = screen.findPreference(getPreferenceKey()); mPreference = screen.findPreference(getPreferenceKey());
mScreen = screen;
} }
@Override @Override
@@ -81,8 +93,8 @@ public class DataDuringCallsPreferenceController extends TelephonyTogglePreferen
@Override @Override
public int getAvailabilityStatus(int subId) { public int getAvailabilityStatus(int subId) {
if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID || if (!SubscriptionManager.isValidSubscriptionId(subId)
SubscriptionManager.getDefaultDataSubscriptionId() == mSubId) { || SubscriptionManager.getDefaultDataSubscriptionId() == subId) {
return CONDITIONALLY_UNAVAILABLE; return CONDITIONALLY_UNAVAILABLE;
} }
return AVAILABLE; return AVAILABLE;
@@ -101,4 +113,14 @@ public class DataDuringCallsPreferenceController extends TelephonyTogglePreferen
public void onSubscriptionsChanged() { public void onSubscriptionsChanged() {
updateState(mPreference); updateState(mPreference);
} }
/**
* Trigger displaying preference when Mobilde data content changed.
*/
@VisibleForTesting
public void refreshPreference() {
if (mScreen != null) {
super.displayPreference(mScreen);
}
}
} }

View File

@@ -18,6 +18,7 @@ package com.android.settings.network;
import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID; import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
import static com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE; import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
@@ -131,4 +132,24 @@ public class DataDuringCallsPreferenceControllerTest {
assertThat(mController.isAvailable()).isTrue(); assertThat(mController.isAvailable()).isTrue();
assertThat(mSwitchPreference.isVisible()).isTrue(); assertThat(mSwitchPreference.isVisible()).isTrue();
} }
@Test
public void getAvailabilityStatus_mobileDataChangWithDefaultDataSubId_returnUnavailable() {
ShadowSubscriptionManager.setDefaultDataSubscriptionId(SUB_ID_1);
mController.refreshPreference();
assertThat(mController.getAvailabilityStatus(SUB_ID_1))
.isEqualTo(CONDITIONALLY_UNAVAILABLE);
}
@Test
public void getAvailabilityStatus_mobileDataChangWithoutDefaultDataSubId_returnAvailable() {
ShadowSubscriptionManager.setDefaultDataSubscriptionId(SUB_ID_1);
mController.displayPreference(mPreferenceScreen);
mController.refreshPreference();
assertThat(mController.getAvailabilityStatus(SUB_ID_2)).isEqualTo(AVAILABLE);
}
} }