[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.CarrierConfigManager;
import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.TelephonyCallback;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.util.ArrayMap; import android.util.ArrayMap;
import android.util.Log; import android.util.Log;
@@ -66,7 +67,7 @@ public class NetworkProviderWifiCallingGroup extends
@VisibleForTesting @VisibleForTesting
protected CarrierConfigManager mCarrierConfigManager; protected CarrierConfigManager mCarrierConfigManager;
private SubscriptionManager mSubscriptionManager; private SubscriptionManager mSubscriptionManager;
private PhoneCallStateTelephonyCallback mTelephonyCallback;
private String mPreferenceGroupKey; private String mPreferenceGroupKey;
private PreferenceGroup mPreferenceGroup; private PreferenceGroup mPreferenceGroup;
private Map<Integer, TelephonyManager> mTelephonyManagerList = new HashMap<>(); private Map<Integer, TelephonyManager> mTelephonyManagerList = new HashMap<>();
@@ -79,10 +80,12 @@ public class NetworkProviderWifiCallingGroup extends
super(context); super(context);
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class); mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
mSubscriptionManager = context.getSystemService(SubscriptionManager.class); mSubscriptionManager = context.getSystemService(SubscriptionManager.class);
mPreferenceGroupKey = preferenceGroupKey; mPreferenceGroupKey = preferenceGroupKey;
mWifiCallingForSubPreferences = new ArrayMap<>(); mWifiCallingForSubPreferences = new ArrayMap<>();
setSubscriptionInfoList(context); setSubscriptionInfoList(context);
if (mTelephonyCallback == null) {
mTelephonyCallback = new PhoneCallStateTelephonyCallback();
}
lifecycle.addObserver(this); lifecycle.addObserver(this);
} }
@@ -134,9 +137,17 @@ public class NetworkProviderWifiCallingGroup extends
@OnLifecycleEvent(Event.ON_RESUME) @OnLifecycleEvent(Event.ON_RESUME)
public void onResume() { public void onResume() {
updateListener();
update(); update();
} }
@OnLifecycleEvent(Event.ON_PAUSE)
public void onPause() {
if ((mTelephonyCallback != null)) {
mTelephonyCallback.unregister();
}
}
@Override @Override
public boolean isAvailable() { public boolean isAvailable() {
if (mSubInfoListForWfc == null) { if (mSubInfoListForWfc == null) {
@@ -168,8 +179,6 @@ public class NetworkProviderWifiCallingGroup extends
return; return;
} }
setSubscriptionInfoList(mContext);
if (!isAvailable()) { if (!isAvailable()) {
for (Preference pref : mWifiCallingForSubPreferences.values()) { for (Preference pref : mWifiCallingForSubPreferences.values()) {
mPreferenceGroup.removePreference(pref); mPreferenceGroup.removePreference(pref);
@@ -246,9 +255,40 @@ public class NetworkProviderWifiCallingGroup extends
@Override @Override
public void onSubscriptionsChanged() { public void onSubscriptionsChanged() {
setSubscriptionInfoList(mContext);
updateListener();
update(); 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. * To indicate that should show the Wi-Fi calling preference or not.
* *