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

Bug: 186369342
Test: manual
Change-Id: I1e15b72110ee86d90e50a47026f11c19a2e15f85
This commit is contained in:
Zoey Chen
2021-08-11 17:27:21 +08:00
parent daf3d89359
commit 9af602b3ad

View File

@@ -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.
*