Skip to content

clobrano/wui-android

Repository files navigation

WUI — Taskwarrior UI

A Flutter front-end for Taskwarrior, targeting Android and Linux desktop.


Features

  • Task list with built-in tabs: Next, Waiting, Projects, Tags
  • Custom tabs with configurable filters, sort order, and grouping
  • Task detail view with annotations, dependencies, and recurrence fields
  • Create and edit tasks (description, project, tags, priority, due, scheduled, wait, recurrence)
  • Swipe actions: mark done, delete
  • Bulk select: mark multiple tasks done or delete them
  • Search and filter bar
  • Undo support for done/delete actions
  • Export tasks to JSON (copy or share)
  • Taskd sync server support
  • Due-date and scheduled-date notifications (Android)
  • Google Calendar sync
  • Light / dark / system theme

Building

Requirements

  • Flutter 3.38+ / Dart 3.10+
  • For Android: Android SDK, a connected device or emulator
  • For Linux: standard Flutter Linux desktop toolchain (clang, cmake, ninja, libgtk-3-dev)

Android

flutter build apk --release
# or for a split-ABI build:
flutter build apk --release --split-per-abi

Install with adb install build/app/outputs/flutter-apk/app-release.apk.

The APK bundles its own Taskwarrior binary (arm64-v8a and armeabi-v7a), so no separate installation is needed on the device.

Linux

flutter build linux --release

The output is a directory, not a single file:

build/linux/x64/release/bundle/
├── wui_android          ← executable
├── lib/                 ← shared libraries (.so plugin files)
└── data/                ← Flutter assets and ICU data

Copy the entire bundle/ directory to the target machine. The executable uses $ORIGIN/lib as its library search path, so all three subdirectories must stay together.


Configuration

Open ⋮ → Settings inside the app.

Taskwarrior (Android)

The app ships a bundled Taskwarrior binary and extracts it on first launch. No setup is needed unless you want to use a different binary.

Setting Default Notes
Binary path bundled binary Leave empty to use the bundled one
Data directory from .taskrc Override data.location
Taskrc path ~/.taskrc Path to your .taskrc file
Home directory from environment Affects ~ expansion in .taskrc

Taskwarrior (Linux)

On Linux the app uses the system task binary by default ($PATH). Configure paths as above if your setup differs from the defaults.

Sync server (taskd)

Optional. Leave empty to use the values already in your .taskrc.

Setting Example
Server task.example.com:53589
Credentials Organisation/User/Key

Google Calendar sync

See Google Cloud setup below first.

Setting Platform Notes
Enable sync toggle both Must be on for the sync menu item to appear
credentials.json path Linux only Full path to the downloaded OAuth file
Calendar name both Leave empty to use the primary calendar
Task filter both Taskwarrior filter for tasks to sync (default: status:pending)
Sign in button both Triggers the OAuth flow

Once signed in, use ⋮ → Sync calendar from the task list to push tasks to Google Calendar.

What gets synced:

  • Tasks that have a due or scheduled date (tasks with neither are skipped)
  • Event date: due if set, otherwise scheduled
  • If both are set: event is anchored to due, and a popup reminder fires at the scheduled time
  • Priority H → red event, Priority M → yellow event
  • Tasks completed or deleted in Taskwarrior → event deleted from calendar

Google Cloud Project Setup

Both platforms share the same Google Cloud project. You only need to do this once.

1. Create a project

  1. Go to console.cloud.google.com
  2. Create a new project (e.g. WUI)

2. Enable the Calendar API

  1. Navigate to APIs & Services → Library
  2. Search for Google Calendar API and click Enable

3. Configure the OAuth consent screen

  1. Go to APIs & Services → OAuth consent screen
  2. Choose External and click Create
  3. Fill in App name (e.g. WUI), user support email, and developer contact email
  4. Under Scopes, add https://www.googleapis.com/auth/calendar
  5. Under Test users, add the Google account(s) you will sign in with
  6. Save

Until the app is verified by Google, only accounts listed as test users can sign in. The sign-in screen will show an "unverified app" warning — click Advanced → Go to WUI (unsafe) to proceed.

4. Create credentials — Linux (Desktop OAuth client)

  1. Go to APIs & Services → Credentials → Create Credentials → OAuth client ID
  2. Application type: Desktop app
  3. Name it (e.g. WUI Linux)
  4. Click Create, then Download JSON
  5. Save the file somewhere on your Linux machine (e.g. ~/.config/wui/credentials.json)
  6. Enter that path in Settings → Google Calendar → credentials.json path

5. Create credentials — Android

  1. Go to APIs & Services → Credentials → Create Credentials → OAuth client ID
  2. Application type: Android
  3. Package name: com.clobrano.wui_android
  4. SHA-1 certificate fingerprint — run the following on your machine and paste the SHA1 value:
    keytool -list -v \
      -keystore ~/.android/debug.keystore \
      -alias androiddebugkey \
      -storepass android -keypass android \
      | grep SHA1
    For a release build, use your release keystore instead.
  5. Click Create — no file to download, the credential is registered by package name + SHA-1

Notifications (Android only)

The app schedules local notifications for tasks with upcoming due or scheduled dates:

  • Due tasks channel (wui_due, high importance): fires at 09:00 on the due date
  • Scheduled tasks channel (wui_scheduled, default importance): fires at 09:00 on the scheduled date

Both channels can be configured independently in Android → App Info → Notifications.

The required permissions (POST_NOTIFICATIONS, SCHEDULE_EXACT_ALARM) are requested on first launch.


Sharing credentials with the WUI CLI

If you also use wui (the terminal UI), you can reuse the same Google Cloud project:

  • Linux: point both apps at the same credentials.json. Each app stores its own token file separately (~/.local/share/wui_android/calendar_token.json vs ~/.config/wui/token.json), so they authenticate independently but use the same OAuth app.
  • Android: the Android OAuth client is registered separately in the same project and uses the native sign-in flow — no shared file needed.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors