diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index defa38a6a8422745fefc2015dd85e43f12cb16a3..084643570630a1977cf4740c34b1421239949f81 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -2366,6 +2366,11 @@ public final class Settings { } }; + /** + * @hide + */ + public static final String SHOW_ALARM_ICON = "show_alarm_icon"; + /** * Scaling factor for fonts, float. */ diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java index 540b9d003a17abdda2f4e0dc1f14231b1d7a8fed..7170115286efe88f76ed0807204d7b3acdcf722d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java @@ -26,12 +26,15 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.UserInfo; +import android.database.ContentObserver; import android.media.AudioManager; +import android.net.Uri; import android.os.Handler; import android.os.IRemoteCallback; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; +import android.provider.Settings; import android.provider.Settings.Global; import android.telecom.TelecomManager; import android.util.Log; @@ -72,6 +75,7 @@ public class PhoneStatusBarPolicy implements Callback { private final HotspotController mHotspot; private final AlarmManager mAlarmManager; private final UserInfoController mUserInfoController; + private boolean mAlarmIconVisible; // Assume it's all good unless we hear otherwise. We don't always seem // to get broadcasts that it *is* there. @@ -146,6 +150,10 @@ public class PhoneStatusBarPolicy implements Callback { // Alarm clock mService.setIcon(SLOT_ALARM_CLOCK, R.drawable.stat_sys_alarm, 0, null); mService.setIconVisibility(SLOT_ALARM_CLOCK, false); + mAlarmIconObserver.onChange(true); + mContext.getContentResolver().registerContentObserver( + Settings.System.getUriFor(Settings.System.SHOW_ALARM_ICON), + false, mAlarmIconObserver); // zen mService.setIcon(SLOT_ZEN, R.drawable.stat_sys_zen_important, 0, null); @@ -173,6 +181,20 @@ public class PhoneStatusBarPolicy implements Callback { mService.setIconVisibility(SLOT_MANAGED_PROFILE, false); } + private ContentObserver mAlarmIconObserver = new ContentObserver(null) { + @Override + public void onChange(boolean selfChange, Uri uri) { + mAlarmIconVisible = Settings.System.getInt(mContext.getContentResolver(), + Settings.System.SHOW_ALARM_ICON, 1) == 1; + updateAlarm(); + } + + @Override + public void onChange(boolean selfChange) { + onChange(selfChange, null); + } + }; + public void setZenMode(int zen) { mZen = zen; updateVolumeZen(); @@ -184,7 +206,7 @@ public class PhoneStatusBarPolicy implements Callback { final boolean zenNone = mZen == Global.ZEN_MODE_NO_INTERRUPTIONS; mService.setIcon(SLOT_ALARM_CLOCK, zenNone ? R.drawable.stat_sys_alarm_dim : R.drawable.stat_sys_alarm, 0, null); - mService.setIconVisibility(SLOT_ALARM_CLOCK, mCurrentUserSetup && hasAlarm); + mService.setIconVisibility(SLOT_ALARM_CLOCK, mCurrentUserSetup && hasAlarm && mAlarmIconVisible); } private final void updateSimState(Intent intent) {