Skip to content
The English translation is still being built: some pages may lag behind the German ones.
Android app

Android app

A native app (Kotlin and Jetpack Compose) on top of the same Rust core as the server, so availability, quick capture, clocks and habits are computed the same way on the phone, also offline. The interface is in German; this page gives the German labels in quotes. Building it is described in android/README.md.

Signing in

Either with server, account, password and a device name, or by pairing: in the web UI open the account menu, “Handy koppeln”, and scan the QR code with the app (or use samu pair phone on the command line). The code works once, for ten minutes. The app keeps only the session token.

Offline first

Every change goes into the outbox first and is sent with the next sync: when the app opens, after every change, on “Sync” and every 15 minutes while there is a network. “Offline · n Änderungen im Ausgang” above the list shows what is waiting. Files wait on the phone and go up before the changes that refer to them. Only deleting needs a connection.

Views

The bottom bar has Inbox, Available (“Verfügbar”), Forecast, Projects (“Projekte”, a tree of folders and projects that can be created, moved and folded) and Search (“Suche”, every word in title or note, as you type). Tag chips above each list filter by one tag and everything below it.

Working with tasks

  • Rows have a round check; swipe right or tap the check to complete (or reopen). Tap a row to open the task.
  • Long press opens a sheet: edit, move (“Verschieben …”, into the inbox or a project, children go along), flag, plan today or tomorrow, drop or reopen, delete (with the number of children it takes along).
  • Selecting many: after a long press, taps add or remove tasks. The bar then offers complete, flag, move, and under “⋯” reopen, drop, plan, dates, tags, state and delete; with exactly one task also edit and the clock.
  • The task page is editable: title, note, defer, due and planned dates, estimate, tags and state as chips, the project line moves the task, and repetition and reminders.
  • Comments and attachments at the bottom: text, a photo from the camera app, a recording ("● Aufnehmen", asks for the microphone the first time) or any file. With text it becomes a comment with the files on it; without, the files hang on the task. Images preview, recordings play, other files open in another app.
  • Clock (“Zeit”): total against the estimate, start/stop and the last clocks. A running clock shows as a permanent notification with the time and “Stopp”.
  • Habits: see Habits.

Capture and sharing

  • Capture (“Erfassen”) opens a sheet with quick capture; the preview is computed on the phone, also offline.
  • Share to samudo from any app that shares text: the subject or first line becomes the title (editable), below it a quick-capture field for project, tags and dates. The rest of the text becomes the note, and every https://, mid: or catastr: address a link. Without a session the shared text waits until you sign in.
  • samu:<id> links in other apps open the task.

Widgets

  • “Heute” (today): overdue, today, then flagged available tasks. The check completes through the outbox, “+” opens capture, a row opens the task. Redrawn after every sync and when you leave the app.
  • “Habits”: every open habit; see Habits.

Reminders and calendar

Reminders are set as alarms on the phone and show as notifications, also without a network. Appointments in the forecast open in the phone’s calendar app.

Automation with Tasker

Two broadcasts let other apps (for example Tasker) act on the app. The package name is currently de.cnova.samu; it will change before a public release.

Scope (follow your context: Do Not Disturb, Wi-Fi, location):

FieldValue
Actionde.cnova.samu.action.SCOPE
Packagede.cnova.samu
Extrascope: a scope’s title or id; empty = no scope; auto = follow the schedule

Capture into the inbox (as the ring does, also offline): action de.cnova.samu.action.RING, extra text, optional recorded_at in Unix milliseconds. See Capture from the Index ring.

Try them over adb:

adb shell am broadcast -a de.cnova.samu.action.SCOPE -p de.cnova.samu --es scope Work
adb shell am broadcast -a de.cnova.samu.action.RING -p de.cnova.samu --es text "'Buy milk'"

Back to the sign-in screen: adb shell pm clear de.cnova.samu.