@@ -91,6 +91,7 @@ public class ZenModeHelper {
9191 private AudioManagerInternal mAudioManager ;
9292 private boolean mEffectsSuppressed ;
9393 private boolean mAllowLights ;
94+ private int mVibrationMode ;
9495
9596 public ZenModeHelper (Context context , Looper looper , ConditionProviders conditionProviders ) {
9697 mContext = context ;
@@ -117,10 +118,12 @@ public String toString() {
117118 return TAG ;
118119 }
119120
120- public boolean matchesCallFilter (UserHandle userHandle , Bundle extras ,
121+ public boolean [] matchesCallFilter (UserHandle userHandle , Bundle extras ,
121122 ValidateNotificationPeople validator , int contactsTimeoutMs , float timeoutAffinity ) {
122- return ZenModeFiltering .matchesCallFilter (mContext , mZenMode , mConfig , userHandle , extras ,
123- validator , contactsTimeoutMs , timeoutAffinity );
123+ boolean matches = ZenModeFiltering .matchesCallFilter (mContext , mZenMode , mConfig ,
124+ userHandle , extras , validator , contactsTimeoutMs , timeoutAffinity );
125+ boolean matchesForVibration = matches || allowVibrationForCalls ();
126+ return new boolean [] { matches , matchesForVibration };
124127 }
125128
126129 public boolean isCall (NotificationRecord record ) {
@@ -238,6 +241,8 @@ public void dump(PrintWriter pw, String prefix) {
238241 pw .print (prefix ); pw .print ("mUser=" ); pw .println (mUser );
239242 dump (pw , prefix , "mConfig" , mConfig );
240243 pw .print (prefix ); pw .print ("mEffectsSuppressed=" ); pw .println (mEffectsSuppressed );
244+ pw .print (prefix ); pw .print ("mAllowLights=" ); pw .println (mAllowLights );
245+ pw .print (prefix ); pw .print ("mVibrationMode=" ); pw .println (mVibrationMode );
241246 mFiltering .dump (pw , prefix );
242247 mConditions .dump (pw , prefix );
243248 }
@@ -381,6 +386,7 @@ private boolean evaluateZenMode(String reason, boolean setRingerMode) {
381386 mZenMode = zen ;
382387 updateRingerModeAffectedStreams ();
383388 readAllowLightsFromSettings ();
389+ readVibrationModeFromSettings ();
384390 setZenModeSetting (mZenMode );
385391 if (setRingerMode ) {
386392 applyZenToRingerMode ();
@@ -428,6 +434,21 @@ public void readAllowLightsFromSettings() {
428434 }
429435 }
430436
437+ public boolean allowVibrationForCalls () {
438+ return mVibrationMode > 0 ;
439+ }
440+
441+ public boolean allowVibrationForNotifications () {
442+ return mVibrationMode > 1 ;
443+ }
444+
445+ public void readVibrationModeFromSettings () {
446+ final ContentResolver cr = mContext .getContentResolver ();
447+ mVibrationMode = mZenMode == Global .ZEN_MODE_IMPORTANT_INTERRUPTIONS
448+ ? CMSettings .System .getInt (cr , CMSettings .System .ZEN_PRIORITY_VIBRATION_MODE , 0 )
449+ : 0 ;
450+ }
451+
431452 private void applyRestrictions () {
432453 final boolean zen = mZenMode != Global .ZEN_MODE_OFF ;
433454
@@ -715,9 +736,11 @@ public int getRingerModeAffectedStreams(int streams) {
715736 private final class SettingsObserver extends ContentObserver {
716737 private final Uri ZEN_MODE = Global .getUriFor (Global .ZEN_MODE );
717738 private final Uri ZEN_ALLOW_LIGHTS = CMSettings .System .getUriFor (
718- CMSettings .System .ZEN_ALLOW_LIGHTS );
739+ CMSettings .System .ZEN_ALLOW_LIGHTS );
719740 private final Uri ZEN_PRIORITY_ALLOW_LIGHTS = CMSettings .System .getUriFor (
720- CMSettings .System .ZEN_PRIORITY_ALLOW_LIGHTS );
741+ CMSettings .System .ZEN_PRIORITY_ALLOW_LIGHTS );
742+ private final Uri ZEN_PRIORITY_VIBRATION_MODE = CMSettings .System .getUriFor (
743+ CMSettings .System .ZEN_PRIORITY_VIBRATION_MODE );
721744
722745 public SettingsObserver (Handler handler ) {
723746 super (handler );
@@ -730,6 +753,8 @@ public void observe() {
730753 ZEN_ALLOW_LIGHTS , false /*notifyForDescendents*/ , this );
731754 resolver .registerContentObserver (
732755 ZEN_PRIORITY_ALLOW_LIGHTS , false /*notifyForDescendents*/ , this );
756+ resolver .registerContentObserver (
757+ ZEN_PRIORITY_VIBRATION_MODE , false /*notifyForDescendents*/ , this );
733758 update (null );
734759 }
735760
@@ -746,6 +771,8 @@ public void update(Uri uri) {
746771 }
747772 } else if (ZEN_ALLOW_LIGHTS .equals (uri ) || ZEN_PRIORITY_ALLOW_LIGHTS .equals (uri )) {
748773 readAllowLightsFromSettings ();
774+ } else if (ZEN_PRIORITY_VIBRATION_MODE .equals (uri )) {
775+ readVibrationModeFromSettings ();
749776 }
750777 }
751778 }
0 commit comments