diff --git a/src/com/android/settings/AirplaneModeEnabler.java b/src/com/android/settings/AirplaneModeEnabler.java
index 8b29d67..735ae23 100644
--- a/src/com/android/settings/AirplaneModeEnabler.java
+++ b/src/com/android/settings/AirplaneModeEnabler.java
@@ -24,7 +24,6 @@
 import android.provider.Settings;
 import android.telephony.PhoneStateListener;
 import android.telephony.SubscriptionInfo;
-import android.telephony.TelephonyCallback;
 import android.telephony.TelephonyManager;
 import android.util.Log;
 
@@ -62,7 +61,7 @@
 
     private TelephonyManager mTelephonyManager;
     @VisibleForTesting
-    AirplaneModeTelephonyCallback mTelephonyCallback;
+    PhoneStateListener mPhoneStateListener;
 
     public AirplaneModeEnabler(Context context, OnAirplaneModeChangedListener listener) {
         super(context, Settings.Global.AIRPLANE_MODE_ON);
@@ -72,18 +71,16 @@
         mOnAirplaneModeChangedListener = listener;
 
         mTelephonyManager = context.getSystemService(TelephonyManager.class);
-        mTelephonyCallback = new AirplaneModeTelephonyCallback();
-    }
 
-    class AirplaneModeTelephonyCallback extends TelephonyCallback implements
-            TelephonyCallback.RadioPowerStateListener {
-        @Override
-        public void onRadioPowerStateChanged(int state) {
-            if (DEBUG) {
-                Log.d(LOG_TAG, "RadioPower: " + state);
+        mPhoneStateListener = new PhoneStateListener(Looper.getMainLooper()) {
+            @Override
+            public void onRadioPowerStateChanged(int state) {
+                if (DEBUG) {
+                    Log.d(LOG_TAG, "RadioPower: " + state);
+                }
+                onAirplaneModeChanged();
             }
-            onAirplaneModeChanged();
-        }
+        };
     }
 
     /**
@@ -101,14 +98,16 @@
      * Start listening to the phone state change
      */
     public void start() {
-        mTelephonyManager.registerTelephonyCallback(mContext.getMainExecutor(), mTelephonyCallback);
+        mTelephonyManager.listen(mPhoneStateListener,
+                PhoneStateListener.LISTEN_RADIO_POWER_STATE_CHANGED);
     }
 
     /**
      * Stop listening to the phone state change
      */
     public void stop() {
-        mTelephonyManager.unregisterTelephonyCallback(mTelephonyCallback);
+        mTelephonyManager.listen(mPhoneStateListener,
+                PhoneStateListener.LISTEN_NONE);
     }
 
     private void setAirplaneModeOn(boolean enabling) {
@@ -193,3 +192,4 @@
         return WirelessUtils.isAirplaneModeOn(mContext);
     }
 }
+
diff --git a/tests/robotests/src/com/android/settings/AirplaneModeEnablerTest.java b/tests/robotests/src/com/android/settings/AirplaneModeEnablerTest.java
index 5ac5c66..6c5b9f2 100644
--- a/tests/robotests/src/com/android/settings/AirplaneModeEnablerTest.java
+++ b/tests/robotests/src/com/android/settings/AirplaneModeEnablerTest.java
@@ -57,7 +57,7 @@
 
         ShadowSettings.setAirplaneMode(true);
 
-        mAirplaneModeEnabler.mTelephonyCallback.onRadioPowerStateChanged(
+        mAirplaneModeEnabler.mPhoneStateListener.onRadioPowerStateChanged(
                 TelephonyManager.RADIO_POWER_OFF);
 
         verify(mAirplaneModeChangedListener, times(1)).onAirplaneModeChanged(true);
