Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeController.java +2 −0 Original line number Diff line number Diff line Loading @@ -29,11 +29,13 @@ public interface ZenModeController { Uri getExitConditionId(); long getNextAlarm(); void setUserId(int userId); boolean isZenAvailable(); public static class Callback { public void onZenChanged(int zen) {} public void onExitConditionChanged(Uri exitConditionId) {} public void onConditionsChanged(Condition[] conditions) {} public void onNextAlarmChanged() {} public void onZenAvailableChanged(boolean available) {} } } No newline at end of file packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java +56 −0 Original line number Diff line number Diff line Loading @@ -20,15 +20,18 @@ import android.app.AlarmClockInfo; import android.app.AlarmManager; import android.app.INotificationManager; import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.ContentObserver; import android.net.Uri; import android.os.Handler; import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserHandle; import android.provider.Settings.Global; import android.provider.Settings.Secure; import android.service.notification.Condition; import android.service.notification.IConditionListener; import android.service.notification.ZenModeConfig; Loading @@ -52,6 +55,7 @@ public class ZenModeControllerImpl implements ZenModeController { private final INotificationManager mNoMan; private final LinkedHashMap<Uri, Condition> mConditions = new LinkedHashMap<Uri, Condition>(); private final AlarmManager mAlarmManager; private final SetupObserver mSetupObserver; private int mUserId; private boolean mRequesting; Loading @@ -76,6 +80,8 @@ public class ZenModeControllerImpl implements ZenModeController { mNoMan = INotificationManager.Stub.asInterface( ServiceManager.getService(Context.NOTIFICATION_SERVICE)); mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); mSetupObserver = new SetupObserver(handler); mSetupObserver.register(); } @Override Loading @@ -98,6 +104,11 @@ public class ZenModeControllerImpl implements ZenModeController { mModeSetting.setValue(zen); } @Override public boolean isZenAvailable() { return mSetupObserver.isDeviceProvisioned() && mSetupObserver.isUserSetup(); } @Override public void requestConditions(boolean request) { mRequesting = request; Loading Loading @@ -148,6 +159,7 @@ public class ZenModeControllerImpl implements ZenModeController { mContext.registerReceiverAsUser(mReceiver, new UserHandle(mUserId), new IntentFilter(AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED), null, null); mRegistered = true; mSetupObserver.register(); } private void fireNextAlarmChanged() { Loading @@ -162,6 +174,12 @@ public class ZenModeControllerImpl implements ZenModeController { } } private void fireZenAvailableChanged(boolean available) { for (Callback cb : mCallbacks) { cb.onZenAvailableChanged(available); } } private void fireConditionsChanged(Condition[] conditions) { for (Callback cb : mCallbacks) { cb.onConditionsChanged(conditions); Loading Loading @@ -204,4 +222,42 @@ public class ZenModeControllerImpl implements ZenModeController { } } }; private final class SetupObserver extends ContentObserver { private final ContentResolver mResolver; private boolean mRegistered; public SetupObserver(Handler handler) { super(handler); mResolver = mContext.getContentResolver(); } public boolean isUserSetup() { return Secure.getIntForUser(mResolver, Secure.USER_SETUP_COMPLETE, 0, mUserId) != 0; } public boolean isDeviceProvisioned() { return Global.getInt(mResolver, Global.DEVICE_PROVISIONED, 0) != 0; } public void register() { if (mRegistered) { mResolver.unregisterContentObserver(this); } mResolver.registerContentObserver( Global.getUriFor(Global.DEVICE_PROVISIONED), false, this); mResolver.registerContentObserver( Secure.getUriFor(Secure.USER_SETUP_COMPLETE), false, this, mUserId); fireZenAvailableChanged(isZenAvailable()); } @Override public void onChange(boolean selfChange, Uri uri) { if (Global.getUriFor(Global.DEVICE_PROVISIONED).equals(uri) || Secure.getUriFor(Secure.USER_SETUP_COMPLETE).equals(uri)) { fireZenAvailableChanged(isZenAvailable()); } } } } packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java +15 −19 Original line number Diff line number Diff line Loading @@ -107,7 +107,7 @@ public class VolumePanel extends Handler { private static final int MSG_SLIDER_VISIBILITY_CHANGED = 10; private static final int MSG_DISPLAY_SAFE_VOLUME_WARNING = 11; private static final int MSG_LAYOUT_DIRECTION = 12; private static final int MSG_ZEN_MODE_CHANGED = 13; private static final int MSG_ZEN_MODE_AVAILABLE_CHANGED = 13; private static final int MSG_USER_ACTIVITY = 14; // Pseudo stream type for master volume Loading @@ -125,7 +125,7 @@ public class VolumePanel extends Handler { private final ZenModeController mZenController; private boolean mRingIsSilent; private boolean mVoiceCapable; private boolean mZenModeCapable; private boolean mZenModeAvailable; private boolean mZenPanelExpanded; private int mTimeoutDelay = TIMEOUT_DELAY; private float mDisabledAlpha; Loading Loading @@ -405,9 +405,10 @@ public class VolumePanel extends Handler { mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); mVoiceCapable = context.getResources().getBoolean(R.bool.config_voice_capable); mZenModeCapable = !useMasterVolume && mZenController != null; updateZenMode(mZenController != null ? mZenController.getZen() : Global.ZEN_MODE_OFF); if (mZenController != null && !useMasterVolume) { mZenModeAvailable = mZenController.isZenAvailable(); mZenController.addCallback(mZenCallback); } final boolean masterVolumeOnly = res.getBoolean(R.bool.config_useMasterVolume); final boolean masterVolumeKeySounds = res.getBoolean(R.bool.config_useVolumeKeySounds); Loading @@ -434,7 +435,7 @@ public class VolumePanel extends Handler { pw.print(" mTag="); pw.println(mTag); pw.print(" mRingIsSilent="); pw.println(mRingIsSilent); pw.print(" mVoiceCapable="); pw.println(mVoiceCapable); pw.print(" mZenModeCapable="); pw.println(mZenModeCapable); pw.print(" mZenModeAvailable="); pw.println(mZenModeAvailable); pw.print(" mZenPanelExpanded="); pw.println(mZenPanelExpanded); pw.print(" mTimeoutDelay="); pw.println(mTimeoutDelay); pw.print(" mDisabledAlpha="); pw.println(mDisabledAlpha); Loading Loading @@ -645,7 +646,7 @@ public class VolumePanel extends Handler { active.group.setVisibility(View.VISIBLE); updateSlider(active); updateTimeoutDelay(); setZenPanelVisible(isNotificationOrRing(mActiveStreamType)); updateZenPanelVisible(); } } Loading Loading @@ -776,14 +777,8 @@ public class VolumePanel extends Handler { } } private void updateZenMode(int zen) { final boolean show = mZenModeCapable && isNotificationOrRing(mActiveStreamType); setZenPanelVisible(show); } public void postZenModeChanged(int zen) { removeMessages(MSG_ZEN_MODE_CHANGED); obtainMessage(MSG_ZEN_MODE_CHANGED, zen).sendToTarget(); private void updateZenPanelVisible() { setZenPanelVisible(mZenModeAvailable && isNotificationOrRing(mActiveStreamType)); } public void postVolumeChanged(int streamType, int flags) { Loading Loading @@ -1307,8 +1302,9 @@ public class VolumePanel extends Handler { setLayoutDirection(msg.arg1); break; case MSG_ZEN_MODE_CHANGED: updateZenMode(msg.arg1); case MSG_ZEN_MODE_AVAILABLE_CHANGED: mZenModeAvailable = msg.arg1 != 0; updateZenPanelVisible(); break; case MSG_USER_ACTIVITY: Loading Loading @@ -1359,8 +1355,8 @@ public class VolumePanel extends Handler { }; private final ZenModeController.Callback mZenCallback = new ZenModeController.Callback() { public void onZenChanged(int zen) { postZenModeChanged(zen); public void onZenAvailableChanged(boolean available) { obtainMessage(MSG_ZEN_MODE_AVAILABLE_CHANGED, available ? 1 : 0, 0).sendToTarget(); } }; Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeController.java +2 −0 Original line number Diff line number Diff line Loading @@ -29,11 +29,13 @@ public interface ZenModeController { Uri getExitConditionId(); long getNextAlarm(); void setUserId(int userId); boolean isZenAvailable(); public static class Callback { public void onZenChanged(int zen) {} public void onExitConditionChanged(Uri exitConditionId) {} public void onConditionsChanged(Condition[] conditions) {} public void onNextAlarmChanged() {} public void onZenAvailableChanged(boolean available) {} } } No newline at end of file
packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java +56 −0 Original line number Diff line number Diff line Loading @@ -20,15 +20,18 @@ import android.app.AlarmClockInfo; import android.app.AlarmManager; import android.app.INotificationManager; import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.ContentObserver; import android.net.Uri; import android.os.Handler; import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserHandle; import android.provider.Settings.Global; import android.provider.Settings.Secure; import android.service.notification.Condition; import android.service.notification.IConditionListener; import android.service.notification.ZenModeConfig; Loading @@ -52,6 +55,7 @@ public class ZenModeControllerImpl implements ZenModeController { private final INotificationManager mNoMan; private final LinkedHashMap<Uri, Condition> mConditions = new LinkedHashMap<Uri, Condition>(); private final AlarmManager mAlarmManager; private final SetupObserver mSetupObserver; private int mUserId; private boolean mRequesting; Loading @@ -76,6 +80,8 @@ public class ZenModeControllerImpl implements ZenModeController { mNoMan = INotificationManager.Stub.asInterface( ServiceManager.getService(Context.NOTIFICATION_SERVICE)); mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); mSetupObserver = new SetupObserver(handler); mSetupObserver.register(); } @Override Loading @@ -98,6 +104,11 @@ public class ZenModeControllerImpl implements ZenModeController { mModeSetting.setValue(zen); } @Override public boolean isZenAvailable() { return mSetupObserver.isDeviceProvisioned() && mSetupObserver.isUserSetup(); } @Override public void requestConditions(boolean request) { mRequesting = request; Loading Loading @@ -148,6 +159,7 @@ public class ZenModeControllerImpl implements ZenModeController { mContext.registerReceiverAsUser(mReceiver, new UserHandle(mUserId), new IntentFilter(AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED), null, null); mRegistered = true; mSetupObserver.register(); } private void fireNextAlarmChanged() { Loading @@ -162,6 +174,12 @@ public class ZenModeControllerImpl implements ZenModeController { } } private void fireZenAvailableChanged(boolean available) { for (Callback cb : mCallbacks) { cb.onZenAvailableChanged(available); } } private void fireConditionsChanged(Condition[] conditions) { for (Callback cb : mCallbacks) { cb.onConditionsChanged(conditions); Loading Loading @@ -204,4 +222,42 @@ public class ZenModeControllerImpl implements ZenModeController { } } }; private final class SetupObserver extends ContentObserver { private final ContentResolver mResolver; private boolean mRegistered; public SetupObserver(Handler handler) { super(handler); mResolver = mContext.getContentResolver(); } public boolean isUserSetup() { return Secure.getIntForUser(mResolver, Secure.USER_SETUP_COMPLETE, 0, mUserId) != 0; } public boolean isDeviceProvisioned() { return Global.getInt(mResolver, Global.DEVICE_PROVISIONED, 0) != 0; } public void register() { if (mRegistered) { mResolver.unregisterContentObserver(this); } mResolver.registerContentObserver( Global.getUriFor(Global.DEVICE_PROVISIONED), false, this); mResolver.registerContentObserver( Secure.getUriFor(Secure.USER_SETUP_COMPLETE), false, this, mUserId); fireZenAvailableChanged(isZenAvailable()); } @Override public void onChange(boolean selfChange, Uri uri) { if (Global.getUriFor(Global.DEVICE_PROVISIONED).equals(uri) || Secure.getUriFor(Secure.USER_SETUP_COMPLETE).equals(uri)) { fireZenAvailableChanged(isZenAvailable()); } } } }
packages/SystemUI/src/com/android/systemui/volume/VolumePanel.java +15 −19 Original line number Diff line number Diff line Loading @@ -107,7 +107,7 @@ public class VolumePanel extends Handler { private static final int MSG_SLIDER_VISIBILITY_CHANGED = 10; private static final int MSG_DISPLAY_SAFE_VOLUME_WARNING = 11; private static final int MSG_LAYOUT_DIRECTION = 12; private static final int MSG_ZEN_MODE_CHANGED = 13; private static final int MSG_ZEN_MODE_AVAILABLE_CHANGED = 13; private static final int MSG_USER_ACTIVITY = 14; // Pseudo stream type for master volume Loading @@ -125,7 +125,7 @@ public class VolumePanel extends Handler { private final ZenModeController mZenController; private boolean mRingIsSilent; private boolean mVoiceCapable; private boolean mZenModeCapable; private boolean mZenModeAvailable; private boolean mZenPanelExpanded; private int mTimeoutDelay = TIMEOUT_DELAY; private float mDisabledAlpha; Loading Loading @@ -405,9 +405,10 @@ public class VolumePanel extends Handler { mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); mVoiceCapable = context.getResources().getBoolean(R.bool.config_voice_capable); mZenModeCapable = !useMasterVolume && mZenController != null; updateZenMode(mZenController != null ? mZenController.getZen() : Global.ZEN_MODE_OFF); if (mZenController != null && !useMasterVolume) { mZenModeAvailable = mZenController.isZenAvailable(); mZenController.addCallback(mZenCallback); } final boolean masterVolumeOnly = res.getBoolean(R.bool.config_useMasterVolume); final boolean masterVolumeKeySounds = res.getBoolean(R.bool.config_useVolumeKeySounds); Loading @@ -434,7 +435,7 @@ public class VolumePanel extends Handler { pw.print(" mTag="); pw.println(mTag); pw.print(" mRingIsSilent="); pw.println(mRingIsSilent); pw.print(" mVoiceCapable="); pw.println(mVoiceCapable); pw.print(" mZenModeCapable="); pw.println(mZenModeCapable); pw.print(" mZenModeAvailable="); pw.println(mZenModeAvailable); pw.print(" mZenPanelExpanded="); pw.println(mZenPanelExpanded); pw.print(" mTimeoutDelay="); pw.println(mTimeoutDelay); pw.print(" mDisabledAlpha="); pw.println(mDisabledAlpha); Loading Loading @@ -645,7 +646,7 @@ public class VolumePanel extends Handler { active.group.setVisibility(View.VISIBLE); updateSlider(active); updateTimeoutDelay(); setZenPanelVisible(isNotificationOrRing(mActiveStreamType)); updateZenPanelVisible(); } } Loading Loading @@ -776,14 +777,8 @@ public class VolumePanel extends Handler { } } private void updateZenMode(int zen) { final boolean show = mZenModeCapable && isNotificationOrRing(mActiveStreamType); setZenPanelVisible(show); } public void postZenModeChanged(int zen) { removeMessages(MSG_ZEN_MODE_CHANGED); obtainMessage(MSG_ZEN_MODE_CHANGED, zen).sendToTarget(); private void updateZenPanelVisible() { setZenPanelVisible(mZenModeAvailable && isNotificationOrRing(mActiveStreamType)); } public void postVolumeChanged(int streamType, int flags) { Loading Loading @@ -1307,8 +1302,9 @@ public class VolumePanel extends Handler { setLayoutDirection(msg.arg1); break; case MSG_ZEN_MODE_CHANGED: updateZenMode(msg.arg1); case MSG_ZEN_MODE_AVAILABLE_CHANGED: mZenModeAvailable = msg.arg1 != 0; updateZenPanelVisible(); break; case MSG_USER_ACTIVITY: Loading Loading @@ -1359,8 +1355,8 @@ public class VolumePanel extends Handler { }; private final ZenModeController.Callback mZenCallback = new ZenModeController.Callback() { public void onZenChanged(int zen) { postZenModeChanged(zen); public void onZenAvailableChanged(boolean available) { obtainMessage(MSG_ZEN_MODE_AVAILABLE_CHANGED, available ? 1 : 0, 0).sendToTarget(); } }; Loading