[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:
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user