[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 android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -30,6 +32,8 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreference;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.network.MobileDataContentObserver;
import com.android.settings.network.SubscriptionsChangeListener;
public class DataDuringCallsPreferenceController extends TelephonyTogglePreferenceController
@@ -39,11 +43,16 @@ public class DataDuringCallsPreferenceController extends TelephonyTogglePreferen
private SwitchPreference mPreference;
private SubscriptionsChangeListener mChangeListener;
private TelephonyManager mManager;
private MobileDataContentObserver mMobileDataContentObserver;
private PreferenceScreen mScreen;
public DataDuringCallsPreferenceController(Context context,
String preferenceKey) {
super(context, preferenceKey);
mChangeListener = new SubscriptionsChangeListener(mContext, this);
mMobileDataContentObserver = new MobileDataContentObserver(
new Handler(Looper.getMainLooper()));
mMobileDataContentObserver.setOnMobileDataChangedListener(()->refreshPreference());
}
public void init(Lifecycle lifecycle, int subId) {
@@ -55,17 +64,20 @@ public class DataDuringCallsPreferenceController extends TelephonyTogglePreferen
@OnLifecycleEvent(ON_RESUME)
public void onResume() {
mChangeListener.start();
mMobileDataContentObserver.register(mContext, mSubId);
}
@OnLifecycleEvent(ON_PAUSE)
public void onPause() {
mChangeListener.stop();
mMobileDataContentObserver.unRegister(mContext);
}
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
mPreference = screen.findPreference(getPreferenceKey());
mScreen = screen;
}
@Override
@@ -81,8 +93,8 @@ public class DataDuringCallsPreferenceController extends TelephonyTogglePreferen
@Override
public int getAvailabilityStatus(int subId) {
if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID ||
SubscriptionManager.getDefaultDataSubscriptionId() == mSubId) {
if (!SubscriptionManager.isValidSubscriptionId(subId)
|| SubscriptionManager.getDefaultDataSubscriptionId() == subId) {
return CONDITIONALLY_UNAVAILABLE;
}
return AVAILABLE;
@@ -101,4 +113,14 @@ public class DataDuringCallsPreferenceController extends TelephonyTogglePreferen
public void onSubscriptionsChanged() {
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 com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;
import static com.google.common.truth.Truth.assertThat;
@@ -131,4 +132,24 @@ public class DataDuringCallsPreferenceControllerTest {
assertThat(mController.isAvailable()).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);
}
}