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