From 9af602b3adb5d35a58f1a595bca7f2ffaef65c31 Mon Sep 17 00:00:00 2001 From: Zoey Chen Date: Wed, 11 Aug 2021 17:27:21 +0800 Subject: [PATCH] [Settings] WFC preference will be grey out after disconnecting the call Bug: 186369342 Test: manual Change-Id: I1e15b72110ee86d90e50a47026f11c19a2e15f85 --- .../NetworkProviderWifiCallingGroup.java | 48 +++++++++++++++++-- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroup.java b/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroup.java index b4ab2a0c535..bc116001ebd 100644 --- a/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroup.java +++ b/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroup.java @@ -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 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. *