diff --git a/src/com/android/settings/sim/PreferredSimDialogFragment.java b/src/com/android/settings/sim/PreferredSimDialogFragment.java
index 96c0eb6..aa42f3c 100644
--- a/src/com/android/settings/sim/PreferredSimDialogFragment.java
+++ b/src/com/android/settings/sim/PreferredSimDialogFragment.java
@@ -21,10 +21,12 @@
 import android.app.Activity;
 import android.app.Dialog;
 import android.app.settings.SettingsEnums;
+import android.content.Context;
 import android.content.DialogInterface;
 import android.os.Bundle;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
 import android.util.Log;
 
 import androidx.annotation.NonNull;
@@ -91,8 +93,12 @@
         }
 
         if (dialog == null) {
-            Log.d(TAG, "Dialog is null.");
-            dismiss();
+            dismiss("Dialog is null.");
+            return;
+        }
+        Context context = getContext();
+        if (context == null) {
+            dismiss("getContext is null.");
             return;
         }
 
@@ -100,24 +106,44 @@
         if (info == null || (info.isEmbedded()
             && (info.getProfileClass() == PROFILE_CLASS_PROVISIONING
                 || (Flags.oemEnabledSatelliteFlag() && info.isOnlyNonTerrestrialNetwork())))) {
-            dismiss();
+            dismiss("SubscriptionInfo is null or other esim's cases.");
             return;
         }
         Log.d(TAG, "SubscriptionInfo: " + info);
+        TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class);
+        if (telephonyManager == null) {
+            dismiss("TelephonyManager is null.");
+            return;
+        }
+        telephonyManager = telephonyManager.createForSubscriptionId(info.getSubscriptionId());
+        if (telephonyManager.isDataEnabledForReason(TelephonyManager.DATA_ENABLED_REASON_USER)) {
+            dismiss("mobile data is on.");
+            final SimDialogActivity activity = (SimDialogActivity) getActivity();
+            if (activity != null) {
+                activity.finish();
+            }
+            return;
+        }
+
         final CharSequence simName =
-                SubscriptionUtil.getUniqueSubscriptionDisplayName(info, getContext());
+                SubscriptionUtil.getUniqueSubscriptionDisplayName(info, context);
         final String title =
-                getContext().getString(
+                context.getString(
                         getTitleResId(),
                         simName);
         final String message =
-                getContext().getString(
+                context.getString(
                         R.string.sim_preferred_message,
                         simName);
         dialog.setTitle(title);
         dialog.setMessage(message);
     }
 
+    private void dismiss(String log) {
+        Log.d(TAG, log);
+        dismiss();
+    }
+
     @Override
     public void updateDialog() {
         updateDialog((AlertDialog) getDialog());
