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

Commit 0bf61645 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[Settings] WFC preference will be grey out after disconnecting the call"

parents 25a6752a 9af602b3
Loading
Loading
Loading
Loading
+44 −4
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.telecom.TelecomManager;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyCallback;
import android.telephony.TelephonyManager;
import android.util.ArrayMap;
import android.util.Log;
@@ -66,7 +67,7 @@ public class NetworkProviderWifiCallingGroup extends
    @VisibleForTesting
    protected CarrierConfigManager mCarrierConfigManager;
    private SubscriptionManager mSubscriptionManager;

    private PhoneCallStateTelephonyCallback mTelephonyCallback;
    private String mPreferenceGroupKey;
    private PreferenceGroup mPreferenceGroup;
    private Map<Integer, TelephonyManager> mTelephonyManagerList = new HashMap<>();
@@ -79,10 +80,12 @@ public class NetworkProviderWifiCallingGroup extends
        super(context);
        mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
        mSubscriptionManager = context.getSystemService(SubscriptionManager.class);

        mPreferenceGroupKey = preferenceGroupKey;
        mWifiCallingForSubPreferences = new ArrayMap<>();
        setSubscriptionInfoList(context);
        if (mTelephonyCallback == null) {
            mTelephonyCallback = new PhoneCallStateTelephonyCallback();
        }
        lifecycle.addObserver(this);
    }

@@ -134,9 +137,17 @@ public class NetworkProviderWifiCallingGroup extends

    @OnLifecycleEvent(Event.ON_RESUME)
    public void onResume() {
        updateListener();
        update();
    }

    @OnLifecycleEvent(Event.ON_PAUSE)
    public void onPause() {
        if ((mTelephonyCallback != null)) {
            mTelephonyCallback.unregister();
        }
    }

    @Override
    public boolean isAvailable() {
        if (mSubInfoListForWfc == null) {
@@ -168,8 +179,6 @@ public class NetworkProviderWifiCallingGroup extends
            return;
        }

        setSubscriptionInfoList(mContext);

        if (!isAvailable()) {
            for (Preference pref : mWifiCallingForSubPreferences.values()) {
                mPreferenceGroup.removePreference(pref);
@@ -246,9 +255,40 @@ public class NetworkProviderWifiCallingGroup extends

    @Override
    public void onSubscriptionsChanged() {
        setSubscriptionInfoList(mContext);
        updateListener();
        update();
    }

    private void updateListener() {
        for (SubscriptionInfo info : mSubInfoListForWfc) {
            int subId = info.getSubscriptionId();
            if ((mTelephonyCallback != null)) {
                mTelephonyCallback.register(mContext, subId);
            }
        }
    }

    private class PhoneCallStateTelephonyCallback extends TelephonyCallback implements
            TelephonyCallback.CallStateListener {

        private TelephonyManager mTelephonyManager;

        @Override
        public void onCallStateChanged(int state) {
            update();
        }

        public void register(Context context, int subId) {
            mTelephonyManager = getTelephonyManagerForSubscriptionId(subId);
            mTelephonyManager.registerTelephonyCallback(context.getMainExecutor(), this);
        }

        public void unregister() {
            mTelephonyManager.unregisterTelephonyCallback(this);
        }
    }

    /**
     * To indicate that should show the Wi-Fi calling preference or not.
     *