Commit graph

185 commits

Author SHA1 Message Date
Aidan MacDonald
376db9bf5b touchscreen: Add flick gesture support in list and WPS
Add some hardcoded flick gestures in the list UI:

Top   -> open quickscreen
Left  -> go back
Right -> go to the WPS

The WPS also gets a set of hardcoded flick shortcuts:

Top    -> open quickscreen
Left   -> go to file / database browser
Right  -> view playlist
Bottom -> context menu

These are enabled by default in pointing mode but can
be disabled using the "Touchscreen Flick Shortcuts"
option.

Change-Id: Ib30a338ebb9662cd136985da6d34ed5b041e4077
2026-09-07 08:56:38 -04:00
Christian Soffke
8eefac3638 quickscreen: prevent out-of-bounds viewports
Fixes possible crash in case of pathological
UI vp dimensions, when attempting to clear a
QS item's vp.

E.g. https://github.com/federicoplg/musicOS
(commit c5e8570) configures a 1x1 UI viewport
at x=319 y=239, resulting in left/right item
viewports that have negative width or height.

Minor additional simplifications with no
effect on behavior:

- Combine actions requiring cleanup in a setup function.
  Put it below the existing cleanup function
- Rename quick_screen_quick to quickscreen_show, and
  quickscreen_run to quickscreen_main
- Iterate over items using FOR_QS_ITEMS macro
- Remove quickscreen_draw_item's int_value
- quickscreen_update: immediately continue if qs skinned
- Remove some obsolete #includes

Change-Id: I49aea3be837b861bdcd5132e84fef858df72327b
2026-09-02 14:03:17 -04:00
Michael McAllister
ea775fa501 hibyr1: add USB DAC scaffolding
Introduce the generic, target-agnostic pieces for a gadget-driven USB
Audio Class DAC, gated by the HAVE_HOST_USB_AUDIO target flag so they stay
inert unless a target opts in.

Rather than adding a new USB mode, reuse the existing usb_audio setting
(never / always / while charge-only / while mass-storage) with its
LANG_USB_DAC string, usb_set_audio() callback and the
PCM_MIXER_CHAN_USBAUDIO mixer channel. HAVE_HOST_USB_AUDIO becomes the
umbrella capability flag for this common code; USB_ENABLE_AUDIO stays the
native usbstack class-driver contract (which needs HAVE_USBSTACK and so
cannot be used by hosted ports whose kernel owns the USB controller).

usb_set_audio() is declared here and implemented by the target (natively
by the usbstack driver, or in the hosted port for gadget targets, as with
usb_audio_get_active()), and applied at settings load. The playback
interlock in wps.c/playback.c keeps local playback from mixing with host
audio while the DAC is active. Simulator stubs for usb_set_audio() and
usb_audio_get_active() keep sim builds linking.

Co-Authored-By: Claude Opus 4.8
Change-Id: I5b7738508c24721d91d4c32379102a1ac7c6228b
2026-07-22 15:22:46 -04:00
Solomon Peachy
d54b9e6f8d chore: Get rid of *all* vestigal CVS '$Id:$' tags
Change-Id: I35c13a9768c582e4851aa252dd3ea5c89f760c8c
2026-06-01 16:01:18 -04:00
William Wilgus
bf0fa29a30 WPS Context Menu configurable entry
Allow setting context menu items

reuses WPS hotkey items

Runs the item
displays the item

Open plugin shows the item name

Pitch shows the pitch speed amount

add 'Show In Files' hotkey item

devices without a hotkey get an extra item

added Manual entries

Change-Id: I427e70e1cad15364ac5d2a7114032e97cc9eee1a
2026-05-25 11:07:59 -04:00
Christian Soffke
c0a8303a9c gui: simplify screen updates
Eliminate the somewhat circuitous skin_defer_rendering
and skin_render_deferred functions introduced in commit
c145d19e85.

skin_render (and thus skin_update and sb_skin_update),
along with skinlist_draw, list_draw (and thus
gui_synclist_draw), and quickscreen_draw, will never
update the screen anymore. Instead, the skin is only
marked as dirty now.

GUI_EVENT_ACTIONUPDATE redraws the skin as necessary,
and updates the screen afterwards, if the skin is dirty.
This event is sent from get_action, just like before.

A new event, GUI_EVENT_ACTIONREDRAW allows you to redraw
the skin without causing an immediate update at the same
time.

Change-Id: Ib20644853ead901e32f639000f044d6935135bae
2026-05-25 07:33:53 -04:00
Christian Soffke
20194cb606 gui: wps: render SBS and WPS in one batch
For themes that display the SBS on the WPS,
update display only once, instead of separately.

Change-Id: I773207ef2ddbe185eb287505950ba8322624d380
2026-05-07 22:28:55 -04:00
Christian Soffke
c145d19e85 gui: align display updates, reduce UI glitches
Based on commits ce33902 and 8990d52 (without PictureFlow)
from "Rockpod" fork by Nux Li (https://github.com/nuxcodes/rockpod),
with some adjustments.

Addresses flickering when:
- plugin is opened/closed
- activity changes
- theme is toggled
- QuickScreen is opened

In these cases, skin_render will not immediately update the display
anymore, but instead will wait until the UI viewport is ready to be
drawn as well, so we don't produce unnecessary visual glitches.

Change-Id: I8bed8f06221d3e767a32450f199e69d742bc61cd
2026-05-04 13:16:09 -04:00
Christian Soffke
e405858b9e wps: Replace menu items "Open With" & "Delete" with "Show in Files"
Limit these (less commonly used) "file handling" operations
to the File Browser while making it quicker to reveal the
file that is currently playing from the WPS.

"Open With" and "Delete" remain available as WPS shortcuts.

Change-Id: I91e582a45998160f07a3f7e16d475d770e8c5212
2026-04-16 21:04:27 -04:00
Christian Soffke
c296c2781a fix regression 18dfd8f691
The WPS, or certain screens accessed directly from it,
may have displayed a title when they shouldn't have.

Change-Id: I655f58aa7c4ff3ff996d9798fdbe06c14f09c27b
2026-01-14 15:33:56 +01:00
Petr Mikhalicin
19a49220b1 plugin lrcplayer: Fix late rewinding at lrcplayer
If you try to rewind music at lrcplayer it
1. returns back to old time
2. play for some time (1-2 seconds)
3. only after that returns for new time

According to wps code audio_pre_ff_rewind function should be called
before any rewinding. It stops playback and automatically resumes it
after audio_ff_rewind call

Change-Id: Id3755bfe4deeb7cd5d889ad7d8e1dec45061fa5c
2025-12-29 12:58:47 -05:00
Aidan MacDonald
9d7af45122 touchscreen: Allow progress bars to be used in the .sbs
Progress bars (for seeking in the current track) can now be
used on the .sbs skin.

Change-Id: I42377b16036ca4ca8017ecfa2bdab08bd0fa1e64
2025-12-05 12:02:53 +00:00
Aidan MacDonald
9b5b9d6a6d touchscreen: Allow volume bars to be used in the .sbs
Move the volume bar input handling to skin_touchsupport.c so
volume bars can be used in the .sbs as well as the .wps skin.

Change-Id: I018fa1c84f93b64d676b68e3bea63ddb9141e492
2025-12-05 12:02:53 +00:00
Aidan MacDonald
02ad19c959 touchscreen: Fix seeking to end of track in WPS
Seeking to the very end of the track with the touchscreen caused
rapid skipping through the playlist because each touch event
generates a separate seek operation, kind of like rapidly pressing
a physical button. Fix this bug by executing the seek operation
only for the release event.

Change-Id: Ic1080065a68e7cc2ba98e2f27293c954f2ec8fb2
2025-12-04 19:36:19 -05:00
Dana Conrad
896cceee24 usbaudio: triage panic from splash()
Do the check in gui_wps_show() to avoid calling splash()
from anything other than the main thread

Change-Id: Icc1c6f287d82dc6e73b7cae9c75c18be73b82d48
2025-11-17 10:55:04 -05:00
Christian Soffke
095729eb7d Revert "Eliminate SBS update on WPS exit"
This reverts commit 18c8e554fd.

Unfortunately, this approach doesn't play super-well
with *all* themes, specifically in cases where the user-
set background color, used for drawing on the backdrop,
doesn't really blend in with the skin's actual background
color. Plus, it may leave some patches of color behind,
if a theme author didn't take care to cover all parts of
the screen with foreground viewports.

Change-Id: I0159b2e5de6c0753dea54bc6bafe5bc6268a0c6a
2025-03-23 05:15:44 +01:00
Christian Soffke
bc035803ba WPS/FMS: Request SBS update after softlock
Elements from the SBS would disappear after
softlock, for a WPS that displayed an SBS,
if lock notifications were enabled.

If SBS isn't used, the request doesn't
result in any immediate action.

Change-Id: I7f5e8874f4eade6f504b6b3748c9644529587bb2
2025-03-22 21:46:27 +01:00
Christian Soffke
18c8e554fd Eliminate SBS update on WPS exit
Prevents flashing an outdated backdrop when moving
from WPS to SBS, if both were using the extra
frame buffer (i.e. both used background viewports),
without having to update the SBS first. I think,
this is actually what we want, rather than commit
c1222d65e2, which attempted the same thing.

Change-Id: Iffc7fe2d351ebdf21a4e7629aba93641c0d30b50
2025-03-22 17:23:08 +01:00
Christian Soffke
c1222d65e2 Update SBS on WPS exit only when both use extra framebuffer
Change-Id: I853add515231f319cc76f16f322ceb23bc920d72
2025-03-20 18:10:50 -04:00
Christian Soffke
86beaab964 wps: update SBS before leaving WPS
The backdrop layer for the WPS was redrawn
before returning to the SBS, resulting in
unsightly visual effects such as album art
(drawn on the backdrop) losing a frame that
was drawn in the foreground.

Change-Id: If5bb1ba83d79d6d1f637e06f9cc5eab3b97d5906
2025-03-19 22:41:50 +01:00
William Wilgus
19956a0777 [Bugfix] WPS pause while WPS not active causes display corruption
Discovered this in the sim with car adapter mode: on

when charger gets disconnected the device is paused

if you have a different screen up the scrolling elems
get redrawn incorrectly over the current screen

to fix check the activity is the WPS, FM, or RECORDING  before allowing redraw

Change-Id: Ie3618347fde446fe0b78b9d3c67261ca63ffee1c
2025-02-24 12:16:44 -05:00
William Wilgus
7100090f99 Remove NVRAM infavor of a separate cfg file
remove nvram and use the existing settings framework for it

add a crc check to the user_settings data to see if we need to save
the user setting file or if we can just save the status file (resume.cfg)

move volume to the system_status struct so we don't write the whole settings file
over volume changes

allow user to still export volume with save sound settings

allow the user to also export pitch and speed

name the file .resume.cfg

Rename all the SYSTEM_STATUS save file variables to TLAs to save space and
discourage tinkering

Cleanup DEBUG_AVAIL_SETTINGS output

when saving user_settings it calls status_save as well this cause the resume
file to be written twice. instead remove the callback for status_save
when setting_save is called

remove header text when saving .resume.cfg

convert status_save() to status_save(bool force)
add SYSTEM_STATUS_UPDATE_TICKS

for ATA device set this to 5 minutes
since we arlready wait for the disk to be up before saving
we don't want to miss our window

for all other every 15 minutes

that way if the battery is too low by the time shutdown comes around you
don't lose much progress

Change-Id: I27214ffd6e5d5494ee5ca83b14f04a41ba426ad7
2025-01-21 00:04:32 -05:00
Christian Soffke
8f5128da16 Show Track Info: Support fs tags in Playlist Viewer, Properties, and PictureFlow
Playlist Viewer falls back to splashf if there is not
enough plugin buffer space left for running the
view_text plugin .

Change-Id: I418731018b03f396270b68e5e2d2e69635df1af0
2024-12-16 00:20:10 +01:00
William Wilgus
f79374e1e8 WPS don't display next track till ID3 data is ready
this causes a bunch of flashing on track change for me and I never get to read enough
of the filename before it picks up the id3 data anyway

Change-Id: I36e9b5dd03510b796b652e3116800992bea73869
2024-12-11 00:44:59 -05:00
William Wilgus
05336c9efb wps.c cleanup
No functional changes code clean-up
consolidate pause_action, unpause_action_ do_wps_playpause

Change-Id: Id5de9616c0ecd6d2b48d611667ef0589a50dcae6
2024-12-11 00:43:15 -05:00
William Wilgus
da9d67a0fe Button queue handling is split from main button driver
First half of
https://gerrit.rockbox.org/r/c/rockbox/+/570

Change-Id: Icc64dfd8194c18f69564ed5f8bf7dd70a4330eb9
2024-11-27 20:16:53 -05:00
Paul Sauro
c16dbbfd1f Reworks to the shuffle system to improve performance and allow fast shuffling from a big library (but this work for all database views)
This improvement brings a huge performance improvement to start a random mix of your library. Previously, the only way to do this was to increase the size of a playlist with absurd sizes number. Now it will respect the limitation but will insert random songs from the current view.

Database: Add true random songs in playlist if it is gonna exceed its maximum capacity

More context is available here : https://www.reddit.com/r/rockbox/comments/1ez0mq4/i_developped_true_full_library_shuffle_for/

Also :
- Improved layout in the DB browser
- New default max playlists capacity is now 2000 on old PortalPlayer targets to give a better user experience and not having to wait dozens of seconds while creating a playlist
- "Show insert shuffled" option is now true by default
- Add a new shortcut to play all songs shuffled in the DB browser
- Now the feature is fully optional and enabled only on targets that have more than 2MB of RAM
- Add entries about this feature in the manual to explain it to the users
Change-Id: I1aebaf7ebcff2bf907080f1861027d530619097c

Change-Id: I3354923b148eeef1975171990e814a1a505d1df0
2024-08-31 10:44:20 -04:00
William Wilgus
4d0d41a0f4 [Cleanup] abrepeat.c
ab_repeat_init() doesn't do anything and some of the checks are redundant

Change-Id: Icc861c57b119f541c0cbdb9e0074b78f1f4f10bb
2024-06-20 11:14:27 -04:00
William Wilgus
d78be6716b [BUGFIX] block SYS_EVENTS from some action switches
fixes some of the places where SYS EVENTS cause issues with action switches
that don't have handling for system events

more exist..

Change-Id: Ie6f4b05ed7ef1119d43e65ee49be8f754af83f52
2023-10-30 19:03:18 -04:00
roman.artiukhin
4fb37ecbc6 Skip Length across tracks
Allows to use Prev button to skip length from the end of previous track.

Can be enabled with:
Settings -> Playback Settings -> Skip Length set to some time interval
and
Settings -> Playback Settings -> Rewind Across Tracks set to Yes

Change-Id: I99f234035a8a5acc9cbfe05ea83971ec5ddc59ea
2023-10-22 08:21:22 -04:00
Christian Soffke
43b0fba75d Track Info: Show number of tracks being inspected
Applies to the database and PictureFlow

+ fix red 6ca57ec

Change-Id: If708851ebdfe075e9d6ea3f2e2dd790cc9deac94
2023-04-13 03:55:21 +02:00
Christian Soffke
6ca57ec389 Track Info: Display larger file size and length values
When displaying Track Info for multiple tracks,
the value for combined file sizes or length was
capped at 2 GiB / ~596h.
Limit has been raised by a factor of 1000.

Change-Id: I942c64e81864cba3f719c83a24912883fafeb70e
2023-04-13 02:31:32 +02:00
Aidan MacDonald
dd2a0aeab0 Use perceptual volume scale for volume bars
Display volume bars using a perceptual scale instead of the
linear dB scale. This makes adjusting volume with the bar a
lot more usable on touchscreen targets.

Change-Id: I2db010486e6ba17f9d08202ee74a0b509f2cb434
2023-01-22 22:10:46 +00:00
Aidan MacDonald
5b27e2255a Add perceptual volume adjustment
The perceived loudness change of a change in volume depends
on the listening volume: at high volumes a 1 dB increment is
noticeable, but at low volumes a larger increment is needed
to get a comparable change in loudness.

Perceptual volume adjustment accounts for this fact, and
divides the hardware volume range into a number of steps.
Each step changes the dB volume by a variable amount, with
most of the steps concentrated at higher volumes. This
makes it possible to sweep over the entire hardware volume
range quickly, without losing the ability to finely adjust
the volume at normal listening levels.

Use "Volume Adjustment Mode" in the system settings menu
to select perceptual volume mode. The number of steps used
is controlled by "Number of Volume Steps". (Number of steps
has no effect in direct adjustment mode.)

It's still possible to set a specific dB volume level from
the sound settings menu when perceptual volume is enabled,
and perceptual volume does not affect the volume displayed
by themes.

Change-Id: I6f91fd3f7c5e2d323a914e47b5653033e92b4b3b
2023-01-22 21:19:57 +00:00
Christian Soffke
b444ecfca2 plugins: Properties: Add 'Last Modified' for audio files
In commit f3358eb, the Properties plugin started using the
Track Info screen for audio files, which didn't show when
the file was last modified. This adds it back.

Change-Id: I3ce519da234a4bcadab1d64b67de0298cada8f6e
2023-01-06 19:00:24 +01:00
roman.artiukhin
178560f495 Treat cue file as folder for next/prev folder action
Do not get stuck if it's the only cue file in folder

Change-Id: Ibb1a406ff030f945e4234fbd1ece747d1e5a0c44
2022-12-30 19:56:44 -05:00
Christian Soffke
a6bafe51a6 WPS hotkeys: Don't enable SBS for pitch screen or bookmarking
Change-Id: I5d5f4f1c402500abd15fcbb8b62013c97f4f931c
2022-12-16 08:25:20 +01:00
William Wilgus
99839960a2 abrepeat add dummy functions and remove some of the ifdefs
Change-Id: Icae7e334e87bb1974712a7a76296cf69bbdbffba
2022-12-14 23:37:14 -05:00
William Wilgus
6b87bfadff wps.c cleanup gui_show_wps
remove some old cruft move a few things around clean-up flow

Change-Id: I138c6cd9e2d58ef526eb686333da413819df725d
2022-12-14 22:35:33 -05:00
Christian Soffke
8ff2c81bde Improve transition between plugin and WPS
Eliminate flashing when plugins are launched
from WPS, by not enabling the SBS, and by
deferring other lcd updates.

Also prevents flashing root menu activity when
returning from plugins.

Change-Id: I7d761867027f2275c4ab8e16ada3107c7ba0be6e
2022-12-13 21:10:16 -05:00
Aidan MacDonald
73b1e30bb0 skin engine: Reduce scope of internal wps_data struct
A bunch of public API calls take a wps_data struct argument,
but that's an internal type that doesn't have a direct getter.
Instead the skin engine provides a gui_wps struct as a way
to refer to a particular skin instance. Use that instead of
wps_data in the public API.

Change-Id: I13e1aa8df7f08ccfb789bb728d493ac8d7de1a9b
2022-11-15 14:20:31 +00:00
roman.artiukhin
ffe2df2e92 Implement Rewind across tracks functionality
Useful feature for audiobooks. To rewind from the end of the previous track - press rewind at the very beginning of the current track. So if you are in the middle of the track - first rewind till beginning then release and press rewind button again (Playback Settings -> Rewind Across Tracks option should be enabled)

Fixes FS#13290

Change-Id: I5d7f06f64ad76d1e8f7827fe594ccca5f621769d
2022-11-12 09:13:19 -05:00
Aidan MacDonald
06f0465158 skin engine: Remove touchregion argument from skin_get_touchaction
Nobody uses the argument, and it exposes internals unnecessarily.

Change-Id: I376dc75db99ed89671175f906980526a23be70f6
2022-11-10 07:08:35 -05:00
Christian Soffke
193ebb5a36 Enable access to Shortcuts Menu from QuickScreen
Offers a quick way of switching to the Shortcuts Menu
by pressing the 'context menu' button while QuickScreen
is active (e.g. long press Select on iPods and some other
players)

Change-Id: I38292c7070cf093a81e1db688809b1f0d6a8764a
2022-10-25 03:26:51 +02:00
Aidan MacDonald
14fbefdf39 Move skin global state to the WPS
This state is actually specific to the WPS and it makes more
sense to put it there.

Change-Id: I5dfee237fdcbae944806501ff3127a930820d68a
2022-10-18 12:56:28 +01:00
Aidan MacDonald
13da1ba785 Remove is_fading from the global WPS state
Turns out it was never assigned and always false.

Change-Id: I8cd9118682e7a0785c262d4c0594f8f51412c18b
2022-10-18 12:56:28 +01:00
Aidan MacDonald
33a47e4a49 Remove ff_rewind from global WPS state
Turns out it's local to ffwd_rewind() in the WPS.

Change-Id: Iaa6e69185db67b8aad61f1d2ad29c98f15f37370
2022-10-18 12:56:28 +01:00
Aidan MacDonald
6e4c866756 Remove unused 'may_fade' argument of pause/unpause_action
Change-Id: I4eedcf30fa704521e751732a56775c43e9a8bd99
2022-10-18 12:56:28 +01:00
Aidan MacDonald
e03bc66594 Correct typo DEFAULT_SKIP_TRESH -> DEFAULT_SKIP_THRESH
Change-Id: If8f7d11301a07a7f63adfac618f07cfed9516eef
2022-10-18 12:56:28 +01:00
Aidan MacDonald
46c3d1e030 Cleanup unused cruft in wps.h
Change-Id: I4278bea7342a859b18b72a9a4b1918b403842bb8
2022-10-18 12:56:28 +01:00