diff --git a/src/com/android/settings/network/telephony/DefaultSubscriptionController.java b/src/com/android/settings/network/telephony/DefaultSubscriptionController.java
index 1d82f65..5fcedba 100644
--- a/src/com/android/settings/network/telephony/DefaultSubscriptionController.java
+++ b/src/com/android/settings/network/telephony/DefaultSubscriptionController.java
@@ -83,6 +83,10 @@
     /** Called to change the default subscription for the service. */
     protected abstract void setDefaultSubscription(int subscriptionId);
 
+    protected boolean isAskEverytimeSupported() {
+        return true;
+    }
+
     @Override
     public int getAvailabilityStatus(int subId) {
         final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mManager);
@@ -123,7 +127,11 @@
             // display subscription based account
             return info.getDisplayName();
         } else {
-            return mContext.getString(R.string.calls_and_sms_ask_every_time);
+            if (isAskEverytimeSupported()) {
+                return mContext.getString(R.string.calls_and_sms_ask_every_time);
+            } else {
+                return "";
+            }
         }
     }
 
@@ -163,9 +171,12 @@
                 subIsAvailable = true;
             }
         }
-        // Add the extra "Ask every time" value at the end.
-        displayNames.add(mContext.getString(R.string.calls_and_sms_ask_every_time));
-        subscriptionIds.add(Integer.toString(SubscriptionManager.INVALID_SUBSCRIPTION_ID));
+
+        if (isAskEverytimeSupported()) {
+            // Add the extra "Ask every time" value at the end.
+            displayNames.add(mContext.getString(R.string.calls_and_sms_ask_every_time));
+            subscriptionIds.add(Integer.toString(SubscriptionManager.INVALID_SUBSCRIPTION_ID));
+        }
 
         mPreference.setEntries(displayNames.toArray(new CharSequence[0]));
         mPreference.setEntryValues(subscriptionIds.toArray(new CharSequence[0]));
diff --git a/src/com/android/settings/network/telephony/SmsDefaultSubscriptionController.java b/src/com/android/settings/network/telephony/SmsDefaultSubscriptionController.java
index cf544ab..fadddd5 100644
--- a/src/com/android/settings/network/telephony/SmsDefaultSubscriptionController.java
+++ b/src/com/android/settings/network/telephony/SmsDefaultSubscriptionController.java
@@ -23,8 +23,12 @@
 
 public class SmsDefaultSubscriptionController extends DefaultSubscriptionController {
 
+    private final boolean mIsAskEverytimeSupported;
+
     public SmsDefaultSubscriptionController(Context context, String preferenceKey) {
         super(context, preferenceKey);
+        mIsAskEverytimeSupported = mContext.getResources()
+                .getBoolean(com.android.internal.R.bool.config_sms_ask_every_time_support);
     }
 
     @Override
@@ -43,6 +47,11 @@
     }
 
     @Override
+    protected boolean isAskEverytimeSupported() {
+        return mIsAskEverytimeSupported;
+    }
+
+    @Override
     public PhoneAccountHandle getDefaultCallingAccountHandle() {
         // Not supporting calling account override by VoIP
         return null;
