breakManager: Add new state machine for screen time/health breaks
This implements health break reminder support in gnome-shell. It depends on a few bits and bobs from other modules: - New settings schemas in gsettings-desktop-schemas (released in 47.beta, which Mutter already depends on) - A settings UI in gnome-control-center - User documentation in gnome-user-docs It implements the design from https://gitlab.gnome.org/Teams/Design/settings-mockups/-/blob/master/wellbeing/wellbeing.png. The core of the implementation is `BreakManager`, which is a state machine which uses the Mutter `IdleMonitor` to track whether the user is, or should be, in a screen time break. The `BreakDispatcher` is based on top of this, and controls showing notifications, countdown timers, screen fades, the lock shield, etc. to make the user aware of upcoming or due breaks, as per their notification preferences. Unit tests are included to check that `BreakManager` works. These provide mock implementations of basic GLib clock functions, the `IdleMonitor` and `Gio.Settings` in order to test the state machine in faster-than-real-time. Signed-off-by: Philip Withnall <pwithnall@gnome.org> See: https://gitlab.gnome.org/Teams/Design/initiatives/-/issues/130 Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3251>
This commit is contained in:
@ -8,6 +8,7 @@ import St from 'gi://St';
|
||||
|
||||
import * as AccessDialog from './accessDialog.js';
|
||||
import * as AudioDeviceSelection from './audioDeviceSelection.js';
|
||||
import * as BreakManager from '../misc/breakManager.js';
|
||||
import * as Config from '../misc/config.js';
|
||||
import * as Components from './components.js';
|
||||
import * as CtrlAltTab from './ctrlAltTab.js';
|
||||
@ -89,6 +90,9 @@ export let inputMethod = null;
|
||||
export let introspectService = null;
|
||||
export let locatePointer = null;
|
||||
export let endSessionDialog = null;
|
||||
export let breakManager = null;
|
||||
export let screenTimeDBus = null;
|
||||
export let breakManagerDispatcher = null;
|
||||
|
||||
let _startDate;
|
||||
let _defaultCssStylesheet = null;
|
||||
@ -244,6 +248,11 @@ async function _initializeUI() {
|
||||
|
||||
introspectService = new Introspect.IntrospectService();
|
||||
|
||||
// Set up the global default break reminder manager and its D-Bus interface
|
||||
breakManager = new BreakManager.BreakManager();
|
||||
screenTimeDBus = new ShellDBus.ScreenTimeDBus(breakManager);
|
||||
breakManagerDispatcher = new BreakManager.BreakDispatcher(breakManager);
|
||||
|
||||
layoutManager.init();
|
||||
overview.init();
|
||||
|
||||
|
Reference in New Issue
Block a user