nextcloud / nextcloud/deck

Full crash on Android App Version: 1.24.7

Open
#7,781 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
JavaScript
Stars
1.4k
Forks
354
Avg merge
1d 10h
Merged PRs (30d)
43

Description

I am new to this big reporting; If i need to provide more info, please let me know
*

  • Please search the existing issues first, it's likely that your issue was already reported or even fixed.
    I did search but have not found an issue which seemed appropriate.

  • The issues in other components should be reported in their respective repositories: You will find them in our GitHub Organization (https://github.com/nextcloud/)
    It's a crash in the Deck Android app

I have installed Decks only yesterday. Today I added a new board and added items/cards for the first time, using a browser on a pc.
When I later opened Deck on my android it immediately crashed.
I can now open the app, but it does not show any of the items I added through the browser earlier.

Describe the bug
The crash report the app I should share here is:

Full Crash:

App Version: 1.24.7
App Version Code: 1024007
App Flavor: fdroid

Files App Version Code: 330000190 (PROD)

---

OS Version: 5.15.180-android13-3-32001549(A266BXXS8BZB6)
OS API Level: 36
Device: a26x
Manufacturer: samsung
Model (and Product): SM-A266B (a26xeea)

---

android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: Board.accountId, Board.id (code 2067 SQLITE_CONSTRAINT_UNIQUE[2067])
	at android.database.sqlite.SQLiteConnection.nativeExecute(Native Method)
	at android.database.sqlite.SQLiteConnection.execute(SQLiteConnection.java:1074)
	at android.database.sqlite.SQLiteSession.execute(SQLiteSession.java:656)
	at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:47)
	at androidx.sqlite.db.framework.FrameworkSQLiteStatement.execute(FrameworkSQLiteStatement.android.kt:30)
	at androidx.sqlite.driver.SupportSQLiteStatement$OtherSQLiteStatement.step(SupportSQLiteStatement.android.kt:588)
	at androidx.room.EntityInsertAdapter.insertAndReturnId(EntityInsertAdapter.kt:107)
	at it.niedermann.nextcloud.deck.database.dao.BoardDao_Impl.lambda$insert$0(BoardDao_Impl.java:211)
	at it.niedermann.nextcloud.deck.database.dao.BoardDao_Impl.$r8$lambda$n6jhUriVNptB3FIJGUVAOubrZLA(Unknown Source:0)
	at it.niedermann.nextcloud.deck.database.dao.BoardDao_Impl$$ExternalSyntheticLambda12.invoke(D8$$SyntheticClass:0)
	at androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1$1$invokeSuspend$$inlined$internalPerform$1$1.invokeSuspend(DBUtil.kt:61)
	at androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1$1$invokeSuspend$$inlined$internalPerform$1$1.invoke(Unknown Source:8)
	at androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1$1$invokeSuspend$$inlined$internalPerform$1$1.invoke(Unknown Source:4)
	at androidx.room.coroutines.PassthroughConnection.transaction(PassthroughConnectionPool.kt:127)
	at androidx.room.coroutines.PassthroughConnection.access$transaction(PassthroughConnectionPool.kt:77)
	at androidx.room.coroutines.PassthroughConnection$withTransaction$2.invokeSuspend(PassthroughConnectionPool.kt:103)
	at androidx.room.coroutines.PassthroughConnection$withTransaction$2.invoke(Unknown Source:8)
	at androidx.room.coroutines.PassthroughConnection$withTransaction$2.invoke(Unknown Source:2)
	at androidx.room.RoomDatabaseKt__RoomDatabase_androidKt.compatTransactionCoroutineExecute(RoomDatabase.android.kt:2187)
	at androidx.room.RoomDatabaseKt.compatTransactionCoroutineExecute(Unknown Source:1)
	at androidx.room.RoomDatabase$createConnectionManager$3.invoke(RoomDatabase.android.kt:338)
	at androidx.room.RoomDatabase$createConnectionManager$3.invoke(RoomDatabase.android.kt:338)
	at androidx.room.coroutines.PassthroughConnection.withTransaction(PassthroughConnectionPool.kt:103)
	at androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1$1$invokeSuspend$$inlined$internalPerform$1.invokeSuspend(DBUtil.kt:59)
	at androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1$1$invokeSuspend$$inlined$internalPerform$1.invoke(Unknown Source:8)
	at androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1$1$invokeSuspend$$inlined$internalPerform$1.invoke(Unknown Source:4)
	at androidx.room.coroutines.PassthroughConnectionPool$useConnection$2.invokeSuspend(PassthroughConnectionPool.kt:59)
	at androidx.room.coroutines.PassthroughConnectionPool$useConnection$2.invoke(Unknown Source:8)
	at androidx.room.coroutines.PassthroughConnectionPool$useConnection$2.invoke(Unknown Source:4)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:42)
	at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:164)
	at kotlinx.coroutines.BuildersKt.withContext(Unknown Source:1)
	at androidx.room.coroutines.PassthroughConnectionPool.useConnection(PassthroughConnectionPool.kt:59)
	at androidx.room.RoomConnectionManager.useConnection(RoomConnectionManager.android.kt:138)
	at androidx.room.RoomDatabase.useConnection(RoomDatabase.android.kt:619)
	at androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1$1.invokeSuspend(DBUtil.android.kt:260)
	at androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1$1.invoke(Unknown Source:8)
	at androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1$1.invoke(Unknown Source:4)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:42)
	at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:156)
	at kotlinx.coroutines.BuildersKt.withContext(Unknown Source:1)
	at androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1.invokeSuspend(DBUtil.android.kt:72)
	at androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1.invoke(Unknown Source:8)
	at androidx.room.util.DBUtil__DBUtil_androidKt$performBlocking$1.invoke(Unknown Source:4)
	at androidx.room.coroutines.RunBlockingUninterruptible_androidKt$runBlockingUninterruptible$1$1.invokeSuspend(RunBlockingUninterruptible.android.kt:52)
	at androidx.room.coroutines.RunBlockingUninterruptible_androidKt$runBlockingUninterruptible$1$1.invoke(Unknown Source:8)
	at androidx.room.coroutines.RunBlockingUninterruptible_androidKt$runBlockingUninterruptible$1$1.invoke(Unknown Source:4)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startCoroutineUndispatched(Undispatched.kt:20)
	at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:360)
	at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:124)
	at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:52)
	at kotlinx.coroutines.BuildersKt.launch(Unknown Source:1)
	at androidx.room.coroutines.RunBlockingUninterruptible_androidKt$runBlockingUninterruptible$1.invokeSuspend(RunBlockingUninterruptible.android.kt:51)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:34)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:101)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:263)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:95)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:69)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source:1)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:47)
	at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source:1)
	at androidx.room.coroutines.RunBlockingUninterruptible_androidKt.runBlockingUninterruptible(RunBlockingUninterruptible.android.kt:45)
	at androidx.room.util.DBUtil__DBUtil_androidKt.performBlocking(DBUtil.android.kt:71)
	at androidx.room.util.DBUtil.performBlocking(Unknown Source:1)
	at it.niedermann.nextcloud.deck.database.dao.BoardDao_Impl.insert(BoardDao_Impl.java:210)
	at it.niedermann.nextcloud.deck.database.dao.BoardDao_Impl.insert(BoardDao_Impl.java:36)
	at it.niedermann.nextcloud.deck.database.DataBaseAdapter.createBoardDirectly(DataBaseAdapter.java:659)
	at it.niedermann.nextcloud.deck.remote.helpers.providers.BoardDataProvider.createInDB(BoardDataProvider.java:141)
	at it.niedermann.nextcloud.deck.remote.helpers.providers.BoardDataProvider.createInDB(BoardDataProvider.java:36)
	at it.niedermann.nextcloud.deck.remote.helpers.SyncHelper$1.onResponse(SyncHelper.java:79)
	at it.niedermann.nextcloud.deck.remote.helpers.SyncHelper$1.onResponse(SyncHelper.java:61)
	at it.niedermann.nextcloud.deck.remote.helpers.providers.BoardDataProvider$1.onResponse(BoardDataProvider.java:82)
	at it.niedermann.nextcloud.deck.remote.helpers.providers.BoardDataProvider$1.onResponse(BoardDataProvider.java:62)
	at it.niedermann.nextcloud.deck.remote.api.RequestHelper$ResponseConsumer.onResponse(RequestHelper.java:84)
	at com.nextcloud.android.sso.helper.Retrofit2Helper$1.lambda$enqueue$0(Retrofit2Helper.java:71)
	at com.nextcloud.android.sso.helper.Retrofit2Helper$1.$r8$lambda$lvTGXWzn448UkBzanOoTybLr_2w(Unknown Source:0)
	at com.nextcloud.android.sso.helper.Retrofit2Helper$1$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
	at java.lang.Thread.run(Thread.java:1564)

To Reproduce
It only crashed once, but in the apps I do see the items that I added the the board I added.
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Client details:

  • Android 16
  • Device: Samsung a26 g5
Server details

Operating system:
Linux 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr 3 17:24:16 BST 2023 aarch64 GNU/Linux

Web server:
Apache2
Database:
Mariadb
PHP version:
8.4
Nextcloud version: (see Nextcloud admin page)
Hub 26 Winter](https://nextcloud.com/) (33.0.0)

Where did you install Nextcloud from:
I don't remember, sorry; it's a long time ago.

Signing status:

Login as admin user into your Nextcloud and access
http://example.com/index.php/settings/integrity/failed
paste the results here.

https://<sitename>/index.php/settings/integrity/failed``` gives
No errors have been found.

**List of activated apps:**

If you have access to your command line run e.g.:
sudo -u www-data php occ app:list
from within your Nextcloud installation folder

nabled:
  - bruteforcesettings: 6.0.0-dev.0
  - calendar: 6.2.1
  - cloud_federation_api: 1.17.0
  - contacts: 8.4.1
  - dashboard: 7.13.0
  - dav: 1.36.0
  - deck: 1.17.0
  - federatedfilesharing: 1.23.0
  - files: 2.5.0
  - files_downloadlimit: 5.1.0-dev.0
  - files_external: 1.25.1
  - files_sharing: 1.25.2
  - files_trashbin: 1.23.0
  - gpoddersync: 3.16.0
  - logreader: 6.0.0
  - lookup_server_connector: 1.21.0
  - mail: 5.7.4
  - music: 3.0.0
  - notes: 4.13.1
  - notifications: 6.0.0
  - notify_push: 1.3.1
  - oauth2: 1.21.0
  - ocs_api_viewer: 1.0.11
  - oidc: 1.16.2
  - password_policy: 5.0.0-dev.0
  - photos: 6.0.0-dev.0
  - previewgenerator: 5.13.0
  - privacy: 5.0.0-dev.0
  - profile: 1.2.0
  - provisioning_api: 1.23.0
  - repod: 4.0.0
  - serverinfo: 5.0.0-dev.0
  - settings: 1.16.0
  - spreed: 23.0.2
  - suspicious_login: 11.0.0-dev.0
  - theming: 2.8.0
  - twofactor_backupcodes: 1.22.0
  - twofactor_nextcloud_notification: 7.0.0
  - twofactor_totp: 15.0.0-dev.0
  - updatenotification: 1.23.0
  - viewer: 6.0.0-dev.0
  - webhook_listeners: 1.5.0
  - welcome: 1.4.0
  - workflowengine: 2.15.0
Disabled:
  - activity: 6.0.0-dev.0 (installed 2.17.0)
  - admin_audit: 1.23.0
  - app_api: 33.0.0 (installed 32.0.0)
  - circles: 33.0.0 (installed 25.0.0)
  - comments: 1.23.0 (installed 1.19.0)
  - contactsinteraction: 1.14.1 (installed 1.6.0)
  - encryption: 2.21.0
  - federation: 1.23.0 (installed 1.15.0)
  - files_pdfviewer: 6.0.0-dev.0 (installed 2.10.0)
  - files_reminders: 1.6.0 (installed 1.2.0)
  - files_versions: 1.26.0 (installed 1.18.0)
  - firstrunwizard: 6.0.0-dev.0 (installed 2.14.0)
  - nextcloud_announcements: 5.0.0 (installed 4.0.0-dev.0)
  - recommendations: 6.0.0-dev.0 (installed 2.1.0)
  - related_resources: 4.0.0-dev.0 (installed 1.0.4)
  - sharebymail: 1.23.0 (installed 1.15.0)
  - support: 5.0.0 (installed 1.8.0)
  - survey_client: 5.0.0-dev.0 (installed 1.13.0)
  - systemtags: 1.23.0 (installed 1.15.0)
  - text: 7.0.0-dev.3 (installed 3.6.0)
  - user_ldap: 1.24.0
  - user_status: 1.13.0 (installed 1.8.1)
  - weather_status: 1.13.0 (installed 1.8.0)

**Nextcloud configuration:**

If you have access to your command line run e.g.:
sudo -u www-data php occ config:list system
from within your Nextcloud installation folder
sudo -u www-data php /var/www/nextcloud/occ config:list system
{
"system": {
"instanceid": "REMOVED SENSITIVE VALUE",
"passwordsalt": "REMOVED SENSITIVE VALUE",
"secret": "REMOVED SENSITIVE VALUE",
"trusted_domains": [
"192.168.178.48",
"localhost",
"hutbers.nl"
],
"datadirectory": "REMOVED SENSITIVE VALUE",
"dbtype": "mysql",
"version": "33.0.0.16",
"overwrite.cli.url": "https://hutbers.nl/nextcloud",
"dbname": "REMOVED SENSITIVE VALUE",
"dbhost": "REMOVED SENSITIVE VALUE",
"dbport": "",
"dbtableprefix": "oc_",
"mysql.utf8mb4": true,
"dbuser": "REMOVED SENSITIVE VALUE",
"dbpassword": "REMOVED SENSITIVE VALUE",
"installed": true,
"default_phone_region": "NL",
"mail_from_address": "REMOVED SENSITIVE VALUE",
"mail_smtpmode": "smtp",
"mail_sendmailmode": "smtp",
"mail_domain": "REMOVED SENSITIVE VALUE",
"mail_smtpsecure": "ssl",
"mail_smtphost": "REMOVED SENSITIVE VALUE",
"mail_smtpport": "465",
"mail_smtpauth": 1,
"mail_smtpname": "REMOVED SENSITIVE VALUE",
"mail_smtppassword": "REMOVED SENSITIVE VALUE",
"mail_smtpauthtype": "PLAIN",
"maintenance_window_start": 1,
"maintenance": false,
"memcache.local": "\OC\Memcache\APCu",
"memcache.distributed": "\OC\Memcache\Redis",
"memcache.locking": "\OC\Memcache\Redis",
"redis": {
"host": "REMOVED SENSITIVE VALUE",
"port": 0
},
"theme": "",
"loglevel": "2",
"enforce_theme": "",
"enabled.app.previews": true,
"app_install_overwrite": [
"music"
],
"preview_max_x": 2048,
"preview_max_y": 2048,
"preview_max_scale_factor": 1,
"enable_previews": true,
"enabledPreviewProviders": {
"0": "OC\Preview\Imaginary",
"1": "OC\Preview\OpenDocument",
"2": "OC\Preview\ImaginaryPDF",
"3": "OC\Preview\MSOfficeDoc",
"4": "OC\Preview\MarkDown",
"6": "OC\Preview\MP4",
"7": "OC\Preview\AVI",
"8": "OC\Preview\Movie",
"9": "OC\Preview\MKV",
"10": "OC\Preview\XCF"
},
"preview_imaginary_url": "REMOVED SENSITIVE VALUE",
"preview_concurrency_all": 20,
"preview_concurrency_new": 4
}
}

or

Insert your config.php content here
Make sure to remove all sensitive content such as passwords. (e.g. database password, passwordsalt, secret, smtp password, …)


**Are you using an external user-backend, if yes which one:** LDAP/ActiveDirectory/Webdav/...
No.
</details>

<details>
<summary>Logs</summary>

#### Nextcloud log (data/nextcloud.log)

Insert your Nextcloud log here

It's a 40 Mb log - I can't copy that here surely?

#### Browser log

Insert your browser log here, this could for example include:

I can' t find these logs, sorry.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with BoardDataProvider.createInDB and SyncHelper, then follow the stack trace through DataBaseAdapter.createBoardDirectly and BoardDao.insert. Reproduce the sync scenario if possible and inspect the UNIQUE constraint on Board.accountId, Board.id; done means the Android app no longer crashes when syncing the board created through the web interface.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, kotlin, sqlite
Domain
databases, mobile
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.