diff --git a/src/com/android/settings/sim/SimDialogFragment.java b/src/com/android/settings/sim/SimDialogFragment.java
index de991ec..362fccc 100644
--- a/src/com/android/settings/sim/SimDialogFragment.java
+++ b/src/com/android/settings/sim/SimDialogFragment.java
@@ -16,20 +16,25 @@
 
 package com.android.settings.sim;
 
+import android.content.Context;
 import android.content.DialogInterface;
 import android.os.Bundle;
 
 import androidx.annotation.NonNull;
 
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import com.android.settings.network.SubscriptionsChangeListener;
 
 /** Common functionality for showing a dialog in SimDialogActivity. */
-public abstract class SimDialogFragment extends InstrumentedDialogFragment {
+public abstract class SimDialogFragment extends InstrumentedDialogFragment implements
+        SubscriptionsChangeListener.SubscriptionsChangeListenerClient {
     private static final String TAG = "SimDialogFragment";
 
     private static final String KEY_TITLE_ID = "title_id";
     private static final String KEY_DIALOG_TYPE = "dialog_type";
 
+    private SubscriptionsChangeListener mChangeListener;
+
     protected static Bundle initArguments(int dialogType, int titleResId) {
         final Bundle args = new Bundle();
         args.putInt(KEY_DIALOG_TYPE, dialogType);
@@ -46,6 +51,24 @@
     }
 
     @Override
+    public void onAttach(Context context) {
+        super.onAttach(context);
+        mChangeListener = new SubscriptionsChangeListener(context, this);
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        mChangeListener.stop();
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        mChangeListener.start();
+    }
+
+    @Override
     public void onDismiss(@NonNull DialogInterface dialog) {
         super.onDismiss(dialog);
         final SimDialogActivity activity = (SimDialogActivity) getActivity();
@@ -55,4 +78,13 @@
     }
 
     public abstract void updateDialog();
+
+    @Override
+    public void onAirplaneModeChanged(boolean airplaneModeEnabled) {
+    }
+
+    @Override
+    public void onSubscriptionsChanged() {
+        updateDialog();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/sim/SimListDialogFragmentTest.java b/tests/robotests/src/com/android/settings/sim/SimListDialogFragmentTest.java
index 2b33ebe..6a9590b 100644
--- a/tests/robotests/src/com/android/settings/sim/SimListDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/sim/SimListDialogFragmentTest.java
@@ -26,6 +26,7 @@
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
 import android.telephony.SubscriptionManager;
@@ -78,6 +79,22 @@
     }
 
     @Test
+    public void onSubscriptionsChanged_dialogUpdates() {
+        final int dialogType = DATA_PICK;
+        setDialogType(dialogType);
+        mFragment = spy(SimListDialogFragment.newInstance(dialogType, R.string.select_sim_for_data,
+                false /* includeAskEveryTime */));
+        doReturn(Arrays.asList(mSim1, mSim2)).when(mFragment).getCurrentSubscriptions();
+        // Avoid problems robolectric has with our real adapter.
+        doNothing().when(mFragment).setAdapter(any());
+        startDialog();
+        verify(mFragment).updateDialog();
+
+        mFragment.onSubscriptionsChanged();
+        verify(mFragment, times(2)).updateDialog();
+    }
+
+    @Test
     public void onCreateDialog_twoSubscriptionsAskEveryTime_threeSubsForDisplay() {
         final int dialogType = SMS_PICK;
         setDialogType(dialogType);
