diff --git a/src/com/android/settings/network/AllowedNetworkTypesListener.java b/src/com/android/settings/network/AllowedNetworkTypesListener.java
index a11f3b4..a9ed8be 100644
--- a/src/com/android/settings/network/AllowedNetworkTypesListener.java
+++ b/src/com/android/settings/network/AllowedNetworkTypesListener.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.telephony.PhoneStateListener;
+import android.telephony.TelephonyCallback;
 import android.telephony.TelephonyManager;
 import android.util.Log;
 
@@ -28,14 +29,14 @@
 
 
 /**
- * {@link PhoneStateListener} to listen to Allowed Network Types changed
+ * {@link TelephonyCallback} to listen to Allowed Network Types changed
  */
-public class AllowedNetworkTypesListener extends PhoneStateListener implements
-        PhoneStateListener.AllowedNetworkTypesChangedListener {
+public class AllowedNetworkTypesListener extends TelephonyCallback implements
+        TelephonyCallback.AllowedNetworkTypesListener {
     private static final String LOG_TAG = "NetworkModeListener";
 
     @VisibleForTesting
-    AllowedNetworkTypesListener.OnAllowedNetworkTypesChangedListener mListener;
+    OnAllowedNetworkTypesListener mListener;
     private long mAllowedNetworkType = -1;
     private Executor mExecutor;
 
@@ -44,7 +45,7 @@
         mExecutor = executor;
     }
 
-    public void setAllowedNetworkTypesChangedListener(OnAllowedNetworkTypesChangedListener lsn) {
+    public void setAllowedNetworkTypesListener(OnAllowedNetworkTypesListener lsn) {
         mListener = lsn;
     }
 
@@ -56,7 +57,7 @@
     public void register(Context context, int subId) {
         TelephonyManager telephonyManager = context.getSystemService(
                 TelephonyManager.class).createForSubscriptionId(subId);
-        telephonyManager.registerPhoneStateListener(mExecutor, this);
+        telephonyManager.registerTelephonyCallback(mExecutor, this);
     }
 
     /**
@@ -67,7 +68,7 @@
     public void unregister(Context context, int subId) {
         TelephonyManager telephonyManager = context.getSystemService(
                 TelephonyManager.class).createForSubscriptionId(subId);
-        telephonyManager.unregisterPhoneStateListener(this);
+        telephonyManager.unregisterTelephonyCallback(this);
     }
 
     @Override
@@ -84,7 +85,7 @@
     /**
      * Listener for update of Preferred Network Mode change
      */
-    public interface OnAllowedNetworkTypesChangedListener {
+    public interface OnAllowedNetworkTypesListener {
         /**
          * Notify the allowed network type changed.
          */
diff --git a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
index 217bfbd..c65a972 100644
--- a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
+++ b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
@@ -145,7 +145,7 @@
         if (mAllowedNetworkTypesListener == null) {
             mAllowedNetworkTypesListener = new AllowedNetworkTypesListener(
                     mContext.getMainExecutor());
-            mAllowedNetworkTypesListener.setAllowedNetworkTypesChangedListener(
+            mAllowedNetworkTypesListener.setAllowedNetworkTypesListener(
                     () -> updatePreference());
         }
 
diff --git a/src/com/android/settings/network/telephony/NetworkPreferenceCategoryController.java b/src/com/android/settings/network/telephony/NetworkPreferenceCategoryController.java
index 25651f5..4ebcb7a 100644
--- a/src/com/android/settings/network/telephony/NetworkPreferenceCategoryController.java
+++ b/src/com/android/settings/network/telephony/NetworkPreferenceCategoryController.java
@@ -45,7 +45,7 @@
         mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
         mAllowedNetworkTypesListener = new AllowedNetworkTypesListener(
                 context.getMainExecutor());
-        mAllowedNetworkTypesListener.setAllowedNetworkTypesChangedListener(
+        mAllowedNetworkTypesListener.setAllowedNetworkTypesListener(
                 () -> updatePreference());
     }
 
diff --git a/src/com/android/settings/network/telephony/cdma/CdmaBasePreferenceController.java b/src/com/android/settings/network/telephony/cdma/CdmaBasePreferenceController.java
index 06c3edb..4d1d319 100644
--- a/src/com/android/settings/network/telephony/cdma/CdmaBasePreferenceController.java
+++ b/src/com/android/settings/network/telephony/cdma/CdmaBasePreferenceController.java
@@ -77,7 +77,7 @@
         if (mAllowedNetworkTypesListener == null) {
             mAllowedNetworkTypesListener = new AllowedNetworkTypesListener(
                     mContext.getMainExecutor());
-            mAllowedNetworkTypesListener.setAllowedNetworkTypesChangedListener(
+            mAllowedNetworkTypesListener.setAllowedNetworkTypesListener(
                     () -> updatePreference());
         }
     }
diff --git a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
index 63df1d2..5bcc655 100644
--- a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
+++ b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
@@ -80,7 +80,7 @@
         mUiHandler = new Handler(Looper.getMainLooper());
         mAllowedNetworkTypesListener = new AllowedNetworkTypesListener(
                 new HandlerExecutor(mUiHandler));
-        mAllowedNetworkTypesListener.setAllowedNetworkTypesChangedListener(
+        mAllowedNetworkTypesListener.setAllowedNetworkTypesListener(
                 () -> updatePreference());
     }
 
diff --git a/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java b/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
index 1b77c6d..cdeb1e5 100644
--- a/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
+++ b/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
@@ -60,7 +60,7 @@
         mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
         mAllowedNetworkTypesListener = new AllowedNetworkTypesListener(
                 context.getMainExecutor());
-        mAllowedNetworkTypesListener.setAllowedNetworkTypesChangedListener(
+        mAllowedNetworkTypesListener.setAllowedNetworkTypesListener(
                 () -> updatePreference());
 
     }
diff --git a/tests/unit/src/com/android/settings/network/AllowedNetworkTypesListenerTest.java b/tests/unit/src/com/android/settings/network/AllowedNetworkTypesListenerTest.java
index 3387368..d8f3c78 100644
--- a/tests/unit/src/com/android/settings/network/AllowedNetworkTypesListenerTest.java
+++ b/tests/unit/src/com/android/settings/network/AllowedNetworkTypesListenerTest.java
@@ -25,8 +25,8 @@
 
 import android.content.Context;
 import android.os.HandlerExecutor;
-import android.telephony.PhoneStateListener;
 import android.telephony.RadioAccessFamily;
+import android.telephony.TelephonyCallback;
 import android.telephony.TelephonyManager;
 import android.test.mock.MockContentResolver;
 
@@ -53,7 +53,7 @@
     private AllowedNetworkTypesListener mAllowedNetworkTypesListener;
 
     @Mock
-    private AllowedNetworkTypesListener.OnAllowedNetworkTypesChangedListener mListener;
+    private AllowedNetworkTypesListener.OnAllowedNetworkTypesListener mListener;
     @Mock
     private TelephonyManager mTelephonyManager;
 
@@ -87,15 +87,15 @@
     public void register_shouldRegisterContentObserver() {
         mAllowedNetworkTypesListener.register(mContext, SUB_ID);
 
-        verify(mTelephonyManager, times(1)).registerPhoneStateListener(any(HandlerExecutor.class),
-                any(PhoneStateListener.class));
+        verify(mTelephonyManager, times(1)).registerTelephonyCallback(any(HandlerExecutor.class),
+                any(TelephonyCallback.class));
     }
 
     @Test
     public void unregister_shouldUnregisterContentObserver() {
         mAllowedNetworkTypesListener.unregister(mContext, SUB_ID);
 
-        verify(mTelephonyManager).unregisterPhoneStateListener(
+        verify(mTelephonyManager).unregisterTelephonyCallback(
                 mAllowedNetworkTypesListener);
     }
 }
