-
Notifications
You must be signed in to change notification settings - Fork 39
Rework QuickSettings #180
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
moWerk
wants to merge
31
commits into
AsteroidOS:master
Choose a base branch
from
moWerk:rework-quicksettings
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Rework QuickSettings #180
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
dba5f92
to
fbea2d4
Compare
- Add dummy toggles for sound and settings shortcut - Add functionally working wifi toggle. Bug: item is not in toggled on color when wifi is active on startup of quicksettings - Place toggles into 2x3 grid - Order 1 row: brightness, sound, haptics - Order 2 row: wifi, bt, settings shortcut - Resize toggle items to Dims.l(26) and add Dims.(2) spacing to the grid - Implement batteryMeter - Add waveUp and waveDown animations to indicat charge/discharge - Fix wifiToogle initial state when powered on. Qt.callLater delays the initial sync until after wifiStatus has likely fetched its state from Connman
…mport before the nemo systemsettings import
- Implement two static spots at the top for stock placment of the lockbutton and new settings shortcut (WiP) - Use white for the batteryMeter fill to unify the look with the pageDots - Scale pageDots to regular Dims.l(4) size - Set lockbutton to toggled as default state - Place batteryMeter and chargeText back to the bottom like it was in current stock state
This commit adds the ability to launch other applications from QML by implementing an AppLauncher class that provides QML-accessible methods to start applications. Changes: - Added AppLauncher class directly in main.cpp with two methods: - launchApp(): Starts an application by name - launchDesktopFile(): Handles .desktop files by parsing the application name - Exposed AppLauncher to QML via context property appLauncher - Updated quickSettings.qml to use the new launcher for starting the settings app - Added appropriate error handling for application launching This allows for seamless integration with AsteroidOS app launching mechanism while using standard Qt functionality (QProcess) rather than relying on the Lipstick compositor directly.
… control Replaced the dummy soundToggleComponent, which only displayed a fixed ios-sound-indicator-high icon and constant toggled state, with a fully functional volume toggle. The new implementation: - Supports mute/unmute by swapping volumeControl.volume and preMuteLevel.value, preserving the previous volume for seamless restoration. - Dynamically updates the icon (mute, high, mid, low, off) based on volume level or mute state. - Plays unmuteSound on unmuting for audible feedback. - Syncs with external volume changes via Connections, ensuring UI consistency. - Initializes state based on preMuteLevel, with clean, production-ready code. This adds proper audio control to the QuickSettings UI, enhancing user interaction and system integration.
…lection from the new quickSettingsPage in asteroid-settings
Aligned QuickSettings.qml with QuickSettingsPage.qml by replacing 9 individual ConfigurationValue objects with two array-based ones at /desktop/asteroid/quicksettings/top and /desktop/asteroid/quicksettings/main. Updated topButtonsView and quickSettingsView to read from topToggles and mainToggles arrays, supporting dynamic toggle counts while preserving toggle behavior, duplicate filtering, horizontal swiping, battery meter, and visual styling. Ensured seamless integration with QuickSettingsPage.qml reordering.
Added toggleEnabled ConfigurationValue at /desktop/asteroid/quicksettings/enabled to QuickSettings.qml, matching QuickSettingsPage.qml. Updated topButtonsView and quickSettingsView to exclude toggles disabled by the user, integrating with existing toggleAvailable filtering. Preserved all toggle behaviors, visuals, and dynamic row grouping, ensuring disabled toggles do not appear in the UI.
Updated topToggles to [lockButton, settingsButton], removing empty slot. Modified topButtonsView to display exactly two toggles (width: toggleSize * 2, no scrolling), ensuring sync with QuickSettingsPage.qml’s two-item top row. Preserved filtering and visuals.
…uickSettings.qml Added user-configurable position toggle for battery meter and fixedRow in QuickSettings.qml, controlled by ConfigurationValue (/desktop/asteroid/quicksettings/batteryBottom, default true). Enables placement of batteryMeter, batteryPercentText, pageDots, and fixedRow above or below slidingRow using QML State and AnchorChanges: - Bottom position (batteryBottom: true): fixedRow anchors to slidingRow.top with bottomMargin: Dims.l(4) (16px); batteryMeter and pageDots anchor to slidingRow.bottom with topMargin: Dims.l(12) and Dims.l(4), respectively. - Top position (batteryBottom: false): fixedRow anchors to slidingRow.bottom with topMargin: 0 (workaround for 32px spacing bug); batteryMeter and pageDots anchor to slidingRow.top with bottomMargin: Dims.l(12) and Dims.l(4). Addressed a spacing bug where fixedRow had 32px spacing from slidingRow in top position (vs. 16px in bottom position). Setting topMargin: 0 in topPosition ensures consistent 16px spacing, pending further investigation into slidingRow layout. Added Connections block to handle batteryBottom value changes for robust state transitions. Preserved all toggle functionality, UI styles, and drag rules. Reduced fake press highlight transition to 100ms (from 200ms) for snappier toggle feedback.
…nToggles to sliderToggles, update configuration keys to align with QuickSettingsPage.qml, and ensure consistent nomenclature. No migration of old config values.
…and enhance battery visuals - Replaced batteryBottom ConfigurationValue with options object, including batteryBottom, batteryAnimation, and batteryColored booleans - Updated fixedRow, batteryMeter, batteryPercentText, pageDots, and Connections to use options.value.batteryBottom for positioning - Made batteryFill wave animation conditional on options.value.batteryAnimation and charger connection - Set batteryFill color to dynamic scheme when options.value.batteryColored is true: - 100% to 50%: Green (#00FF00) - 50% to 20%: Interpolate to orange (#FFA500) - 20% to 0%: Interpolate to red (#FF0000), with opacity animation (0.6 to 0.4, 500ms each way) when batteryAnimation is true, not charging, and battery < 30% - Added flashIcon opacity animation (1.0 to 0.6 and back, 1000ms each way) during charging - Fixed Connections to target options instead of batteryBottom - Corrected batteryFill opacity animation condition to use == for comparison
- Fix color sheme to actually show colors in between the defined solid colors - Set battery fill to constant 0.6 opacity - Set batteryPercentText to 0.6 and 0.9 opacity when charger connects - Set flashIcon to blink between 0.6 and 0.9 opacity when charger connects
…ion of the charging state
Extend the battery particle system with multiple design options: - Add selectable particle designs with a configurable particleDesign option - Include four distinct designs: diamonds, bubbles, logos, and flashes - Create design-specific visual properties (size, opacity) for each type - Implement a property dictionary to make designs individually configurable - Optimize animations with per-design targets and properties - Reduce non-charging particle lifetime to 1200ms for improved visual effect - Add fallback to diamonds if no design is specified in configuration This prepares for a future UI toggle in QuickSettingsPage to allow users to switch between different particle designs.
- Modified QuickSettings.qml to reference qrc:///org/asteroid/controls/qml/BatteryParticles.qml in batteryMeter’s particleContainer. - Ensured compatibility with existing particle creation logic for system-wide particle animations.
- Enhanced batteryMeter particle system: - Added speed-based movement (60px/s charging, 20px/s discharging) with clipBounds destruction. - Implemented horizontal spawn stratification (two halves, alternating). - Set dynamic spawn intervals: 200ms (charging), 750ms (discharging, doubled rate). - Adjusted lifetimes: 2500ms (charging, +50%), 8500ms (discharging, -15%). - Lowered particle maxOpacity to 0.6 and batteryFill RGBA alpha by 0.1.
Introduce 'RemorseTimer' QML component from 'org.asteroid.controls' for system-wide cancellable action countdowns, and integrate it with new 'powerOffToggle' and 'rebootToggle' in 'QuickSettings.qml'. The 'RemorseTimer' displays a semi-transparent overlay with a customizable 'SegmentedArc' gauge, action message, countdown label, and 'Tap to cancel' prompt, used for confirming critical actions. 'RemorseTimer' features: - Configurable countdown via 'interval' property (default 3000ms). - Customizable gauge with 'gaugeSegmentAmount' (default 6), 'gaugeStartDegree' (default -130), and 'gaugeEndFromStartDegree' (default 265). - Smooth arc progression (0-100 'inputValue' range, ~500ms per segment for 6 segments). - Precise second-by-second countdown (e.g., 3->1 for 3000ms) synchronized with arc. - 300ms fade-in on start and fade-out on cancellation. - Bold countdown label ('Dims.l(18)', 'SemiBoldCondensed') and action/cancel labels ('Dims.l(6)') with 'Dims.l(1)' margins. - Translated messages using 'qsTrId' for i18n. - 'triggered' and 'cancelled' signals for system integration. 'QuickSettings.qml' updates: - Added 'powerOffToggleComponent' and 'rebootToggleComponent', using 'RemorseTimer' for power-off and reboot actions via 'login1DBus' calls. - Configured 'RemorseTimer' with 'interval: 3000', 'gaugeSegmentAmount: 6', 'gaugeStartDegree: -130', and 'gaugeEndFromStartDegree: 265'. - Included toggles in 'sliderToggles' configuration for user access. These additions enhance AsteroidOS's quick settings with safe, user-confirmable power-off and reboot functionality, with plans for further 'RemorseTimer' use. Signed-off-by: Timo Könnecke <koennecke@mosushi.de>
Introduce 'aodToggle' and fully flesh out 'cinemaToggle' in 'QuickSettings.qml', adding always-on display (AoD) control and a comprehensive cinema mode with state synchronization. Changes: - Added 'aodToggleComponent' to toggle AoD via 'alwaysOnDisplay' ('/org/asteroidos/settings/always-on-display') and 'displaySettings.lowPowerModeEnabled', with dynamic 'ios-watch-aod-on' and 'ios-watch-aod-off' icons from 'asteroid-icons-ion'. - Enhanced 'cinemaToggleComponent': - Toggles mute, brightness to 10, and AoD off on check; reverts to unmute, brightness 100, and restores pre-toggle AoD state when unchecked. - Starts untoggled by default, enabling only if muted, brightness <= 10, and AoD off, with 'Connections' to untoggle on state mismatch. - Handles unavailable 'soundToggle' ('DeviceInfo.hasSpeaker' false) by using 'volumeControl' directly. - Syncs with 'brightnessToggle' by setting brightness to 100 on uncheck. - Respects secondary LCD AoD status pre-toggling by storing 'alwaysOnDisplay.value' in 'preAodToggled' ('/desktop/asteroid/quicksettings/pre-aod-toggled'). - Added 'ConfigurationValue' for 'alwaysOnDisplay' and 'preAodToggled', and updated 'toggleEnabled' to include 'aodToggle'. - Inserted 'aodToggle' before 'powerOffToggle' in 'toggleRegistry' and 'sliderToggles'. - Exposed 'cancelText' in 'RemorseTimer' and handled 'id-tap-to-cancel' translation for 'powerOffToggle' and 'rebootToggle'. - Update Translations
…ents to launch asteroid-music and asteroid-flashlight
…ong-press functionality: - Implement click-to-toggle between 0 and 100 (to 0 only from 100, else to 100). - Add long-press to adjust brightness in 10-unit steps every 300ms, covering 0 to 100 in ~3 seconds. - Persist last press-and-hold direction to continue increasing/decreasing until reaching 0 or 100. - Ensure immediate stop on release using isReleased flag to prevent post-release changes. - Update toggle icon state to show active when brightness > 10.
- Swapped batteryMeter Item with ValueMeter component from org.asteroid.controls, generalizing the battery display for future use with brightness or sound values. - Moved battery-specific color logic (green/yellow/red gradient) to ValueMeter's fillColor property, controlled by options.value.batteryColored. - Renamed internal components (batteryOutline, batteryFill) to generic terms via ValueMeter. - Updated anchoring references in batteryPercentText, flashIcon, and Connections to use valueMeter. - Preserved battery-related logic (batteryChargePercentage, mceChargerType) for default behavior.
…htness during press-and-hold - Modified valueMeter in QuickSettings.qml to display brightnessToggle values during press-and-hold, using a purple fill color and disabling isIncreasing/animations for clarity. - Added showingBrightness property and resetTimer to valueMeter to revert to battery display after 2 seconds. - Renamed batteryPercentText to valueMeterCaption, showing Brightness during press-and-hold and battery percentage otherwise, with opacity transitions. - Updated brightnessToggle to trigger valueMeter and valueMeterCaption updates via showInValueMeter function during press-and-hold and timer steps. - Added opacity Behavior to valueMeter and valueMeterCaption for smooth transitions.
- Modified soundToggle to support granular 10-unit volume steps via press-and-hold, with unmute handling and direction persistence during active sessions. - Added showingVolume property to valueMeter and valueMeterCaption to display volume with a blue fill color (#4C9800A6) and Volume text during press-and-hold. - Updated soundToggle to trigger valueMeter and valueMeterCaption updates via showInValueMeter, ensuring mutual exclusivity with brightness display. - Added volumeValue property to valueMeter for safe volume binding, updated by soundToggle during volume changes. - Implemented fade-in/out animations with resetTimer, fadeOutTimer, and fadeInTimer to transition between brightness, volume, and battery modes. - Added opacity (250ms) and fillColor (300ms) Behaviors for smooth transitions, with textFadeInTimer for valueMeterCaption text changes. - Updated valueMeter fillColor to respect options.value.batteryColored, using white fill for brightness and volume when disabled, and changed brightness fill to #4CA6005F. - Adjusted valueMeterCaption opacity dodge to 0.8 (no charger) and 1.0 (charger present). - Added notification sound playback on press-and-hold release for soundToggle when volume is non-zero, providing audio feedback for new volume setting. - Added 150ms delay timer for unmuteSound playback to prevent cut-off during mute toggle and ensure full playback on unmute and press-and-hold release. - Updated brightnessToggle press-and-hold to enforce a minimum brightness of 10, aligning with cinemaMode and click toggle logic. - Added resetDirection signal in valueMeter to reset soundToggle and brightnessToggle press-and-hold direction to increment after reverting to battery display, improving UX by defaulting to increasing values. - Removed debug logs from soundToggle, brightnessToggle, and valueMeter for commit readiness.
- Added Behavior on valueMeter.value with 250ms NumberAnimation and InOutQuad easing to smoothly animate fill width transitions for volume, brightness, and battery percentage changes. - Restored valueMeter.enableAnimations to options.value.batteryAnimation && !(showingBrightness || showingVolume), ensuring particle animations are exclusive to battery mode while fill width animates for all modes.
…emove development comments This commit introduces a continuous adjustment cycle for the brightness and volume controls when the user performs a press-and-hold gesture. Instead of stopping at the minimum (0) or maximum (100) value, the adjustment will now: - Reach the limit. - Pause for 1 second. - Reverse direction (increase/decrease). - Continue adjusting in 10-unit steps until the opposite limit is reached. This provides a more fluid and intuitive user experience for fine-tuning brightness and volume. The following changes were made: - Remove development comments - Update Weblate translations - Added a 'directionChangeTimer' to both 'brightnessToggleComponent' and 'soundToggleComponent' to manage the delay and direction reversal. - Modified the 'onTriggered' handler of the adjustment timers ('brightnessHoldTimer', 'volumeHoldTimer') to trigger the 'directionChangeTimer' at the limits instead of stopping. - Implemented the 'directionChangeTimer''s 'onTriggered' handler to flip the adjustment direction ('isIncreasing') and restart the adjustment timer. - Updated the 'MouseArea''s 'onReleased' handler to stop both the adjustment timer and the direction change timer, ensuring the cycle terminates when the user releases the press.
fbea2d4
to
1841638
Compare
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Rework QuickSettings.qml for Enhanced Customization and UX in asteroid-launcher
This pull request overhauls
QuickSettings.qml
in theasteroid-launcher
repository, delivering a redesigned QuickSettings panel for AsteroidOS. While staying fully backwards compatible with no feature regression in function and design over our 10 years old UX many users are familiar with and grew to like. The redesign introduces a flexible, user-customizable interface with a two-row layout, advanced toggle/button interactions, and visual enhancements, all seamlessly integrated with the newQuickSettingsPage.qml
inasteroid-settings
. The changes leverage newqml-asteroid
components (ValueMeter
,Particles
,RemorseTimer
,OptionsCycler
) to provide a polished, touch-friendly smartwatch UX. Below, we detail the new panel features and the revamped toggle/button components.This PR depends on:
AsteroidOS/qml-asteroid#58 to add the necessary components to qml-asteroid.
AsteroidOS/asteroid-settings#100 to provide a settings page for the new user defined order logic.
Already merged:
AsteroidOS/asteroid-icons-ion#23 added a quicksetting logo in two variants to reflect the optional vertical mirrored orientation of the QuickSettings panel layout.
AsteroidOS/asteroid-icons-ion#25 added a Always on Display icon used in the aodToggle.
Issues adressed:
Resolves #116 by implementiong all mentioned features while retaining the lockButton feature.
Resolves AsteroidOS/asteroid-settings#45 by adding granular adjustment of the brightnessToggle via PressedAndHold.
Resolves AsteroidOS/asteroid-settings#76 by adding the soundToggle with mute/unmute option via checked/unchecked state additional to the PressAndHold granular volume adjustment.
Resolves AsteroidOS/asteroid#232 by adding a musicToggle, giving users faster access to the asteroid-music application.
Prepares AsteroidOS/asteroid-sounds#2 inclusion of sound files in the stock delivery.
Prepares AsteroidOS/asteroid-settings#32 UI for wifi setup by offering a wifiToggle to conveniently toggle wifi powered state on demand.
Prepares AsteroidOS/meta-smartwatch#168 by limiting the lower bound of screenbrightness to 10 units in brightnessToggle and cinemaToggle. Adjustment in DisplayPage may be needed to complete this issue
Aids AsteroidOS/asteroid#166 by offering a customizable QuickSettings panel
Adds C++ helper class appLaunchHelper
This new class aims to start apps while in asteroid-launcher context to enable the settingsButton and other app start link buttons.
New Features of QuickSettings.qml Panel
1. Adaptive Two-Row Layout
The panel adopts a dynamic two-row structure with a fixed row (up to two toggles/buttons) and a sliding row (multiple toggles in pages of three). The
batteryBottom
configuration option allows users to position theValueMeter
(battery/volume/brightness meter) and its caption either above or below the sliding row, with the fixed row adjusting accordingly. This ensures optimal screen space usage and user preference flexibility.Implementation: Uses
ListView
components (fixedRow
,slidingRow
) withAnchorChanges
andstates
to reposition elements based onoptions.value.batteryBottom
. Configuration is stored inNemo.Configuration
and synced viaConnections
tooptions
.2. Customizable Visuals with Animations and Colors
Users can enable/disable particle animations (

batteryAnimation
) and colored fills (batteryColored
) for theValueMeter
, with particle designs ("diamonds", "bubbles", "logos", "flashes") selectable viaQuickSettingsPage.qml
. These options enhance visual feedback, especially during battery charging, with smooth transitions for fill (250ms,InOutQuad
), opacity (250ms), and color (300ms).Implementation:
ValueMeter
integratesParticles
for animations, withBehavior
onfillColor
andopacity
for transitions. Settings are stored inoptions
and applied dynamically.3. Fixed Row for Persistent Access
The fixed row displays up to two toggles/buttons, intended for high-priority actions (e.g.,
lockButton
,settingsButton
) but also supporting toggles. Users can reduce it to one toggle by disabling a fixed row toggle inQuickSettingsPage.qml
, ensuring at least one remains active. This provides quick access to essential functions without scrolling.Implementation:
fixedRow
ListView
with aRepeater
loads components fromfixedToggles
configuration, limited to two items, with availability checks viatoggleRegistry
andtoggleEnabled
.4. Sliding Row with Paged Navigation
The sliding row organizes toggles into pages of three, navigable via swipe gestures and indicated by
PageDot
components. A minimum of two toggles is shown on the first page, ensuring usability even with sparse configurations. Pages snap to items (snapMode: ListView.SnapOneItem
) for precise control.Implementation:
slidingRow
ListView
uses a dynamicmodel
slicingsliderToggles
into groups of three, withcontentXChanged
updatingcurrentIndex
forPageDot
synchronization.5. Dynamic Toggle Management
Toggles/buttons are managed via
fixedToggles
,sliderToggles
, andtoggleEnabled
configurations, synced withQuickSettingsPage.qml
. Only available toggles (e.g.,wifiToggle
if WLAN exists) are shown, with sorting by availability and user-defined order. This ensures a clutter-free, device-specific interface.Implementation:
toggleRegistry
maps toggle IDs to components, withallToggles
filtering by availability (DeviceInfo
) andtoggleEnabled
. Configurations are updated viaNemo.Configuration
.6. Enhanced Visual Feedback
The panel features a
ValueMeter
for battery, volume, or brightness, with context-aware captions and color-coded fills (e.g., green >50%, red <20% for battery). Charging states trigger a flashingios-flash
icon with infinite opacity animation (1500ms,InOutQuad
).RemorseTimer
provides confirmation for critical actions (e.g., power-off).Implementation:
ValueMeter
usescurrentValue
bindings and timers (resetTimer
,fadeOutTimer
,fadeInTimer
) to switch modes.flashIcon
usesSequentialAnimation
for charging feedback.Reworked Toggle and Button Components
1. brightnessToggleComponent
Core Feature: Toggles screen brightness (10%, 100%) with press-and-hold for fine-grained adjustment in 10-unit steps. Lower bound at 10 to prevent completely dark screen when automatic display brightness is off or unavailable.
Additional Functionality: Maintains direction persistence (
lastDirection
) for continuous adjustments, resetting to increasing after 2s viavalueMeter.resetDirection
. Shows brightness inValueMeter
during interaction.Implementation:
MouseArea
with 300mspressAndHoldInterval
triggersbrightnessHoldTimer
(300ms repeat), updatingdisplaySettings.brightness
.showInValueMeter
managesValueMeter
transitions with fade effects.2. hapticsToggleComponent
Core Feature: Toggles vibration between "general" (on) and "silent" (off) profiles with haptic feedback.
Implementation: Sets
profileControl.profile
and triggersdelayTimer
(125ms) forNonGraphicalFeedback
on activation. Initialized viaComponent.onCompleted
based on current profile.3. wifiToggleComponent
Core Feature: Toggles Wi-Fi power state with dynamic icon (
ios-wifi
when connected,ios-wifi-outline
otherwise).Additional Functionality: Syncs with
wifiStatus.powered
and updates onpoweredChanged
.Implementation: Binds
toggled
towifiStatus.powered
, withConnections
towifiStatus
for real-time updates. UsesQt.callLater
for initial state sync.4. bluetoothToggleComponent
Core Feature: Toggles Bluetooth power state with dynamic icon (
ios-bluetooth-connected
when connected,ios-bluetooth
otherwise).Implementation: Sets
btStatus.powered
and syncstoggled
withbtStatus.powered
viaBluetoothStatus.onPoweredChanged
.5. soundToggleComponent
Core Feature: Toggles mute/unmute with press-and-hold for volume adjustment in 10-unit steps.
Additional Functionality: Displays volume in
ValueMeter
during adjustment, with dynamic icons (ios-sound-indicator-high/mid/low/off/mute
) based on volume level. PlaysunmuteSound
(150ms delay, 0.8 volume) on unmute. Persists pre-mute volume (preMuteLevel
).Implementation:
linearVolume
andtoPulseVolume
convert between linear (0–100) and pulse audio scales.MouseArea
with 300mspressAndHoldInterval
triggersvolumeHoldTimer
(300ms repeat).showInValueMeter
managesValueMeter
transitions.Connections
tovolumeControl
andpreMuteLevel
update state and icon.6. cinemaToggleComponent
Core Feature: Toggles cinema mode, muting sound, setting brightness to 10%, and disabling always-on-display (AoD).
Additional Functionality: Restores pre-cinema states (volume, brightness, AoD) on deactivation. Syncs state based on mute, brightness, and AoD conditions.
Implementation: Stores
preCinemaAodState
andpreMuteLevel
.Connections
topreMuteLevel
,displaySettings
, andalwaysOnDisplay
updatetoggled
. UsesDeviceInfo.hasSpeaker
for sound handling.7. lockButtonComponent
Core Feature: Triggers low-power mode (LPM) display state.
Implementation: Non-toggleable button calls
mce_dbus.req_display_state_lpm
on activation. Fixedtoggled: true
for consistent appearance.8. settingsButtonComponent
Core Feature: Launches the
asteroid-settings
app.Implementation: Non-toggleable button calls
appLaunchHelper.launchApp("asteroid-settings")
on activation. Fixedtoggled: true
.9. musicButtonComponent
Core Feature: Launches the
asteroid-music
app.Implementation: Non-toggleable button calls
appLauncherHelper.launchApp("asteroid-music")
on activation. Fixedtoggled: true
.10. flashlightButtonComponent
Core Feature: Launches the
asteroid-flashlight
app.Implementation: Non-toggleable button calls
appLauncherHelper.launchApp("asteroid-flashlight")
on activation. Fixedtoggled: true
.11. aodToggleComponent
Core Feature: Toggles always-on-display (AoD) and low-power mode.
Additional Functionality: Updates icon (
ios-watch-aod-on/off
) based on state. Syncs withalwaysOnDisplay.value
.Implementation: Sets
alwaysOnDisplay.value
anddisplaySettings.lowPowerModeEnabled
.Connections
toalwaysOnDisplay
updatetoggled
and icon.12. powerOffToggleComponent
Core Feature: Initiates system power-off with a 3-second
RemorseTimer
confirmation.Implementation: Triggers
remorseTimer
with translatableqsTrId("id-power-off")
andqsTrId("id-tap-to-cancel")
. On completion, callslogin1DBus.PowerOff
.13. rebootToggleComponent
Core Feature: Initiates system reboot with a 3-second
RemorseTimer
confirmation.Additional Functionality: Shows translatable "Rebooting in" and "Tap to cancel" prompts, cancellable by tap. Sets
login1DBus.SetRebootParameter
and callsReboot
.Implementation: Non-toggleable
QuickSettingsToggle
startsremorseTimer
ononChecked
, withonTriggered
connecting tologin1DBus
calls.Changes
QuickSettings.qml
with adaptable layout (batteryBottom
), configurable animations (batteryAnimation
,batteryColored
), and paged sliding row navigation.ValueMeter
integration).qml-asteroid
components (ValueMeter
,Particles
,RemorseTimer
,OptionsCycler
) for polished UX.QuickSettingsPage.qml
inasteroid-settings
for toggle reordering and enable/disable functionality.Commit Notes
This PR completely revamps the QuickSettings panel, offering unprecedented customization and a polished UX for AsteroidOS users. Please review and provide feedback!