Bodhi Timer is an elegant, minimalist countdown timer

Related tags

App BodhiTimer
Overview

Install

Get it on F-Droid

About

Want to help with translating the app? It's easy
Bodhi Timer is an elegant, minimalist countdown timer. It is designed mainly for use as a meditation timer but can easily be used for any similar purpose. Bodhi Timer is free and open-source software. It collects no data and uses the minimal permissions necessary.

How to use

Set the time via the clock icon in the top left. You may set presets by choosing a time then holding down on one of the three preset buttons.

Pause / resume via the button in the bottom left, and stop the timer via the button in the bottom right. The top right button is the preference button.

Animation may be toggled between an image and one of four circle animations, chosen from the preferences screen.

It uses Android's built-in notification system to trigger the alarm, which means it works even when your device is asleep.

Features

  • minimalist full screen UI, no clutter

  • uses scroll and fling gestures to set the time

  • set up to three presets on the time chooser

  • option for timer auto-repeating

  • option to set multiple consecutive timers via the "adv" button

  • speech recognition via long-press on clock button (set multiple timers separated by the word "again")

  • displays two animation types: fade in static image (defaults to Bodhi leaf) and animated circle

  • option to use custom image for fade in

  • four themes for the animated circle: three colour themes and a draw in Zen Enso (brush circle)

  • includes different meditation timer sounds (Burmese bell, Tibetan bell, Tibetan singing bowls, Zen gong, and bird song)

  • option to use any ring tone as timer sound

  • option to use custom sound file as timer sound

  • vibration and LED blinking options

  • licensed under the GPL 3+

Credits

Some code is based on the free and open source TeaTimer by Ralph Gootee.

The Enso image was drawn by Ryōnen Gensō (1646-1711). Next to the Enso she has written: "When you do understand yourself fully, there is not one thing."

Singing Bowl Low sound Recorded by juskiddink Licensed under CC-BY-SA 3.0

Comments
  • Version 6.1.0 crashes and is unusable

    Version 6.1.0 crashes and is unusable

    Since the update to 6.1.0 I can't use the app. It crashes the instant I try to start a session, change an option, or change the timer. I tried to delete its app cache and app data, and to uninstall and reinstall. Nothing seems to work. If it has a logging feature, I don't know how to find it.

    opened by Solomon1732 15
  • Timer Sound change doesn't come  into effect

    Timer Sound change doesn't come into effect

    1. Launch the app
    2. Tap three dots
    3. Tap Timer Sound
    4. Tap Singing Bowl Low
    5. Leave Preferences
    6. Start timer and wait till the end
    7. Issue: The default sound is played rather than the one picked in Pt 4
    opened by twisteros 6
  • Tapping notification does nothing

    Tapping notification does nothing

    In many apps, tapping the notification would bring you back to the app. In the current behaviour, one is obliged to go through many steps to restart the timer.

    opened by dalb8 5
  • Preparation time setting in the preferences does not work

    Preparation time setting in the preferences does not work

    Version 5.6.2

    Issue: Setting this to any numeric value has no effect.

    Expected behaviour: The defined delay interval to count off before beginning the main timer cycle whether on repeat or single-run.

    opened by Sunspark-007 5
  • Icon Is Not Ideal

    Icon Is Not Ideal

    The icon for this app, how can I put this... it looks like a scrotum. I'm sorry, I just don't like looking at it. I also don't like how thin it is on the top, it feels too delicate for a leaf. Does anyone agree with me?

    enhancement 
    opened by landry314 5
  • Auto-restart feature seem to unstable.

    Auto-restart feature seem to unstable.

    auto restart feature will not work when run long time, for example: > 2 hour. Today, I set a 15min timer, it work at begin, after 3 hour, the auto restart do not work.

    opened by tumashu 3
  • AMOLED black theme

    AMOLED black theme

    Could you please bring back the all black background, maybe as an option? On an AMOLED display it imho looks nicer and even saves some power. Thank you for this very useful app, I use it daily. :)

    opened by rootsh0pf 3
  • App crash on timer start

    App crash on timer start

    Running Bodhi Timer on OnePlus 9 Pro with Android 13 English the app crashes when starting the timer.

    Bodhi Timer version 6.1.1

    I've tried

    • uninstalling and reinstalling the app
    • clearing the cash and all data related to the app
    • changing settings to use old notification

    Note: "Allow notification" setting is not available for Bohdi timer, in the app settings in the system settings.

    I'll be happy to help testing any bugfixes.

    Finally, the contact details for the app should probably be updated.

    opened by MrJberg 3
  • feat: add uri scheme for opening timer by opening a link

    feat: add uri scheme for opening timer by opening a link

    for #15

    @tzugen can you please take a look?

    link scheme is like this: bodhi://timer?times=60,120 (will start a 1 minute and a two minute timer)

    Pausing does not work properly, but I think that is not necessary to support initially.

    opened by olastor 3
  • F-Droid fails to build

    F-Droid fails to build

    Ref: https://f-droid.org/wiki/index.php?title=org.yuttadhammo.BodhiTimer/lastbuild_70&oldid=286037

    Ref: https://gitlab.com/fdroid/fdroidserver/-/blob/2.0b1/fdroidserver/scanner.py#L141

    Ref: https://gitlab.com/fdroid/fdroidserver/-/issues/858

    bug 
    opened by licaon-kter 3
  • Bump kotlin_version from 1.7.22 to 1.8.0

    Bump kotlin_version from 1.7.22 to 1.8.0

    Bumps kotlin_version from 1.7.22 to 1.8.0. Updates kotlin-gradle-plugin from 1.7.22 to 1.8.0

    Release notes

    Sourced from kotlin-gradle-plugin's releases.

    Kotlin 1.8.0

    Changelog

    Analysis API

    • KT-50255 Analysis API: Implement standalone mode for the Analysis API

    Analysis API. FIR

    • KT-54292 Symbol Light classes: implement PsiVariable.computeConstantValue for light field
    • KT-54293 Analysis API: fix constructor symbol creation when its accessed via type alias

    Android

    • KT-53342 TCS: New AndroidSourceSet layout for multiplatform
    • KT-53013 Increase AGP compile version in KGP to 4.1.3
    • KT-54013 Report error when using deprecated Kotlin Android Extensions compiler plugin
    • KT-53709 MPP, Android SSL2: Conflicting warnings for androidTest/kotlin source set folder

    Backend. Native. Debug

    • KT-53561 Invalid LLVM module: "inlinable function call in a function with debug info must have a !dbg location"

    Compiler

    New Features

    • KT-52817 Add @JvmSerializableLambda annotation to keep old behavior of non-invokedynamic lambdas
    • KT-54460 Implementation of non-local break and continue
    • KT-53916 Support Xcode 14 and new Objective-C frameworks in Kotlin/Native compiler
    • KT-32208 Generate method annotations into bytecode for suspend lambdas (on invokeSuspend)
    • KT-53438 Introduce a way to get SourceDebugExtension attribute value via JVMTI for profiler and coverage

    Performance Improvements

    • KT-53347 Get rid of excess allocations in parser
    • KT-53689 JVM: Optimize equality on class literals
    • KT-53119 Improve String Concatenation Lowering

    Fixes

    • KT-53465 Unnecessary checkcast to array of reified type is not optimized since Kotlin 1.6.20
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-43493 NI: False negative: no compilation error "Operator '==' cannot be applied to 'Long' and 'Int'" is reported in builder inference lambdas
    • KT-54393 Change in behavior from 1.7.10 to 1.7.20 for java field override.
    • KT-55357 IllegalStateException when reading a class that delegates to a Java class with a definitely-not-null type with a flexible upper bound
    • KT-55068 Kotlin Gradle DSL: No mapping for symbol: VALUE_PARAMETER SCRIPT_IMPLICIT_RECEIVER on JVM IR backend
    • KT-51284 SAM conversion doesn't work if method has context receivers
    • KT-48532 Remove old JVM backend

    ... (truncated)

    Changelog

    Sourced from kotlin-gradle-plugin's changelog.

    1.8.0

    Analysis API

    • KT-50255 Analysis API: Implement standalone mode for the Analysis API

    Analysis API. FIR

    • KT-54292 Symbol Light classes: implement PsiVariable.computeConstantValue for light field
    • KT-54293 Analysis API: fix constructor symbol creation when its accessed via type alias

    Android

    • KT-53342 TCS: New AndroidSourceSet layout for multiplatform
    • KT-53013 Increase AGP compile version in KGP to 4.1.3
    • KT-54013 Report error when using deprecated Kotlin Android Extensions compiler plugin
    • KT-53709 MPP, Android SSL2: Conflicting warnings for androidTest/kotlin source set folder

    Backend. Native. Debug

    • KT-53561 Invalid LLVM module: "inlinable function call in a function with debug info must have a !dbg location"

    Compiler

    New Features

    • KT-52817 Add @JvmSerializableLambda annotation to keep old behavior of non-invokedynamic lambdas
    • KT-54460 Implementation of non-local break and continue
    • KT-53916 Support Xcode 14 and new Objective-C frameworks in Kotlin/Native compiler
    • KT-32208 Generate method annotations into bytecode for suspend lambdas (on invokeSuspend)
    • KT-53438 Introduce a way to get SourceDebugExtension attribute value via JVMTI for profiler and coverage

    Performance Improvements

    • KT-53347 Get rid of excess allocations in parser
    • KT-53689 JVM: Optimize equality on class literals
    • KT-53119 Improve String Concatenation Lowering

    Fixes

    • KT-53465 Unnecessary checkcast to array of reified type is not optimized since Kotlin 1.6.20
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-43493 NI: False negative: no compilation error "Operator '==' cannot be applied to 'Long' and 'Int'" is reported in builder inference lambdas
    • KT-54393 Change in behavior from 1.7.10 to 1.7.20 for java field override.
    • KT-55357 IllegalStateException when reading a class that delegates to a Java class with a definitely-not-null type with a flexible upper bound
    • KT-55068 Kotlin Gradle DSL: No mapping for symbol: VALUE_PARAMETER SCRIPT_IMPLICIT_RECEIVER on JVM IR backend
    • KT-51284 SAM conversion doesn't work if method has context receivers
    • KT-48532 Remove old JVM backend
    • KT-55065 Kotlin Gradle DSL: Reflection cannot find class data for lambda, produced by JVM IR backend

    ... (truncated)

    Commits
    • da1a843 Add ChangeLog for 1.8.0-RC2
    • d325cf8 Call additional publishToMavenLocal in maven build scripts and enable info
    • 0403d70 Don't leave Gradle daemons after build scripts
    • 52b225d Fix task module-name is not propagated to compiler arguments
    • d40ebc3 Specify versions-maven-plugin version explicitly
    • 2e829ed Fix version parsing crash on Gradle rich version string
    • f603c0e Scripting, IR: fix capturing of implicit receiver
    • 06cbf8f Scripting, tests: enable custom script tests with IR
    • d61cef0 Fix deserialization exception for DNN types from Java
    • ea33e72 JVM IR: script is a valid container for local delegated properties
    • Additional commits viewable in compare view

    Updates kotlin-stdlib-jdk7 from 1.7.22 to 1.8.0

    Release notes

    Sourced from kotlin-stdlib-jdk7's releases.

    Kotlin 1.8.0

    Changelog

    Analysis API

    • KT-50255 Analysis API: Implement standalone mode for the Analysis API

    Analysis API. FIR

    • KT-54292 Symbol Light classes: implement PsiVariable.computeConstantValue for light field
    • KT-54293 Analysis API: fix constructor symbol creation when its accessed via type alias

    Android

    • KT-53342 TCS: New AndroidSourceSet layout for multiplatform
    • KT-53013 Increase AGP compile version in KGP to 4.1.3
    • KT-54013 Report error when using deprecated Kotlin Android Extensions compiler plugin
    • KT-53709 MPP, Android SSL2: Conflicting warnings for androidTest/kotlin source set folder

    Backend. Native. Debug

    • KT-53561 Invalid LLVM module: "inlinable function call in a function with debug info must have a !dbg location"

    Compiler

    New Features

    • KT-52817 Add @JvmSerializableLambda annotation to keep old behavior of non-invokedynamic lambdas
    • KT-54460 Implementation of non-local break and continue
    • KT-53916 Support Xcode 14 and new Objective-C frameworks in Kotlin/Native compiler
    • KT-32208 Generate method annotations into bytecode for suspend lambdas (on invokeSuspend)
    • KT-53438 Introduce a way to get SourceDebugExtension attribute value via JVMTI for profiler and coverage

    Performance Improvements

    • KT-53347 Get rid of excess allocations in parser
    • KT-53689 JVM: Optimize equality on class literals
    • KT-53119 Improve String Concatenation Lowering

    Fixes

    • KT-53465 Unnecessary checkcast to array of reified type is not optimized since Kotlin 1.6.20
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-43493 NI: False negative: no compilation error "Operator '==' cannot be applied to 'Long' and 'Int'" is reported in builder inference lambdas
    • KT-54393 Change in behavior from 1.7.10 to 1.7.20 for java field override.
    • KT-55357 IllegalStateException when reading a class that delegates to a Java class with a definitely-not-null type with a flexible upper bound
    • KT-55068 Kotlin Gradle DSL: No mapping for symbol: VALUE_PARAMETER SCRIPT_IMPLICIT_RECEIVER on JVM IR backend
    • KT-51284 SAM conversion doesn't work if method has context receivers
    • KT-48532 Remove old JVM backend

    ... (truncated)

    Changelog

    Sourced from kotlin-stdlib-jdk7's changelog.

    1.8.0

    Analysis API

    • KT-50255 Analysis API: Implement standalone mode for the Analysis API

    Analysis API. FIR

    • KT-54292 Symbol Light classes: implement PsiVariable.computeConstantValue for light field
    • KT-54293 Analysis API: fix constructor symbol creation when its accessed via type alias

    Android

    • KT-53342 TCS: New AndroidSourceSet layout for multiplatform
    • KT-53013 Increase AGP compile version in KGP to 4.1.3
    • KT-54013 Report error when using deprecated Kotlin Android Extensions compiler plugin
    • KT-53709 MPP, Android SSL2: Conflicting warnings for androidTest/kotlin source set folder

    Backend. Native. Debug

    • KT-53561 Invalid LLVM module: "inlinable function call in a function with debug info must have a !dbg location"

    Compiler

    New Features

    • KT-52817 Add @JvmSerializableLambda annotation to keep old behavior of non-invokedynamic lambdas
    • KT-54460 Implementation of non-local break and continue
    • KT-53916 Support Xcode 14 and new Objective-C frameworks in Kotlin/Native compiler
    • KT-32208 Generate method annotations into bytecode for suspend lambdas (on invokeSuspend)
    • KT-53438 Introduce a way to get SourceDebugExtension attribute value via JVMTI for profiler and coverage

    Performance Improvements

    • KT-53347 Get rid of excess allocations in parser
    • KT-53689 JVM: Optimize equality on class literals
    • KT-53119 Improve String Concatenation Lowering

    Fixes

    • KT-53465 Unnecessary checkcast to array of reified type is not optimized since Kotlin 1.6.20
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-43493 NI: False negative: no compilation error "Operator '==' cannot be applied to 'Long' and 'Int'" is reported in builder inference lambdas
    • KT-54393 Change in behavior from 1.7.10 to 1.7.20 for java field override.
    • KT-55357 IllegalStateException when reading a class that delegates to a Java class with a definitely-not-null type with a flexible upper bound
    • KT-55068 Kotlin Gradle DSL: No mapping for symbol: VALUE_PARAMETER SCRIPT_IMPLICIT_RECEIVER on JVM IR backend
    • KT-51284 SAM conversion doesn't work if method has context receivers
    • KT-48532 Remove old JVM backend
    • KT-55065 Kotlin Gradle DSL: Reflection cannot find class data for lambda, produced by JVM IR backend

    ... (truncated)

    Commits
    • da1a843 Add ChangeLog for 1.8.0-RC2
    • d325cf8 Call additional publishToMavenLocal in maven build scripts and enable info
    • 0403d70 Don't leave Gradle daemons after build scripts
    • 52b225d Fix task module-name is not propagated to compiler arguments
    • d40ebc3 Specify versions-maven-plugin version explicitly
    • 2e829ed Fix version parsing crash on Gradle rich version string
    • f603c0e Scripting, IR: fix capturing of implicit receiver
    • 06cbf8f Scripting, tests: enable custom script tests with IR
    • d61cef0 Fix deserialization exception for DNN types from Java
    • ea33e72 JVM IR: script is a valid container for local delegated properties
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 0
  • Suggest add

    Suggest add "ignore battery optimization" feature

    Just like: https://stackoverflow.com/questions/31154128/set-specific-app-to-ignore-optimization-by-code-in-android-m/32150246#32150246

    I have try to code this feature, but fail for my poor android and kotlin skill :-\

    opened by tumashu 0
  • Suggestion: Random Interval Bells

    Suggestion: Random Interval Bells

    Add the option to add n number of random interval bells during a meditation sitting.

    I used this in another app and really loved it. Draws you back to meditation.

    opened by MrJberg 0
  • Add option to play a file after the starting bell untill end.

    Add option to play a file after the starting bell untill end.

    This is something that is missing in almost all opensource meditation apps and can really add value as people are using a huge number of guides and sounds to help them meditate. The sound space provided protects them from the noise and bustle around them.

    As of now I personally and using a background player to achieve this.

    opened by theauditor 0
  • FR: Better preset managment

    FR: Better preset managment

    I've started using your Bodhi timer app and it is really good. I wonder if
    there is possibility that you can set the app that advanced settings can be
    saved as presets because now is only one possibility in advanced mode and
    if I want to change some settings in advanced mode I have to do it from
    scratch. For ecample if I programe the app in advanced mode for 30 min of
    sitting meditation and 10 min for walking meditation and if I want next
    time to sit for 40 min and do 10 min of walking meditation I have to do all
    procedure from begining...
    So this is my suggestion, if it is possible it would be good otherwise the
    app is very fine and thank you for it.
    
    opened by tzugen 1
Owner
Yuttadhammo Bhikkhu
Yuttadhammo Bhikkhu
A minimalist but powerful productivity timer designed to keep you focused and free of distractions.

Goodtime A minimalist but powerful productivity timer designed to keep you focused and free of distractions. Alternate between focused work sessions a

Adrian Cotfas 692 Dec 27, 2022
⏱️ TimerView is a beautifully designed fully customisable Android view that allows developers to create the UI for countdown timers.

TimerView ?? A beautifully designed fully customisable Android view that allows developers to create the UI for countdown timers. Index Getting starte

Kunika Valecha 6 Nov 22, 2022
A minimalist clone of the popular Social Media Platform "Instagram"

InstaLocal A minimalist clone of the popular Social Media Platform "Instagram" powered by Firebase and written in Kotlin. The app allows users to sign

Raktim Bhuyan 1 Nov 7, 2021
An elegant and beautiful Android app manager

An elegant and beautiful Android app manager

Hamza Rizwan 250 Jan 1, 2023
Pomodroid is a flexible and easy to use Android Pomodoro Technique Timer.

Pomodroid - Android App Pomodroid is a flexible and easy to use Android Pomodoro Technique Timer. Unlike other services, pomodroid is free and open so

Klejvi Kapaj 8 Oct 15, 2022
Simple timer app inspired by Newton's Cradle. Created in Jetpack Compose for #AndroidDevChallenge.

Newton's Timer ?? Description Simple timer app inspired by Newton's Cradle. Created in Jetpack Compose for #AndroidDevChallenge. ?? Motivation and Con

Maciej Ciemięga 278 Dec 28, 2022
⏲ A highly customizable interval timer app for Android

TimeR Machine A highly customizable interval timer app for Android Structure The app uses the Navigation component. Modules whose names start with app

null 51 Dec 7, 2022
A material tea-timer for android

What is this This project emerged as a tea-timer is something I nearly use every day and the app I was using so far was not ideal to me. I used the on

ligi 34 Aug 30, 2022
A general purpose kotlin library that use kotlin coroutines, flows and channels to provide timer features with the most easy and efficient way

Timer Timer is a general purpose kotlin library that use kotlin coroutines, flows and channels to provide timer features with the most easy and effici

Amr Saraya 3 Jul 11, 2022
Timer app for android

Android Countdown Timer This is a simple, no-frills but efficient timer app for android created based on my personal need. You can create multiple seq

Kaustav Banerjee 0 Dec 25, 2021
EggTimer: a timer app for cooking eggs

EggTimer EggTimer is a timer app for cooking eggs. You can start and stop the ti

Ernesto 0 Dec 22, 2021
Build a simple timer application with kotlin

3. Build a simple timer application which provides below features: a. A simple U

Nghe Pham 1 Dec 26, 2021
Task Timer - An android app that helps you to keep a track of how much time you spend on each task

Task Timer - An android app that helps you to keep a track of how much time you spend on each task

Hassan Al-Shammari 1 Feb 24, 2022
A simple and easy to use stopwatch and timer library for android

TimeIt Now with Timer support! A simple and easy to use stopwatch and timer library for android Introduction A stopwatch can be a very important widge

Yashovardhan Dhanania 35 Dec 10, 2022
Countdown timer app built in Jetpack Compose

TikTik: A beautiful countdown timer ?? Description TikTik is a beautiful countdown-timer app built in Jetpack Compose, which is submmited to Android D

fundroid 40 Dec 10, 2022
A minimalist but powerful productivity timer designed to keep you focused and free of distractions.

Goodtime A minimalist but powerful productivity timer designed to keep you focused and free of distractions. Alternate between focused work sessions a

Adrian Cotfas 692 Dec 27, 2022
Android Countdown View

中文 CountdownView Android countdown view,use canvas draw,supports multiple styles Download demo apk Screenshot Gradle compile 'com.github.iwgang:countd

iWgang 2.9k Dec 21, 2022
⏱️ TimerView is a beautifully designed fully customisable Android view that allows developers to create the UI for countdown timers.

TimerView ?? A beautifully designed fully customisable Android view that allows developers to create the UI for countdown timers. Index Getting starte

Kunika Valecha 6 Nov 22, 2022
lightweight and minimalist ORM for Java/Android. works with SQLite & MySQL. (not actively maintained)

Description ORMAN is an minimalistic and lightweight ORM framework for Java which can handle your common database usage without writing SQL and strugg

Ahmet Alp Balkan 246 Nov 20, 2022
lightweight and minimalist ORM for Java/Android. works with SQLite & MySQL. (not actively maintained)

Description ORMAN is an minimalistic and lightweight ORM framework for Java which can handle your common database usage without writing SQL and strugg

Ahmet Alp Balkan 246 Nov 20, 2022