Closed leofontenelle closed 2 years ago
Of course, now I thought of a third possibility: recently I enabled two-factor authentication on Dropbox. I didn't perceive one thing to come together with the other, but just in case I authenticated SimpleTask with "another" Dropbox (the same, only that I was sent to the browser to authenticate again, one-time password included). In case the problem persists I'll reopen this issue.
The next day (which is today) the error returned. This is the log. There's some mention of Lua; I don't have any Lua scripts.
Simpletask dropbox v10.9.3 (10009003) Git: 10.9.3-dirty log
--------- beginning of main
04-05 08:46:55.979 32101 32101 I Simpletask: onCreate
04-05 08:46:55.986 32101 32113 W sen.todotxthol: Reducing the number of considered missed Gc histogram windows from 471 to 100
04-05 08:46:56.095 32101 32101 I Simpletask: onResume
04-05 08:46:56.095 32101 32101 I FSQ : -> Reload
04-05 08:46:56.095 32101 32101 I Simpletask: onResume -> handleIntent
04-05 08:46:56.095 32101 9717 I FSQ : <- Reload
04-05 08:46:56.095 32101 32101 I Simpletask: handleIntent: not authenticated
04-05 08:46:56.095 32101 9717 D TodoList: Reload: Main activity resume
04-05 08:46:56.095 32101 9717 D TodoList: Not authenticatd
04-05 08:46:56.114 32101 32101 I Simpletask: onResume <- handleIntent
04-05 08:46:56.114 32101 32101 D Event : update UI for event RESUME
04-05 08:46:56.115 32101 32101 E Util : Lua error: bad argument: table expected, got nil )
04-05 08:46:56.115 32101 32101 D Simpletask: Update applyFilter bar
04-05 08:46:56.115 32101 32101 E Util : Lua error: bad argument: table expected, got nil )
04-05 08:46:56.116 32101 32101 E Util : Lua error: bad argument: table expected, got nil )
04-05 08:46:56.116 32101 32101 D Simpletask: Update applyFilter bar
04-05 08:46:56.116 32101 32101 E Util : Lua error: bad argument: table expected, got nil )
04-05 08:46:56.121 32101 32101 I TetheringManager: registerTetheringEventCallback:nl.mpcjanssen.todotxtholo
04-05 08:46:56.260 32101 27074 I AdrenoGLES-0: QUALCOMM build : d4cfdf3, Ic907de5ed0
04-05 08:46:56.260 32101 27074 I AdrenoGLES-0: Build Date : 09/25/20
04-05 08:46:56.260 32101 27074 I AdrenoGLES-0: OpenGL ES Shader Compiler Version: EV031.32.02.01
04-05 08:46:56.260 32101 27074 I AdrenoGLES-0: Local Branch : mybrancheaff3d46-e51f-f136-8926-1458d0b52af0
04-05 08:46:56.260 32101 27074 I AdrenoGLES-0: Remote Branch : quic/gfx-adreno.lnx.1.0.r116-rel
04-05 08:46:56.260 32101 27074 I AdrenoGLES-0: Remote Branch : NONE
04-05 08:46:56.260 32101 27074 I AdrenoGLES-0: Reconstruct Branch : NOTHING
04-05 08:46:56.260 32101 27074 I AdrenoGLES-0: Build Config : S P 10.0.7 AArch64
04-05 08:46:56.260 32101 27074 I AdrenoGLES-0: Driver Path : /vendor/lib64/egl/libGLESv2_adreno.so
04-05 08:46:56.324 32101 27074 I AdrenoGLES-0: PFP: 0x016ee190, ME: 0x00000000
04-05 08:46:58.021 32101 32101 I Config : Updating todoList cache with null tasks
04-05 08:46:58.085 32101 32101 D com.dropbox.core.android.AuthActivity: running startActivity in handler
04-05 08:46:58.207 32101 27074 D OpenGLRenderer: endAllActiveAnimators on 0x7701364e40 (RippleDrawable) with handle 0x7621372150
Did you logout adn login again or did you completely reinstall Simpletask? Could you retry a complete reinstall.
Now I reinstalled it. The app showed me a Dropbox "This app wants to connect with you account" as if somehow it remembered which was my account, but clicked the "different account" link below. An authentication page opened in my default browser (Firefox) and after email and password Dropbox asked me to answer three captchas before asking my TOTP. Then it did the same again, except that it was only two captchas, and this time the authentication worked. The app settings surely have been reset (dark theme, task order etc), so that's different from the last test. I'll report back I'm a day or two in case it works, sooner if it doesn't. Thanks for the patience!
After using for a while the problem occurred again:
Simpletask dropbox v10.9.3 (10009003) Git: 10.9.3-dirty log
--------- beginning of main
04-09 21:02:12.458 32217 32217 I TodoApplication: Updating widget: 25
04-09 21:02:12.458 32217 32217 I Simpletask: Tasklist changed, refiltering adapter
04-09 21:02:12.458 32217 32217 I TaskAdapter: Text size = 14.0
04-09 21:02:12.458 32217 32217 I TaskAdapter: setFilteredTasks called: nl.mpcjanssen.simpletask.task.TodoList@9ff0120
04-09 21:02:12.458 32217 32217 D TodoList: Getting sorted and filtered tasks
04-09 21:02:12.461 32217 32217 D TodoList: Sorting and filtering tasks took 3 ms
04-09 21:02:12.462 32217 32217 I TaskAdapter: Restoring scroll offset 10, -69
04-09 21:02:12.462 32217 32217 D Event : update UI for event TASK_LIST_CHANGED
04-09 21:02:12.463 32217 32217 I Simpletask: Recreating options menu
04-09 21:02:12.463 32217 32217 D Simpletask: Handle mode
04-09 21:02:12.524 32217 32217 I TaskAdapter: Text size = 14.0
04-09 21:02:12.525 32217 32217 I TaskAdapter: setFilteredTasks called: nl.mpcjanssen.simpletask.task.TodoList@9ff0120
04-09 21:02:12.525 32217 32217 D TodoList: Getting sorted and filtered tasks
04-09 21:02:12.526 32217 32217 D TodoList: Sorting and filtering tasks took 1 ms
04-09 21:02:12.527 32217 32217 I TaskAdapter: Restoring scroll offset 10, -69
04-09 21:02:12.527 32217 32217 D Simpletask: Update applyFilter bar
04-09 21:02:12.527 32217 32217 D Simpletask: Update applyFilter bar
04-09 21:02:12.528 32217 32217 I TaskAdapter: Text size = 14.0
04-09 21:02:12.528 32217 32217 I TaskAdapter: setFilteredTasks called: nl.mpcjanssen.simpletask.task.TodoList@9ff0120
04-09 21:02:12.529 32217 32217 D TodoList: Getting sorted and filtered tasks
04-09 21:02:12.530 32217 32217 D TodoList: Sorting and filtering tasks took 2 ms
04-09 21:02:12.530 32217 32217 I TaskAdapter: Restoring scroll offset 10, -69
04-09 21:02:12.530 32217 32217 D Simpletask: Update applyFilter bar
04-09 21:02:12.531 32217 32217 D Simpletask: Update applyFilter bar
04-09 21:02:12.531 32217 32217 D TodoList: Scheduled save in 4931
04-09 21:02:13.534 32217 32217 D TodoList: Scheduled save in 3928
04-09 21:02:14.536 32217 32217 D TodoList: Scheduled save in 2926
04-09 21:02:15.538 32217 32217 D TodoList: Scheduled save in 1924
04-09 21:02:16.543 32217 32217 D TodoList: Scheduled save in 920
04-09 21:02:17.464 32217 32217 D TodoList: Executing pending Save
04-09 21:02:17.464 32217 32217 I FSQ : -> Save
04-09 21:02:17.465 32217 8432 I FSQ : <- Save
04-09 21:02:17.465 32217 8432 I Util : Sending file sync start broadcast
04-09 21:02:17.465 32217 8432 I TodoList: Saving todo list, size 40
04-09 21:02:17.465 32217 8432 I FileStore: Saving 40 tasks to Dropbox.
04-09 21:02:17.466 32217 8432 I FileStore: Last seen rev 5dc4187a128b419d9dcb8
04-09 21:02:17.466 32217 8432 I FileStore: Saving to file /todo/todo.txt
04-09 21:02:17.750 32217 8432 E TodoList: TodoList save to /todo/todo.txt failed
04-09 21:02:17.750 32217 8432 E TodoList: com.dropbox.core.InvalidAccessTokenException: {"error_summary": "expired_access_token/", "error": {".tag": "expired_access_token"}}
04-09 21:02:17.750 32217 8432 E TodoList: at com.dropbox.core.DbxRequestUtil.unexpectedStatus(DbxRequestUtil.java:34)
04-09 21:02:17.750 32217 8432 E TodoList: at com.dropbox.core.DbxRequestUtil.unexpectedStatus(DbxRequestUtil.java:1)
04-09 21:02:17.750 32217 8432 E TodoList: at com.dropbox.core.DbxUploader.finish(DbxUploader.java:10)
04-09 21:02:17.750 32217 8432 E TodoList: at com.dropbox.core.DbxUploader.uploadAndFinish(DbxUploader.java:2)
04-09 21:02:17.750 32217 8432 E TodoList: at com.dropbox.core.v2.DbxUploadStyleBuilder.uploadAndFinish(DbxUploadStyleBuilder.java:1)
04-09 21:02:17.750 32217 8432 E TodoList: at nl.mpcjanssen.simpletask.remote.FileStore.saveTasksToFile(FileStore.kt:9)
04-09 21:02:17.750 32217 8432 E TodoList: at nl.mpcjanssen.simpletask.task.TodoList$save$2$saveAction$1$1.invoke(TodoList.kt:4)
04-09 21:02:17.750 32217 8432 E TodoList: at nl.mpcjanssen.simpletask.task.TodoList$save$2$saveAction$1$1.invoke(TodoList.kt:1)
04-09 21:02:17.750 32217 8432 E TodoList: at nl.mpcjanssen.simpletask.util.ActionQueue$add$1.invoke(ActionQueues.kt:3)
04-09 21:02:17.750 32217 8432 E TodoList: at nl.mpcjanssen.simpletask.util.ActionQueue$add$1.invoke(ActionQueues.kt:1)
04-09 21:02:17.750 32217 8432 E TodoList: at org.jetbrains.anko.AsyncKt$doAsync$1.invoke(Async.kt:1)
04-09 21:02:17.750 32217 8432 E TodoList: at org.jetbrains.anko.AsyncKt$doAsync$1.invoke(Unknown Source:0)
04-09 21:02:17.750 32217 8432 E TodoList: at org.jetbrains.anko.AsyncKt$sam$java_util_concurrent_Callable$0.call(Unknown Source:2)
04-09 21:02:17.750 32217 8432 E TodoList: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
04-09 21:02:17.750 32217 8432 E TodoList: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
04-09 21:02:17.750 32217 8432 E TodoList: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
04-09 21:02:17.750 32217 8432 E TodoList: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
04-09 21:02:17.750 32217 8432 E TodoList: at java.lang.Thread.run(Thread.java:923)
04-09 21:02:17.753 32217 8432 I Util : Sending file sync done changed broadcast
04-09 21:02:32.456 32217 13097 D CalendarSync: Checking whether calendar sync is needed
04-09 21:03:01.121 32217 32217 W Choreographer: Frame time is 0.074763 ms in the future! Check that graphics HAL is generating vsync timestamps using the correct timebase.
04-09 21:04:32.402 32217 32217 I Simpletask: onResume
04-09 21:04:32.402 32217 32217 I FSQ : -> Reload
04-09 21:04:32.402 32217 32217 I Simpletask: onResume -> handleIntent
04-09 21:04:32.402 32217 32217 I FSQ : -> Verify token
04-09 21:04:32.403 32217 32217 I Simpletask: handleIntent: from m_prefs state
04-09 21:04:32.404 32217 32598 I FSQ : <- Reload
04-09 21:04:32.404 32217 32598 D TodoList: Reload: Main activity resume
04-09 21:04:32.404 32217 32598 I FSQ : -> Verify token
04-09 21:04:32.405 32217 8433 I FSQ : <- Verify token
04-09 21:04:32.407 32217 32217 I TaskAdapter: Text size = 14.0
04-09 21:04:32.407 32217 10158 I FSQ : <- Verify token
04-09 21:04:32.408 32217 32217 I TaskAdapter: setFilteredTasks called: nl.mpcjanssen.simpletask.task.TodoList@9ff0120
04-09 21:04:32.408 32217 32217 D TodoList: Getting sorted and filtered tasks
04-09 21:04:32.408 32217 32598 I TodoList: Not loading, changes pending
04-09 21:04:32.408 32217 32598 I TodoList: Saving instead of loading
04-09 21:04:32.408 32217 32598 D TodoList: Save: /todo/todo.txt
04-09 21:04:32.409 32217 32598 I Config : Updating todoList cache with 40 tasks
04-09 21:04:32.415 32217 32598 I FSQ : -> Backup
04-09 21:04:32.415 32217 3221 I FSQ : <- Backup
04-09 21:04:32.415 32217 32217 D TodoList: Sorting and filtering tasks took 7 ms
04-09 21:04:32.415 32217 32217 I TaskAdapter: Restoring scroll offset 21, -114
04-09 21:04:32.416 32217 32217 I Simpletask: onResume <- handleIntent
04-09 21:04:32.416 32217 32217 D Event : update UI for event RESUME
04-09 21:04:32.416 32217 32217 D Simpletask: Update applyFilter bar
04-09 21:04:32.417 32217 32217 D Simpletask: Update applyFilter bar
04-09 21:04:32.430 32217 3221 D Util : Backing up of tasks took 15 ms
04-09 21:04:32.678 32217 32217 D Event : update UI for event UPDATE_PENDING_CHANGES
04-09 21:04:32.681 32217 32217 D TodoList: Scheduled save in 4998
04-09 21:04:33.326 32217 8433 W FileStore: Invalid access token
04-09 21:04:33.326 32217 10158 W FileStore: Invalid access token
04-09 21:04:33.680 32217 32217 D TodoList: Scheduled save in 3998
04-09 21:04:34.680 32217 32217 D TodoList: Scheduled save in 2998
04-09 21:04:35.682 32217 32217 D TodoList: Scheduled save in 1997
04-09 21:04:36.685 32217 32217 D TodoList: Scheduled save in 993
04-09 21:04:37.679 32217 32217 D TodoList: Executing pending Save
04-09 21:04:37.679 32217 32217 I FSQ : -> Save
04-09 21:04:37.679 32217 3222 I FSQ : <- Save
04-09 21:04:37.679 32217 3222 I Util : Sending file sync start broadcast
04-09 21:04:37.679 32217 3222 I TodoList: Saving todo list, size 40
04-09 21:04:37.679 32217 3222 I FileStore: Saving 40 tasks to Dropbox.
04-09 21:04:37.680 32217 3222 I FileStore: Last seen rev 5dc4187a128b419d9dcb8
04-09 21:04:37.680 32217 3222 I FileStore: Saving to file /todo/todo.txt
04-09 21:04:38.553 32217 3222 E TodoList: TodoList save to /todo/todo.txt failed
04-09 21:04:38.553 32217 3222 E TodoList: com.dropbox.core.InvalidAccessTokenException: {"error_summary": "expired_access_token/.", "error": {".tag": "expired_access_token"}}
04-09 21:04:38.553 32217 3222 E TodoList: at com.dropbox.core.DbxRequestUtil.unexpectedStatus(DbxRequestUtil.java:34)
04-09 21:04:38.553 32217 3222 E TodoList: at com.dropbox.core.DbxRequestUtil.unexpectedStatus(DbxRequestUtil.java:1)
04-09 21:04:38.553 32217 3222 E TodoList: at com.dropbox.core.DbxUploader.finish(DbxUploader.java:10)
04-09 21:04:38.553 32217 3222 E TodoList: at com.dropbox.core.DbxUploader.uploadAndFinish(DbxUploader.java:2)
04-09 21:04:38.553 32217 3222 E TodoList: at com.dropbox.core.v2.DbxUploadStyleBuilder.uploadAndFinish(DbxUploadStyleBuilder.java:1)
04-09 21:04:38.553 32217 3222 E TodoList: at nl.mpcjanssen.simpletask.remote.FileStore.saveTasksToFile(FileStore.kt:9)
04-09 21:04:38.553 32217 3222 E TodoList: at nl.mpcjanssen.simpletask.task.TodoList$save$2$saveAction$1$1.invoke(TodoList.kt:4)
04-09 21:04:38.553 32217 3222 E TodoList: at nl.mpcjanssen.simpletask.task.TodoList$save$2$saveAction$1$1.invoke(TodoList.kt:1)
04-09 21:04:38.553 32217 3222 E TodoList: at nl.mpcjanssen.simpletask.util.ActionQueue$add$1.invoke(ActionQueues.kt:3)
04-09 21:04:38.553 32217 3222 E TodoList: at nl.mpcjanssen.simpletask.util.ActionQueue$add$1.invoke(ActionQueues.kt:1)
04-09 21:04:38.553 32217 3222 E TodoList: at org.jetbrains.anko.AsyncKt$doAsync$1.invoke(Async.kt:1)
04-09 21:04:38.553 32217 3222 E TodoList: at org.jetbrains.anko.AsyncKt$doAsync$1.invoke(Unknown Source:0)
04-09 21:04:38.553 32217 3222 E TodoList: at org.jetbrains.anko.AsyncKt$sam$java_util_concurrent_Callable$0.call(Unknown Source:2)
04-09 21:04:38.553 32217 3222 E TodoList: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
04-09 21:04:38.553 32217 3222 E TodoList: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
04-09 21:04:38.553 32217 3222 E TodoList: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
04-09 21:04:38.553 32217 3222 E TodoList: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
04-09 21:04:38.553 32217 3222 E TodoList: at java.lang.Thread.run(Thread.java:923)
04-09 21:04:38.554 32217 3222 I Util : Sending file sync done changed broadcast
04-09 21:04:45.515 32217 32217 D WidgetService: Creating view for widget: 25
04-09 21:04:45.516 32217 32217 D WidgetService: Widget: OnCreate called in ViewFactory
04-09 21:04:45.518 32217 32235 D WidgetService: Widget 25: setFilteredTasks called
04-09 21:04:45.518 32217 32235 D WidgetService: TodoApplication.app is not authenticated
I'm experiencing this exact issue on my Note 9 since 13ish days ago. Simpletask is my most essential phone app so this is bug has quite literally halted my life and productivity. Simpletask can't log into or sync with Dropbox. The most I'm able to do is traverse the Dropbox file tree which is probably using cached file structure data anyway. I've tried on multiple phones including brand new phones. These are also the toasts I'm seeing:
"Loading of todo file failed" "Can't open file while sync in progress" (paraphrased)
I would love to be able to donate to the developers. I hope this issue is fixed with a new release as soon as possible.
In https://github.com/mpcjanssen/simpletask-android/issues/1159#issuecomment-1100840040 I mentioned this before discovering this issue, so allow me to repeat what I said there so as to have everything in one place.
After many hours, the app seems to lose Dropbox authentication, and prompts again to log in to dropbox. Then I can seem to successfully log in to Dropbox, but then it immediately fails again ("Loading of todo list failed"), and immediately re-displays the prompt to log in to dropbox. This continues to happen unless I reboot the phone. If I reboot the phone, I am prompted one more time to log in to dropbox, but this time it "sticks" (it works; it no longer re-displays the prompt to log in to dropbox), although only for a few more hours, after which the problem recurs. (see https://github.com/mpcjanssen/simpletask-android/issues/1159#issuecomment-1100840040 for some debugging info).
I suspect the periodic need to re-authenticate is due to the Dropbox API switching from long-lived access tokens to short-lived access tokens. https://developers.dropbox.com/oauth-guide says "In the past, the Dropbox API used only long-lived access tokens. These are now deprecated, but will remain available as an option in the Developer console for compatibility until mid 2021.".
What I don't understand is why I am having trouble re-authenticating until I reboot. https://developers.dropbox.com/oauth-guide says:
" Dropbox access tokens are short lived, and will expire after a short period of time. The exact expiry time of a token is returned by the token endpoint (or the redirect URI in implicit grant) - but is generally long enough for a reasonable web session.
If the token expires - throwing a 401 error - your application may simply re-authenticate as described above. If your token is expired, but the user is signed into Dropbox and their approval is still valid, the redirects will not require end-user input. A user’s approval remains valid until explicitly revoked. "
So, when the authentication screen is displayed (LoginScreen.kt), and the login button is pressed, Auth.startOAuth2Authentication(this, appKey.substring(3)) is called. Contrary to my understanding of the previous quote, end-user input is sought by Dropbox at this point, and furthermore, the authentication is not succeeding for some reason, until I reboot. I don't understand why that is happening.
Hmm.. the Dropbox documentation gives example https://github.com/dropbox/dropbox-sdk-java/blob/master/examples/authorize/src/main/java/com/dropbox/core/examples/authorize/Main.java which uses stuff like com.dropbox.core.DbxAuthFinish and import com.dropbox.core.DbxWebAuth; by contrast, Simpletask currently uses com.dropbox.core.android.Auth. Perhaps com.dropbox.core.android.Auth is not the recommended way to do it. Maybe Simpletask needs to be reworked to look more like the example at https://github.com/dropbox/dropbox-sdk-java/blob/master/examples/authorize/src/main/java/com/dropbox/core/examples/authorize/Main.java?
On the other hand, another example, which is more specialized to Android, https://github.com/dropbox/dropbox-sdk-java/blob/master/examples/android/src/main/java/com/dropbox/core/examples/android/DropboxActivity.java , does use com.dropbox.core.android.Auth. But it doesn't look very much like what Simpletask does.
A better workaround than rebooting: Settings (I mean the Android settings app, not the settings within Simpletask)->Apps->Simpletask->Force stop. After doing this, when I go back into Simpletask, authentication now succeeds.
I feel for the people who have their workflow disrupted by stuff like this, but I am getting so fed up with stuff just breaking and the churn that goes along with it. The Dropbox API has been a major PITA for several years now. If any feels up to looking into the approach suggested by @bshanks and create a PR that would be great.
One thing to investigate is whether you could use the cloudless version with the dropbox android app. That way you don't need to use the version of Simpletask that connects with Dropbox directly. I did this for a few years with Nextcloud and it worked great.
Just to confirm I am having the same issues above. Pixel 4a, Android 12.
I downloaded the cloudless version and the todo.txt file but could not figure out how to change the default directory from Android/data/...
So for now I am using VScode with todo.txt extension to manage my tasks on desktop.
Awesome app. Been a user since launch. Unfortunately, not a programer so cannot help with PR.
(Marc, have you considered the Amazon app store? It runs on Windows 11, which can run android apps, thus opening up Windows desktop use cases. The hack I am using does not have the powerful filtering/sorting of Simple Task).
Hi all, Firstly, thanks @mpcjanssen for such a great app - I've been using it for many years now. :) The process of converting from the old -> new Dropbox libraries is a bit tricky -- I had to do the same for some python scripts to use the new Dropbox libraries, which is a bit of a pain (esp. switching from the old token types to the newer ones). Sorry my Android programming is rusty (I've only worked on console-based and applet-based Java in the past), but am happy to help out in any way I can.
For now, the workaround that @smichel17 suggested seems the be the most straightforward, with one caveat:
Android/com.dropbox.android/files
like any regular file)...
but the Dropbox folks have re-engineered it and broke this workflow, so this option only works if you have an old copy of the official Android app say couple years back.I've just tried out the latter workflow and it seems to work okay for now.
I might keep working on it if time permits. What confuses me is that force stopping the app causes authentication to succeed again (only if #1160 has been applied) -- which suggests that there is some state that is being held onto that is messing stuff up, and that if we can modify the app to erase that state upon each auth attempt, maybe it will work, although perhaps with the annoyance of popping up an auth dialog every few hours and requiring two extra clicks.
Of course switching to the new OAuth API requires completely rewriting the Dropbox Simpletask backend (again!!!)
https://mpcjanssen.nl/artifacts/dropbox-sync/ has two builds (debug and release) which should at least detect that the Dropbox authentication has been lost and let you login again without tricks.
As mentioned in the message above switching to the (new) proper dropbox way requires considerably more work.
For any volunteers, using the PKCE flow seem to be the right approach.
7f513e5aa04a46048eba1e451cc0bd48100ba29c is a first stab at a full folder access version using the new authentication flow. If you want to test this version just mail me your dropbox id and I will send you a test build and enable you dropbox email in the dropbox App console
Seems that the latest version fixes the Dropbox authentication issue. I will upload a build later today and I will have to get the new API keys put in production.
Testing of the full dropbox access flow with https://mpcjanssen.nl/artifacts/dropbox-pkce/release/app-dropbox-release.apk should be possible now.
Testing of the full dropbox access flow with https://mpcjanssen.nl/artifacts/dropbox-pkce/release/app-dropbox-release.apk should be possible now.
It's working for me - VERY pleased to have it working again!
@phantomwhale thanks for confirming
Testing of the full dropbox access flow with https://mpcjanssen.nl/artifacts/dropbox-pkce/release/app-dropbox-release.apk should be possible now.
This works beautifully. Only difference is the oAuth flow. I have the dropbox app and the previous version used the App for authentication. This version took me through a browser based flow so had to relogin. Otherwise everything works great. Thank you.
After I (accidentally) discovered that the app no longer accesses the Simpletask-folder in Dropbox but instead creates an entirely new folder called SimpletaskAndroidFolder (why?), everything appears to work fine.
Thank you very much for fixing it.
Regards, Oliver.
Works for me on my Android 6.0.1 phone. Thank you! Am I correct that my android 12 tablet will still have issues?
@Grydpype I had to register a new dropbox application token so I cannot use the same name as the old Simpletask version, sorry for that.
@Jjquigley it should also work fine on a tablet.
https://mpcjanssen.nl/artifacts/dropbox-pkce/release/app-dropbox-release.apk appears to work for me in the app, but it cannot create a widget. I am running Android 12 (April 5 2022 update). Here is the debug log from a time when i tried to create a widget:
04-20 12:30:06.433 16278 16278 E sen.todotxthol: Not starting debugger since process cannot load the jdwp agent. 04-20 12:30:06.435 16278 16278 D ProcessState: Binder ioctl to enable oneway spam detection failed: Invalid argument 04-20 12:30:06.473 16278 16278 D CompatibilityChangeReporter: Compat change id reported: 171979766; UID 10367; state: ENABLED 04-20 12:30:06.501 16278 16278 V GraphicsEnvironment: ANGLE Developer option for 'nl.mpcjanssen.todotxtholo' set to: 'default' 04-20 12:30:06.503 16278 16278 V GraphicsEnvironment: ANGLE GameManagerService for nl.mpcjanssen.todotxtholo: false 04-20 12:30:06.503 16278 16278 V GraphicsEnvironment: Updatable production driver is not supported on the device. 04-20 12:30:06.505 16278 16278 D NetworkSecurityConfig: No Network Security Config specified, using platform default 04-20 12:30:06.505 16278 16278 D NetworkSecurityConfig: No Network Security Config specified, using platform default 04-20 12:30:06.533 16278 16278 D QueryStore: Saved applyFilter ids: [] 04-20 12:30:06.556 16278 16278 I Config : Getting 718 items todoList from cache 04-20 12:30:06.829 16278 16278 I TodoApplication: onCreate() 04-20 12:30:06.829 16278 16278 I TodoApplication: Created todolist nl.mpcjanssen.simpletask.task.TodoList@53347c5 04-20 12:30:06.829 16278 16278 I TodoApplication: Started Simpletask dropbox v10.9.3 (10009003) Git: 10.9.3-62-54c694c 04-20 12:30:06.830 16278 16278 I TodoApplication: Scheduling daily UI updateCache alarm, first at Thu Apr 21 00:02:00 PDT 2022 04-20 12:30:06.830 16278 16278 D CompatibilityChangeReporter: Compat change id reported: 160794467; UID 10367; state: ENABLED 04-20 12:30:06.831 16278 16278 I TodoApplication: Scheduling task list reload 04-20 12:30:06.861 16278 16278 I FilterActivity: Called with intent: Intent { act=android.appwidget.action.APPWIDGET_CONFIGURE cmp=nl.mpcjanssen.todotxtholo/nl.mpcjanssen.simpletask.FilterActivity (has extras) } 04-20 12:30:06.872 16278 16278 D CompatibilityChangeReporter: Compat change id reported: 171228096; UID 10367; state: ENABLED 04-20 12:30:06.877 16278 16278 W TabLayout: MODE_SCROLLABLE + GRAVITY_FILL is not supported, GRAVITY_START will be used instead 04-20 12:30:06.911 16278 16278 D MyAppWidgetProvider: onUpdate 18 04-20 12:30:06.913 16278 16278 D AndroidRuntime: Shutting down VM 04-20 12:30:06.913 16278 16278 E AndroidRuntime: FATAL EXCEPTION: main 04-20 12:30:06.913 16278 16278 E AndroidRuntime: Process: nl.mpcjanssen.todotxtholo, PID: 16278 04-20 12:30:06.913 16278 16278 E AndroidRuntime: java.lang.RuntimeException: Unable to start receiver nl.mpcjanssen.simpletask.MyAppWidgetProvider: java.lang.IllegalArgumentException: nl.mpcjanssen.todotxtholo: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent. 04-20 12:30:06.913 16278 16278 E AndroidRuntime: Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles. 04-20 12:30:06.913 16278 16278 E AndroidRuntime: at android.app.ActivityThread.handleReceiver(ActivityThread.java:4384) 04-20 12:30:06.913 16278 16278 E AndroidRuntime: at android.app.ActivityThread.access$1600(ActivityThread.java:256) 04-20 12:30:06.913 16278 16278 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2102) 04-20 12:30:06.913 16278 16278 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:106) 04-20 12:30:06.913 16278 16278 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:201) 04-20 12:30:06.913 16278 16278 E AndroidRuntime: at android.os.Looper.loop(Looper.java:288) 04-20 12:30:06.913 16278 16278 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7870) 04-20 12:30:06.913 16278 16278 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 04-20 12:30:06.913 16278 16278 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 04-20 12:30:06.913 16278 16278 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 04-20 12:30:06.913 16278 16278 E AndroidRuntime: Caused by: java.lang.IllegalArgumentException: nl.mpcjanssen.todotxtholo: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent. 04-20 12:30:06.913 16278 16278 E AndroidRuntime: Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles. 04-20 12:30:06.913 16278 16278 E AndroidRuntime: at android.app.PendingIntent.checkFlags(PendingIntent.java:375) 04-20 12:30:06.913 16278 16278 E AndroidRuntime: at android.app.PendingIntent.getActivityAsUser(PendingIntent.java:458) 04-20 12:30:06.913 16278 16278 E AndroidRuntime: at android.app.PendingIntent.getActivity(PendingIntent.java:444) 04-20 12:30:06.913 16278 16278 E AndroidRuntime: at android.app.PendingIntent.getActivity(PendingIntent.java:408) 04-20 12:30:06.913 16278 16278 E AndroidRuntime: at nl.mpcjanssen.simpletask.MyAppWidgetProvider.updateView(MyAppWidgetProvider.java:27) 04-20 12:30:06.913 16278 16278 E AndroidRuntime: at nl.mpcjanssen.simpletask.MyAppWidgetProvider.onUpdate(MyAppWidgetProvider.java:3) 04-20 12:30:06.913 16278 16278 E AndroidRuntime: at android.appwidget.AppWidgetProvider.onReceive(AppWidgetProvider.java:66) 04-20 12:30:06.913 16278 16278 E AndroidRuntime: at android.app.ActivityThread.handleReceiver(ActivityThread.java:4375) 04-20 12:30:06.913 16278 16278 E AndroidRuntime: ... 9 more 04-20 12:30:06.913 16278 16278 E TodoApplication: Uncaught exception 04-20 12:30:06.913 16278 16278 E TodoApplication: java.lang.RuntimeException: Unable to start receiver nl.mpcjanssen.simpletask.MyAppWidgetProvider: java.lang.IllegalArgumentException: nl.mpcjanssen.todotxtholo: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent. 04-20 12:30:06.913 16278 16278 E TodoApplication: Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles. 04-20 12:30:06.913 16278 16278 E TodoApplication: at android.app.ActivityThread.handleReceiver(ActivityThread.java:4384) 04-20 12:30:06.913 16278 16278 E TodoApplication: at android.app.ActivityThread.access$1600(ActivityThread.java:256) 04-20 12:30:06.913 16278 16278 E TodoApplication: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2102) 04-20 12:30:06.913 16278 16278 E TodoApplication: at android.os.Handler.dispatchMessage(Handler.java:106) 04-20 12:30:06.913 16278 16278 E TodoApplication: at android.os.Looper.loopOnce(Looper.java:201) 04-20 12:30:06.913 16278 16278 E TodoApplication: at android.os.Looper.loop(Looper.java:288) 04-20 12:30:06.913 16278 16278 E TodoApplication: at android.app.ActivityThread.main(ActivityThread.java:7870) 04-20 12:30:06.913 16278 16278 E TodoApplication: at java.lang.reflect.Method.invoke(Native Method) 04-20 12:30:06.913 16278 16278 E TodoApplication: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 04-20 12:30:06.913 16278 16278 E TodoApplication: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 04-20 12:30:06.913 16278 16278 E TodoApplication: Caused by: java.lang.IllegalArgumentException: nl.mpcjanssen.todotxtholo: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent. 04-20 12:30:06.913 16278 16278 E TodoApplication: Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles. 04-20 12:30:06.913 16278 16278 E TodoApplication: at android.app.PendingIntent.checkFlags(PendingIntent.java:375) 04-20 12:30:06.913 16278 16278 E TodoApplication: at android.app.PendingIntent.getActivityAsUser(PendingIntent.java:458) 04-20 12:30:06.913 16278 16278 E TodoApplication: at android.app.PendingIntent.getActivity(PendingIntent.java:444) 04-20 12:30:06.913 16278 16278 E TodoApplication: at android.app.PendingIntent.getActivity(PendingIntent.java:408) 04-20 12:30:06.913 16278 16278 E TodoApplication: at nl.mpcjanssen.simpletask.MyAppWidgetProvider.updateView(MyAppWidgetProvider.java:27) 04-20 12:30:06.913 16278 16278 E TodoApplication: at nl.mpcjanssen.simpletask.MyAppWidgetProvider.onUpdate(MyAppWidgetProvider.java:3) 04-20 12:30:06.913 16278 16278 E TodoApplication: at android.appwidget.AppWidgetProvider.onReceive(AppWidgetProvider.java:66) 04-20 12:30:06.913 16278 16278 E TodoApplication: at android.app.ActivityThread.handleReceiver(ActivityThread.java:4375) 04-20 12:30:06.913 16278 16278 E TodoApplication: ... 9 more 04-20 12:30:06.933 16278 16278 I Process : Sending signal. PID: 16278 SIG: 9 04-20 12:30:07.022 16311 16311 E sen.todotxthol: Not starting debugger since process cannot load the jdwp agent. 04-20 12:30:07.026 16311 16311 D ProcessState: Binder ioctl to enable oneway spam detection failed: Invalid argument 04-20 12:30:07.038 16311 16311 D CompatibilityChangeReporter: Compat change id reported: 171979766; UID 10367; state: ENABLED 04-20 12:30:07.056 16311 16311 V GraphicsEnvironment: ANGLE Developer option for 'nl.mpcjanssen.todotxtholo' set to: 'default' 04-20 12:30:07.057 16311 16311 V GraphicsEnvironment: ANGLE GameManagerService for nl.mpcjanssen.todotxtholo: false 04-20 12:30:07.057 16311 16311 V GraphicsEnvironment: Updatable production driver is not supported on the device. 04-20 12:30:07.058 16311 16311 D NetworkSecurityConfig: No Network Security Config specified, using platform default 04-20 12:30:07.059 16311 16311 D NetworkSecurityConfig: No Network Security Config specified, using platform default 04-20 12:30:07.123 16311 16311 D QueryStore: Saved applyFilter ids: [] 04-20 12:30:07.197 16311 16311 I Config : Getting 718 items todoList from cache 04-20 12:30:08.153 16311 16311 I TodoApplication: onCreate() 04-20 12:30:08.153 16311 16311 I TodoApplication: Created todolist nl.mpcjanssen.simpletask.task.TodoList@ff1ce3c 04-20 12:30:08.155 16311 16311 I TodoApplication: Started Simpletask dropbox v10.9.3 (10009003) Git: 10.9.3-62-54c694c 04-20 12:30:08.158 16311 16311 I TodoApplication: Scheduling daily UI updateCache alarm, first at Thu Apr 21 00:02:00 PDT 2022 04-20 12:30:08.159 16311 16311 D CompatibilityChangeReporter: Compat change id reported: 160794467; UID 10367; state: ENABLED 04-20 12:30:08.162 16311 16311 I TodoApplication: Scheduling task list reload 04-20 12:30:08.165 16311 16311 D MyAppWidgetProvider: cleaning up widget configuration prefName:18 04-20 12:30:08.168 16311 16311 W MyAppWidgetProvider: File not deleted: /data/user/0/nl.mpcjanssen.todotxtholo/files/../shared_prefs/18.xml
@bshanks, that's an unrelated issue. I know a fix for it.
Thanks! Yesterday I ran a debug build based on 6b39dc695dc8e6ca8ed0908ab3ba556a0fcf3ad4 (with modifications only to disable LeakCanary, and to add a Dropbox API key). I had to manually choose the option to log out of dropbox after installing it (and then to re-sign in to Dropbox), but after that it worked fine and ran for 12 hours (overnight, that is) without prompting for reauthentication when I used it again in the morning. I ran it with full access (rather than app folder access). I'll continue running that version for now.
@bshanks latest versions at https://mpcjanssen.nl/artifacts/master/ also allow creating a widget.
Thanks, i installed it. It works so far, and i will report back if i notice any problems.
Confirming that Dropbox is now working as well as widget. I did have to log out of Dropbox after installing, then log back in. Android 12. Using latest release.
Thank you Marc!
@Grydpype thanks to excellent support from Dropbox I was able to access the existing apps for Simpletask again, so in the next version the old foldername (Simpletask) will be used again.
Thanks for your diligent work; I appreciate it. Incidentally, I tried sending Simpletask some money via the built-in function in the menu and discovered that apparently Google is currently not hosting any version of Simpletask? Or does this not work only with the Dropbox-version?
@Grydpype I have removed all the Simpletask applications from Google Play (including the donate application). I will remove the donate option from the settings. If you want to donate you can use paypal: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=mpc%2ejanssen%40gmail%2ecom&lc=NL&item_name=mpcjanssen%2enl&item_number=Simpletask¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted
Seems the dropbox issue has been solved. For any other issues with the new dropbox version please log a new issue.
I'm using SimpleTask since Drobpox dropped API v1 and made many other todo.txt apps unable to sync. IIRC my current phone came with Android 10 then upgraded to 11. I didn't realize the app was not in Play Store anymore, because it continued working until weeks ago.
What happens is that SimpleTask loses the Drobpox authentication, over and over again. Sometimes I authenticate, the task list seems to be loaded, but before I have time for anything there's a "toast" with round edges in the bottom edge of the screen saying something like "Unable to load todo.txt", and SimpleTask sends me again to the screen where I can authenticate with Dropbox, authenticate but with an app folder, or get debug info. It's often instantaneous like that, but sometimes it takes minutes or several hours.
When I tried to check whether SimpleTask was in Play Store's update queue, I found out about the app being removed from the store, and the trouble with the new storage API. Following a link in this repo's README.md, I installed SimpleTask 10.9.3, but the issue remained.
I'm not sure whether it's a problem with SimpleTask, Dropbox, or even my hardware.
This is the debug info, after an instantaneous loss of authentication.