The startup feedback uses theme adjusted colors, we can use standard
foreground colors for the panels for better contrast rather than relying
on the shadow.
This adds support for specifying options needed to deal with phone
display panel pecularities (ex. screen curves, notches, punch holes)
This is implemented as settings in ~/.config/plasmamobilerc, which can
set panel heights, paddings, and center spacings to duck display
cutouts. The pixel values are scaling independent, and so are not
affected when the display scaling is changed.
This is then exposed over DBus, so that components from outside of
plasmashell (ex. KWin) can access it easily without needing to connect to
kscreen themselves. Each screen is exposed as a single object.
Currently support is only added in the status bar and the navigation
panel.
Currently all screens have the settings applied. In the future, we may
want to limit this just to the internal screen (?)
---
This also adds a "devices" folder (in `devices/configs`) where per-device configs can be set.
This is installed to `/usr/share/plasma-mobile-device-configs`.
In `plasmamobilerc` (installed to `/etc/xdg/plasmamobilerc`, or
`~/.config/plasmamobilerc`), envmanager will read:
```toml
[Device]
device=oneplus-enchilada
```
for the device config to use and write its settings to
`~/.config/plasma-mobile/plasmamobilerc`.
Don't block plasmashell when doing kscreen calls (make them async). Also
add a nullptr check to rotationplugin, which potentially could be a fix
for crashes on the PinePhone.
Currently with a light theme, often colors calculated from icons are incredible bright and vivid. This can cause the user to be flashed all of a sudden with a bright color when launching an app. This commit adopt the dark background blending scheme for all usecases.
When plasmashell is started and the user had set docked mode, it may get
reset. This patch makes sure that we don't change the user's choice
after hotplugging/unplugging a display. The initial setting of
convergendeMode (if true) is now remembered.
Signed-off-by: Sebastian Kügler <sebas@kde.org>
This commit changes the action drawer colorsets to be contextually correct. The panel background would use the window background colors (instead of the view ones), and quicksettings delegates would use colors from the Button color set (rather than the view).
This also changes the background scrim to always be dark even in light mode. I think this is important to do because we have two views (notifications, and quick settings), which currently don't have much in the way of colours to distinguish the two.
This commit also makes some changes to the notifications widget in order for its card foreground to be the standard theme colors.
{width=200}
{width=200}
{width=300}
{width=200}
{width=200}
{width=300}
This ensures that all elements in the volume OSD get the window
visibility and can turn off any listeners. This avoids excessive
bindings being triggered when the osd is closed and audio is played.
This changeset makes the shell respect the quickSettingsColumns mobile
shell setting. It renders the number of columns correctly and makes the
drawer wider, as needed.
As a side-effect, the width is now more dpi-independant since it
switches from raw pixel values to gridUnit.
Another side effect is that we make the individual quicksettings buttons
ever so slightly wider (5.333 gridUnits before, gridUnits now).
Signed-off-by: Sebastian Kügler <sebas@kde.org>
This change adds a property to the shellsettings plugin to allow
changing the number of columns in the QuickSettings drawer in the top
panel. It defaults to the current value, 3.
This will allow us to accommodate for wider displays where the current
drawer unnecessarily paginates (and thus hides some of) the
quicksettings.
Minimum is still 3 since that it computes in the drawer code (and
currently not necessary to change), maximum is somewhat arbitrarily, 7.
Signed-off-by: Sebastian Kügler <sebas@kde.org>
Fixes https://invent.kde.org/plasma/plasma-mobile/-/issues/422
This commit simplifies the AudioInfo data provider to fetch the volume
directly, rather than relying on a series of complicated connections. It
also does some cleanup of AudioInfo, removing unused functions.
This avoids the following error for haptic events when used from QML:
```
QVariant: Provided metatype for 'QCoro::Task<void>' does not support destruction and copy construction
```
This commit makes a much needed cleanup and overhaul of the volume OSD.
Changes:
- Fix context menus for app streams
- Remove dedicated mute button in cards (simplifies the UI for touch
devices)
- Add selection background for card delegates
- Sync audio models with plasma-pa
- Simplify implementation of cards
- Sync volume slider implementation with plasma-pa
A custom 0.95 opacity was added to the panels in
https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/642 for
overlaying applications. This
required some complicated logic and layering to mix with other modes of
operation. Since this broke at some point, simplify the logic completely
so that it's just a flat colour. This also fixes the navigation panel
not having a colour when the keyboard is shown over the homescreen.
Fixes: https://invent.kde.org/plasma/plasma-mobile/-/issues/423
We currently listen to when the volume changes, which wouldn't happen if
the user reaches 0% or 100% and continues trying to press the volume
button. Instead, listen to OSD events for determining when to open the
popup.
This converts many of the animation durations to Kirigami units so that
they can be controlled system wide. It also speeds up several of the
animation durations (ex. in folio) from 800ms to 400ms to improve the
feel and responsiveness of the shell.
Fixes typos in various source comments.
Found via `codespell -S "*.po,*.svg,*.pgm,*.xml,./po,*.desktop,*.json,*.actions" -L aline,aparent,childs,distroname,indexin,indx,logicaly,lokal,nd,splitted,te`
This popupprovider takes care of automatically enabling and disabling
convergence / docked mode when a monitor is plugged in or unplugged.
It uses the plugin that is provided with the kscreenosd quicksetting,
which essentially notifies of outputs being added and removed.
Signed-off-by: Sebastian Kügler <sebas@kde.org>
When a quicksetting is changed to not available, it should be removed
from the model. The proper API call to beginRemoveRows() has the index
of the last removed element as last parameter and will fail with null.
This patch makes dynamically removing a quicksetting by changing the
available property to false.
Signed-off-by: Sebastian Kügler <sebas@kde.org>
Ensure that all of the variables have their initial state fetched at the
start with the shell DBus client. Also ensure that they only emit
property changes when they actually happen.
Change the "toggleDoNotDisturbMode" function to "setDoNotDisturbMode"
and add a parameter so that we actually set the mode to the intended
value, not just flip it.
The globbing pattern for finding QML files is problematic because it
breaks when we add/delete a file (requiring us to delete
~/kde/build/plasma-mobile). It also placed every file (both public and
internal files) in the same flat namespace, carrying the risk of name
collisions between unrelated folders.
This commit manually specifies every file in the package. It also moves internal files in the actiondrawer folder into its own namespace. Followup MRs will do this process for other folders.
This commit drops halcyon's search widget in favour of using the same
widget as folio to share code. This also brings over its keyboard
navigation features.
search
This commit is a subset of
https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/694 to add
keyboard navigation to the app drawer.
Pressing the arrow keys while in the app drawer will allow you to
navigate between the apps and the search bar, and going up will exit the
app drawer. Escape/Back is also supported for unfocusing the search bar
and exiting the view.
This also fixes an issue in the keyboard navigation on the search screen
where it wouldn't close when there are no search results.
I prefer create MR now to avoid biggest merge request.
It add minimalist implementation:
- First configuration of Waydroid
- Stop / Start Waydroid session
- Configure properties of Waydroid
- Display current ip of Waydroid
| Not installed | First initialization | initializing | SessionNotStarted | SessionStarting | SessionStarted |
| ------ | ------ | ------ | ------ | ------ | ------ |
|  |  |  |  |  |  |
Linked to https://invent.kde.org/teams/plasma-mobile/issues/-/issues/307
**Note for Reviewer**: In my local environment, i need to add manually the KAuth files otherwise polkit not recognize the implementation.
```
sudo cp ~/kde/usr/share/dbus-1/system-services/org.kde.plasma.mobileshell.waydroidhelper.service /usr/share/dbus-1/system-services/
sudo cp ~/kde/usr/share/dbus-1/system.d/org.kde.plasma.mobileshell.waydroidhelper.conf /usr/share/dbus-1/system.d/
sudo cp ~/kde/usr/share/polkit-1/actions/org.kde.plasma.mobileshell.waydroidhelper.policy /usr/share/polkit-1/actions/
```
Overlay the shell's status panel and quicksettings panel over the lockscreen, instead of rendering a second copy in the lockscreen theme. This will allow us to improve the lockscreen loading speed.
Key changes:
- Overlay quicksettings window and the status bar over the lockscreen when it is shown
- Refactor the top panel's showing logic to be cleaner (as it supports various overlay modes over fullscreen apps already)
- Implement lockscreen support to the status bar and quicksettings panel in the to panel
- Forward quicksettings panel requests for "unlock" over DBus to the lockscreen
- Add "raiselockscreen" QML plugin to easily request a window to be raised over the lockscreen
Notes:
- Now that we are sharing the quicksettings panel from the shell, notifications that are already there will be shown on the lockscreen (compared to right now, where only new notifications would be shown)
Depends on:
- https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/2339
- https://invent.kde.org/plasma/kscreenlocker/-/merge_requests/283
- https://invent.kde.org/plasma/kwin/-/merge_requests/7839
Implements: https://invent.kde.org/plasma/plasma-mobile/-/issues/199

This merge request expands upon the folio and halcyon background blur effects, making the folio background blur include the backgrounds of folder icons, the favorites bar, and wallpaper selector, and for halcyon, it now includes the folder icons, app library, search, and wallpaper selector. To accomplish this, a mask layer plugin was created to easily attach to these elements. This way, we can use a `OpacityMask` to cut out from the existing blur layer, thus hopefully keeping the performance cost low. And with my limited testing, it does at least seems to run about the same on my oneplus 6t, though it is not really a low end device, so I can not fairly judge the impact for something slower (eg. PinePhone). To be on the safe side, a third option was also added to the folio settings, allowing for the ability to toggle back to the old functionality if needed.




This MR does several things as a followup to
https://invent.kde.org/plasma/plasma-mobile/-/merge_requests/748:
- Use the word "lock" instead of "sleep" since we are locking the
device, not putting it to sleep
- Simplify usage by using existing MouseAreas instead of including our
own for this feature (I encountered several focus captures in folio that prevented the
SwipeArea from getting events)
Add a settings page to halcyon, which allows for toggling whether the
wallpaper is blurred and double tapping on the homescreen to lock the
device. This also does a bit of refactoring for folio and halcyon to
share the same wallpaper blurring item.
The implementation of do-not-disturb broke after the port to our own
notification popups. Since the notification widget is quite deep in the
ActionDrawer, just implement the DBus listening directly in
NotificationsWidget. Also add the missing pulseAudio object in
NotificationPopupProvider to implement notification inhibition.
We have some singletons (ex. for notification popups, volume, dbus) that
need to be initialized somewhere in plasmashell. Currently they are done
from the panel containment, which is a bit of a strange location. There isn't really
any offical way it seems to do this, so move it to the shell package
which feels more central.
We so far have been recreating the background elements for all the item throughout the shell. This merge request simplifies this by unifying these elements into a single component, making is easier to keep things at a consistent design while also being able to adjust things when needed in the future.
Per request, I tried to keep thing looking mostly the same as before.
The first picture is what the action drawer looks like now, the one after is with these changes.


This merge request moves the location where the action drawer panel opacity gets set to the top of the background item stack to resolve an issue with the opacity not changing properly when the brightness is adjusted.
Draw our own background in the action drawer instead of using the svg, because it loads faster when visible: true/false is set, and we do a bunch of resizing animations.
The quick settings is not updated because sometimes is set to the same model but here, we disconnect all signals to previous model without check if is the same model, but we don't reconnect the signals if is the same model.
Currently opening the action drawer causes notification popups to
"expire", causing some unintended behaviour (ex. dismiss alarm/timer).
This commit removes this behaviour, and also fixes notification popup
expiry while the action drawer is open.
Fixes https://invent.kde.org/plasma/plasma-mobile/-/issues/468
This merge request reworks the MarqueeLabel to add smooth scrolling, giving it a more clean appearance while also improving scrolling when filled when characters of different lengths.
Before:

After:
