shift-shell/shell/contents/updates/6_3_update.js
Micah Stanley eba6074161 notifications: Implement popup notifications
This merge request implements a more mobile optimized solution for popup notification.
- 

The current controls are:
- Swipe up to move the notification to the notification center.
- Swipe left/right to dismiss the notification entirely.
- If multiple popup notifications are grouped together, tap on the bottom area to view them in a expanded view.

What still needs to be done:
- ~~For notification without a default action, tapping on them should probably open up the associated app.~~ Note: I think I will add this in a separate merge request as it probably should be the case regardless if the notification is a popup
- ~~Swiping down on a notification currently does nothing. Maybe we should map this to a notification action?~~ Note: I have some ideas I will try later, though for now, I will leave this action blank
- ~~The expanded view of notifications should be able to be dismissed by swiping up/down on the top/bottom of the list.~~ Note: Added
- Investigate further into how to remove the current desktop popup notifications.
- ~~Code clean up.~~ Note: The code is at least a bit better

Single popup notification:

![notification_1](/uploads/63d12be6da1dd2676de17940dcadbdfa/notification_1.gif)

Multiple popup notifications:

![notification_2](/uploads/907a14b772f66f46040c28342f4dcf02/notification_2.gif)

Multiple popup notifications in the expanded view:

![notification_3](/uploads/9a7cd09a6bb8a0f7ee70e5bcf7c29c6b/notification_3.gif)

Any feedback would be greatly appreciated.
2024-11-07 16:13:06 +00:00

20 lines
662 B
JavaScript

// SPDX-FileCopyrightText: 2024 Micah <stanleymicah@proton.me>
// SPDX-License-Identifier: GPL-2.0-or-later
/**
* Configuration updates for Plasma 6.3
* - Mobile popup notifications were added, remove the old ones.
*/
let allPanels = panels();
for (var i = 0; i < allPanels.length; i++) {
if (allPanels[i].type === "org.kde.plasma.mobile.panel") {
let allWidgetIds = allPanels[i].widgetIds;
for (var w = 0; w < allWidgetIds.length; w++) {
let widget = allPanels[i].widgetById(allWidgetIds[w]);
if (widget.type === "org.kde.plasma.notifications") {
widget.remove();
}
}
}
}