mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-19 11:39:42 +01:00
Compare commits
32 Commits
alpha-2200
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
0eebf8b2d0 | ||
|
95f8b08a19 | ||
|
2a7359c1e9 | ||
|
86bfaa8657 | ||
|
8c066eb521 | ||
|
9e08af3306 | ||
|
95f7a1e312 | ||
|
73271018f5 | ||
|
7111109ac0 | ||
|
e3c83823e6 | ||
|
3b11a90aac | ||
|
bc29c67269 | ||
|
4a93551ef9 | ||
|
d0ff4320a8 | ||
|
20b70c2728 | ||
|
6aab2e27cd | ||
|
a34ad80a90 | ||
|
5a22f27b64 | ||
|
776ba77c3a | ||
|
3cf01d9123 | ||
|
2ab9f168d2 | ||
|
038a30dcca | ||
|
ddc40537d5 | ||
|
bd23a05a88 | ||
|
76f1e1c005 | ||
|
40c9816827 | ||
|
a7f742931e | ||
|
a361240692 | ||
|
fe6897baf4 | ||
|
18578521cf | ||
|
71c8719f88 | ||
|
2afa9ca80a |
10
.drone.yml
10
.drone.yml
@ -8,7 +8,7 @@ name: generic
|
||||
|
||||
steps:
|
||||
- name: generic
|
||||
image: ghcr.io/nextcloud/continuous-integration-android8:3
|
||||
image: ghcr.io/nextcloud/continuous-integration-android8:4
|
||||
commands:
|
||||
- ./gradlew --console=plain assembleGeneric
|
||||
|
||||
@ -27,7 +27,7 @@ name: gplay
|
||||
|
||||
steps:
|
||||
- name: gplay
|
||||
image: ghcr.io/nextcloud/continuous-integration-android8:3
|
||||
image: ghcr.io/nextcloud/continuous-integration-android8:4
|
||||
commands:
|
||||
- ./gradlew --console=plain assembleGplay
|
||||
|
||||
@ -46,7 +46,7 @@ name: tests
|
||||
|
||||
steps:
|
||||
- name: all
|
||||
image: ghcr.io/nextcloud/continuous-integration-android8:3
|
||||
image: ghcr.io/nextcloud/continuous-integration-android8:4
|
||||
privileged: true
|
||||
commands:
|
||||
- emulator -avd android -no-snapshot -gpu swiftshader_indirect -no-window -no-audio -skin 500x833 &
|
||||
@ -81,4 +81,6 @@ trigger:
|
||||
- pull_request
|
||||
---
|
||||
kind: signature
|
||||
hmac: cdce3f7eea46ef85c0223f62f66d1fe53d7dad007ef095c9f70fa063450d8c75
|
||||
hmac: cf0c19e54fa45d1ee226f5f05202a32329b90aaf46711ea073c566a4c4a8a6c5
|
||||
|
||||
...
|
||||
|
2
.github/workflows/analysis.yml
vendored
2
.github/workflows/analysis.yml
vendored
@ -29,7 +29,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Disabled on forks
|
||||
if: ${{ github.event.pull_request.head.repo.full_name != github.repository }}
|
||||
if: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository }}
|
||||
run: |
|
||||
echo 'Can not analyze PRs from forks'
|
||||
exit 1
|
||||
|
2
.github/workflows/assembleFlavors.yml
vendored
2
.github/workflows/assembleFlavors.yml
vendored
@ -34,7 +34,7 @@ jobs:
|
||||
java-version: 17
|
||||
|
||||
- name: Gradle validate
|
||||
uses: gradle/actions/wrapper-validation@8379f6a1328ee0e06e2bb424dadb7b159856a326 # v4.4.0
|
||||
uses: gradle/actions/wrapper-validation@ac638b010cf58a27ee6c972d7336334ccaf61c96 # v4.4.1
|
||||
|
||||
- name: Build ${{ matrix.flavor }}
|
||||
run: |
|
||||
|
4
.github/workflows/codeql.yml
vendored
4
.github/workflows/codeql.yml
vendored
@ -43,7 +43,7 @@ jobs:
|
||||
with:
|
||||
swap-size-gb: 10
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@fca7ace96b7d713c7035871441bd52efbe39e27e # v3.28.19
|
||||
uses: github/codeql-action/init@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
- name: Set up JDK 17
|
||||
@ -57,4 +57,4 @@ jobs:
|
||||
echo "org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError" > "$HOME/.gradle/gradle.properties"
|
||||
./gradlew assembleDebug
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@fca7ace96b7d713c7035871441bd52efbe39e27e # v3.28.19
|
||||
uses: github/codeql-action/analyze@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
|
||||
|
2
.github/workflows/pr-feedback.yml
vendored
2
.github/workflows/pr-feedback.yml
vendored
@ -36,7 +36,7 @@ jobs:
|
||||
blocklist=$(curl https://raw.githubusercontent.com/nextcloud/.github/master/non-community-usernames.txt | paste -s -d, -)
|
||||
echo "blocklist=$blocklist" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- uses: nextcloud/pr-feedback-action@1883b38a033fb16f576875e0cf45f98b857655c4 # main
|
||||
- uses: nextcloud/pr-feedback-action@f0cab224dea8e1f282f9451de322f323c78fc7a5 # main
|
||||
with:
|
||||
feedback-message: |
|
||||
Hello there,
|
||||
|
2
.github/workflows/scorecard.yml
vendored
2
.github/workflows/scorecard.yml
vendored
@ -42,6 +42,6 @@ jobs:
|
||||
|
||||
# Upload the results to GitHub's code scanning dashboard.
|
||||
- name: "Upload to code-scanning"
|
||||
uses: github/codeql-action/upload-sarif@fca7ace96b7d713c7035871441bd52efbe39e27e # v3.28.19
|
||||
uses: github/codeql-action/upload-sarif@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
|
||||
with:
|
||||
sarif_file: results.sarif
|
||||
|
2
.github/workflows/unit-tests.yml
vendored
2
.github/workflows/unit-tests.yml
vendored
@ -33,7 +33,7 @@ jobs:
|
||||
java-version: 17
|
||||
|
||||
- name: Setup Gradle
|
||||
uses: gradle/actions/setup-gradle@8379f6a1328ee0e06e2bb424dadb7b159856a326 # v4.4.0
|
||||
uses: gradle/actions/setup-gradle@ac638b010cf58a27ee6c972d7336334ccaf61c96 # v4.4.1
|
||||
|
||||
- name: Run unit tests with coverage
|
||||
run: ./gradlew testGplayDebugUnit
|
||||
|
@ -15,7 +15,7 @@ import com.github.spotbugs.snom.SpotBugsTask
|
||||
plugins {
|
||||
id "org.jetbrains.kotlin.plugin.compose" version "2.1.21"
|
||||
id "org.jetbrains.kotlin.kapt"
|
||||
id 'com.google.devtools.ksp' version '2.1.21-2.0.1'
|
||||
id 'com.google.devtools.ksp' version '2.1.21-2.0.2'
|
||||
}
|
||||
|
||||
apply plugin: 'com.android.application'
|
||||
@ -39,8 +39,8 @@ android {
|
||||
|
||||
// mayor.minor.hotfix.increment (for increment: 01-50=Alpha / 51-89=RC / 90-99=stable)
|
||||
// xx .xxx .xx .xx
|
||||
versionCode 220000005
|
||||
versionName "22.0.0 Alpha 05"
|
||||
versionCode 220000006
|
||||
versionName "22.0.0 Alpha 06"
|
||||
|
||||
flavorDimensions "default"
|
||||
renderscriptTargetApi 19
|
||||
|
@ -0,0 +1,730 @@
|
||||
{
|
||||
"formatVersion": 1,
|
||||
"database": {
|
||||
"version": 17,
|
||||
"identityHash": "5bc4247e179307faa995552da5d34324",
|
||||
"entities": [
|
||||
{
|
||||
"tableName": "User",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `userId` TEXT, `username` TEXT, `baseUrl` TEXT, `token` TEXT, `displayName` TEXT, `pushConfigurationState` TEXT, `capabilities` TEXT, `serverVersion` TEXT DEFAULT '', `clientCertificate` TEXT, `externalSignalingServer` TEXT, `current` INTEGER NOT NULL, `scheduledForDeletion` INTEGER NOT NULL)",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "userId",
|
||||
"columnName": "userId",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "username",
|
||||
"columnName": "username",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "baseUrl",
|
||||
"columnName": "baseUrl",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "token",
|
||||
"columnName": "token",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "displayName",
|
||||
"columnName": "displayName",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pushConfigurationState",
|
||||
"columnName": "pushConfigurationState",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "capabilities",
|
||||
"columnName": "capabilities",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "serverVersion",
|
||||
"columnName": "serverVersion",
|
||||
"affinity": "TEXT",
|
||||
"defaultValue": "''"
|
||||
},
|
||||
{
|
||||
"fieldPath": "clientCertificate",
|
||||
"columnName": "clientCertificate",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "externalSignalingServer",
|
||||
"columnName": "externalSignalingServer",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "current",
|
||||
"columnName": "current",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "scheduledForDeletion",
|
||||
"columnName": "scheduledForDeletion",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": true,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "ArbitraryStorage",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`accountIdentifier` INTEGER NOT NULL, `key` TEXT NOT NULL, `object` TEXT, `value` TEXT, PRIMARY KEY(`accountIdentifier`, `key`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "accountIdentifier",
|
||||
"columnName": "accountIdentifier",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "key",
|
||||
"columnName": "key",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "storageObject",
|
||||
"columnName": "object",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "value",
|
||||
"columnName": "value",
|
||||
"affinity": "TEXT"
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"accountIdentifier",
|
||||
"key"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "Conversations",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`internalId` TEXT NOT NULL, `accountId` INTEGER NOT NULL, `token` TEXT NOT NULL, `displayName` TEXT NOT NULL, `actorId` TEXT NOT NULL, `actorType` TEXT NOT NULL, `avatarVersion` TEXT NOT NULL, `callFlag` INTEGER NOT NULL, `callRecording` INTEGER NOT NULL, `callStartTime` INTEGER NOT NULL, `canDeleteConversation` INTEGER NOT NULL, `canLeaveConversation` INTEGER NOT NULL, `canStartCall` INTEGER NOT NULL, `description` TEXT NOT NULL, `hasCall` INTEGER NOT NULL, `hasPassword` INTEGER NOT NULL, `isCustomAvatar` INTEGER NOT NULL, `isFavorite` INTEGER NOT NULL, `lastActivity` INTEGER NOT NULL, `lastCommonReadMessage` INTEGER NOT NULL, `lastMessage` TEXT, `lastPing` INTEGER NOT NULL, `lastReadMessage` INTEGER NOT NULL, `lobbyState` TEXT NOT NULL, `lobbyTimer` INTEGER NOT NULL, `messageExpiration` INTEGER NOT NULL, `name` TEXT NOT NULL, `notificationCalls` INTEGER NOT NULL, `notificationLevel` TEXT NOT NULL, `objectType` TEXT NOT NULL, `objectId` TEXT NOT NULL, `participantType` TEXT NOT NULL, `permissions` INTEGER NOT NULL, `readOnly` TEXT NOT NULL, `recordingConsent` INTEGER NOT NULL, `remoteServer` TEXT, `remoteToken` TEXT, `sessionId` TEXT NOT NULL, `status` TEXT, `statusClearAt` INTEGER, `statusIcon` TEXT, `statusMessage` TEXT, `type` TEXT NOT NULL, `unreadMention` INTEGER NOT NULL, `unreadMentionDirect` INTEGER NOT NULL, `unreadMessages` INTEGER NOT NULL, `hasArchived` INTEGER NOT NULL, `hasSensitive` INTEGER NOT NULL, `hasImportant` INTEGER NOT NULL, PRIMARY KEY(`internalId`), FOREIGN KEY(`accountId`) REFERENCES `User`(`id`) ON UPDATE CASCADE ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "internalId",
|
||||
"columnName": "internalId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "accountId",
|
||||
"columnName": "accountId",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "token",
|
||||
"columnName": "token",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "displayName",
|
||||
"columnName": "displayName",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "actorId",
|
||||
"columnName": "actorId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "actorType",
|
||||
"columnName": "actorType",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "avatarVersion",
|
||||
"columnName": "avatarVersion",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "callFlag",
|
||||
"columnName": "callFlag",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "callRecording",
|
||||
"columnName": "callRecording",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "callStartTime",
|
||||
"columnName": "callStartTime",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "canDeleteConversation",
|
||||
"columnName": "canDeleteConversation",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "canLeaveConversation",
|
||||
"columnName": "canLeaveConversation",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "canStartCall",
|
||||
"columnName": "canStartCall",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "description",
|
||||
"columnName": "description",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "hasCall",
|
||||
"columnName": "hasCall",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "hasPassword",
|
||||
"columnName": "hasPassword",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "hasCustomAvatar",
|
||||
"columnName": "isCustomAvatar",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "favorite",
|
||||
"columnName": "isFavorite",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastActivity",
|
||||
"columnName": "lastActivity",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastCommonReadMessage",
|
||||
"columnName": "lastCommonReadMessage",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastMessage",
|
||||
"columnName": "lastMessage",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastPing",
|
||||
"columnName": "lastPing",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastReadMessage",
|
||||
"columnName": "lastReadMessage",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lobbyState",
|
||||
"columnName": "lobbyState",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lobbyTimer",
|
||||
"columnName": "lobbyTimer",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "messageExpiration",
|
||||
"columnName": "messageExpiration",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "name",
|
||||
"columnName": "name",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "notificationCalls",
|
||||
"columnName": "notificationCalls",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "notificationLevel",
|
||||
"columnName": "notificationLevel",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "objectType",
|
||||
"columnName": "objectType",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "objectId",
|
||||
"columnName": "objectId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "participantType",
|
||||
"columnName": "participantType",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "permissions",
|
||||
"columnName": "permissions",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "conversationReadOnlyState",
|
||||
"columnName": "readOnly",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "recordingConsentRequired",
|
||||
"columnName": "recordingConsent",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "remoteServer",
|
||||
"columnName": "remoteServer",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "remoteToken",
|
||||
"columnName": "remoteToken",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sessionId",
|
||||
"columnName": "sessionId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "status",
|
||||
"columnName": "status",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "statusClearAt",
|
||||
"columnName": "statusClearAt",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "statusIcon",
|
||||
"columnName": "statusIcon",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "statusMessage",
|
||||
"columnName": "statusMessage",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "type",
|
||||
"columnName": "type",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "unreadMention",
|
||||
"columnName": "unreadMention",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "unreadMentionDirect",
|
||||
"columnName": "unreadMentionDirect",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "unreadMessages",
|
||||
"columnName": "unreadMessages",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "hasArchived",
|
||||
"columnName": "hasArchived",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "hasSensitive",
|
||||
"columnName": "hasSensitive",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "hasImportant",
|
||||
"columnName": "hasImportant",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"internalId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_Conversations_accountId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"accountId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_Conversations_accountId` ON `${TABLE_NAME}` (`accountId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "User",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "CASCADE",
|
||||
"columns": [
|
||||
"accountId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "ChatMessages",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`internalId` TEXT NOT NULL, `accountId` INTEGER NOT NULL, `token` TEXT NOT NULL, `id` INTEGER NOT NULL, `internalConversationId` TEXT NOT NULL, `actorDisplayName` TEXT NOT NULL, `message` TEXT NOT NULL, `actorId` TEXT NOT NULL, `actorType` TEXT NOT NULL, `deleted` INTEGER NOT NULL, `expirationTimestamp` INTEGER NOT NULL, `isReplyable` INTEGER NOT NULL, `isTemporary` INTEGER NOT NULL, `lastEditActorDisplayName` TEXT, `lastEditActorId` TEXT, `lastEditActorType` TEXT, `lastEditTimestamp` INTEGER, `markdown` INTEGER, `messageParameters` TEXT, `messageType` TEXT NOT NULL, `parent` INTEGER, `reactions` TEXT, `reactionsSelf` TEXT, `referenceId` TEXT, `sendStatus` TEXT, `silent` INTEGER NOT NULL, `systemMessage` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, PRIMARY KEY(`internalId`), FOREIGN KEY(`internalConversationId`) REFERENCES `Conversations`(`internalId`) ON UPDATE CASCADE ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "internalId",
|
||||
"columnName": "internalId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "accountId",
|
||||
"columnName": "accountId",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "token",
|
||||
"columnName": "token",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "internalConversationId",
|
||||
"columnName": "internalConversationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "actorDisplayName",
|
||||
"columnName": "actorDisplayName",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "message",
|
||||
"columnName": "message",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "actorId",
|
||||
"columnName": "actorId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "actorType",
|
||||
"columnName": "actorType",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "deleted",
|
||||
"columnName": "deleted",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "expirationTimestamp",
|
||||
"columnName": "expirationTimestamp",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "replyable",
|
||||
"columnName": "isReplyable",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isTemporary",
|
||||
"columnName": "isTemporary",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastEditActorDisplayName",
|
||||
"columnName": "lastEditActorDisplayName",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastEditActorId",
|
||||
"columnName": "lastEditActorId",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastEditActorType",
|
||||
"columnName": "lastEditActorType",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastEditTimestamp",
|
||||
"columnName": "lastEditTimestamp",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "renderMarkdown",
|
||||
"columnName": "markdown",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "messageParameters",
|
||||
"columnName": "messageParameters",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "messageType",
|
||||
"columnName": "messageType",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "parentMessageId",
|
||||
"columnName": "parent",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "reactions",
|
||||
"columnName": "reactions",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "reactionsSelf",
|
||||
"columnName": "reactionsSelf",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "referenceId",
|
||||
"columnName": "referenceId",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sendStatus",
|
||||
"columnName": "sendStatus",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "silent",
|
||||
"columnName": "silent",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "systemMessageType",
|
||||
"columnName": "systemMessage",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "timestamp",
|
||||
"columnName": "timestamp",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"internalId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_ChatMessages_internalId",
|
||||
"unique": true,
|
||||
"columnNames": [
|
||||
"internalId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_ChatMessages_internalId` ON `${TABLE_NAME}` (`internalId`)"
|
||||
},
|
||||
{
|
||||
"name": "index_ChatMessages_internalConversationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"internalConversationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_ChatMessages_internalConversationId` ON `${TABLE_NAME}` (`internalConversationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "Conversations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "CASCADE",
|
||||
"columns": [
|
||||
"internalConversationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"internalId"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "ChatBlocks",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `internalConversationId` TEXT NOT NULL, `accountId` INTEGER, `token` TEXT, `oldestMessageId` INTEGER NOT NULL, `newestMessageId` INTEGER NOT NULL, `hasHistory` INTEGER NOT NULL, FOREIGN KEY(`internalConversationId`) REFERENCES `Conversations`(`internalId`) ON UPDATE CASCADE ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "internalConversationId",
|
||||
"columnName": "internalConversationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "accountId",
|
||||
"columnName": "accountId",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "token",
|
||||
"columnName": "token",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "oldestMessageId",
|
||||
"columnName": "oldestMessageId",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "newestMessageId",
|
||||
"columnName": "newestMessageId",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "hasHistory",
|
||||
"columnName": "hasHistory",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": true,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_ChatBlocks_internalConversationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"internalConversationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_ChatBlocks_internalConversationId` ON `${TABLE_NAME}` (`internalConversationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "Conversations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "CASCADE",
|
||||
"columns": [
|
||||
"internalConversationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"internalId"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"setupQueries": [
|
||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '5bc4247e179307faa995552da5d34324')"
|
||||
]
|
||||
}
|
||||
}
|
@ -286,6 +286,7 @@ class WebViewLoginActivity : BaseActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("DiscouragedPrivateApi")
|
||||
@Suppress("Detekt.TooGenericExceptionCaught")
|
||||
override fun onReceivedSslError(view: WebView, handler: SslErrorHandler, error: SslError) {
|
||||
try {
|
||||
|
@ -29,6 +29,7 @@ import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedA
|
||||
import com.nextcloud.talk.chat.ChatActivity
|
||||
import com.nextcloud.talk.chat.data.ChatMessageRepository
|
||||
import com.nextcloud.talk.chat.data.model.ChatMessage
|
||||
import com.nextcloud.talk.data.database.model.SendStatus
|
||||
import com.nextcloud.talk.data.network.NetworkMonitor
|
||||
import com.nextcloud.talk.data.user.model.User
|
||||
import com.nextcloud.talk.databinding.ItemCustomOutcomingTextMessageBinding
|
||||
@ -184,7 +185,7 @@ class OutcomingTextMessageViewHolder(itemView: View) :
|
||||
binding.checkMark.visibility = View.INVISIBLE
|
||||
binding.sendingProgress.visibility = View.GONE
|
||||
|
||||
if (message.sendingFailed) {
|
||||
if (message.sendStatus == SendStatus.FAILED) {
|
||||
updateStatus(R.drawable.baseline_error_outline_24, context.resources?.getString(R.string.nc_message_failed))
|
||||
} else if (message.isTemporary) {
|
||||
updateStatus(R.drawable.baseline_schedule_24, context.resources?.getString(R.string.nc_message_sending))
|
||||
|
@ -6,6 +6,7 @@
|
||||
*/
|
||||
package com.nextcloud.talk.bottomsheet.items
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
@ -65,6 +66,7 @@ internal class ListIconDialogAdapter<IT : ListItemWithImage>(
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("RestrictedApi")
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ListItemViewHolder {
|
||||
val listItemView: View = parent.inflate(dialog.windowContext, R.layout.menu_item_sheet)
|
||||
val viewHolder = ListItemViewHolder(
|
||||
|
@ -16,7 +16,6 @@ package com.nextcloud.talk.chat
|
||||
|
||||
import android.Manifest
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.content.ClipData
|
||||
import android.content.ClipboardManager
|
||||
import android.content.Context
|
||||
@ -363,6 +362,7 @@ class ChatActivity :
|
||||
var startCallFromRoomSwitch: Boolean = false
|
||||
|
||||
var voiceOnly: Boolean = true
|
||||
var focusInput: Boolean = false
|
||||
private lateinit var path: String
|
||||
|
||||
var myFirstMessage: CharSequence? = null
|
||||
@ -546,6 +546,8 @@ class ChatActivity :
|
||||
startCallFromRoomSwitch = extras?.getBoolean(KEY_START_CALL_AFTER_ROOM_SWITCH, false) == true
|
||||
|
||||
voiceOnly = extras?.getBoolean(KEY_CALL_VOICE_ONLY, false) == true
|
||||
|
||||
focusInput = extras?.getBoolean(BundleKeys.KEY_FOCUS_INPUT) == true
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
@ -637,12 +639,17 @@ class ChatActivity :
|
||||
supportFragmentManager.commit {
|
||||
setReorderingAllowed(true) // optimizes out redundant replace operations
|
||||
replace(R.id.fragment_container_activity_chat, messageInputFragment)
|
||||
runOnCommit {
|
||||
if (focusInput) {
|
||||
messageInputFragment.binding.fragmentMessageInputView.requestFocus()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
joinRoomWithPassword()
|
||||
|
||||
if (conversationUser?.userId != "?" &&
|
||||
CapabilitiesUtil.hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.MENTION_FLAG)
|
||||
hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.MENTION_FLAG)
|
||||
) {
|
||||
binding.chatToolbar.setOnClickListener { _ -> showConversationInfoScreen() }
|
||||
}
|
||||
@ -1238,8 +1245,9 @@ class ChatActivity :
|
||||
val deleteNoticeText = binding.conversationDeleteNotice.findViewById<TextView>(R.id.deletion_message)
|
||||
viewThemeUtils.material.themeCardView(binding.conversationDeleteNotice)
|
||||
|
||||
deleteNoticeText.text = String.format(
|
||||
resources.getString(R.string.nc_conversation_auto_delete_notice),
|
||||
deleteNoticeText.text = resources.getQuantityString(
|
||||
R.plurals.nc_conversation_auto_delete_info,
|
||||
retentionPeriod,
|
||||
retentionPeriod
|
||||
)
|
||||
viewThemeUtils.material.colorMaterialButtonPrimaryTonal(
|
||||
@ -2046,7 +2054,7 @@ class ChatActivity :
|
||||
|
||||
private fun shouldShowLobby(): Boolean {
|
||||
if (currentConversation != null) {
|
||||
return CapabilitiesUtil.hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.WEBINARY_LOBBY) &&
|
||||
return hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.WEBINARY_LOBBY) &&
|
||||
currentConversation?.lobbyState == ConversationEnums.LobbyState.LOBBY_STATE_MODERATORS_ONLY &&
|
||||
!ConversationUtils.canModerate(currentConversation!!, spreedCapabilities) &&
|
||||
!participantPermissions.canIgnoreLobby()
|
||||
@ -2302,7 +2310,7 @@ class ChatActivity :
|
||||
}
|
||||
|
||||
private fun executeIfResultOk(result: ActivityResult, onResult: (intent: Intent?) -> Unit) {
|
||||
if (result.resultCode == Activity.RESULT_OK) {
|
||||
if (result.resultCode == RESULT_OK) {
|
||||
onResult(result.data)
|
||||
} else {
|
||||
Log.e(TAG, "resultCode for received intent was != ok")
|
||||
@ -2796,7 +2804,7 @@ class ChatActivity :
|
||||
}
|
||||
|
||||
if (this::spreedCapabilities.isInitialized) {
|
||||
if (CapabilitiesUtil.hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.MESSAGE_EXPIRATION)) {
|
||||
if (hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.MESSAGE_EXPIRATION)) {
|
||||
deleteExpiredMessages()
|
||||
}
|
||||
} else {
|
||||
@ -3064,7 +3072,7 @@ class ChatActivity :
|
||||
super.onPrepareOptionsMenu(menu)
|
||||
|
||||
if (this::spreedCapabilities.isInitialized) {
|
||||
if (CapabilitiesUtil.hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.READ_ONLY_ROOMS)) {
|
||||
if (hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.READ_ONLY_ROOMS)) {
|
||||
checkShowCallButtons()
|
||||
}
|
||||
|
||||
@ -3085,7 +3093,7 @@ class ChatActivity :
|
||||
}.collect()
|
||||
}
|
||||
|
||||
if (CapabilitiesUtil.hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.SILENT_CALL)) {
|
||||
if (hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.SILENT_CALL)) {
|
||||
Handler().post {
|
||||
findViewById<View?>(R.id.conversation_voice_call)?.setOnLongClickListener {
|
||||
showCallButtonMenu(true)
|
||||
@ -3144,6 +3152,7 @@ class ChatActivity :
|
||||
else -> super.onOptionsItemSelected(item)
|
||||
}
|
||||
|
||||
@SuppressLint("InflateParams")
|
||||
private fun showPopupWindow(anchorView: View) {
|
||||
val popupView = layoutInflater.inflate(R.layout.item_event_schedule, null)
|
||||
|
||||
@ -3595,7 +3604,7 @@ class ChatActivity :
|
||||
|
||||
fun copyMessage(message: IMessage?) {
|
||||
val clipboardManager =
|
||||
getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
||||
getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
|
||||
val clipData = ClipData.newPlainText(
|
||||
resources?.getString(R.string.nc_app_product_name),
|
||||
message?.text
|
||||
@ -3909,7 +3918,7 @@ class ChatActivity :
|
||||
val isOlderThanSixHours = message
|
||||
.createdAt
|
||||
.before(Date(System.currentTimeMillis() - AGE_THRESHOLD_FOR_DELETE_MESSAGE))
|
||||
val hasDeleteMessagesUnlimitedCapability = CapabilitiesUtil.hasSpreedFeatureCapability(
|
||||
val hasDeleteMessagesUnlimitedCapability = hasSpreedFeatureCapability(
|
||||
spreedCapabilities,
|
||||
SpreedFeatures.DELETE_MESSAGES_UNLIMITED
|
||||
)
|
||||
@ -3919,7 +3928,7 @@ class ChatActivity :
|
||||
!hasDeleteMessagesUnlimitedCapability && isOlderThanSixHours -> false
|
||||
message.systemMessageType != ChatMessage.SystemMessageType.DUMMY -> false
|
||||
message.isDeleted -> false
|
||||
!CapabilitiesUtil.hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.DELETE_MESSAGES) -> false
|
||||
!hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.DELETE_MESSAGES) -> false
|
||||
!participantPermissions.hasChatPermission() -> false
|
||||
hasDeleteMessagesUnlimitedCapability -> true
|
||||
else -> true
|
||||
|
@ -200,7 +200,7 @@ class MessageInputFragment : Fragment() {
|
||||
val connectionGained = (!wasOnline && isOnline)
|
||||
Log.d(TAG, "isOnline: $isOnline\nwasOnline: $wasOnline\nconnectionGained: $connectionGained")
|
||||
if (connectionGained) {
|
||||
chatActivity.messageInputViewModel.sendTempMessages(
|
||||
chatActivity.messageInputViewModel.sendUnsentMessages(
|
||||
chatActivity.conversationUser!!.getCredentials(),
|
||||
ApiUtils.getUrlForChat(
|
||||
chatActivity.chatApiVersion,
|
||||
|
@ -110,7 +110,7 @@ interface ChatMessageRepository : LifecycleAwareManager {
|
||||
|
||||
suspend fun editTempChatMessage(message: ChatMessage, editedMessageText: String): Flow<Boolean>
|
||||
|
||||
suspend fun sendTempChatMessages(credentials: String, url: String)
|
||||
suspend fun sendUnsentChatMessages(credentials: String, url: String)
|
||||
|
||||
suspend fun deleteTempMessage(chatMessage: ChatMessage)
|
||||
}
|
||||
|
@ -183,19 +183,26 @@ class MediaPlayerManager : LifecycleAwareManager {
|
||||
continue
|
||||
}
|
||||
|
||||
if (mediaPlayer != null && mediaPlayer?.isPlaying == true) {
|
||||
val pos = mediaPlayer!!.currentPosition
|
||||
mediaPlayer?.let { player ->
|
||||
try {
|
||||
if (!player.isPlaying) return@let
|
||||
} catch (e: IllegalStateException) {
|
||||
Log.e(TAG, "Seekbar updated during an improper state: $e")
|
||||
return@let
|
||||
}
|
||||
|
||||
val pos = player.currentPosition
|
||||
mediaPlayerPosition = pos
|
||||
val progress = (pos.toFloat() / mediaPlayerDuration) * DIVIDER
|
||||
val progressI = ceil(progress).toInt()
|
||||
val seconds = (pos / ONE_SEC)
|
||||
_mediaPlayerSeekBarPosition.emit(progressI)
|
||||
currentCycledMessage?.let {
|
||||
it.isPlayingVoiceMessage = true
|
||||
it.voiceMessageSeekbarProgress = progressI
|
||||
it.voiceMessagePlayedSeconds = seconds
|
||||
if (progressI >= IS_PLAYED_CUTOFF) it.wasPlayedVoiceMessage = true
|
||||
_mediaPlayerSeekBarPositionMsg.emit(it)
|
||||
currentCycledMessage?.let { msg ->
|
||||
msg.isPlayingVoiceMessage = true
|
||||
msg.voiceMessageSeekbarProgress = progressI
|
||||
msg.voiceMessagePlayedSeconds = seconds
|
||||
if (progressI >= IS_PLAYED_CUTOFF) msg.wasPlayedVoiceMessage = true
|
||||
_mediaPlayerSeekBarPositionMsg.emit(msg)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -14,6 +14,7 @@ import android.util.Log
|
||||
import com.bluelinelabs.logansquare.annotation.JsonIgnore
|
||||
import com.nextcloud.talk.R
|
||||
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
|
||||
import com.nextcloud.talk.data.database.model.SendStatus
|
||||
import com.nextcloud.talk.data.user.model.User
|
||||
import com.nextcloud.talk.models.json.chat.ChatUtils.Companion.getParsedMessage
|
||||
import com.nextcloud.talk.models.json.chat.ReadStatus
|
||||
@ -119,7 +120,7 @@ data class ChatMessage(
|
||||
|
||||
var referenceId: String? = null,
|
||||
|
||||
var sendingFailed: Boolean = true,
|
||||
var sendStatus: SendStatus? = null,
|
||||
|
||||
var silent: Boolean = false
|
||||
|
||||
|
@ -19,6 +19,7 @@ import com.nextcloud.talk.data.database.mappers.asEntity
|
||||
import com.nextcloud.talk.data.database.mappers.asModel
|
||||
import com.nextcloud.talk.data.database.model.ChatBlockEntity
|
||||
import com.nextcloud.talk.data.database.model.ChatMessageEntity
|
||||
import com.nextcloud.talk.data.database.model.SendStatus
|
||||
import com.nextcloud.talk.data.network.NetworkMonitor
|
||||
import com.nextcloud.talk.data.user.model.User
|
||||
import com.nextcloud.talk.extensions.toIntOrZero
|
||||
@ -214,7 +215,8 @@ class OfflineFirstChatRepository @Inject constructor(
|
||||
)
|
||||
}
|
||||
|
||||
sendTempChatMessages(credentials, urlForChatting)
|
||||
// this call could be deleted when we have a worker to send messages..
|
||||
sendUnsentChatMessages(credentials, urlForChatting)
|
||||
|
||||
// delay is a dirty workaround to make sure messages are added to adapter on initial load before dealing
|
||||
// with them (otherwise there is a race condition).
|
||||
@ -365,11 +367,18 @@ class OfflineFirstChatRepository @Inject constructor(
|
||||
lookIntoFuture: Boolean,
|
||||
showUnreadMessagesMarker: Boolean
|
||||
) {
|
||||
receivedChatMessages.forEach {
|
||||
Log.d(TAG, "receivedChatMessage: " + it.message)
|
||||
}
|
||||
|
||||
// remove all temp messages from UI
|
||||
val oldTempMessages = chatDao.getTempMessagesForConversation(internalConversationId)
|
||||
.first()
|
||||
.map(ChatMessageEntity::asModel)
|
||||
oldTempMessages.forEach { _removeMessageFlow.emit(it) }
|
||||
oldTempMessages.forEach {
|
||||
Log.d(TAG, "oldTempMessage to be removed from UI: " + it.message)
|
||||
_removeMessageFlow.emit(it)
|
||||
}
|
||||
|
||||
// add new messages to UI
|
||||
val tripleChatMessages = Triple(lookIntoFuture, showUnreadMessagesMarker, receivedChatMessages)
|
||||
@ -378,6 +387,9 @@ class OfflineFirstChatRepository @Inject constructor(
|
||||
// remove temp messages from DB that are now found in the new messages
|
||||
val chatMessagesReferenceIds = receivedChatMessages.mapTo(HashSet(receivedChatMessages.size)) { it.referenceId }
|
||||
val tempChatMessagesThatCanBeReplaced = oldTempMessages.filter { it.referenceId in chatMessagesReferenceIds }
|
||||
tempChatMessagesThatCanBeReplaced.forEach {
|
||||
Log.d(TAG, "oldTempMessage that was identified in newMessages: " + it.message)
|
||||
}
|
||||
chatDao.deleteTempChatMessages(
|
||||
internalConversationId,
|
||||
tempChatMessagesThatCanBeReplaced.map { it.referenceId!! }
|
||||
@ -389,6 +401,10 @@ class OfflineFirstChatRepository @Inject constructor(
|
||||
.sortedBy { it.internalId }
|
||||
.map(ChatMessageEntity::asModel)
|
||||
|
||||
remainingTempMessages.forEach {
|
||||
Log.d(TAG, "remainingTempMessage: " + it.message)
|
||||
}
|
||||
|
||||
val triple = Triple(true, false, remainingTempMessages)
|
||||
_messageFlow.emit(triple)
|
||||
}
|
||||
@ -843,6 +859,17 @@ class OfflineFirstChatRepository @Inject constructor(
|
||||
|
||||
val chatMessageModel = response.ocs?.data?.asModel()
|
||||
|
||||
val sentMessage = chatDao.getTempMessageForConversation(
|
||||
internalConversationId,
|
||||
referenceId
|
||||
).firstOrNull()
|
||||
|
||||
sentMessage?.let {
|
||||
it.sendStatus = SendStatus.SENT_PENDING_ACK
|
||||
chatDao.updateChatMessage(it)
|
||||
}
|
||||
|
||||
Log.d(TAG, "sending chat message succeeded: " + message)
|
||||
emit(Result.success(chatMessageModel))
|
||||
}
|
||||
.catch { e ->
|
||||
@ -853,7 +880,7 @@ class OfflineFirstChatRepository @Inject constructor(
|
||||
referenceId
|
||||
).firstOrNull()
|
||||
failedMessage?.let {
|
||||
it.sendingFailed = true
|
||||
it.sendStatus = SendStatus.FAILED
|
||||
chatDao.updateChatMessage(it)
|
||||
|
||||
val failedMessageModel = it.asModel()
|
||||
@ -874,7 +901,7 @@ class OfflineFirstChatRepository @Inject constructor(
|
||||
referenceId: String
|
||||
): Flow<Result<ChatMessage?>> {
|
||||
val messageToResend = chatDao.getTempMessageForConversation(internalConversationId, referenceId).first()
|
||||
messageToResend.sendingFailed = false
|
||||
messageToResend.sendStatus = SendStatus.PENDING
|
||||
chatDao.updateChatMessage(messageToResend)
|
||||
|
||||
val messageToResendModel = messageToResend.asModel()
|
||||
@ -930,8 +957,8 @@ class OfflineFirstChatRepository @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun sendTempChatMessages(credentials: String, url: String) {
|
||||
val tempMessages = chatDao.getTempMessagesForConversation(internalConversationId).first()
|
||||
override suspend fun sendUnsentChatMessages(credentials: String, url: String) {
|
||||
val tempMessages = chatDao.getTempUnsentMessagesForConversation(internalConversationId).first()
|
||||
tempMessages.sortedBy { it.internalId }.onEach {
|
||||
sendChatMessage(
|
||||
credentials,
|
||||
@ -1025,7 +1052,7 @@ class OfflineFirstChatRepository @Inject constructor(
|
||||
actorDisplayName = currentUser.displayName!!,
|
||||
referenceId = referenceId,
|
||||
isTemporary = true,
|
||||
sendingFailed = false,
|
||||
sendStatus = SendStatus.PENDING,
|
||||
silent = sendWithoutNotification
|
||||
)
|
||||
return entity
|
||||
|
@ -169,9 +169,9 @@ class MessageInputViewModel @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
fun sendTempMessages(credentials: String, url: String) {
|
||||
fun sendUnsentMessages(credentials: String, url: String) {
|
||||
viewModelScope.launch {
|
||||
chatRepository.sendTempChatMessages(
|
||||
chatRepository.sendUnsentChatMessages(
|
||||
credentials,
|
||||
url
|
||||
)
|
||||
|
@ -16,7 +16,6 @@ import android.animation.AnimatorInflater
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.SearchManager
|
||||
import android.content.ActivityNotFoundException
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.graphics.drawable.Drawable
|
||||
@ -41,6 +40,9 @@ import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.widget.SearchView
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.ui.platform.ViewCompositionStrategy
|
||||
import androidx.core.content.pm.ShortcutInfoCompat
|
||||
import androidx.core.content.pm.ShortcutManagerCompat
|
||||
import androidx.core.graphics.drawable.IconCompat
|
||||
import androidx.core.graphics.drawable.toDrawable
|
||||
import androidx.core.net.toUri
|
||||
import androidx.core.os.bundleOf
|
||||
@ -409,6 +411,10 @@ class ConversationsListActivity :
|
||||
conversationsListViewModel.getRoomsFlow
|
||||
.onEach { list ->
|
||||
setConversationList(list)
|
||||
val noteToSelf = list
|
||||
.firstOrNull { ConversationUtils.isNoteToSelfConversation(it) }
|
||||
val isNoteToSelfAvailable = noteToSelf != null
|
||||
handleNoteToSelfShortcut(isNoteToSelfAvailable, noteToSelf?.token ?: "")
|
||||
}.collect()
|
||||
}
|
||||
|
||||
@ -525,6 +531,29 @@ class ConversationsListActivity :
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleNoteToSelfShortcut(noteToSelfAvailable: Boolean, noteToSelfToken: String) {
|
||||
if (noteToSelfAvailable) {
|
||||
val bundle = Bundle()
|
||||
bundle.putString(KEY_ROOM_TOKEN, noteToSelfToken)
|
||||
bundle.putBoolean(BundleKeys.KEY_FOCUS_INPUT, true)
|
||||
val intent = Intent(context, ChatActivity::class.java)
|
||||
intent.putExtras(bundle)
|
||||
intent.action = Intent.ACTION_VIEW
|
||||
val openNotesString = resources.getString(R.string.open_notes)
|
||||
|
||||
val shortcut = ShortcutInfoCompat.Builder(context, NOTE_TO_SELF_SHORTCUT_ID)
|
||||
.setShortLabel(openNotesString)
|
||||
.setLongLabel(openNotesString)
|
||||
.setIcon(IconCompat.createWithResource(context, R.drawable.ic_pencil_grey600_24dp))
|
||||
.setIntent(intent)
|
||||
.build()
|
||||
|
||||
ShortcutManagerCompat.pushDynamicShortcut(context, shortcut)
|
||||
} else {
|
||||
ShortcutManagerCompat.removeDynamicShortcuts(context, listOf(NOTE_TO_SELF_SHORTCUT_ID))
|
||||
}
|
||||
}
|
||||
|
||||
private fun setConversationList(list: List<ConversationModel>) {
|
||||
// Update Conversations
|
||||
conversationItems.clear()
|
||||
@ -640,7 +669,7 @@ class ConversationsListActivity :
|
||||
}
|
||||
}
|
||||
|
||||
val archiveFilterOn = filterState[ARCHIVE] ?: false
|
||||
val archiveFilterOn = filterState[ARCHIVE] == true
|
||||
if (archiveFilterOn && newItems.isEmpty()) {
|
||||
binding.noArchivedConversationLayout.visibility = View.VISIBLE
|
||||
} else {
|
||||
@ -755,7 +784,7 @@ class ConversationsListActivity :
|
||||
}
|
||||
|
||||
private fun initSearchView() {
|
||||
val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager?
|
||||
val searchManager = getSystemService(SEARCH_SERVICE) as SearchManager?
|
||||
if (searchItem != null) {
|
||||
searchView = MenuItemCompat.getActionView(searchItem) as SearchView
|
||||
viewThemeUtils.talk.themeSearchView(searchView!!)
|
||||
@ -1217,7 +1246,7 @@ class ConversationsListActivity :
|
||||
})
|
||||
binding.recyclerView.setOnTouchListener { v: View, _: MotionEvent? ->
|
||||
if (!isDestroyed) {
|
||||
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
|
||||
val imm = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
|
||||
imm.hideSoftInputFromWindow(v.windowToken, 0)
|
||||
}
|
||||
false
|
||||
@ -1398,7 +1427,7 @@ class ConversationsListActivity :
|
||||
adapter?.updateDataSet(conversationItems)
|
||||
adapter?.setFilter("")
|
||||
adapter?.filterItems()
|
||||
val archiveFilterOn = filterState[ARCHIVE] ?: false
|
||||
val archiveFilterOn = filterState[ARCHIVE] == true
|
||||
if (archiveFilterOn && adapter!!.isEmpty) {
|
||||
binding.noArchivedConversationLayout.visibility = View.VISIBLE
|
||||
} else {
|
||||
@ -1809,7 +1838,7 @@ class ConversationsListActivity :
|
||||
val callsChannelNotEnabled = !NotificationUtils.isCallsNotificationChannelEnabled(this)
|
||||
|
||||
val serverNotificationAppInstalled =
|
||||
currentUser?.capabilities?.notificationsCapability?.features?.isNotEmpty() ?: false
|
||||
currentUser?.capabilities?.notificationsCapability?.features?.isNotEmpty() == true
|
||||
|
||||
val settingsOfUserAreWrong = notificationPermissionNotGranted ||
|
||||
batteryOptimizationNotIgnored ||
|
||||
@ -2183,5 +2212,6 @@ class ConversationsListActivity :
|
||||
const val ROOM_TYPE_ONE_ONE = "1"
|
||||
private const val SIXTEEN_HOURS_IN_SECONDS: Long = 57600
|
||||
const val LONG_1000: Long = 1000
|
||||
private const val NOTE_TO_SELF_SHORTCUT_ID = "NOTE_TO_SELF_SHORTCUT_ID"
|
||||
}
|
||||
}
|
||||
|
@ -50,6 +50,18 @@ interface ChatMessagesDao {
|
||||
)
|
||||
fun getTempMessagesForConversation(internalConversationId: String): Flow<List<ChatMessageEntity>>
|
||||
|
||||
@Query(
|
||||
"""
|
||||
SELECT *
|
||||
FROM ChatMessages
|
||||
WHERE internalConversationId = :internalConversationId
|
||||
AND isTemporary = 1
|
||||
AND sendStatus != 'SENT_PENDING_ACK'
|
||||
ORDER BY timestamp DESC, id DESC
|
||||
"""
|
||||
)
|
||||
fun getTempUnsentMessagesForConversation(internalConversationId: String): Flow<List<ChatMessageEntity>>
|
||||
|
||||
@Query(
|
||||
"""
|
||||
SELECT *
|
||||
|
@ -68,7 +68,7 @@ fun ChatMessageEntity.asModel() =
|
||||
isDeleted = deleted,
|
||||
referenceId = referenceId,
|
||||
isTemporary = isTemporary,
|
||||
sendingFailed = sendingFailed,
|
||||
sendStatus = sendStatus,
|
||||
readStatus = ReadStatus.NONE,
|
||||
silent = silent
|
||||
)
|
||||
|
@ -64,7 +64,7 @@ data class ChatMessageEntity(
|
||||
@ColumnInfo(name = "reactions") var reactions: LinkedHashMap<String, Int>? = null,
|
||||
@ColumnInfo(name = "reactionsSelf") var reactionsSelf: ArrayList<String>? = null,
|
||||
@ColumnInfo(name = "referenceId") var referenceId: String? = null,
|
||||
@ColumnInfo(name = "sendingFailed") var sendingFailed: Boolean = false,
|
||||
@ColumnInfo(name = "sendStatus") var sendStatus: SendStatus? = null,
|
||||
@ColumnInfo(name = "silent") var silent: Boolean = false,
|
||||
@ColumnInfo(name = "systemMessage") var systemMessageType: ChatMessage.SystemMessageType,
|
||||
@ColumnInfo(name = "timestamp") var timestamp: Long = 0
|
||||
|
@ -0,0 +1,14 @@
|
||||
/*
|
||||
* Nextcloud Talk - Android Client
|
||||
*
|
||||
* SPDX-FileCopyrightText: 2025 Marcel Hibbe <dev@mhibbe.de>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
package com.nextcloud.talk.data.database.model
|
||||
|
||||
enum class SendStatus {
|
||||
PENDING,
|
||||
SENT_PENDING_ACK,
|
||||
FAILED
|
||||
}
|
@ -1,18 +1,31 @@
|
||||
/*
|
||||
* Nextcloud Talk - Android Client
|
||||
*
|
||||
* SPDX-FileCopyrightText: 2024-2025 Marcel Hibbe <dev@mhibbe.de>
|
||||
* SPDX-FileCopyrightText: 2022 Andy Scherzinger <info@andy-scherzinger.de>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
package com.nextcloud.talk.data.source.local
|
||||
|
||||
import android.util.Log
|
||||
import androidx.room.DeleteColumn
|
||||
import androidx.room.migration.AutoMigrationSpec
|
||||
import androidx.room.migration.Migration
|
||||
import androidx.sqlite.db.SupportSQLiteDatabase
|
||||
import java.sql.SQLException
|
||||
|
||||
@Suppress("MagicNumber")
|
||||
object Migrations {
|
||||
|
||||
//region Auto migrations
|
||||
|
||||
@DeleteColumn(tableName = "ChatMessages", columnName = "sendingFailed")
|
||||
class AutoMigration16To17 : AutoMigrationSpec
|
||||
|
||||
//endregion
|
||||
|
||||
//region Manual migrations
|
||||
|
||||
val MIGRATION_6_8 = object : Migration(6, 8) {
|
||||
override fun migrate(db: SupportSQLiteDatabase) {
|
||||
Log.i("Migrations", "Migrating 6 to 8")
|
||||
@ -76,6 +89,8 @@ object Migrations {
|
||||
}
|
||||
}
|
||||
|
||||
//endregion
|
||||
|
||||
fun migrateToRoom(db: SupportSQLiteDatabase) {
|
||||
db.execSQL(
|
||||
"CREATE TABLE User_new (" +
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Nextcloud Talk - Android Client
|
||||
*
|
||||
* SPDX-FileCopyrightText: 2023-2024 Marcel Hibbe <dev@mhibbe.de>
|
||||
* SPDX-FileCopyrightText: 2023-2025 Marcel Hibbe <dev@mhibbe.de>
|
||||
* SPDX-FileCopyrightText: 2022 Andy Scherzinger <info@andy-scherzinger.de>
|
||||
* SPDX-FileCopyrightText: 2017-2020 Mario Danic <mario@lovelyhq.com>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
@ -23,12 +23,14 @@ import com.nextcloud.talk.data.database.dao.ConversationsDao
|
||||
import com.nextcloud.talk.data.database.model.ChatBlockEntity
|
||||
import com.nextcloud.talk.data.database.model.ChatMessageEntity
|
||||
import com.nextcloud.talk.data.database.model.ConversationEntity
|
||||
import com.nextcloud.talk.data.source.local.Migrations.AutoMigration16To17
|
||||
import com.nextcloud.talk.data.source.local.converters.ArrayListConverter
|
||||
import com.nextcloud.talk.data.source.local.converters.CapabilitiesConverter
|
||||
import com.nextcloud.talk.data.source.local.converters.ExternalSignalingServerConverter
|
||||
import com.nextcloud.talk.data.source.local.converters.HashMapHashMapConverter
|
||||
import com.nextcloud.talk.data.source.local.converters.LinkedHashMapConverter
|
||||
import com.nextcloud.talk.data.source.local.converters.PushConfigurationConverter
|
||||
import com.nextcloud.talk.data.source.local.converters.SendStatusConverter
|
||||
import com.nextcloud.talk.data.source.local.converters.ServerVersionConverter
|
||||
import com.nextcloud.talk.data.source.local.converters.SignalingSettingsConverter
|
||||
import com.nextcloud.talk.data.storage.ArbitraryStoragesDao
|
||||
@ -49,9 +51,10 @@ import java.util.Locale
|
||||
ChatMessageEntity::class,
|
||||
ChatBlockEntity::class
|
||||
],
|
||||
version = 16,
|
||||
version = 17,
|
||||
autoMigrations = [
|
||||
AutoMigration(from = 9, to = 10)
|
||||
AutoMigration(from = 9, to = 10),
|
||||
AutoMigration(from = 16, to = 17, spec = AutoMigration16To17::class)
|
||||
],
|
||||
exportSchema = true
|
||||
)
|
||||
@ -63,7 +66,8 @@ import java.util.Locale
|
||||
SignalingSettingsConverter::class,
|
||||
HashMapHashMapConverter::class,
|
||||
LinkedHashMapConverter::class,
|
||||
ArrayListConverter::class
|
||||
ArrayListConverter::class,
|
||||
SendStatusConverter::class
|
||||
)
|
||||
abstract class TalkDatabase : RoomDatabase() {
|
||||
|
||||
|
@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Nextcloud Talk - Android Client
|
||||
*
|
||||
* SPDX-FileCopyrightText: 2025 Marcel Hibbe <dev@mhibbe.de>
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
package com.nextcloud.talk.data.source.local.converters
|
||||
|
||||
import androidx.room.TypeConverter
|
||||
import com.nextcloud.talk.data.database.model.SendStatus
|
||||
|
||||
class SendStatusConverter {
|
||||
@TypeConverter
|
||||
fun fromStatus(value: SendStatus): String {
|
||||
return value.name
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
fun toStatus(value: String): SendStatus {
|
||||
return SendStatus.valueOf(value)
|
||||
}
|
||||
}
|
@ -190,6 +190,7 @@ class FullScreenMediaActivity : AppCompatActivity() {
|
||||
supportActionBar?.show()
|
||||
}
|
||||
|
||||
@OptIn(UnstableApi::class)
|
||||
private fun applyWindowInsets() {
|
||||
val playerView = binding.playerView
|
||||
val exoControls = playerView.findViewById<FrameLayout>(R.id.exo_bottom_bar)
|
||||
|
@ -6,14 +6,17 @@
|
||||
*/
|
||||
package com.nextcloud.talk.receivers
|
||||
|
||||
import android.Manifest
|
||||
import android.app.Notification
|
||||
import android.app.NotificationManager
|
||||
import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.text.SpannableStringBuilder
|
||||
import android.text.style.ForegroundColorSpan
|
||||
import android.util.Log
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.app.NotificationCompat
|
||||
import androidx.core.app.NotificationManagerCompat
|
||||
import androidx.core.app.Person
|
||||
@ -162,11 +165,17 @@ class DirectReplyReceiver : BroadcastReceiver() {
|
||||
// Set the updated style
|
||||
previousBuilder.setStyle(previousStyle)
|
||||
|
||||
if (ActivityCompat.checkSelfPermission(
|
||||
context,
|
||||
Manifest.permission.POST_NOTIFICATIONS
|
||||
) == PackageManager.PERMISSION_GRANTED
|
||||
) {
|
||||
// Check if notification still exists
|
||||
if (findActiveNotification(systemNotificationId!!) != null) {
|
||||
NotificationManagerCompat.from(context).notify(systemNotificationId!!, previousBuilder.build())
|
||||
}
|
||||
}
|
||||
}
|
||||
.subscribeOn(Schedulers.io())
|
||||
.subscribe()
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ import com.nextcloud.talk.R
|
||||
import com.nextcloud.talk.application.NextcloudTalkApplication
|
||||
import com.nextcloud.talk.chat.ChatActivity
|
||||
import com.nextcloud.talk.chat.data.model.ChatMessage
|
||||
import com.nextcloud.talk.data.database.model.SendStatus
|
||||
import com.nextcloud.talk.data.network.NetworkMonitor
|
||||
import com.nextcloud.talk.databinding.DialogTempMessageActionsBinding
|
||||
import com.nextcloud.talk.ui.theme.ViewThemeUtils
|
||||
@ -58,9 +59,10 @@ class TempMessageActionsDialog(
|
||||
|
||||
private fun initMenuItems() {
|
||||
this.lifecycleScope.launch {
|
||||
initResendMessage(message.sendingFailed && networkMonitor.isOnline.value)
|
||||
initMenuEditMessage(message.sendingFailed || !networkMonitor.isOnline.value)
|
||||
initMenuDeleteMessage(message.sendingFailed || !networkMonitor.isOnline.value)
|
||||
val sendingFailed = message.sendStatus == SendStatus.FAILED
|
||||
initResendMessage(sendingFailed && networkMonitor.isOnline.value)
|
||||
initMenuEditMessage(sendingFailed || !networkMonitor.isOnline.value)
|
||||
initMenuDeleteMessage(sendingFailed || !networkMonitor.isOnline.value)
|
||||
initMenuItemCopy()
|
||||
}
|
||||
}
|
||||
|
@ -81,4 +81,5 @@ object BundleKeys {
|
||||
const val KEY_FIELD_MAP: String = "KEY_FIELD_MAP"
|
||||
const val KEY_CHAT_URL: String = "KEY_CHAT_URL"
|
||||
const val KEY_SCROLL_TO_NOTIFICATION_CATEGORY: String = "KEY_SCROLL_TO_NOTIFICATION_CATEGORY"
|
||||
const val KEY_FOCUS_INPUT: String = "KEY_FOCUS_INPUT"
|
||||
}
|
||||
|
@ -30,6 +30,11 @@ class DummyChatMessagesDaoImpl : ChatMessagesDao {
|
||||
override fun getTempMessagesForConversation(internalConversationId: String): Flow<List<ChatMessageEntity>> =
|
||||
flowOf()
|
||||
|
||||
override fun getTempUnsentMessagesForConversation(internalConversationId: String): Flow<List<ChatMessageEntity>> {
|
||||
// nothing to return here as long this class is only used for the Search window
|
||||
return flowOf()
|
||||
}
|
||||
|
||||
override fun getTempMessageForConversation(
|
||||
internalConversationId: String,
|
||||
referenceId: String
|
||||
|
@ -19,7 +19,6 @@
|
||||
android:id="@+id/deletion_message"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/nc_conversation_auto_delete_notice"
|
||||
android:textSize="14sp"
|
||||
android:lineSpacingExtra="4dp"
|
||||
android:gravity="center"
|
||||
|
@ -159,7 +159,6 @@
|
||||
<string name="nc_configure_cert_auth">Select authentication certificate</string>
|
||||
<string name="nc_connecting_call">Connecting …</string>
|
||||
<string name="nc_contacts_done">Done</string>
|
||||
<string name="nc_conversation_auto_delete_notice">This conversation will be automatically deleted for everyone after %1$d days of inactivity</string>
|
||||
<string name="nc_conversation_description">Conversation description</string>
|
||||
<string name="nc_conversation_menu_conversation_info">Conversation info</string>
|
||||
<string name="nc_conversation_menu_video_call">Video call</string>
|
||||
|
@ -17,7 +17,7 @@
|
||||
<string name="call_without_notification">Обаждане без известие</string>
|
||||
<string name="camera_permission_granted">Дадено е право на камера. Моля, изберете камера отново. </string>
|
||||
<string name="choose_avatar_from_cloud">Избор на аватар от облака</string>
|
||||
<string name="clear_status_message">Изчистване на съобщението за състоянието</string>
|
||||
<string name="clear_status_message">Изчисти състоянието</string>
|
||||
<string name="clear_status_message_after">Изчистване на съобщение за състоянието след</string>
|
||||
<string name="close">Затваряне</string>
|
||||
<string name="connection_established">Осъществена е връзка</string>
|
||||
@ -38,7 +38,7 @@
|
||||
<string name="file_list_folder">папка</string>
|
||||
<string name="file_list_loading">Зареждане …</string>
|
||||
<string name="filename_progress">%1$s (%2$d)</string>
|
||||
<string name="fourHours">4 часа</string>
|
||||
<string name="fourHours">4 чàса</string>
|
||||
<string name="invisible">Невидим</string>
|
||||
<string name="leave_call">Напускане на обаждането</string>
|
||||
<string name="load_more_results">Зареждане на още резултати</string>
|
||||
@ -65,7 +65,7 @@
|
||||
<string name="nc_action_open_main_menu">Отворяне на главното меню</string>
|
||||
<string name="nc_add_attachment">Добавяне на прикачен файл</string>
|
||||
<string name="nc_add_emojis">Добавяне на емотикони</string>
|
||||
<string name="nc_add_file">Добавяне към разговор</string>
|
||||
<string name="nc_add_file">Добави към разговор</string>
|
||||
<string name="nc_add_participants">Добавяне на участници</string>
|
||||
<string name="nc_add_to_favorites">Добави към любимите</string>
|
||||
<string name="nc_all_ok_operation">Добре, всичко е готово!</string>
|
||||
@ -113,6 +113,7 @@
|
||||
<string name="nc_common_disabled">Изключено</string>
|
||||
<string name="nc_common_dismiss">Отхвърляне</string>
|
||||
<string name="nc_common_error_sorry">Съжалявам нещо се обърка!</string>
|
||||
<string name="nc_common_more_options">Още опции</string>
|
||||
<string name="nc_common_set">Настройка</string>
|
||||
<string name="nc_common_skip">Пропусни</string>
|
||||
<string name="nc_common_unknown">Неизвестен</string>
|
||||
@ -225,6 +226,7 @@
|
||||
<string name="nc_missed_call">Пропуснахте обаждане от %s</string>
|
||||
<string name="nc_moderator">Модератор</string>
|
||||
<string name="nc_new_conversation">Нов разговор</string>
|
||||
<string name="nc_new_conversation_visibility">Видимост</string>
|
||||
<string name="nc_new_mention">Непрочетени споменавания</string>
|
||||
<string name="nc_new_messages">Непрочетени съобщения.</string>
|
||||
<string name="nc_nextcloud_talk_app_not_installed">%1$s не е наличен (не е инсталиран или е ограничен от администратора)</string>
|
||||
@ -393,7 +395,7 @@
|
||||
<string name="no_phone_book_integration_due_to_permissions">Няма интеграция на телефонен номер поради липсващи права</string>
|
||||
<string name="oneHour">1 час</string>
|
||||
<string name="online">На линия</string>
|
||||
<string name="online_status">Състояние на линия</string>
|
||||
<string name="online_status">Състояние</string>
|
||||
<string name="openConversations">Отворени разговори</string>
|
||||
<string name="open_in_files_app">Отворяне в приложението Файлове</string>
|
||||
<string name="play_pause_voice_message">Възпроизвеждане/пауза на гласово съобщение</string>
|
||||
@ -429,10 +431,10 @@
|
||||
<string name="save">Записване</string>
|
||||
<string name="scope_federated_description">Синхронизиране само с доверени сървъри</string>
|
||||
<string name="scope_federated_title">Федериран</string>
|
||||
<string name="scope_local_description">Видим само за хора от този случай и гости</string>
|
||||
<string name="scope_local_description">Видимо за потребители на тази инстанция на сървъра, както и гости.</string>
|
||||
<string name="scope_local_title">Локално</string>
|
||||
<string name="scope_private_description">Видим само за хора, съчетани чрез интегриране на телефонен номер чрез Talk на мобилен телефон</string>
|
||||
<string name="scope_private_title">Частен</string>
|
||||
<string name="scope_private_description">Видим само за хора, открити по телефонен номер, който е зададен в \"Talk\".</string>
|
||||
<string name="scope_private_title">Лично</string>
|
||||
<string name="scope_published_description">Синхронизиране с доверени сървъри и с глобалната и публичната адресна книга</string>
|
||||
<string name="scope_published_title">Публикувано</string>
|
||||
<string name="scope_toggle">Превключване на обхват</string>
|
||||
@ -448,7 +450,7 @@
|
||||
<string name="set">Да се зададе</string>
|
||||
<string name="set_avatar_from_camera">Задаване на аватар от камерата</string>
|
||||
<string name="set_status">Задаване на състояние</string>
|
||||
<string name="set_status_message">Задаване на съобщение за състояние</string>
|
||||
<string name="set_status_message">Задай състояние</string>
|
||||
<string name="share">Споделяне</string>
|
||||
<string name="shared_items_audio">Аудио</string>
|
||||
<string name="shared_items_file">Файл</string>
|
||||
@ -496,7 +498,7 @@
|
||||
<string name="userinfo_no_info_headline">Няма зададена лична информация</string>
|
||||
<string name="userinfo_no_info_text">Добавяне на име, снимка и подробности за контакт към страницата на вашия профил.</string>
|
||||
<string name="video_call">Видео разговор</string>
|
||||
<string name="whats_your_status">Какъв е вашият статус?</string>
|
||||
<string name="whats_your_status">Какво е вашето състояние?</string>
|
||||
<plurals name="polls_amount_voters">
|
||||
<item quantity="one">%dгласувания </item>
|
||||
<item quantity="other">%d гласувания</item>
|
||||
|
@ -159,7 +159,6 @@
|
||||
<string name="nc_configure_cert_auth">Vyberte certifikát pro ověřování se</string>
|
||||
<string name="nc_connecting_call">Připojování…</string>
|
||||
<string name="nc_contacts_done">Hotovo</string>
|
||||
<string name="nc_conversation_auto_delete_notice">Tato konverzace bude automaticky smazána pro kohokoli po %1$d dnech bez jakékoli aktivity.</string>
|
||||
<string name="nc_conversation_description">Popis konverzace</string>
|
||||
<string name="nc_conversation_menu_conversation_info">Informace o konverzaci</string>
|
||||
<string name="nc_conversation_menu_video_call">Videohovor</string>
|
||||
@ -544,6 +543,7 @@
|
||||
<string name="online_status">Stav online</string>
|
||||
<string name="openConversations">Otevřít konverzace</string>
|
||||
<string name="open_in_files_app">Otevřít v aplikaci Soubory</string>
|
||||
<string name="open_notes">Otevřít poznámky</string>
|
||||
<string name="play_pause_voice_message">Přehrát/pozastavit hlasovou zprávu</string>
|
||||
<string name="playback_speed_control">Ovládání rychlosti přehrávání</string>
|
||||
<string name="polls_add_option">Přidat volbu</string>
|
||||
@ -683,6 +683,12 @@
|
||||
<item quantity="many">Viz %d podobných zpráv</item>
|
||||
<item quantity="other">Viz %d podobné zprávy</item>
|
||||
</plurals>
|
||||
<plurals name="nc_conversation_auto_delete_info">
|
||||
<item quantity="one">Tato konverzace bude automaticky smazána pro kohokoli po %1$d dni bez jakékoli aktivity.</item>
|
||||
<item quantity="few">Tato konverzace bude automaticky smazána pro kohokoli po %1$d dnech bez jakékoli aktivity.</item>
|
||||
<item quantity="many">Tato konverzace bude automaticky smazána pro kohokoli po %1$d dnech bez jakékoli aktivity.</item>
|
||||
<item quantity="other">Tato konverzace bude automaticky smazána pro kohokoli po %1$d dnech bez jakékoli aktivity.</item>
|
||||
</plurals>
|
||||
<plurals name="polls_amount_voters">
|
||||
<item quantity="one">%d hlas</item>
|
||||
<item quantity="few">%d hlasy</item>
|
||||
|
@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name= "nc_edit">Rediger</string>
|
||||
<string name="add_participants">Tilføj</string>
|
||||
<string name="add_to_notes">Tilføj til Noter</string>
|
||||
<string name="added_to_favorites">Tilføjede samtalen %1$s til favoritter</string>
|
||||
<string name="appbar_search_in">Søg i %s</string>
|
||||
@ -389,9 +390,9 @@
|
||||
<string name="nc_server_failed_to_import_account">Den valgte konto kunne ikke importeres</string>
|
||||
<string name="nc_server_helper_text">Linket til dit %1$s web interface når du åbner den i browseren.</string>
|
||||
<string name="nc_server_import_account">Importer konto fra %1$s appen</string>
|
||||
<string name="nc_server_import_account_plain">Importer konto</string>
|
||||
<string name="nc_server_import_account_plain">Importér konto</string>
|
||||
<string name="nc_server_import_accounts">Importer konti fra %1$s appen</string>
|
||||
<string name="nc_server_import_accounts_plain">Importer konti</string>
|
||||
<string name="nc_server_import_accounts_plain">Importér konti</string>
|
||||
<string name="nc_server_maintenance">Få venligst %1$s ud fra vedligeholdelse </string>
|
||||
<string name="nc_server_not_installed">Afslut venligst din %1$s installation</string>
|
||||
<string name="nc_server_testing_connection">Tester forbindelsen</string>
|
||||
|
@ -159,7 +159,6 @@
|
||||
<string name="nc_configure_cert_auth">Authentifizierungs-Zertifikat auswählen</string>
|
||||
<string name="nc_connecting_call">Verbinde …</string>
|
||||
<string name="nc_contacts_done">Fertig</string>
|
||||
<string name="nc_conversation_auto_delete_notice">Diese Unterhaltung wird für alle bei Inaktivität in %1$d Tagen gelöscht</string>
|
||||
<string name="nc_conversation_description">Beschreibung der Unterhaltung</string>
|
||||
<string name="nc_conversation_menu_conversation_info">Unterhaltungs-Information</string>
|
||||
<string name="nc_conversation_menu_video_call">Videoanruf</string>
|
||||
@ -544,6 +543,7 @@
|
||||
<string name="online_status">Online-Status</string>
|
||||
<string name="openConversations">Offene Unterhaltungen</string>
|
||||
<string name="open_in_files_app">In Dateien-App öffnen</string>
|
||||
<string name="open_notes">Notizen öffnen</string>
|
||||
<string name="play_pause_voice_message">Sprachnachricht wiedergeben/pausieren</string>
|
||||
<string name="playback_speed_control">Steuerung der Wiedergabegeschwindigkeit</string>
|
||||
<string name="polls_add_option">Option hinzufügen</string>
|
||||
@ -681,6 +681,10 @@
|
||||
<item quantity="one">%d ähnliche Nachricht ansehen</item>
|
||||
<item quantity="other">%d ähnliche Nachrichten ansehen</item>
|
||||
</plurals>
|
||||
<plurals name="nc_conversation_auto_delete_info">
|
||||
<item quantity="one">Diese Unterhaltung wird für alle bei Inaktivität in %1$d Tag gelöscht</item>
|
||||
<item quantity="other">Diese Unterhaltung wird für alle bei Inaktivität in %1$d Tagen gelöscht</item>
|
||||
</plurals>
|
||||
<plurals name="polls_amount_voters">
|
||||
<item quantity="one">%d Stimme</item>
|
||||
<item quantity="other">%d Stimmen</item>
|
||||
|
@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name= "nc_edit">Επεξεργασία</string>
|
||||
<string name="add_participants">Προσθήκη</string>
|
||||
<string name="appbar_search_in">Αναζήτηση στο %s</string>
|
||||
<string name="archived">Αρχειοθετήθηκε</string>
|
||||
<string name="audio_output_dialog_headline">Έξοδος ήχου</string>
|
||||
|
@ -159,7 +159,6 @@
|
||||
<string name="nc_configure_cert_auth">Vali autentimise sertifikaat</string>
|
||||
<string name="nc_connecting_call">Ühendan…</string>
|
||||
<string name="nc_contacts_done">Valmis</string>
|
||||
<string name="nc_conversation_auto_delete_notice">See vestlus kustub automaatselt kõigi osalejate jaoks, kui siin pole olnud tegevust %1$d päeva jooksul.</string>
|
||||
<string name="nc_conversation_description">Vestluse kirjeldus</string>
|
||||
<string name="nc_conversation_menu_conversation_info">Vestluse teave</string>
|
||||
<string name="nc_conversation_menu_video_call">Videokõne</string>
|
||||
@ -544,6 +543,7 @@
|
||||
<string name="online_status">Võrgus staatus</string>
|
||||
<string name="openConversations">Ava vestlused</string>
|
||||
<string name="open_in_files_app">Ava failirakenduses</string>
|
||||
<string name="open_notes">Ava märkmik</string>
|
||||
<string name="play_pause_voice_message">Esita häälsõnumit või peata esitus</string>
|
||||
<string name="playback_speed_control">Taasesituse kiiruse juhtimine</string>
|
||||
<string name="polls_add_option">Lisa valik</string>
|
||||
@ -681,6 +681,10 @@
|
||||
<item quantity="one">Vaata %d sarnast sõnumit</item>
|
||||
<item quantity="other">Vaata %d sarnast sõnumit</item>
|
||||
</plurals>
|
||||
<plurals name="nc_conversation_auto_delete_info">
|
||||
<item quantity="one">See vestlus kustub automaatselt kõigi osalejate jaoks, kui siin pole olnud tegevust %1$d päeva jooksul.</item>
|
||||
<item quantity="other">See vestlus kustub automaatselt kõigi osalejate jaoks, kui siin pole olnud tegevust %1$d päeva jooksul.</item>
|
||||
</plurals>
|
||||
<plurals name="polls_amount_voters">
|
||||
<item quantity="one">%d hääl</item>
|
||||
<item quantity="other">%d häält</item>
|
||||
|
@ -159,7 +159,6 @@
|
||||
<string name="nc_configure_cert_auth">Roghnaigh teastas fíordheimhnithe</string>
|
||||
<string name="nc_connecting_call">Ag nascadh…</string>
|
||||
<string name="nc_contacts_done">Déanta</string>
|
||||
<string name="nc_conversation_auto_delete_notice">Scriosfar an comhrá seo go huathoibríoch do gach duine i %1$d lá gan aon ghníomhaíocht</string>
|
||||
<string name="nc_conversation_description">Cur síos ar an gcomhrá</string>
|
||||
<string name="nc_conversation_menu_conversation_info">Eolas faoin gcomhrá</string>
|
||||
<string name="nc_conversation_menu_video_call">Glao físe</string>
|
||||
|
@ -2,9 +2,14 @@
|
||||
<resources>
|
||||
<string name= "nc_edit">Szerkesztés</string>
|
||||
<string name="add_participants">Hozzáadás</string>
|
||||
<string name="add_to_notes">Hozzáadás a jegyzetekhez</string>
|
||||
<string name="added_to_favorites">A(z) %1$s beszélgetés hozzáadva a kedvencekhez</string>
|
||||
<string name="appbar_search_in">Keresés itt: %s</string>
|
||||
<string name="archive_conversation">Beszélgetés archiválása</string>
|
||||
<string name="archive_hint">Ha archivál egy beszélgetést, akkor alapértelmezetten el lesz rejtve. Válassza az „Archiválva” szűrőt az archivált beszélgetések megtekintéséhez. A közvetlen említéseket továbbra is meg fogja kapni.</string>
|
||||
<string name="archived">Archiválva</string>
|
||||
<string name="archived_conversation">Archiválva: %1$s</string>
|
||||
<string name="audio_call">Hanghívás</string>
|
||||
<string name="audio_output_bluetooth">Bluetooth</string>
|
||||
<string name="audio_output_dialog_headline">Hangkimenet</string>
|
||||
<string name="audio_output_phone">Telefon</string>
|
||||
@ -13,6 +18,10 @@
|
||||
<string name="automatic_status_set">Az állapota automatikusan lett beállítva</string>
|
||||
<string name="avatar">Profilkép</string>
|
||||
<string name="away">Távol</string>
|
||||
<string name="back_button">Vissza gomb</string>
|
||||
<string name="ban">Tiltás</string>
|
||||
<string name="ban_participant">Résztvevő letiltása</string>
|
||||
<string name="bans_list">Tiltólista</string>
|
||||
<string name="calendar">Naptár</string>
|
||||
<string name="call_more_actions_dialog_headline">Speciális hívásbeállítások</string>
|
||||
<string name="call_running_since_one_hour">A hívás egy órája tart.</string>
|
||||
@ -24,33 +33,46 @@
|
||||
<string name="close">Bezárás</string>
|
||||
<string name="close_icon">Bezárás ikon</string>
|
||||
<string name="connection_established">A kapcsolat létrejött</string>
|
||||
<string name="connection_lost">Nincs kapcsolat a kiszolgálóval</string>
|
||||
<string name="connection_lost_sent_messages_are_queued">A kapcsolat elveszett – Elküldött üzenetek sorba állítva</string>
|
||||
<string name="continuous_voice_message_recording">Felvétel zárolása a hangüzenet folyamatos rögzítéséhez</string>
|
||||
<string name="conversation_archived">A beszélgetés archiválva van</string>
|
||||
<string name="conversation_is_read_only">A beszélgetés csak olvasható</string>
|
||||
<string name="conversation_read_only_failed">Nem sikerült csak olvashatóvá állítani a beszélgetést</string>
|
||||
<string name="conversations">Beszélgetések</string>
|
||||
<string name="create_conversation">Beszélgetés létrehozása</string>
|
||||
<string name="create_issue">Hibajegy létrehozása</string>
|
||||
<string name="custom">Egyéni</string>
|
||||
<string name="danger_zone">Veszélyes területet</string>
|
||||
<string name="deck_card_description">%1$s itt: %2$s</string>
|
||||
<string name="delete_avatar">Profilkép törlése</string>
|
||||
<string name="deleted_conversation">%1$s beszélgetés törlése</string>
|
||||
<string name="dnd">Ne zavarjanak</string>
|
||||
<string name="dontClear">Ne törölje</string>
|
||||
<string name="edit">Szerkesztés</string>
|
||||
<string name="edit_error_24_hours_old_message">A 24 óránál régebbi beszélgetések nem szerkeszthetőek</string>
|
||||
<string name="edit_message_icon_description">Üzenet szerkesztése</string>
|
||||
<string name="emoji_category_recent">Legutóbbiak</string>
|
||||
<string name="encrypted">Titkosított</string>
|
||||
<string name="end_call_for_everyone">Hívás befejezése mindenki számára</string>
|
||||
<string name="error_loading_chats">Hiba történt a csevegések betöltése során</string>
|
||||
<string name="error_unbanning">Hiba történt a résztvevő tiltásának visszavonása során</string>
|
||||
<string name="failed_to_save">Sikertelen mentés: %1$s</string>
|
||||
<string name="file_list_folder">mappa</string>
|
||||
<string name="file_list_loading">Betöltés…</string>
|
||||
<string name="filename_progress">%1$s (%2$d)</string>
|
||||
<string name="fourHours">4 óra </string>
|
||||
<string name="get_invitations_error">A függőben lévő meghívások lekérése sikertelen</string>
|
||||
<string name="hint_edited_message">(szerkesztve)</string>
|
||||
<string name="internal_note">Belső jegyzet</string>
|
||||
<string name="invisible">Láthatatlan</string>
|
||||
<string name="languages_error_message">A nyelveket nem lehet lekérni</string>
|
||||
<string name="languages_error_title">Lekérés sikertelen</string>
|
||||
<string name="later_today">Mai nap később</string>
|
||||
<string name="leave_call">Hívás elhagyása</string>
|
||||
<string name="left_conversation">Elhagyta a következő beszélgetést: %1$s</string>
|
||||
<string name="load_more_results">További találatok betöltése</string>
|
||||
<string name="local_time">Helyi idő: %1$s</string>
|
||||
<string name="lock_conversation">Beszélgetés zárolása</string>
|
||||
<string name="lock_symbol">Zár szimbólum</string>
|
||||
<string name="lower_hand">Kéz letétele</string>
|
||||
@ -63,7 +85,9 @@
|
||||
<string name="menu_item_sort_by_name_z_a">Z – A</string>
|
||||
<string name="menu_item_sort_by_size_biggest_first">Legnagyobb elöl</string>
|
||||
<string name="menu_item_sort_by_size_smallest_first">Legkisebb elöl</string>
|
||||
<string name="message_copied">Üzenet másolva</string>
|
||||
<string name="message_deleted_by_you">Törölte az üzenetet</string>
|
||||
<string name="message_last_edited_by">Szerkesztette: %1$s</string>
|
||||
<string name="message_poll_tap_to_open">Koppintson a szavazás megnyitásához</string>
|
||||
<string name="message_search_begin_empty">Nincs találat</string>
|
||||
<string name="message_search_begin_typing">Kezdjen el gépelni a kereséshez…</string>
|
||||
@ -83,6 +107,7 @@
|
||||
<string name="nc_all_ok_operation">Rendben, minden kész!</string>
|
||||
<string name="nc_attendee_pin">PIN: %1$s</string>
|
||||
<string name="nc_biometric_unlock">%1$s feloldása</string>
|
||||
<string name="nc_bluetooth_permission_hint">A bluetooth-os hangszórók engedélyezéséhez adja meg a „Közeli eszközök” engedélyt.</string>
|
||||
<string name="nc_call_button_content_description_answer_video_call">Válasz videóhívásként</string>
|
||||
<string name="nc_call_button_content_description_answer_voice_only">Válasz csak hanghívásként</string>
|
||||
<string name="nc_call_button_content_description_audio_output">Hangkimenet módosítása</string>
|
||||
@ -102,11 +127,12 @@
|
||||
<string name="nc_call_state_with_video">%1$s videóval</string>
|
||||
<string name="nc_call_timeout">Nincs válasz 45 másodpercen belül, koppintson az újrapróbálkozáshoz</string>
|
||||
<string name="nc_call_unknown">%s hívás</string>
|
||||
<string name="nc_call_video">%s videohívás</string>
|
||||
<string name="nc_call_video">%s videóhívás</string>
|
||||
<string name="nc_call_voice">%s hanghívás</string>
|
||||
<string name="nc_camera_permission_hint">A videohívás engedélyezéséhez meg kell adnia a „Kamera” engedélyt.</string>
|
||||
<string name="nc_camera_permission_hint">A videóhívás engedélyezéséhez adja meg a „Kamera” engedélyt.</string>
|
||||
<string name="nc_cancel">Mégse</string>
|
||||
<string name="nc_capabilities_failed">A lehetőségek lekérdezése sikertelen, megszakítás</string>
|
||||
<string name="nc_caption">Felirat</string>
|
||||
<string name="nc_certificate_dialog_text">Megbízik a(z) %1$s által a(z) %2$s részére kiállított, %3$s és %4$s között érvényes, korábban ismeretlen SSL tanúsítványban?</string>
|
||||
<string name="nc_certificate_dialog_title">Ellenőrizze a tanúsítványt</string>
|
||||
<string name="nc_certificate_error">Az SSL beállítás megakadályozta a kapcsolódást</string>
|
||||
@ -135,14 +161,16 @@
|
||||
<string name="nc_contacts_done">Kész</string>
|
||||
<string name="nc_conversation_description">Beszélgetés leírása</string>
|
||||
<string name="nc_conversation_menu_conversation_info">Beszélgetés információk</string>
|
||||
<string name="nc_conversation_menu_video_call">Videohívás</string>
|
||||
<string name="nc_conversation_menu_video_call">Videóhívás</string>
|
||||
<string name="nc_conversation_menu_voice_call">Hanghívás</string>
|
||||
<string name="nc_conversation_not_found">Beszélgetés nem található</string>
|
||||
<string name="nc_conversation_settings">Beszélgetésbeállítások</string>
|
||||
<string name="nc_conversations_empty">Csatlakozzon egy beszélgetéshez, vagy indítson egy újat</string>
|
||||
<string name="nc_conversations_empty_details">Üdvözölje a barátait és munkatársait!</string>
|
||||
<string name="nc_copy_message">Másolás</string>
|
||||
<string name="nc_create_new_conversation">Új beszélgetés létrehozása</string>
|
||||
<string name="nc_create_poll">Szavazás létrehozása</string>
|
||||
<string name="nc_current_user">Ön:</string>
|
||||
<string name="nc_date_header_today">Ma</string>
|
||||
<string name="nc_date_header_yesterday">Tegnap</string>
|
||||
<string name="nc_delete">Törlés</string>
|
||||
@ -151,19 +179,38 @@
|
||||
<string name="nc_delete_conversation_more">Ha törli a beszélgetést, akkor az összes többi résztvevő számára is törölve lesz.</string>
|
||||
<string name="nc_delete_message">Törlés</string>
|
||||
<string name="nc_delete_message_leaked_to_matterbridge">Az üzenet törlése sikeresen megtörtént, de lehet, hogy az már megjelent más szolgáltatásokon</string>
|
||||
<string name="nc_delete_now">Törlés most</string>
|
||||
<string name="nc_deleted_user">%1$s felhasználó el lett távolítva</string>
|
||||
<string name="nc_demote">Lefokozás moderátorról</string>
|
||||
<string name="nc_description_record_voice">Hangüzenet felvétele</string>
|
||||
<string name="nc_description_send_message_button">Üzenet küldése</string>
|
||||
<string name="nc_diagnose_account_category_title">Jelenlegi fiók</string>
|
||||
<string name="nc_diagnose_account_server">Kiszolgáló</string>
|
||||
<string name="nc_diagnose_account_server_notification_app">A kiszolgálóértesítések alkalmazása telepítve van?</string>
|
||||
<string name="nc_diagnose_account_user_name">Felhasználó</string>
|
||||
<string name="nc_diagnose_account_user_status_enabled">A felhasználói állapot engedélyezett?</string>
|
||||
<string name="nc_diagnose_android_version_title">Android verzió</string>
|
||||
<string name="nc_diagnose_app_category_title">Alkalmazás</string>
|
||||
<string name="nc_diagnose_app_name_title">Alkalmazásnév</string>
|
||||
<string name="nc_diagnose_app_users_amount">Regisztrált felhasználók</string>
|
||||
<string name="nc_diagnose_app_version_title">Alkalmazásverzió</string>
|
||||
<string name="nc_diagnose_battery_optimization_ignored">Az akkumulátoroptimalizálás figyelmen kívül hagyva, minden rendben</string>
|
||||
<string name="nc_diagnose_battery_optimization_not_ignored">Az akkumulátoroptimalizálás engedélyezve van, amely problémákat okozhat. Ajánlatos letiltani az akkumulátoroptimalizálást.</string>
|
||||
<string name="nc_diagnose_battery_optimization_title">Akkumulátorbeállítások</string>
|
||||
<string name="nc_diagnose_device_name_title">Eszköz</string>
|
||||
<string name="nc_diagnose_dialog_open_checklist">Hibaelhárítási ellenőrzőlista megnyitása</string>
|
||||
<string name="nc_diagnose_dialog_open_diagnose">Diagnosztikai képernyő megnyitása</string>
|
||||
<string name="nc_diagnose_dialog_open_dontkillmyapp_website">A dontkillmyapp.com megnyitása</string>
|
||||
<string name="nc_diagnose_gplay_available_title">Google Play szolgáltatások</string>
|
||||
<string name="nc_diagnose_gplay_available_yes">A Google Play szolgáltatások elérhetőek</string>
|
||||
<string name="nc_diagnose_meta_category_title">Metainformációk</string>
|
||||
<string name="nc_diagnose_meta_system_report_date">Rendszerjelentés előállítása</string>
|
||||
<string name="nc_diagnose_notification_calls_channel_permission">Engedélyezve van a hívások értesítési csatornája?</string>
|
||||
<string name="nc_diagnose_notification_messages_channel_permission">Engedélyezve van az üzenetek értesítési csatornája?</string>
|
||||
<string name="nc_diagnose_notification_permission">Értesítési engedély</string>
|
||||
<string name="nc_diagnose_phone_category_title">Telefon</string>
|
||||
<string name="nc_diagnose_server_talk_version">Kiszolgáló Beszélgetés verziója</string>
|
||||
<string name="nc_diagnose_server_version">Kiszolgáló verziója</string>
|
||||
<string name="nc_diagnose_signaling_mode_extern">Külső</string>
|
||||
<string name="nc_diagnose_signaling_mode_intern">Belső</string>
|
||||
<string name="nc_dialog_invalid_password">Érvénytelen jelszó</string>
|
||||
@ -172,7 +219,9 @@
|
||||
<string name="nc_dialog_outdated_client_description">Az alkalmazás túl régi, és már nem támogatja ez a kiszolgáló. Frissítse.</string>
|
||||
<string name="nc_dialog_outdated_client_option_update">Frissítés</string>
|
||||
<string name="nc_dialog_reauth_or_delete">Újrahitelesíti vagy törli ezt a fiókot?</string>
|
||||
<string name="nc_dialog_save_to_storage_continue">Folytatja?</string>
|
||||
<string name="nc_dialog_save_to_storage_no">Nem</string>
|
||||
<string name="nc_dialog_save_to_storage_title">Menti a tárolóba?</string>
|
||||
<string name="nc_dialog_save_to_storage_yes">Igen</string>
|
||||
<string name="nc_display_name_not_fetched">A megjelenítendő név nem kérhető le, megszakítás</string>
|
||||
<string name="nc_display_name_not_stored">A megjelenítendő név nem tárolható, megszakítás</string>
|
||||
@ -216,6 +265,7 @@
|
||||
<string name="nc_guest_access_share_link">Beszélgetés hivatkozásának megosztása</string>
|
||||
<string name="nc_hint_enter_a_message">Írjon üzenetet…</string>
|
||||
<string name="nc_important_conversation">Fontos beszélgetés</string>
|
||||
<string name="nc_invalid_time">Érvénytelen idő</string>
|
||||
<string name="nc_invitations">Meghívások</string>
|
||||
<string name="nc_join_open_conversations">Csatlakozás a nyílt beszélgetésekhez</string>
|
||||
<string name="nc_keep">Megtartás</string>
|
||||
@ -278,9 +328,9 @@
|
||||
<string name="nc_participants">Résztvevők</string>
|
||||
<string name="nc_participants_add">Résztvevők hozzáadása</string>
|
||||
<string name="nc_password">Jelszó</string>
|
||||
<string name="nc_permissions_ask">Jogosultságok beállításaa</string>
|
||||
<string name="nc_permissions_denied">Néhány jogosultság meg lett tagadva.</string>
|
||||
<string name="nc_permissions_rationale_dialog_title">Engedélyezzen jogosultságokat</string>
|
||||
<string name="nc_permissions_ask">Engedélyek beállítása</string>
|
||||
<string name="nc_permissions_denied">Néhány engedély meg lett tagadva.</string>
|
||||
<string name="nc_permissions_rationale_dialog_title">Adja meg az engedélyeket</string>
|
||||
<string name="nc_permissions_settings">Beállítások megnyitása</string>
|
||||
<string name="nc_permissions_settings_hint">Adjon engedélyt a Beállítások > Engedélyek menüpontban</string>
|
||||
<string name="nc_phone_book_integration_account_not_found">A fiók nem található</string>
|
||||
@ -349,7 +399,7 @@
|
||||
<string name="nc_settings_notification_sounds_post_oreo">Értesítések</string>
|
||||
<string name="nc_settings_other_notifications_ringtone">Üzenetek</string>
|
||||
<string name="nc_settings_phone_book_integration_desc">Párosítsa a névjegyeket telefonszám alapján, hogy integrálja a Beszélgetéseket a rendszer Névjegyek alkalmazásba</string>
|
||||
<string name="nc_settings_phone_book_integration_phone_number_dialog_429">429-es hiba Túl Sok Kérés</string>
|
||||
<string name="nc_settings_phone_book_integration_phone_number_dialog_429">429-es hiba – Túl sok kérés</string>
|
||||
<string name="nc_settings_phone_book_integration_phone_number_dialog_description">Beállíthatja telefonszámát, hogy a többi felhasználó megtalálja Önt</string>
|
||||
<string name="nc_settings_phone_book_integration_phone_number_dialog_edit_text_hint">Írja be a telefonszámot</string>
|
||||
<string name="nc_settings_phone_book_integration_phone_number_dialog_invalid">Érvénytelen telefonszám-formátum</string>
|
||||
|
@ -9,6 +9,7 @@
|
||||
<string name="archive_hint">Po zarchiwizowaniu rozmowa zostanie domyślnie ukryta. Wybierz filtr „Zarchiwizowane”, aby wyświetlić zarchiwizowane rozmowy. Bezpośrednie wzmianki będą nadal otrzymywane.</string>
|
||||
<string name="archived">Zarchiwizowane</string>
|
||||
<string name="archived_conversation">Zarchiwizowane %1$s</string>
|
||||
<string name="audio_call">Rozmowa audio</string>
|
||||
<string name="audio_output_bluetooth">Bluetooth</string>
|
||||
<string name="audio_output_dialog_headline">Wyjście audio</string>
|
||||
<string name="audio_output_phone">Telefon</string>
|
||||
@ -32,8 +33,10 @@
|
||||
<string name="close">Zamknij</string>
|
||||
<string name="close_icon">Ikona zamknięcia</string>
|
||||
<string name="connection_established">Połączenie nawiązane</string>
|
||||
<string name="connection_lost">Brak połączenia z serwerem</string>
|
||||
<string name="connection_lost_sent_messages_are_queued">Utracono połączenie - wysłane wiadomości są w kolejce</string>
|
||||
<string name="continuous_voice_message_recording">Zablokuj nagrywanie w celu ciągłego nagrywania wiadomości głosowej</string>
|
||||
<string name="conversation_archived">Konwersacja została zarchiwizowana.</string>
|
||||
<string name="conversation_is_read_only">Rozmowa jest tylko do odczytu</string>
|
||||
<string name="conversation_read_only_failed">Nie udało się ustawić rozmowy Tylko do odczytu</string>
|
||||
<string name="conversations">Rozmowy</string>
|
||||
@ -47,6 +50,7 @@
|
||||
<string name="dnd">Nie przeszkadzać</string>
|
||||
<string name="dontClear">Nie czyść</string>
|
||||
<string name="edit">Edytuj</string>
|
||||
<string name="edit_error_24_hours_old_message">Wiadomości starsze niż 24 godziny nie mogą być edytowane.</string>
|
||||
<string name="edit_message_icon_description">Edytuj wiadomość</string>
|
||||
<string name="emoji_category_recent">Ostatnie</string>
|
||||
<string name="encrypted">Zaszyfrowane</string>
|
||||
@ -68,6 +72,7 @@
|
||||
<string name="leave_call">Rozłącz się</string>
|
||||
<string name="left_conversation">Opuściłeś rozmowę %1$s</string>
|
||||
<string name="load_more_results">Wczytaj więcej wyników</string>
|
||||
<string name="local_time">Czas lokalny: %1$s</string>
|
||||
<string name="lock_conversation">Zablokuj rozmowę</string>
|
||||
<string name="lock_symbol">Symbol zamknięcia</string>
|
||||
<string name="lower_hand">Opuścić rękę</string>
|
||||
@ -80,6 +85,7 @@
|
||||
<string name="menu_item_sort_by_name_z_a">Z - A</string>
|
||||
<string name="menu_item_sort_by_size_biggest_first">Od największych</string>
|
||||
<string name="menu_item_sort_by_size_smallest_first">Od najmniejszych</string>
|
||||
<string name="message_copied">Wiadomość skopiowana</string>
|
||||
<string name="message_deleted_by_you">Wiadomość usunięta przez Ciebie</string>
|
||||
<string name="message_last_edited_by">Edytowany przez %1$s</string>
|
||||
<string name="message_poll_tap_to_open">Dotknij, aby otworzyć sondę</string>
|
||||
@ -164,6 +170,7 @@
|
||||
<string name="nc_copy_message">Kopiuj</string>
|
||||
<string name="nc_create_new_conversation">Utwórz nową rozmowę</string>
|
||||
<string name="nc_create_poll">Utwórz sondę</string>
|
||||
<string name="nc_current_user">Ty:</string>
|
||||
<string name="nc_date_header_today">Dzisiaj</string>
|
||||
<string name="nc_date_header_yesterday">Wczoraj</string>
|
||||
<string name="nc_delete">Usuń</string>
|
||||
@ -172,6 +179,7 @@
|
||||
<string name="nc_delete_conversation_more">Jeśli usuniesz rozmowę, zostanie ona również usunięta dla wszystkich pozostałych uczestników.</string>
|
||||
<string name="nc_delete_message">Usuń</string>
|
||||
<string name="nc_delete_message_leaked_to_matterbridge">Wiadomość została pomyślnie usunięta, ale mogła przedostać się do innych usług</string>
|
||||
<string name="nc_delete_now">Usuń teraz</string>
|
||||
<string name="nc_deleted_user">Użytkownik %1$s został usunięty</string>
|
||||
<string name="nc_demote">Zdegraduj z moderatora</string>
|
||||
<string name="nc_description_record_voice">Nagraj wiadomość głosową</string>
|
||||
@ -232,6 +240,8 @@
|
||||
<string name="nc_edit_message">Edycja</string>
|
||||
<string name="nc_edit_message_text">Edytuj wiadomość</string>
|
||||
<string name="nc_edited_by_admin">Edytowane przez administratora</string>
|
||||
<string name="nc_event_conversation_menu">Menu rozmowy wydarzenia</string>
|
||||
<string name="nc_event_schedule">Harmonogram</string>
|
||||
<string name="nc_expire_message_eight_hours">8 godzin</string>
|
||||
<string name="nc_expire_message_four_weeks">4 tygodnie</string>
|
||||
<string name="nc_expire_message_off">Wyłączona</string>
|
||||
@ -248,6 +258,7 @@
|
||||
<string name="nc_federation_pending_invitation_hint">Masz oczekujące zaproszenia</string>
|
||||
<string name="nc_file_browser_back">Wstecz</string>
|
||||
<string name="nc_file_storage_permission">Wymagane jest zezwolenie na dostęp do plików</string>
|
||||
<string name="nc_filter">Filtruj rozmowy</string>
|
||||
<string name="nc_following_link">Użytkownik korzysta z łącza publicznego</string>
|
||||
<string name="nc_formatted_message_you">Ty: %1$s</string>
|
||||
<string name="nc_forward_message">Przekaż dalej</string>
|
||||
@ -274,8 +285,11 @@
|
||||
<string name="nc_ignore_battery_optimization_dialog_text">Optymalizacja baterii nie jest ignorowana. Należy to zmienić, aby mieć pewność, że powiadomienia działają w tle! Kliknij OK i wybierz \"Wszystkie aplikacje\" -> %1$s -> Nie optymalizuj</string>
|
||||
<string name="nc_ignore_battery_optimization_dialog_title">Zignoruj optymalizację baterii</string>
|
||||
<string name="nc_important_conversation">Ważna rozmowa</string>
|
||||
<string name="nc_important_conversation_desc">Status użytkownika „Nie przeszkadzać” jest ignorowany dla ważnych rozmów.</string>
|
||||
<string name="nc_invalid_time">Nieprawidłowy czas</string>
|
||||
<string name="nc_invitations">Zaproszenia</string>
|
||||
<string name="nc_join_open_conversations">Dołącz do otwartych rozmów</string>
|
||||
<string name="nc_keep">Pozostaw</string>
|
||||
<string name="nc_last_moderator_leaving_room_warning">Zanim opuścisz rozmowę, musisz wybrać nowego moderatora</string>
|
||||
<string name="nc_last_modified">%1$s | Ostatnio zmodyfikowany: %2$s</string>
|
||||
<string name="nc_leave">Opuść rozmowę</string>
|
||||
@ -295,6 +309,8 @@
|
||||
<string name="nc_manual">Nie ustawiony</string>
|
||||
<string name="nc_mark_as_read">Oznacz jako przeczytane</string>
|
||||
<string name="nc_mark_as_unread">Oznacz jako nieprzeczytane</string>
|
||||
<string name="nc_mark_conversation_as_important">Rozmowa oznaczona jako ważna</string>
|
||||
<string name="nc_mark_conversation_as_insensitive">Rozmowa została odznaczona jako wrażliwa</string>
|
||||
<string name="nc_message_failed">Nie powiodło się</string>
|
||||
<string name="nc_message_failed_to_send">Nie udało się wysłać wiadomości:</string>
|
||||
<string name="nc_message_offline">Niedostępny</string>
|
||||
@ -380,6 +396,8 @@
|
||||
<string name="nc_screen_lock_timeout_three_hundred">300</string>
|
||||
<string name="nc_search">Szukaj</string>
|
||||
<string name="nc_select_an_account">Wybierz konto</string>
|
||||
<string name="nc_sensitive_conversation">Rozmowa poufna</string>
|
||||
<string name="nc_sensitive_conversation_hint">Podgląd wiadomości zostanie wyłączony na liście rozmów i w powiadomieniach.</string>
|
||||
<string name="nc_sent_a_gif" formatted="true">%1$s wysłał GIF.</string>
|
||||
<string name="nc_sent_a_gif_you">Wysłałeś GIF.</string>
|
||||
<string name="nc_sent_a_video" formatted="true">%1$s wysłał plik wideo.</string>
|
||||
|
@ -159,7 +159,6 @@
|
||||
<string name="nc_configure_cert_auth">Selecionar certificado de autenticação</string>
|
||||
<string name="nc_connecting_call">Conectando …</string>
|
||||
<string name="nc_contacts_done">Concluído</string>
|
||||
<string name="nc_conversation_auto_delete_notice">Esta conversa será excluída automaticamente para todos em %1$d dias sem atividade</string>
|
||||
<string name="nc_conversation_description">Descrição da conversa</string>
|
||||
<string name="nc_conversation_menu_conversation_info">Informação da conversa</string>
|
||||
<string name="nc_conversation_menu_video_call">Chamada de vídeo</string>
|
||||
@ -313,7 +312,7 @@
|
||||
<string name="nc_mark_conversation_as_important">Conversa marcada como importante</string>
|
||||
<string name="nc_mark_conversation_as_insensitive">Conversa desmarcada como sensível</string>
|
||||
<string name="nc_mark_conversation_as_sensitive">Conversa marcada como sensível</string>
|
||||
<string name="nc_mark_conversation_as_unimportant">Conversa não marcada como importante</string>
|
||||
<string name="nc_mark_conversation_as_unimportant">Conversa desmarcada como importante</string>
|
||||
<string name="nc_meeting_ended">Reunião encerrada</string>
|
||||
<string name="nc_message_added_to_notes">Mensagem adicionada às notas</string>
|
||||
<string name="nc_message_failed">Falhou</string>
|
||||
|
@ -159,7 +159,6 @@
|
||||
<string name="nc_configure_cert_auth">Одабери сертификат за пријаву</string>
|
||||
<string name="nc_connecting_call">Повезивање ..</string>
|
||||
<string name="nc_contacts_done">Готово</string>
|
||||
<string name="nc_conversation_auto_delete_notice">Овај разговор ће се аутоматски обрисати за све након %1$d дана неактивности</string>
|
||||
<string name="nc_conversation_description">Опис разговора</string>
|
||||
<string name="nc_conversation_menu_conversation_info">Информације о разговору</string>
|
||||
<string name="nc_conversation_menu_video_call">Видео позив</string>
|
||||
@ -310,8 +309,10 @@
|
||||
<string name="nc_manual">Није постављено</string>
|
||||
<string name="nc_mark_as_read">Означи као прочитано</string>
|
||||
<string name="nc_mark_as_unread">Означи као непрочитано</string>
|
||||
<string name="nc_mark_conversation_as_important">Разговор је означен као важан</string>
|
||||
<string name="nc_mark_conversation_as_insensitive">Разговор више није означен као осетљив</string>
|
||||
<string name="nc_mark_conversation_as_sensitive">Разговор је означен као осетљив</string>
|
||||
<string name="nc_mark_conversation_as_unimportant">Разговор више није означен као важан</string>
|
||||
<string name="nc_meeting_ended">Састанак је завршен</string>
|
||||
<string name="nc_message_added_to_notes">У белешке је додата порука</string>
|
||||
<string name="nc_message_failed">Није успело</string>
|
||||
|
@ -158,7 +158,6 @@
|
||||
<string name="nc_configure_cert_auth">Välj autentiseringscertifikat</string>
|
||||
<string name="nc_connecting_call">Ansluter…</string>
|
||||
<string name="nc_contacts_done">Färdig</string>
|
||||
<string name="nc_conversation_auto_delete_notice">Den här konversationen kommer automatiskt att tas bort för alla om %1$d dagar utan aktivitet</string>
|
||||
<string name="nc_conversation_description">Konversationsbeskrivning</string>
|
||||
<string name="nc_conversation_menu_conversation_info">Konversationsinfo</string>
|
||||
<string name="nc_conversation_menu_video_call">Videosamtal</string>
|
||||
@ -543,6 +542,7 @@
|
||||
<string name="online_status">Online-status</string>
|
||||
<string name="openConversations">Öppna konversationer</string>
|
||||
<string name="open_in_files_app">Öppna i appen Filer</string>
|
||||
<string name="open_notes">Öppna anteckningar</string>
|
||||
<string name="play_pause_voice_message">Spela/pausa röstmeddelande</string>
|
||||
<string name="playback_speed_control">Kontroll av uppspelningshastighet</string>
|
||||
<string name="polls_add_option">Lägg till alternativ</string>
|
||||
@ -679,6 +679,10 @@
|
||||
<item quantity="one">Se %d liknande meddelande</item>
|
||||
<item quantity="other">Se %d liknande meddelanden</item>
|
||||
</plurals>
|
||||
<plurals name="nc_conversation_auto_delete_info">
|
||||
<item quantity="one">Den här konversationen kommer automatiskt att tas bort för alla om %1$d dag utan aktivitet</item>
|
||||
<item quantity="other">Den här konversationen kommer automatiskt att tas bort för alla om %1$d dagar utan aktivitet</item>
|
||||
</plurals>
|
||||
<plurals name="polls_amount_voters">
|
||||
<item quantity="one">%d röst</item>
|
||||
<item quantity="other">%d röster</item>
|
||||
|
@ -3,6 +3,7 @@
|
||||
<string name= "nc_edit">Редагувати</string>
|
||||
<string name="add_participants">Додати</string>
|
||||
<string name="appbar_search_in">Пошук у %s</string>
|
||||
<string name="archived">Заархівовані</string>
|
||||
<string name="audio_output_bluetooth">Bluetooth</string>
|
||||
<string name="audio_output_dialog_headline">Вивід аудіо</string>
|
||||
<string name="audio_output_phone">Телефон</string>
|
||||
|
@ -159,7 +159,6 @@
|
||||
<string name="nc_configure_cert_auth">選擇驗證證書</string>
|
||||
<string name="nc_connecting_call">連線中 …</string>
|
||||
<string name="nc_contacts_done">完成</string>
|
||||
<string name="nc_conversation_auto_delete_notice">此對話如無人於%1$d天內互動,將會自動為所有人刪除。</string>
|
||||
<string name="nc_conversation_description">對話描述</string>
|
||||
<string name="nc_conversation_menu_conversation_info">對話資訊</string>
|
||||
<string name="nc_conversation_menu_video_call">視訊通話</string>
|
||||
|
@ -159,7 +159,6 @@
|
||||
<string name="nc_configure_cert_auth">選擇驗證憑證</string>
|
||||
<string name="nc_connecting_call">連線中 …</string>
|
||||
<string name="nc_contacts_done">完成</string>
|
||||
<string name="nc_conversation_auto_delete_notice">%1$d天內沒有活動的每個人都會自動刪除此對話。</string>
|
||||
<string name="nc_conversation_description">對話描述</string>
|
||||
<string name="nc_conversation_menu_conversation_info">對話資訊</string>
|
||||
<string name="nc_conversation_menu_video_call">視訊通話</string>
|
||||
@ -544,6 +543,7 @@
|
||||
<string name="online_status">線上狀態</string>
|
||||
<string name="openConversations">開啟對話</string>
|
||||
<string name="open_in_files_app">在「檔案」應用程式中開啟</string>
|
||||
<string name="open_notes">開啟筆記</string>
|
||||
<string name="play_pause_voice_message">播放/暫停語音訊息</string>
|
||||
<string name="playback_speed_control">播放速度控制</string>
|
||||
<string name="polls_add_option">新增選項</string>
|
||||
@ -680,6 +680,9 @@
|
||||
<plurals name="see_similar_system_messages">
|
||||
<item quantity="other">檢視 %d 則類似的訊息</item>
|
||||
</plurals>
|
||||
<plurals name="nc_conversation_auto_delete_info">
|
||||
<item quantity="other">此對話若於%1$d天內沒有活動,將會自動為所有人刪除</item>
|
||||
</plurals>
|
||||
<plurals name="polls_amount_voters">
|
||||
<item quantity="other">%d 票</item>
|
||||
</plurals>
|
||||
|
@ -520,8 +520,11 @@ How to translate with transifex:
|
||||
<string name="nc_forward_message">Forward</string>
|
||||
<string name="nc_reply">Reply</string>
|
||||
<string name="nc_reply_privately">Reply privately</string>
|
||||
<plurals name="nc_conversation_auto_delete_info">
|
||||
<item quantity="one">This conversation will be automatically deleted for everyone in %1$d day of no activity</item>
|
||||
<item quantity="other">This conversation will be automatically deleted for everyone in %1$d days of no activity</item>
|
||||
</plurals>
|
||||
<string name="nc_delete_message">Delete</string>
|
||||
<string name="nc_conversation_auto_delete_notice">This conversation will be automatically deleted for everyone in %1$d days of no activity</string>
|
||||
<string name="nc_delete_now">Delete now</string>
|
||||
<string name="nc_keep">Keep</string>
|
||||
<string name="nc_delete_message_leaked_to_matterbridge">Message deleted successfully, but it might have been leaked to other services</string>
|
||||
@ -860,4 +863,5 @@ How to translate with transifex:
|
||||
<string name="unarchived_conversation">Unarchived %1$s</string>
|
||||
<string name="conversation_archived">Conversation is archived</string>
|
||||
<string name="local_time">Local time: %1$s</string>
|
||||
<string name="open_notes">Open Notes</string>
|
||||
</resources>
|
||||
|
@ -24,7 +24,7 @@ buildscript {
|
||||
classpath 'com.android.tools.build:gradle:8.10.1'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}"
|
||||
classpath "org.jetbrains.kotlin:kotlin-serialization:${kotlinVersion}"
|
||||
classpath 'com.github.spotbugs.snom:spotbugs-gradle-plugin:6.1.13'
|
||||
classpath 'com.github.spotbugs.snom:spotbugs-gradle-plugin:6.2.0'
|
||||
classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.23.8"
|
||||
classpath "org.jlleitschuh.gradle:ktlint-gradle:12.3.0"
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
|
@ -1432,6 +1432,18 @@ IaddzrPZPmaZ8CtzzyB7+JdSNItBB2Sp
|
||||
=wK3Q
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
pub BDD2A76422470515
|
||||
sub 0C77E993AC36C97C
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mDMEaDypvxYJKwYBBAHaRw8BAQdAv3OEFRIQWBhSii0M3S9P3eGlZLalGY9smzBQ
|
||||
C0aiVXW4OARoPKm/EgorBgEEAZdVAQUBAQdA2THBTS3MqZPdTuKmc7QkAvlvwmJa
|
||||
WEQsXXqkjQdEwD4DAQgHiH4EGBYKACYWIQSu/rh4kM398rwIxKq90qdkIkcFFQUC
|
||||
aDypvwIbDAUJBaOagAAKCRC90qdkIkcFFfyUAPsGJcpKQP2/sQe+XN69rVZMFXhk
|
||||
dYg0U9EhpY/7GHDpHQD+J5Uy2s3USLxeyIylXUFWtxqOocB+vZhvH3Yhmjhwmgw=
|
||||
=zAHg
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
pub BEDE11EAF1164480
|
||||
uid Joe Schmetzer <joe@exubero.com>
|
||||
|
||||
|
@ -12,9 +12,6 @@
|
||||
<trust group="org.javassist" name="javassist" version="3.26.0-GA" reason="java assist"/>
|
||||
<trust file=".*-sources[.]jar" regex="true"/>
|
||||
</trusted-artifacts>
|
||||
<ignored-keys>
|
||||
<ignored-key id="BDD2A76422470515" reason="Key couldn't be downloaded from any key server"/>
|
||||
</ignored-keys>
|
||||
<trusted-keys>
|
||||
<trusted-key id="02A36B6DB7056EB5E6FFEF893DA731F041734930" group="org.parceler"/>
|
||||
<trusted-key id="03D5EBC6C81161316CF21CEE1592D9DA6586CF26" group="^com[.]afollestad($|([.].*))" regex="true"/>
|
||||
@ -243,6 +240,7 @@
|
||||
<trusted-key id="AA417737BD805456DB3CBDDE6601E5C08DCCBB96" group="info.picocli" name="picocli" version="4.7.5"/>
|
||||
<trusted-key id="AA70C7C433D501636392EC02153E7A3C2B4E5118" group="org.eclipse.ee4j" name="project"/>
|
||||
<trusted-key id="ADBC987D1A7B91DB6B0AAA81995EFBF4A3D20BEB" group="com.pinterest.ktlint"/>
|
||||
<trusted-key id="AEFEB87890CDFDF2BC08C4AABDD2A76422470515" group="com.mebigfatguy.fb-contrib" name="fb-contrib" version="7.6.10"/>
|
||||
<trusted-key id="AFCC4C7594D09E2182C60E0F7A01B0F236E5430F" group="com.google.code.gson"/>
|
||||
<trusted-key id="B02335AA54CCF21E52BBF9ABD9C565AA72BA2FDD" group="io.grpc"/>
|
||||
<trusted-key id="B087A0EB8416563AFE64CEBA4604091C01C3086A" group="com.mebigfatguy.fb-contrib" name="fb-contrib" version="7.6.4"/>
|
||||
@ -288,6 +286,7 @@
|
||||
<trusting group="com.github.spotbugs.snom" name="spotbugs-gradle-plugin" version="6.1.12"/>
|
||||
<trusting group="com.github.spotbugs.snom" name="spotbugs-gradle-plugin" version="6.1.13"/>
|
||||
<trusting group="com.github.spotbugs.snom" name="spotbugs-gradle-plugin" version="6.1.9"/>
|
||||
<trusting group="com.github.spotbugs.snom" name="spotbugs-gradle-plugin" version="6.2.0"/>
|
||||
</trusted-key>
|
||||
<trusted-key id="DA7A1BB85B19E4FB05073431205C8673DC742C7C" group="org.apache" name="apache" version="9"/>
|
||||
<trusted-key id="DB0597E3144342256BC81E3EC727D053C4481CF5" group="org.tensorflow" name="tensorflow-lite-metadata"/>
|
||||
@ -567,6 +566,14 @@
|
||||
<sha256 value="38842af2b96c99540cc756337754b3030de08b029d4bf3aa06e4ecf741da68bf" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="androidx.appcompat" name="appcompat" version="1.7.1">
|
||||
<artifact name="appcompat-1.7.1.aar">
|
||||
<sha256 value="2ad334a323b28046e89b738c77d184cb3dcca32a551ab048851b2fda23a3ba26" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
<artifact name="appcompat-1.7.1.module">
|
||||
<sha256 value="8bbf16792c81cc2dd083681783a5382f573007eee8157182932f1b454e2b7f04" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="androidx.appcompat" name="appcompat-resources" version="1.1.0">
|
||||
<artifact name="appcompat-resources-1.1.0.pom">
|
||||
<sha256 value="046011e16cb01b6f14842565661551110ef1b6427483f5d9068493f4c49690f2" origin="Generated by Gradle" reason="Artifact is not signed"/>
|
||||
@ -604,6 +611,14 @@
|
||||
<sha256 value="d7cca0b553ec109ef20ac70ae6438f584fc6bb5eb269a7f5b4098e02c6d687f9" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="androidx.appcompat" name="appcompat-resources" version="1.7.1">
|
||||
<artifact name="appcompat-resources-1.7.1.aar">
|
||||
<sha256 value="8e2db31224ca53b108c784da2b361959062716d416b210cfef3d5a3828306df0" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
<artifact name="appcompat-resources-1.7.1.module">
|
||||
<sha256 value="163cc5e0f249433ddb0016fbd011ab8de07cf23e07e618c74644688e26cd18e8" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="androidx.arch.core" name="core-common" version="2.0.0">
|
||||
<artifact name="core-common-2.0.0.jar">
|
||||
<sha256 value="4b80b337779b526e64b0ee0ca9e0df43b808344d145f8e9b1c42a134dac57ad8" origin="Generated by Gradle" reason="Artifact is not signed"/>
|
||||
@ -17229,6 +17244,14 @@
|
||||
<sha256 value="bf75304168028b4a0975ef8654802b155aeae47e694f689425f4c5a9f1e3e885" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="org.junit" name="junit-bom" version="5.13.1">
|
||||
<artifact name="junit-bom-5.13.1.module">
|
||||
<sha256 value="33c07ab9724790a6e5859ba07d69117ac530439724545a81c4179e3272c75de8" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
<artifact name="junit-bom-5.13.1.pom">
|
||||
<sha256 value="fa68451ea830572ed43ffe51d75b6a05f7a5e665a602a51f49d6be02063a65f3" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="org.junit" name="junit-bom" version="5.9.0">
|
||||
<artifact name="junit-bom-5.9.0.module">
|
||||
<sha256 value="a054eaf5016b58bbcde86660444a7c0dd3e2caf84d2a1ad5fc4cb525979c19b9" origin="Generated by Gradle"/>
|
||||
@ -17295,6 +17318,14 @@
|
||||
<sha256 value="76d5cb98df4389767a7a718b20379a83cf46c764e98d745db015f1466ae463c0" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="org.junit.platform" name="junit-platform-commons" version="1.13.1">
|
||||
<artifact name="junit-platform-commons-1.13.1.jar">
|
||||
<sha256 value="883d4f23d774976e7835e0695340963ed01f6c7796321e227a932ee36135887e" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
<artifact name="junit-platform-commons-1.13.1.module">
|
||||
<sha256 value="36446c867988ea70ddc62ea1ff405b1997919f903c799ab5006328a2c8c3b320" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="org.junit.platform" name="junit-platform-engine" version="1.11.4">
|
||||
<artifact name="junit-platform-engine-1.11.4.jar">
|
||||
<sha256 value="b1dd998f64f9acadc15966d9cd3d08074662677b3e390f0a38fcbf0bb4c72330" origin="Generated by Gradle"/>
|
||||
@ -17335,6 +17366,14 @@
|
||||
<sha256 value="a1378700a3c66584d5acef5ae75c840ce54d599942b58dbabbda9432271c4302" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="org.junit.platform" name="junit-platform-engine" version="1.13.1">
|
||||
<artifact name="junit-platform-engine-1.13.1.jar">
|
||||
<sha256 value="0863112f8509429b7c6c8cc1ff4619f4af450a0851b0fd95fde560cc7b9cd17e" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
<artifact name="junit-platform-engine-1.13.1.module">
|
||||
<sha256 value="77907381f1294bdd2be205e16e9c62471fbdfc8c0b43ca9fe6d1b8cbbc04ec75" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="org.junit.vintage" name="junit-vintage-engine" version="5.11.4">
|
||||
<artifact name="junit-vintage-engine-5.11.4.jar">
|
||||
<sha256 value="19239ff6cbef4b43e51ed5551faf1f2f1083494596ce1dd2c3275e698ccbc023" origin="Generated by Gradle"/>
|
||||
@ -17375,6 +17414,14 @@
|
||||
<sha256 value="f3d3653cdc1c4c4954c5d3c10f1ed21049125d5f306a08e59e95d828bb0a4c00" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="org.junit.vintage" name="junit-vintage-engine" version="5.13.1">
|
||||
<artifact name="junit-vintage-engine-5.13.1.jar">
|
||||
<sha256 value="5a65e3712b30cc5fd4eaf61073dac3e43fe41bbd7a52959894ddbcaf4ee7d36e" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
<artifact name="junit-vintage-engine-5.13.1.module">
|
||||
<sha256 value="7e571790fb16d052ddef7c07b0576e595bf98abbdeb39db3d837bd82a19f304b" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="org.jvnet.staxex" name="stax-ex" version="1.8.1">
|
||||
<artifact name="stax-ex-1.8.1.jar">
|
||||
<sha256 value="20522549056e9e50aa35ef0b445a2e47a53d06be0b0a9467d704e2483ffb049a" origin="Generated by Gradle"/>
|
||||
|
Loading…
Reference in New Issue
Block a user