Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0c3bd003 authored by James Lin's avatar James Lin Committed by Android (Google) Code Review
Browse files

Merge "[Settings] "Data during calls" in DDS SUB is still in advanced option." into rvc-dev

parents 4e3b62ad 64ac0d4a
Loading
Loading
Loading
Loading
+24 −2
Original line number Diff line number Diff line
@@ -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);
        }
    }
}
+21 −0
Original line number Diff line number Diff line
@@ -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);
    }
}