Jonas Haugesen 6ae31fe92b Show an agenda in the clock widget's dynamic zone, with multiple slots
The dynamic zone showed exactly one part: the highest ranked of the enabled
ones. It now shows up to `clockWidgetDynamicZoneSlots` of them (default 1),
adjustable with a slider in the clock widget settings whose maximum is the
number of enabled parts. `ClockWidgetVM.getActiveParts()` returns that sorted
list, and both clock layouts render it (stacked under the clock, or next to it
in the horizontal layout).

On top of that the zone has an "Events" part (`clockWidgetCalendarPart`, off by
default) that shows today's agenda: events that are still running or upcoming
today, plus today's all-day events. At most four rows; when there are more, the
last row is a "+N more events" hint that opens the calendar app. Tapping a row
opens the event through `CalendarEvent.launch()`.

A row is three fixed-width columns that are pure layout, not drawn: a dot in the
calendar's colour, the time, and the title (ellipsized when it does not fit).
Times are always times, never dates - an all-day event renders "all-day" - and
the block is centred under the clock. The columns line up across rows, and the
time is left-aligned within its column.

The part ranks 70 when an event is running or starts within half an hour, 30
while events are left today and 0 on an empty day, so the date keeps the slot
when there is nothing to show. It reloads itself through a ContentObserver on
CalendarContract.Events and a 15 minute ticker, because unlike the calendar
widget it is on screen all the time. Tasks (`CalendarEvent.isTask`) are filtered
out for now; a tasks part can reuse this once tasks are configured.

Verified on the Titan 2: with the part enabled and three slots, the home screen
shows the agenda (two all-day events and a timed one) above the date part.
2026-09-11 12:25:09 +02:00
2026-06-23 22:25:05 +02:00
2024-02-21 18:18:42 +01:00
2026-06-23 22:22:39 +02:00
2025-11-28 22:12:55 +01:00
2026-08-01 16:10:30 +02:00
2021-09-18 23:37:52 +02:00
2021-09-18 23:37:52 +02:00
2021-09-18 23:37:52 +02:00
2026-03-06 19:53:50 +01:00

Kvaesitso

Kvaesitso is a search focused, free and open source launcher for Android.

Website and documentation

Installation

Using an F-Droid client and MM20's repo

The preferred way of installation is using the F-Droid application. That way you will always be notified about updates. Kvaesitso is available in the official F-Droid repository, but all features depending on non-foss external APIs were removed. For feature-complete builds you can add MM20's repository. Just scan the code below or open the link on your phone:

QR code

https://fdroid.mm20.de/repo/

The same version is also available in IzzyOnDroid's repository.

Manual installation

You can also download the latest release from the releases page and install it manually.

Report issues

If you notice any bugs or issues create a new issue in the issue tracker. Before you do, please search the existing issues for any similar issues. Please include any relevant information such as steps to reproduce, stack traces, logs, and device information. These information can be founder under Settings > Debug > Crash reporter and Settings > Debug > Export debug information.

Feature requests

If you have an idea for a new feature, just create a new issue. However, there is no guarantee that they will be implemented. If it's important for you, consider implementing it yourself, see contribute.

Contribute

Contributions are always welcome. If you want to fix any existing issues or implement smaller new features just create a new pull request. If you plan to implement any (bigger) new features, please create an issue first so we can discuss if and how this feature should be implemented.

If you want to help translating, see how to translate the project.

Translation Status

Thanks to

License

This software is free software licensed under the GNU General Public License 3.0.


Copyright (C) 20212026 MM2-0 and the Kvaesitso contributors

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.

The plugin SDK modules (plugins/sdk and core/shared) are licensed under the Apache License 2.0.

Description
No description provided
Readme 80 MiB
Languages
Kotlin 98.9%
Java 1%