[Project Share] Fast Toggl Timers with Tasker

In my life, I want to be consistently reminded of the way I’m intending on spending my time. I find it reminds me to be present and intentional. Life is full of distractions and this helps me remember that I want to be focused on one thing at a time. I found the existing Toggl app on Android requires ~10 or more clicks to add a new timer with projects and descriptions, and the notifications for my current timer aren’t good enough for me. So I whipped up this system with Tasker, described below. I made this video highlighting the system today as I realized it’s worth sharing. I’ve been using this for ~2 weeks, and I find it far easier than the android app or web app. Sorry for the poor audio.

Features of this system:

  • My lock screen shows a permanent notification with my active timer’s project, description, and the amount of time that has lapsed
  • I have a permanent notification with the same info
  • Clicking either of those notifications shows an alphabetical list of my projects to switch to
  • Adding descriptions are also dead simple. One is auto-suggested or I can instantly start typing a new one.

I built an imgur gallery with descriptions stepping through everything on imgur if you prefer or are on mobile. I’ve added it all here too:

Photo 1: My lock screen

My lock screen


In my life, I want to be consistently reminded of the way I’m intending on spending my time. I find it reminds me to be present and focused. Life is distracting and this helps me remember that I want to be focused on one thing at a time.
The format is: [Elapsed time] minutes on [Project]
[Description]
Double-tapping the notification will bring you to straight to photo 3.
The next image shows my home screen - so I just unlocked the phone in this case.

Photo 2: My Android homescreen

My Android homescreen


The toggl icon on the left the next image, the toggl icon on the right is the official toggl app.
Sidebar: All these icons open custom actions, the content of which is dynamic based on what should be most useful to me. Maybe a post for another time.
The next screen shows what happens when I click the toggl icon on the left.

Photo 3: My list of projects

My list of projects


It’s a scrollable, alphabetical list of all my Toggl projects. One click starts the entry, and brings you to the next screen.
This list is automatically updated by chaining together Toggl > IFTTT > Zapier > Autoweb. If I were a better man it would be simpler, and describing that process is out of scope for me right now.
The next screen shows what happens when I click any project in this list.

Photo 4: Add a description default

Add a description default


After selecting a project, I am brought to this screen to quickly add a description, or just accept the default description. In this case “High level work”. I’m filling in the description field with a variable in Tasker so that I can later suggest better descriptions dynamically.
The next image shows the description I added for my time making this : )

Photo 5: My description now

My description now


My current description : )

Photo 6: Response toast

Response toast


I like to see a toast after I start a new timer. It confirms what I added and that it was successful. Helps me notice if I’m having network issues.

Photo 7: Toggl main app

Toggl main app


Here you can see the timer we started in the prior images. For illustration only - I rarely open the toggl app on mobile.

Photo 8: Lock screen again, with this entry

Lock screen again, with this entry


The timer we started in the prior images, on the lockscreen.

You’ll need a few things to import this for your use. (1) AutoWeb setup with the Toggle API, (2) the Snackbar Tasker Plugin for showing a nicer UI, and (3) Autotools for date formatting.

Source: The project description for importing into Tasker
Profiles
Profile: Anon (9)
Event: Display On
Enter: Toggl Check For Timer (7)
A1: AutoWeb Web Service [ Configuration:API: Toggl
API Action: Get current time entry Timeout (Seconds):120 ] 
A2: Wait Until [ MS:0 Seconds:1 Minutes:0 Hours:0 Days:0 ] If [ %awresponsecode Set ]
A3: AutoTools Toast [ Configuration:Text: No Toggl timer 🤤
Text Size: 14
Icon Size: 30
Corner Radius: 30
Padding: 16,4,16,4 Timeout (Seconds):60 ] If [ %pid !Set ]
A4: Variable Set [ Name:%index To:%Tgl_pid(#?%pid) Recurse Variables:Off Do Maths:Off Append:Off ] 
A5: Variable Set [ Name:%durmin To:floor((%TIMES+%duration)/60) Recurse Variables:Off Do Maths:On Append:Off ] 
A6: AutoNotification [ Configuration:Title: %durmin minutes on %Tgl_name(%index)
Text: %description
Action on Touch: touched
Icon: app-icon:com.toggl.giskard
Status Bar Icon: device_access_time
Status Bar Text Size: 16
Background Color: #FF616161
Colorize Background: true
Id: 1
Priority: 0
Visibility: Public
Separator: , Timeout (Seconds):20 ] 


Profile: Anon (10)
Event: Sleep [ Configuration:Sleep tracking started ]
Enter: Anon (2)
A1: Perform Task [ Name:[Function] Toggl Start Timer Priority:%priority Parameter 1 (%par1):151325462 Parameter 2 (%par2):Sleep as Android started to track sleep; Tasker Return Value Variable: Stop:Off ] 


Profile: Anon (11)
Time: From 9:00AM every 5m Till 12:00AM
State: Display State [ Is:On ]
Enter: Toggl Check For Timer (7)
A1: AutoWeb Web Service [ Configuration:API: Toggl
API Action: Get current time entry Timeout (Seconds):120 ] 
A2: Wait Until [ MS:0 Seconds:1 Minutes:0 Hours:0 Days:0 ] If [ %awresponsecode Set ]
A3: AutoTools Toast [ Configuration:Text: No Toggl timer 🤤
Text Size: 14
Icon Size: 30
Corner Radius: 30
Padding: 16,4,16,4 Timeout (Seconds):60 ] If [ %pid !Set ]
A4: Variable Set [ Name:%index To:%Tgl_pid(#?%pid) Recurse Variables:Off Do Maths:Off Append:Off ] 
A5: Variable Set [ Name:%durmin To:floor((%TIMES+%duration)/60) Recurse Variables:Off Do Maths:On Append:Off ] 
A6: AutoNotification [ Configuration:Title: %durmin minutes on %Tgl_name(%index)
Text: %description
Action on Touch: touched
Icon: app-icon:com.toggl.giskard
Status Bar Icon: device_access_time
Status Bar Text Size: 16
Background Color: #FF616161
Colorize Background: true
Id: 1
Priority: 0
Visibility: Public
Separator: , Timeout (Seconds):20 ] 


Profile: Anon (12)
Event: AutoRemote [ Configuration:new toggl project ]
Enter: Toggl Get Projects (3)
A1: Spreadsheet Query [ Configuration:Query Zapier and Tasker database Timeout (Seconds):20 ] 
A2: [X] Flash [ Text:%Tgl_Headers Long:Off ] 
A3: Array Set [ Variable Array:%Tgl_pid Values:%pid() Splitter:, ] 
A4: Array Set [ Variable Array:%Tgl_name Values:%name() Splitter:, ] 
A5: Array Set [ Variable Array:%Tgl_wid Values:%wid() Splitter:, ] 


Profile: Anon (13)
Event: AutoNotification [ Configuration:Event Behaviour
Filter: touched ]
Enter: Toggl List Projects (4)
A1: Bottom Sheet [ Configuration:Title: 
Items: %Tgl_name()
Commands: %Tgl_pid() Timeout (Seconds):100 ]
A2: Perform Task [ Name:[Function] Get Description From User Priority:%priority Parameter 1 (%par1):High level work Parameter 2 (%par2): Return Value Variable:%description Stop:Off ] If [ %bs_command !~ Dismissed ]
A3: Perform Task [ Name:[Function] Toggl Start Timer Priority:%priority Parameter 1 (%par1):%bs_command Parameter 2 (%par2):%description;Mobile Return Value Variable: Stop:Off ] If [ %bs_command !~ Dismissed ]
A4: Flash [ Text:%description;Mobile Long:Off ] If [ %bs_command !~ dismissed ]


Tasks

A1: Spreadsheet Query [ Configuration:Query Zapier and Tasker database Timeout (Seconds): ] 
A2: [X] Flash [ Text:%Tgl_Headers Long: ] 
A3: Array Set [ Variable Array:%Tgl_pid Values:%pid() Splitter: ] 
A4: Array Set [ Variable Array:%Tgl_name Values:%name() Splitter: ] 
A5: Array Set [ Variable Array:%Tgl_wid Values:%wid() Splitter: ] 



A1: Bottom Sheet [ Configuration:Title: 
Items: %Tgl_name()
Commands: %Tgl_pid() Timeout (Seconds): ] 
A2: Perform Task [ Name:[Function] Get Description From User Priority: Parameter 1 (%par1):High level work Parameter 2 (%par2): Return Value Variable: Stop: ] If [ %bs_command !~ Dismissed ]
A3: Perform Task [ Name:[Function] Toggl Start Timer Priority: Parameter 1 (%par1):%bs_command Parameter 2 (%par2):%description;Mobile Return Value Variable: Stop: ] If [ %bs_command !~ Dismissed ]
A4: Flash [ Text:%description;Mobile Long: ] If [ %bs_command !~ dismissed ]



A1: Variable Query [ Title: Variable:%description Input Type: Default: Background Image: Layout: Timeout (Seconds): Show Over Keyguard: ] If [ %bs_command !~ Dismissed ]
A2: [X] AutoTools Dialog [ Configuration:Dialog Type: Input
Title: Description
Title Alignment: Center
Text Size: 20
Text Color: #FFFFFF
Button Text Color: #D32F2F
Input Type: Text
Input Line Color: #E53935
Output Variable: attext
Dim Background: true
Top Margin: 16
Bottom Margin: 16
Bottom Buttons Images: app-icon:com.toggl.giskard,icon-pack://com.marcotls.icons.h2o.free/adhell
Bottom Buttons Top Margin: 16
Bottom Buttons Bottom Margin: 16
Cancelable: true
Turn Screen On: true Timeout (Seconds): ] 
A3: Return [ Value:%description Stop:On ] 



A1: Spreadsheet Query [ Configuration:Query Zapier and Tasker database Timeout (Seconds): ] 
A2: [X] Variable Set [ Name:%Tgl_Headers To:%columnheaders() Recurse Variables: Do Maths: Append: ] 
A3: [X] Flash [ Text:%Tgl_Headers Long: ] 
A4: [X] Variable Set [ Name:%Tgl_wid To:%wid() Recurse Variables: Do Maths: Append: ] 
A5: [X] Variable Set [ Name:%Tgl_cid To:%cid() Recurse Variables: Do Maths: Append: ] 
A6: Array Set [ Variable Array:%Tgl_pid Values:%pid() Splitter: ] 
A7: Array Set [ Variable Array:%Tgl_name Values:%name() Splitter: ] 
A8: Array Set [ Variable Array:%Tgl_wid Values:%wid() Splitter: ] 
A9: [X] Variable Set [ Name:%Tgl_id To:%id Recurse Variables: Do Maths: Append: ] 



A1: AutoWeb Web Service [ Configuration:API: Toggl
API Action: Get current time entry Timeout (Seconds): ] 
A2: Wait Until [ MS:0 Seconds:1 Minutes:0 Hours:0 Days:0 ] If [ %awresponsecode Set ]
A3: AutoTools Toast [ Configuration:Text: No Toggl timer 🤤
Text Size: 14
Icon Size: 30
Corner Radius: 30
Padding: 16,4,16,4 Timeout (Seconds): ] If [ %pid !Set ]
A4: Variable Set [ Name:%index To:%Tgl_pid(#?%pid) Recurse Variables: Do Maths: Append: ] 
A5: Variable Set [ Name:%durmin To:floor((%TIMES+%duration)/60) Recurse Variables: Do Maths: Append: ] 
A6: AutoNotification [ Configuration:Title: %durmin minutes on %Tgl_name(%index)
Text: %description
Action on Touch: touched
Icon: app-icon:com.toggl.giskard
Status Bar Icon: device_access_time
Status Bar Text Size: 16
Background Color: #FF616161
Colorize Background: true
Id: 1
Priority: 0
Visibility: Public
Separator: , Timeout (Seconds): ] 



A1: Variable Split [ Name:%par2 Splitter:; Delete Base: ] 
A2: Variable Set [ Name:%par2 To:High-level Mobile Recurse Variables: Do Maths: Append: ] If [ %par2 !Set ]
A3: AutoWeb Web Service [ Configuration:API: Toggl
API Action: Start time entry Timeout (Seconds): ]
A4: Wait [ MS:0 Seconds:5 Minutes:0 Hours:0 Days:0 ] 
A5: Perform Task [ Name:Toggl Check For Timer Priority: Parameter 1 (%par1): Parameter 2 (%par2): Return Value Variable: Stop: ]

or you can import directly from TaskerNet.
I hope you enjoyed!
Mark

3 Likes

Hi Mark,

this is really cool. I tried to set this up, but I can’t get it to work. Do you have a guide anywhere?
You seem to query a spreadsheet in the Toggl Get Projects task, but I don’t get why or what spreadsheet that should be. I don’t have a lot of experience with these things so I’d be grateful for any hints you could provide. Thank you