[Settings] WFC preference will be grey out after disconnecting the call
Bug: 186369342
Test: manual
Change-Id: I1e15b72110ee86d90e50a47026f11c19a2e15f85
diff --git a/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroup.java b/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroup.java
index b4ab2a0..bc11600 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.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 @@
@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 @@
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 @@
@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 @@
return;
}
- setSubscriptionInfoList(mContext);
-
if (!isAvailable()) {
for (Preference pref : mWifiCallingForSubPreferences.values()) {
mPreferenceGroup.removePreference(pref);
@@ -246,9 +255,40 @@
@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.
*