diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java
index e7f15e5..fd7a750 100644
--- a/src/com/android/settings/notification/AppNotificationSettings.java
+++ b/src/com/android/settings/notification/AppNotificationSettings.java
@@ -90,7 +90,8 @@
             rows.put(mAppRow.pkg, mAppRow);
             collectConfigActivities(rows);
 
-            setupImportancePrefs(mAppRow.systemApp, mAppRow.appImportance, mAppRow.banned);
+            setupImportancePrefs(mAppRow.cantBlock, mAppRow.cantSilence,
+                    mAppRow.appImportance, mAppRow.banned);
             setupPriorityPref(mAppRow.appBypassDnd);
             setupVisOverridePref(mAppRow.appVisOverride);
             updateDependents(mAppRow.appImportance);
diff --git a/src/com/android/settings/notification/NotificationBackend.java b/src/com/android/settings/notification/NotificationBackend.java
index 1229b9e..f8c6788 100644
--- a/src/com/android/settings/notification/NotificationBackend.java
+++ b/src/com/android/settings/notification/NotificationBackend.java
@@ -59,14 +59,14 @@
 
     public AppRow loadAppRow(Context context, PackageManager pm, PackageInfo app) {
         final AppRow row = loadAppRow(context, pm, app.applicationInfo);
-        row.systemApp = Utils.isSystemPackage(context.getResources(), pm, app);
+        row.cantBlock = Utils.isSystemPackage(context.getResources(), pm, app);
         final String[] nonBlockablePkgs = context.getResources().getStringArray(
                     com.android.internal.R.array.config_nonBlockableNotificationPackages);
         if (nonBlockablePkgs != null) {
             int N = nonBlockablePkgs.length;
             for (int i = 0; i < N; i++) {
                 if (app.packageName.equals(nonBlockablePkgs[i])) {
-                    row.systemApp = true;
+                    row.cantBlock = row.cantSilence = true;
                 }
             }
         }
@@ -153,7 +153,8 @@
         public Intent settingsIntent;
         public boolean banned;
         public boolean first;  // first app in section
-        public boolean systemApp;
+        public boolean cantBlock;
+        public boolean cantSilence;
         public int appImportance;
         public boolean appBypassDnd;
         public int appVisOverride;
diff --git a/src/com/android/settings/notification/NotificationSettingsBase.java b/src/com/android/settings/notification/NotificationSettingsBase.java
index 3469cc0..0e637a7 100644
--- a/src/com/android/settings/notification/NotificationSettingsBase.java
+++ b/src/com/android/settings/notification/NotificationSettingsBase.java
@@ -154,8 +154,9 @@
         }
     }
 
-    protected void setupImportancePrefs(boolean notBlockable, int importance, boolean banned) {
-        if (mShowSlider) {
+    protected void setupImportancePrefs(boolean notBlockable, boolean notSilenceable,
+                                        int importance, boolean banned) {
+        if (mShowSlider && !notSilenceable) {
             setVisible(mBlock, false);
             setVisible(mSilent, false);
             mImportance.setDisabledByAdmin(mSuspendedAppsAdmin);
@@ -192,18 +193,22 @@
                     }
                 });
             }
-            mSilent.setChecked(importance == Ranking.IMPORTANCE_LOW);
-            mSilent.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
-                @Override
-                public boolean onPreferenceChange(Preference preference, Object newValue) {
-                    final boolean silenced = (Boolean) newValue;
-                    final int importance =
-                            silenced ? Ranking.IMPORTANCE_LOW : Ranking.IMPORTANCE_UNSPECIFIED;
-                    mBackend.setImportance(mPkgInfo.packageName, mUid, importance);
-                    updateDependents(importance);
-                    return true;
-                }
-            });
+            if (notSilenceable) {
+                setVisible(mSilent, false);
+            } else {
+                mSilent.setChecked(importance == Ranking.IMPORTANCE_LOW);
+                mSilent.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+                    @Override
+                    public boolean onPreferenceChange(Preference preference, Object newValue) {
+                        final boolean silenced = (Boolean) newValue;
+                        final int importance =
+                                silenced ? Ranking.IMPORTANCE_LOW : Ranking.IMPORTANCE_UNSPECIFIED;
+                        mBackend.setImportance(mPkgInfo.packageName, mUid, importance);
+                        updateDependents(importance);
+                        return true;
+                    }
+                });
+            }
             updateDependents(banned ? Ranking.IMPORTANCE_NONE : importance);
         }
     }
