mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-06 12:29:47 +01:00
Compare commits
No commits in common. "master" and "alpha-220000006" have entirely different histories.
master
...
alpha-2200
.devcontainer
.drone.yml.github/workflows
analysis.ymlassembleFlavors.ymlcodeql.ymlpr-feedback.ymlrenovate-approve-merge.ymlreuse.ymlscorecard.ymlunit-tests.yml
app
build.gradle
schemas/com.nextcloud.talk.data.source.local.TalkDatabase
src/main
java/com/nextcloud/talk
account
AccountVerificationActivity.ktServerSelectionActivity.ktSwitchAccountActivity.ktWebViewLoginActivity.kt
activities
adapters
call/components
chat
components
contacts
conversationcreation
conversationinfo
conversationinfoedit
conversationlist
data
database
source/local
diagnose
invitation
location
messagesearch
openconversations
profile
settings
shareditems/activities
translate/ui
ui/dialog
utils
res
drawable-night
drawable
baseline_error_24.xmlbaseline_image_24.xmlbaseline_info_24.xmlbaseline_insert_drive_file_24.xmlbaseline_location_pin_24.xmlbaseline_lock_open_24.xmlbaseline_mic_24.xmlbaseline_notifications_24.xmlbaseline_photo_library_24.xmlbaseline_report_problem_24.xmlic_account_plus.xmlic_avatar_group.xmlic_avatar_mail.xmlic_baseline_do_not_touch_24.xmlic_baseline_flash_off_24.xmlic_baseline_flash_on_24.xmlic_baseline_headset_mic_24.xmlic_baseline_keyboard_24.xmlic_baseline_location_on_24.xmlic_baseline_mic_24.xmlic_baseline_mic_red_24.xmlic_baseline_notifications_off_24.xmlic_baseline_person_24.xmlic_baseline_phone_in_talk_24.xmlic_baseline_phone_missed_24.xmlic_baseline_photo_camera_24.xmlic_baseline_picture_in_picture_alt_24.xmlic_baseline_videocam_24.xmlic_call_black_24dp.xmlic_call_end_white_24px.xmlic_call_grey_600_24dp.xmlic_call_white_24dp.xmlic_cancel_black_24dp.xmlic_cancel_white_24dp.xmlic_cellphone.xml
@ -1,4 +1,4 @@
|
|||||||
FROM ubuntu:noble@sha256:440dcf6a5640b2ae5c77724e68787a906afb8ddee98bf86db94eea8528c2c076
|
FROM ubuntu:noble@sha256:b59d21599a2b151e23eea5f6602f4af4d7d31c4e236d22bf0b62b86d2e386b8f
|
||||||
|
|
||||||
ARG DEBIAN_FRONTEND=noninteractive
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
ENV ANDROID_HOME=/usr/lib/android-sdk
|
ENV ANDROID_HOME=/usr/lib/android-sdk
|
||||||
|
10
.drone.yml
10
.drone.yml
@ -8,7 +8,7 @@ name: generic
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: generic
|
- name: generic
|
||||||
image: ghcr.io/nextcloud/continuous-integration-android8:4
|
image: ghcr.io/nextcloud/continuous-integration-android8:3
|
||||||
commands:
|
commands:
|
||||||
- ./gradlew --console=plain assembleGeneric
|
- ./gradlew --console=plain assembleGeneric
|
||||||
|
|
||||||
@ -27,7 +27,7 @@ name: gplay
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: gplay
|
- name: gplay
|
||||||
image: ghcr.io/nextcloud/continuous-integration-android8:4
|
image: ghcr.io/nextcloud/continuous-integration-android8:3
|
||||||
commands:
|
commands:
|
||||||
- ./gradlew --console=plain assembleGplay
|
- ./gradlew --console=plain assembleGplay
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ name: tests
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: all
|
- name: all
|
||||||
image: ghcr.io/nextcloud/continuous-integration-android8:4
|
image: ghcr.io/nextcloud/continuous-integration-android8:3
|
||||||
privileged: true
|
privileged: true
|
||||||
commands:
|
commands:
|
||||||
- emulator -avd android -no-snapshot -gpu swiftshader_indirect -no-window -no-audio -skin 500x833 &
|
- emulator -avd android -no-snapshot -gpu swiftshader_indirect -no-window -no-audio -skin 500x833 &
|
||||||
@ -81,6 +81,4 @@ trigger:
|
|||||||
- pull_request
|
- pull_request
|
||||||
---
|
---
|
||||||
kind: signature
|
kind: signature
|
||||||
hmac: cf0c19e54fa45d1ee226f5f05202a32329b90aaf46711ea073c566a4c4a8a6c5
|
hmac: cdce3f7eea46ef85c0223f62f66d1fe53d7dad007ef095c9f70fa063450d8c75
|
||||||
|
|
||||||
...
|
|
||||||
|
2
.github/workflows/analysis.yml
vendored
2
.github/workflows/analysis.yml
vendored
@ -29,7 +29,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Disabled on forks
|
- name: Disabled on forks
|
||||||
if: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository }}
|
if: ${{ github.event.pull_request.head.repo.full_name != github.repository }}
|
||||||
run: |
|
run: |
|
||||||
echo 'Can not analyze PRs from forks'
|
echo 'Can not analyze PRs from forks'
|
||||||
exit 1
|
exit 1
|
||||||
|
2
.github/workflows/assembleFlavors.yml
vendored
2
.github/workflows/assembleFlavors.yml
vendored
@ -34,7 +34,7 @@ jobs:
|
|||||||
java-version: 17
|
java-version: 17
|
||||||
|
|
||||||
- name: Gradle validate
|
- name: Gradle validate
|
||||||
uses: gradle/actions/wrapper-validation@ac638b010cf58a27ee6c972d7336334ccaf61c96 # v4.4.1
|
uses: gradle/actions/wrapper-validation@8379f6a1328ee0e06e2bb424dadb7b159856a326 # v4.4.0
|
||||||
|
|
||||||
- name: Build ${{ matrix.flavor }}
|
- name: Build ${{ matrix.flavor }}
|
||||||
run: |
|
run: |
|
||||||
|
4
.github/workflows/codeql.yml
vendored
4
.github/workflows/codeql.yml
vendored
@ -43,7 +43,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
swap-size-gb: 10
|
swap-size-gb: 10
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2
|
uses: github/codeql-action/init@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
- name: Set up JDK 17
|
- name: Set up JDK 17
|
||||||
@ -57,4 +57,4 @@ jobs:
|
|||||||
echo "org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError" > "$HOME/.gradle/gradle.properties"
|
echo "org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError" > "$HOME/.gradle/gradle.properties"
|
||||||
./gradlew assembleDebug
|
./gradlew assembleDebug
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2
|
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, -)
|
blocklist=$(curl https://raw.githubusercontent.com/nextcloud/.github/master/non-community-usernames.txt | paste -s -d, -)
|
||||||
echo "blocklist=$blocklist" >> "$GITHUB_OUTPUT"
|
echo "blocklist=$blocklist" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
- uses: nextcloud/pr-feedback-action@e397f3c7e655092b746e3610d121545530c6a90e # main
|
- uses: nextcloud/pr-feedback-action@f0cab224dea8e1f282f9451de322f323c78fc7a5 # main
|
||||||
with:
|
with:
|
||||||
feedback-message: |
|
feedback-message: |
|
||||||
Hello there,
|
Hello there,
|
||||||
|
19
.github/workflows/renovate-approve-merge.yml
vendored
19
.github/workflows/renovate-approve-merge.yml
vendored
@ -29,6 +29,8 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
# for hmarr/auto-approve-action to approve PRs
|
# for hmarr/auto-approve-action to approve PRs
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
# for alexwilson/enable-github-automerge-action to approve PRs
|
||||||
|
contents: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Disabled on forks
|
- name: Disabled on forks
|
||||||
@ -44,18 +46,13 @@ jobs:
|
|||||||
|
|
||||||
# GitHub actions bot approve
|
# GitHub actions bot approve
|
||||||
- uses: hmarr/auto-approve-action@f0939ea97e9205ef24d872e76833fa908a770363 # v4.0.0
|
- uses: hmarr/auto-approve-action@f0939ea97e9205ef24d872e76833fa908a770363 # v4.0.0
|
||||||
if: github.actor == 'renovate[bot]'
|
if: startsWith(steps.branchname.outputs.branch, 'renovate/')
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
||||||
with:
|
|
||||||
ref: ${{ github.head_ref }}
|
|
||||||
|
|
||||||
# Enable GitHub auto merge
|
# Enable GitHub auto merge
|
||||||
- name: Enable Pull Request Automerge
|
- name: Auto merge
|
||||||
if: github.actor == 'renovate[bot]'
|
uses: alexwilson/enable-github-automerge-action@56e3117d1ae1540309dc8f7a9f2825bc3c5f06ff # v2.0.0
|
||||||
run: gh pr merge --merge --auto
|
if: startsWith(steps.branchname.outputs.branch, 'renovate/')
|
||||||
env:
|
with:
|
||||||
GH_TOKEN: ${{ secrets.AUTOMERGE }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
2
.github/workflows/reuse.yml
vendored
2
.github/workflows/reuse.yml
vendored
@ -16,7 +16,7 @@ permissions:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
reuse-compliance-check:
|
reuse-compliance-check:
|
||||||
runs-on: ubuntu-latest-low
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
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.
|
# Upload the results to GitHub's code scanning dashboard.
|
||||||
- name: "Upload to code-scanning"
|
- name: "Upload to code-scanning"
|
||||||
uses: github/codeql-action/upload-sarif@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2
|
uses: github/codeql-action/upload-sarif@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
|
||||||
with:
|
with:
|
||||||
sarif_file: results.sarif
|
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
|
java-version: 17
|
||||||
|
|
||||||
- name: Setup Gradle
|
- name: Setup Gradle
|
||||||
uses: gradle/actions/setup-gradle@ac638b010cf58a27ee6c972d7336334ccaf61c96 # v4.4.1
|
uses: gradle/actions/setup-gradle@8379f6a1328ee0e06e2bb424dadb7b159856a326 # v4.4.0
|
||||||
|
|
||||||
- name: Run unit tests with coverage
|
- name: Run unit tests with coverage
|
||||||
run: ./gradlew testGplayDebugUnit
|
run: ./gradlew testGplayDebugUnit
|
||||||
|
@ -13,9 +13,9 @@ import com.github.spotbugs.snom.Effort
|
|||||||
import com.github.spotbugs.snom.SpotBugsTask
|
import com.github.spotbugs.snom.SpotBugsTask
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id "org.jetbrains.kotlin.plugin.compose" version "2.2.0"
|
id "org.jetbrains.kotlin.plugin.compose" version "2.1.21"
|
||||||
id "org.jetbrains.kotlin.kapt"
|
id "org.jetbrains.kotlin.kapt"
|
||||||
id 'com.google.devtools.ksp' version '2.2.0-2.0.2'
|
id 'com.google.devtools.ksp' version '2.1.21-2.0.2'
|
||||||
}
|
}
|
||||||
|
|
||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
@ -28,19 +28,19 @@ apply plugin: "org.jlleitschuh.gradle.ktlint"
|
|||||||
apply plugin: 'kotlinx-serialization'
|
apply plugin: 'kotlinx-serialization'
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdk 35
|
compileSdk 34
|
||||||
|
|
||||||
namespace 'com.nextcloud.talk'
|
namespace 'com.nextcloud.talk'
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdkVersion 26
|
minSdkVersion 26
|
||||||
targetSdkVersion 35
|
targetSdkVersion 34
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
// mayor.minor.hotfix.increment (for increment: 01-50=Alpha / 51-89=RC / 90-99=stable)
|
// mayor.minor.hotfix.increment (for increment: 01-50=Alpha / 51-89=RC / 90-99=stable)
|
||||||
// xx .xxx .xx .xx
|
// xx .xxx .xx .xx
|
||||||
versionCode 220000008
|
versionCode 220000006
|
||||||
versionName "22.0.0 Alpha 08"
|
versionName "22.0.0 Alpha 06"
|
||||||
|
|
||||||
flavorDimensions "default"
|
flavorDimensions "default"
|
||||||
renderscriptTargetApi 19
|
renderscriptTargetApi 19
|
||||||
@ -155,18 +155,18 @@ ext {
|
|||||||
daggerVersion = "2.56.2"
|
daggerVersion = "2.56.2"
|
||||||
emojiVersion = "1.5.0"
|
emojiVersion = "1.5.0"
|
||||||
fidoVersion = "4.1.0-patch2"
|
fidoVersion = "4.1.0-patch2"
|
||||||
lifecycleVersion = '2.9.1'
|
lifecycleVersion = '2.8.7'
|
||||||
okhttpVersion = "4.12.0"
|
okhttpVersion = "4.12.0"
|
||||||
markwonVersion = "4.6.2"
|
markwonVersion = "4.6.2"
|
||||||
materialDialogsVersion = "3.3.0"
|
materialDialogsVersion = "3.3.0"
|
||||||
parcelerVersion = "1.1.13"
|
parcelerVersion = "1.1.13"
|
||||||
prismVersion = "2.0.0"
|
prismVersion = "2.0.0"
|
||||||
retrofit2Version = "3.0.0"
|
retrofit2Version = "2.12.0"
|
||||||
roomVersion = "2.7.2"
|
roomVersion = "2.7.1"
|
||||||
workVersion = "2.10.2"
|
workVersion = "2.9.1"
|
||||||
espressoVersion = "3.6.1"
|
espressoVersion = "3.6.1"
|
||||||
androidxTestVersion = "1.5.0"
|
androidxTestVersion = "1.5.0"
|
||||||
media3_version = "1.7.1"
|
media3_version = "1.4.1"
|
||||||
coroutines_version = "1.10.2"
|
coroutines_version = "1.10.2"
|
||||||
mockitoKotlinVersion = "5.4.0"
|
mockitoKotlinVersion = "5.4.0"
|
||||||
}
|
}
|
||||||
@ -180,10 +180,10 @@ configurations.configureEach {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
spotbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.14.0'
|
spotbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.14.0'
|
||||||
spotbugsPlugins 'com.mebigfatguy.fb-contrib:fb-contrib:7.6.11'
|
spotbugsPlugins 'com.mebigfatguy.fb-contrib:fb-contrib:7.6.10'
|
||||||
detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:1.23.8")
|
detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:1.23.8")
|
||||||
|
|
||||||
implementation("androidx.compose.runtime:runtime:1.8.3")
|
implementation("androidx.compose.runtime:runtime:1.7.8")
|
||||||
implementation 'androidx.preference:preference-ktx:1.2.1'
|
implementation 'androidx.preference:preference-ktx:1.2.1'
|
||||||
implementation 'androidx.datastore:datastore-core:1.1.7'
|
implementation 'androidx.datastore:datastore-core:1.1.7'
|
||||||
implementation 'androidx.datastore:datastore-preferences:1.1.7'
|
implementation 'androidx.datastore:datastore-preferences:1.1.7'
|
||||||
@ -191,7 +191,7 @@ dependencies {
|
|||||||
|
|
||||||
implementation fileTree(include: ['*'], dir: 'libs')
|
implementation fileTree(include: ['*'], dir: 'libs')
|
||||||
|
|
||||||
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0"
|
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1"
|
||||||
|
|
||||||
implementation 'androidx.appcompat:appcompat:1.7.1'
|
implementation 'androidx.appcompat:appcompat:1.7.1'
|
||||||
implementation 'com.google.android.material:material:1.12.0'
|
implementation 'com.google.android.material:material:1.12.0'
|
||||||
@ -236,7 +236,7 @@ dependencies {
|
|||||||
implementation "com.squareup.okhttp3:logging-interceptor:${okhttpVersion}"
|
implementation "com.squareup.okhttp3:logging-interceptor:${okhttpVersion}"
|
||||||
|
|
||||||
implementation 'com.bluelinelabs:logansquare:1.3.7'
|
implementation 'com.bluelinelabs:logansquare:1.3.7'
|
||||||
implementation 'com.fasterxml.jackson.core:jackson-core:2.19.1'
|
implementation 'com.fasterxml.jackson.core:jackson-core:2.14.3'
|
||||||
kapt 'com.bluelinelabs:logansquare-compiler:1.3.7'
|
kapt 'com.bluelinelabs:logansquare-compiler:1.3.7'
|
||||||
|
|
||||||
implementation "com.squareup.retrofit2:retrofit:${retrofit2Version}"
|
implementation "com.squareup.retrofit2:retrofit:${retrofit2Version}"
|
||||||
@ -301,24 +301,24 @@ dependencies {
|
|||||||
exclude group: 'org.apache.httpcomponents', module: 'httpclient'
|
exclude group: 'org.apache.httpcomponents', module: 'httpclient'
|
||||||
})
|
})
|
||||||
|
|
||||||
implementation 'androidx.core:core-ktx:1.16.0'
|
implementation 'androidx.core:core-ktx:1.13.1'
|
||||||
implementation 'androidx.activity:activity-ktx:1.10.1'
|
implementation 'androidx.activity:activity-ktx:1.9.3'
|
||||||
implementation 'com.github.nextcloud.android-common:ui:0.26.0'
|
implementation 'com.github.nextcloud.android-common:ui:0.23.2'
|
||||||
implementation 'com.github.nextcloud-deps:android-talk-webrtc:132.6834.0'
|
implementation 'com.github.nextcloud-deps:android-talk-webrtc:132.6834.0'
|
||||||
|
|
||||||
gplayImplementation 'com.google.android.gms:play-services-base:18.6.0'
|
gplayImplementation 'com.google.android.gms:play-services-base:18.6.0'
|
||||||
gplayImplementation "com.google.firebase:firebase-messaging:24.1.2"
|
gplayImplementation "com.google.firebase:firebase-messaging:24.1.1"
|
||||||
|
|
||||||
//compose
|
//compose
|
||||||
implementation(platform("androidx.compose:compose-bom:2025.06.01"))
|
implementation(platform("androidx.compose:compose-bom:2025.04.00"))
|
||||||
implementation("androidx.compose.ui:ui")
|
implementation("androidx.compose.ui:ui")
|
||||||
implementation 'androidx.compose.material3:material3:1.3.2'
|
implementation 'androidx.compose.material3:material3:1.3.2'
|
||||||
implementation("androidx.compose.ui:ui-tooling-preview")
|
implementation("androidx.compose.ui:ui-tooling-preview")
|
||||||
implementation 'androidx.activity:activity-compose:1.10.1'
|
implementation 'androidx.activity:activity-compose:1.9.3'
|
||||||
debugImplementation("androidx.compose.ui:ui-tooling")
|
debugImplementation("androidx.compose.ui:ui-tooling")
|
||||||
|
|
||||||
//tests
|
//tests
|
||||||
androidTestImplementation("androidx.compose.ui:ui-test-junit4:1.8.3")
|
androidTestImplementation("androidx.compose.ui:ui-test-junit4:1.7.8")
|
||||||
debugImplementation("androidx.compose.ui:ui-test-manifest")
|
debugImplementation("androidx.compose.ui:ui-test-manifest")
|
||||||
|
|
||||||
testImplementation 'junit:junit:4.13.2'
|
testImplementation 'junit:junit:4.13.2'
|
||||||
@ -343,11 +343,11 @@ dependencies {
|
|||||||
|
|
||||||
androidTestImplementation('com.android.support.test.espresso:espresso-intents:3.0.2')
|
androidTestImplementation('com.android.support.test.espresso:espresso-intents:3.0.2')
|
||||||
|
|
||||||
androidTestImplementation(platform("androidx.compose:compose-bom:2025.06.01"))
|
androidTestImplementation(platform("androidx.compose:compose-bom:2025.04.00"))
|
||||||
testImplementation "org.mockito.kotlin:mockito-kotlin:$mockitoKotlinVersion"
|
testImplementation "org.mockito.kotlin:mockito-kotlin:$mockitoKotlinVersion"
|
||||||
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_version"
|
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_version"
|
||||||
|
|
||||||
testImplementation 'org.junit.vintage:junit-vintage-engine:5.13.3'
|
testImplementation 'org.junit.vintage:junit-vintage-engine:5.13.1'
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.register('installGitHooks', Copy) {
|
tasks.register('installGitHooks', Copy) {
|
||||||
|
@ -1,730 +0,0 @@
|
|||||||
{
|
|
||||||
"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')"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
@ -91,7 +91,7 @@ class AccountVerificationActivity : BaseActivity() {
|
|||||||
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
actionBar?.hide()
|
actionBar?.hide()
|
||||||
initSystemBars()
|
setupSystemColors()
|
||||||
|
|
||||||
handleIntent()
|
handleIntent()
|
||||||
}
|
}
|
||||||
@ -490,9 +490,9 @@ class AccountVerificationActivity : BaseActivity() {
|
|||||||
WorkManager.getInstance(applicationContext).enqueue(accountRemovalWork)
|
WorkManager.getInstance(applicationContext).enqueue(accountRemovalWork)
|
||||||
|
|
||||||
WorkManager.getInstance(context).getWorkInfoByIdLiveData(accountRemovalWork.id)
|
WorkManager.getInstance(context).getWorkInfoByIdLiveData(accountRemovalWork.id)
|
||||||
.observeForever { workInfo: WorkInfo? ->
|
.observeForever { workInfo: WorkInfo ->
|
||||||
|
|
||||||
when (workInfo?.state) {
|
when (workInfo.state) {
|
||||||
WorkInfo.State.SUCCEEDED -> {
|
WorkInfo.State.SUCCEEDED -> {
|
||||||
val intent = Intent(this, ServerSelectionActivity::class.java)
|
val intent = Intent(this, ServerSelectionActivity::class.java)
|
||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
|
@ -78,7 +78,7 @@ class ServerSelectionActivity : BaseActivity() {
|
|||||||
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
actionBar?.hide()
|
actionBar?.hide()
|
||||||
initSystemBars()
|
setupSystemColors()
|
||||||
|
|
||||||
onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
|
onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
|
||||||
}
|
}
|
||||||
|
@ -86,7 +86,7 @@ class SwitchAccountActivity : BaseActivity() {
|
|||||||
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
setupActionBar()
|
setupActionBar()
|
||||||
initSystemBars()
|
setupSystemColors()
|
||||||
|
|
||||||
Configuration.getInstance().load(context, PreferenceManager.getDefaultSharedPreferences(context))
|
Configuration.getInstance().load(context, PreferenceManager.getDefaultSharedPreferences(context))
|
||||||
|
|
||||||
|
@ -114,7 +114,7 @@ class WebViewLoginActivity : BaseActivity() {
|
|||||||
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
actionBar?.hide()
|
actionBar?.hide()
|
||||||
initSystemBars()
|
setupSystemColors()
|
||||||
|
|
||||||
onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
|
onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
|
||||||
handleIntent()
|
handleIntent()
|
||||||
@ -389,9 +389,9 @@ class WebViewLoginActivity : BaseActivity() {
|
|||||||
WorkManager.getInstance(applicationContext).enqueue(accountRemovalWork)
|
WorkManager.getInstance(applicationContext).enqueue(accountRemovalWork)
|
||||||
|
|
||||||
WorkManager.getInstance(context).getWorkInfoByIdLiveData(accountRemovalWork.id)
|
WorkManager.getInstance(context).getWorkInfoByIdLiveData(accountRemovalWork.id)
|
||||||
.observeForever { workInfo: WorkInfo? ->
|
.observeForever { workInfo: WorkInfo ->
|
||||||
|
|
||||||
when (workInfo?.state) {
|
when (workInfo.state) {
|
||||||
WorkInfo.State.SUCCEEDED, WorkInfo.State.FAILED, WorkInfo.State.CANCELLED -> {
|
WorkInfo.State.SUCCEEDED, WorkInfo.State.FAILED, WorkInfo.State.CANCELLED -> {
|
||||||
restartApp()
|
restartApp()
|
||||||
}
|
}
|
||||||
|
@ -11,13 +11,11 @@ package com.nextcloud.talk.activities
|
|||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Build
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.view.WindowInsets
|
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import android.view.inputmethod.EditorInfo
|
import android.view.inputmethod.EditorInfo
|
||||||
import android.webkit.SslErrorHandler
|
import android.webkit.SslErrorHandler
|
||||||
@ -39,7 +37,6 @@ import com.nextcloud.talk.ui.theme.ViewThemeUtils
|
|||||||
import com.nextcloud.talk.utils.DisplayUtils
|
import com.nextcloud.talk.utils.DisplayUtils
|
||||||
import com.nextcloud.talk.utils.FileViewerUtils
|
import com.nextcloud.talk.utils.FileViewerUtils
|
||||||
import com.nextcloud.talk.utils.UriUtils
|
import com.nextcloud.talk.utils.UriUtils
|
||||||
import com.nextcloud.talk.utils.adjustUIForAPILevel35
|
|
||||||
import com.nextcloud.talk.utils.bundle.BundleKeys
|
import com.nextcloud.talk.utils.bundle.BundleKeys
|
||||||
import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
|
import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
|
||||||
import com.nextcloud.talk.utils.preferences.AppPreferences
|
import com.nextcloud.talk.utils.preferences.AppPreferences
|
||||||
@ -84,7 +81,6 @@ open class BaseActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this)
|
NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this)
|
||||||
adjustUIForAPILevel35()
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
cleanTempCertPreference()
|
cleanTempCertPreference()
|
||||||
@ -115,23 +111,10 @@ open class BaseActivity : AppCompatActivity() {
|
|||||||
eventBus.unregister(this)
|
eventBus.unregister(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
fun setupSystemColors() {
|
||||||
* May be aligned with android-common lib in the future: .../ui/util/extensions/AppCompatActivityExtensions.kt
|
|
||||||
*/
|
|
||||||
fun initSystemBars() {
|
|
||||||
window.decorView.setOnApplyWindowInsetsListener { view, insets ->
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
|
|
||||||
val statusBarHeight = insets.getInsets(WindowInsets.Type.statusBars()).top
|
|
||||||
view.setPadding(0, statusBarHeight, 0, 0)
|
|
||||||
val color = ResourcesCompat.getColor(resources, R.color.bg_default, context.theme)
|
|
||||||
view.setBackgroundColor(color)
|
|
||||||
} else {
|
|
||||||
colorizeStatusBar()
|
colorizeStatusBar()
|
||||||
colorizeNavigationBar()
|
colorizeNavigationBar()
|
||||||
}
|
}
|
||||||
insets
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
open fun colorizeStatusBar() {
|
open fun colorizeStatusBar() {
|
||||||
if (resources != null) {
|
if (resources != null) {
|
||||||
|
@ -1,41 +0,0 @@
|
|||||||
/*
|
|
||||||
* Nextcloud Talk - Android Client
|
|
||||||
*
|
|
||||||
* SPDX-FileCopyrightText: 2025 Marcel Hibbe <dev@mhibbe.de>
|
|
||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
*/
|
|
||||||
package com.nextcloud.talk.adapters.items
|
|
||||||
|
|
||||||
import android.view.View
|
|
||||||
import com.nextcloud.talk.R
|
|
||||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
|
||||||
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
|
|
||||||
import eu.davidea.flexibleadapter.items.IFlexible
|
|
||||||
import eu.davidea.viewholders.FlexibleViewHolder
|
|
||||||
|
|
||||||
class SpacerItem(private val height: Int) : AbstractFlexibleItem<SpacerItem.ViewHolder>() {
|
|
||||||
|
|
||||||
override fun getLayoutRes(): Int = R.layout.item_spacer
|
|
||||||
|
|
||||||
override fun createViewHolder(view: View?, adapter: FlexibleAdapter<IFlexible<*>?>?): ViewHolder {
|
|
||||||
return ViewHolder(view!!, adapter!!)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun bindViewHolder(
|
|
||||||
adapter: FlexibleAdapter<IFlexible<*>?>?,
|
|
||||||
holder: ViewHolder,
|
|
||||||
position: Int,
|
|
||||||
payloads: MutableList<Any>?
|
|
||||||
) {
|
|
||||||
holder.itemView.layoutParams.height = height
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun equals(other: Any?) = other is SpacerItem
|
|
||||||
|
|
||||||
override fun hashCode(): Int {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
class ViewHolder(view: View, adapter: FlexibleAdapter<*>) :
|
|
||||||
FlexibleViewHolder(view, adapter)
|
|
||||||
}
|
|
@ -29,7 +29,6 @@ import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedA
|
|||||||
import com.nextcloud.talk.chat.ChatActivity
|
import com.nextcloud.talk.chat.ChatActivity
|
||||||
import com.nextcloud.talk.chat.data.ChatMessageRepository
|
import com.nextcloud.talk.chat.data.ChatMessageRepository
|
||||||
import com.nextcloud.talk.chat.data.model.ChatMessage
|
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.network.NetworkMonitor
|
||||||
import com.nextcloud.talk.data.user.model.User
|
import com.nextcloud.talk.data.user.model.User
|
||||||
import com.nextcloud.talk.databinding.ItemCustomOutcomingTextMessageBinding
|
import com.nextcloud.talk.databinding.ItemCustomOutcomingTextMessageBinding
|
||||||
@ -185,7 +184,7 @@ class OutcomingTextMessageViewHolder(itemView: View) :
|
|||||||
binding.checkMark.visibility = View.INVISIBLE
|
binding.checkMark.visibility = View.INVISIBLE
|
||||||
binding.sendingProgress.visibility = View.GONE
|
binding.sendingProgress.visibility = View.GONE
|
||||||
|
|
||||||
if (message.sendStatus == SendStatus.FAILED) {
|
if (message.sendingFailed) {
|
||||||
updateStatus(R.drawable.baseline_error_outline_24, context.resources?.getString(R.string.nc_message_failed))
|
updateStatus(R.drawable.baseline_error_outline_24, context.resources?.getString(R.string.nc_message_failed))
|
||||||
} else if (message.isTemporary) {
|
} else if (message.isTemporary) {
|
||||||
updateStatus(R.drawable.baseline_schedule_24, context.resources?.getString(R.string.nc_message_sending))
|
updateStatus(R.drawable.baseline_schedule_24, context.resources?.getString(R.string.nc_message_sending))
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
|
|
||||||
package com.nextcloud.talk.call.components
|
package com.nextcloud.talk.call.components
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
@ -30,7 +29,6 @@ import com.nextcloud.talk.adapters.ParticipantUiState
|
|||||||
import org.webrtc.EglBase
|
import org.webrtc.EglBase
|
||||||
import kotlin.math.ceil
|
import kotlin.math.ceil
|
||||||
|
|
||||||
@SuppressLint("UnusedBoxWithConstraintsScope")
|
|
||||||
@Suppress("LongParameterList")
|
@Suppress("LongParameterList")
|
||||||
@Composable
|
@Composable
|
||||||
fun ParticipantGrid(
|
fun ParticipantGrid(
|
||||||
@ -80,9 +78,7 @@ fun ParticipantGrid(
|
|||||||
|
|
||||||
LazyVerticalGrid(
|
LazyVerticalGrid(
|
||||||
columns = GridCells.Fixed(columns),
|
columns = GridCells.Fixed(columns),
|
||||||
modifier = Modifier
|
modifier = Modifier.fillMaxSize(),
|
||||||
.fillMaxWidth()
|
|
||||||
.height(availableHeight),
|
|
||||||
verticalArrangement = Arrangement.spacedBy(itemSpacing),
|
verticalArrangement = Arrangement.spacedBy(itemSpacing),
|
||||||
horizontalArrangement = Arrangement.spacedBy(itemSpacing),
|
horizontalArrangement = Arrangement.spacedBy(itemSpacing),
|
||||||
contentPadding = PaddingValues(vertical = edgePadding, horizontal = edgePadding)
|
contentPadding = PaddingValues(vertical = edgePadding, horizontal = edgePadding)
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
package com.nextcloud.talk.call.components
|
package com.nextcloud.talk.call.components
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.BoxWithConstraints
|
import androidx.compose.foundation.layout.BoxWithConstraints
|
||||||
@ -41,7 +40,6 @@ const val NICK_OFFSET = 4f
|
|||||||
const val NICK_BLUR_RADIUS = 4f
|
const val NICK_BLUR_RADIUS = 4f
|
||||||
const val AVATAR_SIZE_FACTOR = 0.6f
|
const val AVATAR_SIZE_FACTOR = 0.6f
|
||||||
|
|
||||||
@SuppressLint("UnusedBoxWithConstraintsScope")
|
|
||||||
@Suppress("Detekt.LongMethod")
|
@Suppress("Detekt.LongMethod")
|
||||||
@Composable
|
@Composable
|
||||||
fun ParticipantTile(
|
fun ParticipantTile(
|
||||||
|
@ -66,8 +66,6 @@ import androidx.core.graphics.drawable.toDrawable
|
|||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import androidx.core.os.bundleOf
|
import androidx.core.os.bundleOf
|
||||||
import androidx.core.text.bold
|
import androidx.core.text.bold
|
||||||
import androidx.core.view.ViewCompat
|
|
||||||
import androidx.core.view.WindowInsetsCompat
|
|
||||||
import androidx.emoji2.text.EmojiCompat
|
import androidx.emoji2.text.EmojiCompat
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import androidx.fragment.app.commit
|
import androidx.fragment.app.commit
|
||||||
@ -460,28 +458,7 @@ class ChatActivity :
|
|||||||
binding = ActivityChatBinding.inflate(layoutInflater)
|
binding = ActivityChatBinding.inflate(layoutInflater)
|
||||||
setupActionBar()
|
setupActionBar()
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
|
setupSystemColors()
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
|
|
||||||
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.chat_container)) { view, insets ->
|
|
||||||
val statusBarInsets = insets.getInsets(WindowInsetsCompat.Type.statusBars())
|
|
||||||
val navBarInsets = insets.getInsets(WindowInsetsCompat.Type.navigationBars())
|
|
||||||
val imeInsets = insets.getInsets(WindowInsetsCompat.Type.ime())
|
|
||||||
|
|
||||||
val isKeyboardVisible = insets.isVisible(WindowInsetsCompat.Type.ime())
|
|
||||||
val bottomPadding = if (isKeyboardVisible) imeInsets.bottom else navBarInsets.bottom
|
|
||||||
|
|
||||||
view.setPadding(
|
|
||||||
view.paddingLeft,
|
|
||||||
statusBarInsets.top,
|
|
||||||
view.paddingRight,
|
|
||||||
bottomPadding
|
|
||||||
)
|
|
||||||
WindowInsetsCompat.CONSUMED
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
colorizeStatusBar()
|
|
||||||
colorizeNavigationBar()
|
|
||||||
}
|
|
||||||
|
|
||||||
conversationUser = currentUserProvider.currentUser.blockingGet()
|
conversationUser = currentUserProvider.currentUser.blockingGet()
|
||||||
handleIntent(intent)
|
handleIntent(intent)
|
||||||
@ -509,7 +486,7 @@ class ChatActivity :
|
|||||||
initObservers()
|
initObservers()
|
||||||
|
|
||||||
pickMultipleMedia = registerForActivityResult(
|
pickMultipleMedia = registerForActivityResult(
|
||||||
ActivityResultContracts.PickMultipleVisualMedia(MAX_AMOUNT_MEDIA_FILE_PICKER)
|
ActivityResultContracts.PickMultipleVisualMedia(5)
|
||||||
) { uris ->
|
) { uris ->
|
||||||
if (uris.isNotEmpty()) {
|
if (uris.isNotEmpty()) {
|
||||||
onChooseFileResult(uris)
|
onChooseFileResult(uris)
|
||||||
@ -707,7 +684,7 @@ class ChatActivity :
|
|||||||
?.split("#")
|
?.split("#")
|
||||||
?.getOrNull(1)
|
?.getOrNull(1)
|
||||||
?.toLongOrNull()
|
?.toLongOrNull()
|
||||||
val currentTimeStamp = (System.currentTimeMillis() / ONE_SECOND_IN_MILLIS).toLong()
|
val currentTimeStamp = (System.currentTimeMillis() / 1000).toLong()
|
||||||
val retentionPeriod = retentionOfEventRooms(spreedCapabilities)
|
val retentionPeriod = retentionOfEventRooms(spreedCapabilities)
|
||||||
val isPastEvent = eventEndTimeStamp?.let { it < currentTimeStamp }
|
val isPastEvent = eventEndTimeStamp?.let { it < currentTimeStamp }
|
||||||
if (isPastEvent == true && retentionPeriod != 0) {
|
if (isPastEvent == true && retentionPeriod != 0) {
|
||||||
@ -1268,9 +1245,8 @@ class ChatActivity :
|
|||||||
val deleteNoticeText = binding.conversationDeleteNotice.findViewById<TextView>(R.id.deletion_message)
|
val deleteNoticeText = binding.conversationDeleteNotice.findViewById<TextView>(R.id.deletion_message)
|
||||||
viewThemeUtils.material.themeCardView(binding.conversationDeleteNotice)
|
viewThemeUtils.material.themeCardView(binding.conversationDeleteNotice)
|
||||||
|
|
||||||
deleteNoticeText.text = resources.getQuantityString(
|
deleteNoticeText.text = String.format(
|
||||||
R.plurals.nc_conversation_auto_delete_info,
|
resources.getString(R.string.nc_conversation_auto_delete_notice),
|
||||||
retentionPeriod,
|
|
||||||
retentionPeriod
|
retentionPeriod
|
||||||
)
|
)
|
||||||
viewThemeUtils.material.colorMaterialButtonPrimaryTonal(
|
viewThemeUtils.material.colorMaterialButtonPrimaryTonal(
|
||||||
@ -1993,8 +1969,8 @@ class ChatActivity :
|
|||||||
WorkManager.getInstance().enqueue(downloadWorker)
|
WorkManager.getInstance().enqueue(downloadWorker)
|
||||||
|
|
||||||
WorkManager.getInstance(context).getWorkInfoByIdLiveData(downloadWorker.id)
|
WorkManager.getInstance(context).getWorkInfoByIdLiveData(downloadWorker.id)
|
||||||
.observeForever { workInfo: WorkInfo? ->
|
.observeForever { workInfo: WorkInfo ->
|
||||||
if (workInfo?.state == WorkInfo.State.SUCCEEDED) {
|
if (workInfo.state == WorkInfo.State.SUCCEEDED) {
|
||||||
funToCallWhenDownloadSuccessful()
|
funToCallWhenDownloadSuccessful()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4216,6 +4192,5 @@ class ChatActivity :
|
|||||||
const val OUT_OF_OFFICE_ALPHA = 76
|
const val OUT_OF_OFFICE_ALPHA = 76
|
||||||
const val ZERO_INDEX = 0
|
const val ZERO_INDEX = 0
|
||||||
const val ONE_INDEX = 1
|
const val ONE_INDEX = 1
|
||||||
const val MAX_AMOUNT_MEDIA_FILE_PICKER = 10
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -200,7 +200,7 @@ class MessageInputFragment : Fragment() {
|
|||||||
val connectionGained = (!wasOnline && isOnline)
|
val connectionGained = (!wasOnline && isOnline)
|
||||||
Log.d(TAG, "isOnline: $isOnline\nwasOnline: $wasOnline\nconnectionGained: $connectionGained")
|
Log.d(TAG, "isOnline: $isOnline\nwasOnline: $wasOnline\nconnectionGained: $connectionGained")
|
||||||
if (connectionGained) {
|
if (connectionGained) {
|
||||||
chatActivity.messageInputViewModel.sendUnsentMessages(
|
chatActivity.messageInputViewModel.sendTempMessages(
|
||||||
chatActivity.conversationUser!!.getCredentials(),
|
chatActivity.conversationUser!!.getCredentials(),
|
||||||
ApiUtils.getUrlForChat(
|
ApiUtils.getUrlForChat(
|
||||||
chatActivity.chatApiVersion,
|
chatActivity.chatApiVersion,
|
||||||
|
@ -110,7 +110,7 @@ interface ChatMessageRepository : LifecycleAwareManager {
|
|||||||
|
|
||||||
suspend fun editTempChatMessage(message: ChatMessage, editedMessageText: String): Flow<Boolean>
|
suspend fun editTempChatMessage(message: ChatMessage, editedMessageText: String): Flow<Boolean>
|
||||||
|
|
||||||
suspend fun sendUnsentChatMessages(credentials: String, url: String)
|
suspend fun sendTempChatMessages(credentials: String, url: String)
|
||||||
|
|
||||||
suspend fun deleteTempMessage(chatMessage: ChatMessage)
|
suspend fun deleteTempMessage(chatMessage: ChatMessage)
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,6 @@ import android.util.Log
|
|||||||
import com.bluelinelabs.logansquare.annotation.JsonIgnore
|
import com.bluelinelabs.logansquare.annotation.JsonIgnore
|
||||||
import com.nextcloud.talk.R
|
import com.nextcloud.talk.R
|
||||||
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
|
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.data.user.model.User
|
||||||
import com.nextcloud.talk.models.json.chat.ChatUtils.Companion.getParsedMessage
|
import com.nextcloud.talk.models.json.chat.ChatUtils.Companion.getParsedMessage
|
||||||
import com.nextcloud.talk.models.json.chat.ReadStatus
|
import com.nextcloud.talk.models.json.chat.ReadStatus
|
||||||
@ -120,7 +119,7 @@ data class ChatMessage(
|
|||||||
|
|
||||||
var referenceId: String? = null,
|
var referenceId: String? = null,
|
||||||
|
|
||||||
var sendStatus: SendStatus? = null,
|
var sendingFailed: Boolean = true,
|
||||||
|
|
||||||
var silent: Boolean = false
|
var silent: Boolean = false
|
||||||
|
|
||||||
|
@ -19,7 +19,6 @@ import com.nextcloud.talk.data.database.mappers.asEntity
|
|||||||
import com.nextcloud.talk.data.database.mappers.asModel
|
import com.nextcloud.talk.data.database.mappers.asModel
|
||||||
import com.nextcloud.talk.data.database.model.ChatBlockEntity
|
import com.nextcloud.talk.data.database.model.ChatBlockEntity
|
||||||
import com.nextcloud.talk.data.database.model.ChatMessageEntity
|
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.network.NetworkMonitor
|
||||||
import com.nextcloud.talk.data.user.model.User
|
import com.nextcloud.talk.data.user.model.User
|
||||||
import com.nextcloud.talk.extensions.toIntOrZero
|
import com.nextcloud.talk.extensions.toIntOrZero
|
||||||
@ -215,8 +214,7 @@ class OfflineFirstChatRepository @Inject constructor(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// this call could be deleted when we have a worker to send messages..
|
sendTempChatMessages(credentials, urlForChatting)
|
||||||
sendUnsentChatMessages(credentials, urlForChatting)
|
|
||||||
|
|
||||||
// delay is a dirty workaround to make sure messages are added to adapter on initial load before dealing
|
// 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).
|
// with them (otherwise there is a race condition).
|
||||||
@ -367,18 +365,11 @@ class OfflineFirstChatRepository @Inject constructor(
|
|||||||
lookIntoFuture: Boolean,
|
lookIntoFuture: Boolean,
|
||||||
showUnreadMessagesMarker: Boolean
|
showUnreadMessagesMarker: Boolean
|
||||||
) {
|
) {
|
||||||
receivedChatMessages.forEach {
|
|
||||||
Log.d(TAG, "receivedChatMessage: " + it.message)
|
|
||||||
}
|
|
||||||
|
|
||||||
// remove all temp messages from UI
|
// remove all temp messages from UI
|
||||||
val oldTempMessages = chatDao.getTempMessagesForConversation(internalConversationId)
|
val oldTempMessages = chatDao.getTempMessagesForConversation(internalConversationId)
|
||||||
.first()
|
.first()
|
||||||
.map(ChatMessageEntity::asModel)
|
.map(ChatMessageEntity::asModel)
|
||||||
oldTempMessages.forEach {
|
oldTempMessages.forEach { _removeMessageFlow.emit(it) }
|
||||||
Log.d(TAG, "oldTempMessage to be removed from UI: " + it.message)
|
|
||||||
_removeMessageFlow.emit(it)
|
|
||||||
}
|
|
||||||
|
|
||||||
// add new messages to UI
|
// add new messages to UI
|
||||||
val tripleChatMessages = Triple(lookIntoFuture, showUnreadMessagesMarker, receivedChatMessages)
|
val tripleChatMessages = Triple(lookIntoFuture, showUnreadMessagesMarker, receivedChatMessages)
|
||||||
@ -387,9 +378,6 @@ class OfflineFirstChatRepository @Inject constructor(
|
|||||||
// remove temp messages from DB that are now found in the new messages
|
// remove temp messages from DB that are now found in the new messages
|
||||||
val chatMessagesReferenceIds = receivedChatMessages.mapTo(HashSet(receivedChatMessages.size)) { it.referenceId }
|
val chatMessagesReferenceIds = receivedChatMessages.mapTo(HashSet(receivedChatMessages.size)) { it.referenceId }
|
||||||
val tempChatMessagesThatCanBeReplaced = oldTempMessages.filter { it.referenceId in chatMessagesReferenceIds }
|
val tempChatMessagesThatCanBeReplaced = oldTempMessages.filter { it.referenceId in chatMessagesReferenceIds }
|
||||||
tempChatMessagesThatCanBeReplaced.forEach {
|
|
||||||
Log.d(TAG, "oldTempMessage that was identified in newMessages: " + it.message)
|
|
||||||
}
|
|
||||||
chatDao.deleteTempChatMessages(
|
chatDao.deleteTempChatMessages(
|
||||||
internalConversationId,
|
internalConversationId,
|
||||||
tempChatMessagesThatCanBeReplaced.map { it.referenceId!! }
|
tempChatMessagesThatCanBeReplaced.map { it.referenceId!! }
|
||||||
@ -401,10 +389,6 @@ class OfflineFirstChatRepository @Inject constructor(
|
|||||||
.sortedBy { it.internalId }
|
.sortedBy { it.internalId }
|
||||||
.map(ChatMessageEntity::asModel)
|
.map(ChatMessageEntity::asModel)
|
||||||
|
|
||||||
remainingTempMessages.forEach {
|
|
||||||
Log.d(TAG, "remainingTempMessage: " + it.message)
|
|
||||||
}
|
|
||||||
|
|
||||||
val triple = Triple(true, false, remainingTempMessages)
|
val triple = Triple(true, false, remainingTempMessages)
|
||||||
_messageFlow.emit(triple)
|
_messageFlow.emit(triple)
|
||||||
}
|
}
|
||||||
@ -859,17 +843,6 @@ class OfflineFirstChatRepository @Inject constructor(
|
|||||||
|
|
||||||
val chatMessageModel = response.ocs?.data?.asModel()
|
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))
|
emit(Result.success(chatMessageModel))
|
||||||
}
|
}
|
||||||
.catch { e ->
|
.catch { e ->
|
||||||
@ -880,7 +853,7 @@ class OfflineFirstChatRepository @Inject constructor(
|
|||||||
referenceId
|
referenceId
|
||||||
).firstOrNull()
|
).firstOrNull()
|
||||||
failedMessage?.let {
|
failedMessage?.let {
|
||||||
it.sendStatus = SendStatus.FAILED
|
it.sendingFailed = true
|
||||||
chatDao.updateChatMessage(it)
|
chatDao.updateChatMessage(it)
|
||||||
|
|
||||||
val failedMessageModel = it.asModel()
|
val failedMessageModel = it.asModel()
|
||||||
@ -900,15 +873,14 @@ class OfflineFirstChatRepository @Inject constructor(
|
|||||||
sendWithoutNotification: Boolean,
|
sendWithoutNotification: Boolean,
|
||||||
referenceId: String
|
referenceId: String
|
||||||
): Flow<Result<ChatMessage?>> {
|
): Flow<Result<ChatMessage?>> {
|
||||||
val messageToResend = chatDao.getTempMessageForConversation(internalConversationId, referenceId).firstOrNull()
|
val messageToResend = chatDao.getTempMessageForConversation(internalConversationId, referenceId).first()
|
||||||
return if (messageToResend != null) {
|
messageToResend.sendingFailed = false
|
||||||
messageToResend.sendStatus = SendStatus.PENDING
|
|
||||||
chatDao.updateChatMessage(messageToResend)
|
chatDao.updateChatMessage(messageToResend)
|
||||||
|
|
||||||
val messageToResendModel = messageToResend.asModel()
|
val messageToResendModel = messageToResend.asModel()
|
||||||
_updateMessageFlow.emit(messageToResendModel)
|
_updateMessageFlow.emit(messageToResendModel)
|
||||||
|
|
||||||
sendChatMessage(
|
return sendChatMessage(
|
||||||
credentials,
|
credentials,
|
||||||
url,
|
url,
|
||||||
message,
|
message,
|
||||||
@ -917,11 +889,6 @@ class OfflineFirstChatRepository @Inject constructor(
|
|||||||
sendWithoutNotification,
|
sendWithoutNotification,
|
||||||
referenceId
|
referenceId
|
||||||
)
|
)
|
||||||
} else {
|
|
||||||
flow {
|
|
||||||
emit(Result.failure(IllegalStateException("No temporary message found to resend")))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("Detekt.TooGenericExceptionCaught")
|
@Suppress("Detekt.TooGenericExceptionCaught")
|
||||||
@ -963,8 +930,8 @@ class OfflineFirstChatRepository @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun sendUnsentChatMessages(credentials: String, url: String) {
|
override suspend fun sendTempChatMessages(credentials: String, url: String) {
|
||||||
val tempMessages = chatDao.getTempUnsentMessagesForConversation(internalConversationId).first()
|
val tempMessages = chatDao.getTempMessagesForConversation(internalConversationId).first()
|
||||||
tempMessages.sortedBy { it.internalId }.onEach {
|
tempMessages.sortedBy { it.internalId }.onEach {
|
||||||
sendChatMessage(
|
sendChatMessage(
|
||||||
credentials,
|
credentials,
|
||||||
@ -1058,7 +1025,7 @@ class OfflineFirstChatRepository @Inject constructor(
|
|||||||
actorDisplayName = currentUser.displayName!!,
|
actorDisplayName = currentUser.displayName!!,
|
||||||
referenceId = referenceId,
|
referenceId = referenceId,
|
||||||
isTemporary = true,
|
isTemporary = true,
|
||||||
sendStatus = SendStatus.PENDING,
|
sendingFailed = false,
|
||||||
silent = sendWithoutNotification
|
silent = sendWithoutNotification
|
||||||
)
|
)
|
||||||
return entity
|
return entity
|
||||||
|
@ -169,9 +169,9 @@ class MessageInputViewModel @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun sendUnsentMessages(credentials: String, url: String) {
|
fun sendTempMessages(credentials: String, url: String) {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
chatRepository.sendUnsentChatMessages(
|
chatRepository.sendTempChatMessages(
|
||||||
credentials,
|
credentials,
|
||||||
url
|
url
|
||||||
)
|
)
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Nextcloud Talk - Android Client
|
* Nextcloud Talk - Android Client
|
||||||
*
|
*
|
||||||
|
* SPDX-FileCopyrightText: 2024 Sowjanya Kota <sowjanya.kch@gmail.com>
|
||||||
* SPDX-FileCopyrightText: 2025 Marcel Hibbe <dev@mhibbe.de>
|
* SPDX-FileCopyrightText: 2025 Marcel Hibbe <dev@mhibbe.de>
|
||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*/
|
*/
|
||||||
@ -8,41 +9,16 @@
|
|||||||
package com.nextcloud.talk.components
|
package com.nextcloud.talk.components
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.os.Build
|
|
||||||
import androidx.compose.foundation.background
|
|
||||||
import androidx.compose.foundation.isSystemInDarkTheme
|
import androidx.compose.foundation.isSystemInDarkTheme
|
||||||
import androidx.compose.foundation.layout.Box
|
|
||||||
import androidx.compose.foundation.layout.WindowInsets
|
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
|
||||||
import androidx.compose.foundation.layout.statusBars
|
|
||||||
import androidx.compose.foundation.layout.windowInsetsTopHeight
|
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.DisposableEffect
|
import androidx.compose.runtime.DisposableEffect
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.compose.ui.graphics.toArgb
|
import androidx.compose.ui.graphics.toArgb
|
||||||
import androidx.compose.ui.platform.LocalView
|
import androidx.compose.ui.platform.LocalView
|
||||||
import androidx.core.view.WindowCompat
|
import androidx.core.view.WindowCompat
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ColoredStatusBar() {
|
fun SetupSystemBars() {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
|
|
||||||
Box(modifier = Modifier.fillMaxSize()) {
|
|
||||||
Box(
|
|
||||||
Modifier
|
|
||||||
.windowInsetsTopHeight(WindowInsets.statusBars)
|
|
||||||
.fillMaxWidth()
|
|
||||||
.background(MaterialTheme.colorScheme.surface)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
ColorLegacyStatusBar()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
private fun ColorLegacyStatusBar() {
|
|
||||||
val view = LocalView.current
|
val view = LocalView.current
|
||||||
val isDarkMode = isSystemInDarkTheme()
|
val isDarkMode = isSystemInDarkTheme()
|
||||||
val statusBarColor = MaterialTheme.colorScheme.surface.toArgb()
|
val statusBarColor = MaterialTheme.colorScheme.surface.toArgb()
|
@ -1,24 +0,0 @@
|
|||||||
/*
|
|
||||||
* Nextcloud Talk - Android Client
|
|
||||||
*
|
|
||||||
* SPDX-FileCopyrightText: 2025 Marcel Hibbe <dev@mhibbe.de>
|
|
||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.nextcloud.talk.components
|
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.Row
|
|
||||||
import androidx.compose.foundation.layout.RowScope
|
|
||||||
import androidx.compose.foundation.layout.fillMaxHeight
|
|
||||||
import androidx.compose.runtime.Composable
|
|
||||||
import androidx.compose.ui.Alignment
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun VerticallyCenteredRow(content: @Composable RowScope.() -> Unit) {
|
|
||||||
Row(
|
|
||||||
modifier = Modifier.fillMaxHeight(),
|
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
|
||||||
content = content
|
|
||||||
)
|
|
||||||
}
|
|
@ -18,9 +18,9 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
|||||||
import autodagger.AutoInjector
|
import autodagger.AutoInjector
|
||||||
import com.nextcloud.talk.activities.BaseActivity
|
import com.nextcloud.talk.activities.BaseActivity
|
||||||
import com.nextcloud.talk.application.NextcloudTalkApplication
|
import com.nextcloud.talk.application.NextcloudTalkApplication
|
||||||
import com.nextcloud.talk.components.ColoredStatusBar
|
|
||||||
import com.nextcloud.talk.contacts.CompanionClass.Companion.KEY_HIDE_ALREADY_EXISTING_PARTICIPANTS
|
import com.nextcloud.talk.contacts.CompanionClass.Companion.KEY_HIDE_ALREADY_EXISTING_PARTICIPANTS
|
||||||
import com.nextcloud.talk.extensions.getParcelableArrayListExtraProvider
|
import com.nextcloud.talk.extensions.getParcelableArrayListExtraProvider
|
||||||
|
import com.nextcloud.talk.components.SetupSystemBars
|
||||||
import com.nextcloud.talk.models.json.autocomplete.AutocompleteUser
|
import com.nextcloud.talk.models.json.autocomplete.AutocompleteUser
|
||||||
import com.nextcloud.talk.utils.bundle.BundleKeys
|
import com.nextcloud.talk.utils.bundle.BundleKeys
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@ -64,11 +64,11 @@ class ContactsActivity : BaseActivity() {
|
|||||||
MaterialTheme(
|
MaterialTheme(
|
||||||
colorScheme = colorScheme
|
colorScheme = colorScheme
|
||||||
) {
|
) {
|
||||||
ColoredStatusBar()
|
|
||||||
ContactsScreen(
|
ContactsScreen(
|
||||||
contactsViewModel = contactsViewModel,
|
contactsViewModel = contactsViewModel,
|
||||||
uiState = uiState.value
|
uiState = uiState.value
|
||||||
)
|
)
|
||||||
|
SetupSystemBars()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,18 +11,16 @@ package com.nextcloud.talk.contacts
|
|||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.statusBarsPadding
|
|
||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.res.colorResource
|
import androidx.compose.ui.res.colorResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||||
import com.nextcloud.talk.R
|
import com.nextcloud.talk.R
|
||||||
import com.nextcloud.talk.contacts.components.ContactsAppBar
|
import com.nextcloud.talk.contacts.components.AppBar
|
||||||
import com.nextcloud.talk.contacts.components.ContactsList
|
import com.nextcloud.talk.contacts.components.ContactsList
|
||||||
import com.nextcloud.talk.contacts.components.ContactsSearchAppBar
|
|
||||||
import com.nextcloud.talk.contacts.components.ConversationCreationOptions
|
import com.nextcloud.talk.contacts.components.ConversationCreationOptions
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -34,37 +32,35 @@ fun ContactsScreen(contactsViewModel: ContactsViewModel, uiState: ContactsUiStat
|
|||||||
val enableAddButton by contactsViewModel.enableAddButton.collectAsStateWithLifecycle()
|
val enableAddButton by contactsViewModel.enableAddButton.collectAsStateWithLifecycle()
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
modifier = Modifier
|
|
||||||
.statusBarsPadding(),
|
|
||||||
topBar = {
|
topBar = {
|
||||||
if (isSearchActive) {
|
AppBar(
|
||||||
ContactsSearchAppBar(
|
title = stringResource(R.string.nc_app_product_name),
|
||||||
searchQuery = searchQuery,
|
searchQuery = searchQuery,
|
||||||
onTextChange = {
|
isSearchActive = isSearchActive,
|
||||||
contactsViewModel.updateSearchQuery(it)
|
isAddParticipants = isAddParticipants,
|
||||||
contactsViewModel.getContactsFromSearchParams()
|
autocompleteUsers = autocompleteUsers,
|
||||||
|
onEnableSearch = {
|
||||||
|
contactsViewModel.setSearchActive(true)
|
||||||
},
|
},
|
||||||
onCloseSearch = {
|
onDisableSearch = {
|
||||||
contactsViewModel.updateSearchQuery("")
|
|
||||||
contactsViewModel.setSearchActive(false)
|
contactsViewModel.setSearchActive(false)
|
||||||
|
},
|
||||||
|
onUpdateSearchQuery = {
|
||||||
|
contactsViewModel.updateSearchQuery(query = it)
|
||||||
|
},
|
||||||
|
onUpdateAutocompleteUsers = {
|
||||||
contactsViewModel.getContactsFromSearchParams()
|
contactsViewModel.getContactsFromSearchParams()
|
||||||
},
|
},
|
||||||
enableAddButton = enableAddButton,
|
enableAddButton = enableAddButton,
|
||||||
isAddParticipants = isAddParticipants,
|
clickAddButton = {
|
||||||
clickAddButton = { contactsViewModel.modifyClickAddButton(true) }
|
contactsViewModel.modifyClickAddButton(it)
|
||||||
)
|
|
||||||
} else {
|
|
||||||
ContactsAppBar(
|
|
||||||
isAddParticipants = isAddParticipants,
|
|
||||||
autocompleteUsers = autocompleteUsers,
|
|
||||||
onStartSearch = { contactsViewModel.setSearchActive(true) }
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
)
|
||||||
},
|
},
|
||||||
content = { paddingValues ->
|
content = {
|
||||||
Column(
|
Column(
|
||||||
Modifier
|
Modifier
|
||||||
.padding(0.dp, paddingValues.calculateTopPadding(), 0.dp, 0.dp)
|
.padding(it)
|
||||||
.background(colorResource(id = R.color.bg_default))
|
.background(colorResource(id = R.color.bg_default))
|
||||||
) {
|
) {
|
||||||
if (!isAddParticipants) {
|
if (!isAddParticipants) {
|
||||||
|
@ -0,0 +1,117 @@
|
|||||||
|
/*
|
||||||
|
* Nextcloud Talk - Android Client
|
||||||
|
*
|
||||||
|
* SPDX-FileCopyrightText: 2024 Sowjanya Kota <sowjanya.kch@gmail.com>
|
||||||
|
* SPDX-FileCopyrightText: 2025 Marcel Hibbe <dev@mhibbe.de>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.nextcloud.talk.contacts.components
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.app.Activity
|
||||||
|
import android.content.Intent
|
||||||
|
import androidx.compose.foundation.clickable
|
||||||
|
import androidx.compose.foundation.layout.Row
|
||||||
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
import androidx.compose.foundation.layout.wrapContentWidth
|
||||||
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||||
|
import androidx.compose.material.icons.filled.Search
|
||||||
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
|
import androidx.compose.material3.Icon
|
||||||
|
import androidx.compose.material3.IconButton
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.material3.TextButton
|
||||||
|
import androidx.compose.material3.TopAppBar
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.platform.LocalContext
|
||||||
|
import androidx.compose.ui.res.stringResource
|
||||||
|
import com.nextcloud.talk.R
|
||||||
|
import com.nextcloud.talk.models.json.autocomplete.AutocompleteUser
|
||||||
|
|
||||||
|
@SuppressLint("UnrememberedMutableState")
|
||||||
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
|
@Suppress("LongParameterList", "LongMethod")
|
||||||
|
@Composable
|
||||||
|
fun AppBar(
|
||||||
|
title: String,
|
||||||
|
searchQuery: String,
|
||||||
|
isSearchActive: Boolean,
|
||||||
|
isAddParticipants: Boolean,
|
||||||
|
autocompleteUsers: List<AutocompleteUser>,
|
||||||
|
onEnableSearch: () -> Unit,
|
||||||
|
onDisableSearch: () -> Unit,
|
||||||
|
onUpdateSearchQuery: (String) -> Unit,
|
||||||
|
onUpdateAutocompleteUsers: () -> Unit,
|
||||||
|
enableAddButton: Boolean,
|
||||||
|
clickAddButton: (Boolean) -> Unit
|
||||||
|
) {
|
||||||
|
val context = LocalContext.current
|
||||||
|
val appTitle = if (!isSearchActive) {
|
||||||
|
title
|
||||||
|
} else {
|
||||||
|
""
|
||||||
|
}
|
||||||
|
TopAppBar(
|
||||||
|
title = { Text(text = appTitle) },
|
||||||
|
navigationIcon = {
|
||||||
|
IconButton(onClick = {
|
||||||
|
(context as? Activity)?.finish()
|
||||||
|
}) {
|
||||||
|
Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = stringResource(R.string.back_button))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
actions = {
|
||||||
|
if (!isSearchActive) {
|
||||||
|
IconButton(onClick = onEnableSearch) {
|
||||||
|
Icon(Icons.Filled.Search, contentDescription = stringResource(R.string.search_icon))
|
||||||
|
}
|
||||||
|
if (isAddParticipants) {
|
||||||
|
Text(
|
||||||
|
text = stringResource(id = R.string.nc_contacts_done),
|
||||||
|
modifier = Modifier.clickable {
|
||||||
|
val resultIntent = Intent().apply {
|
||||||
|
putParcelableArrayListExtra(
|
||||||
|
"selectedParticipants",
|
||||||
|
ArrayList(autocompleteUsers)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
(context as? Activity)?.setResult(Activity.RESULT_OK, resultIntent)
|
||||||
|
(context as? Activity)?.finish()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
if (isSearchActive) {
|
||||||
|
Row(modifier = Modifier.fillMaxWidth()) {
|
||||||
|
SearchComponent(
|
||||||
|
text = searchQuery,
|
||||||
|
onTextChange = { searchQuery ->
|
||||||
|
onUpdateSearchQuery(searchQuery)
|
||||||
|
onUpdateAutocompleteUsers()
|
||||||
|
},
|
||||||
|
onDisableSearch = onDisableSearch,
|
||||||
|
modifier = Modifier.weight(1f)
|
||||||
|
)
|
||||||
|
if (isAddParticipants) {
|
||||||
|
TextButton(
|
||||||
|
modifier = Modifier.align(Alignment.CenterVertically).wrapContentWidth(),
|
||||||
|
onClick = {
|
||||||
|
onDisableSearch()
|
||||||
|
onUpdateSearchQuery("")
|
||||||
|
clickAddButton(true)
|
||||||
|
onUpdateAutocompleteUsers()
|
||||||
|
},
|
||||||
|
enabled = enableAddButton
|
||||||
|
) {
|
||||||
|
Text(text = context.getString(R.string.add_participants))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,77 +0,0 @@
|
|||||||
/*
|
|
||||||
* Nextcloud Talk - Android Client
|
|
||||||
*
|
|
||||||
* SPDX-FileCopyrightText: 2024 Sowjanya Kota <sowjanya.kch@gmail.com>
|
|
||||||
* SPDX-FileCopyrightText: 2025 Marcel Hibbe <dev@mhibbe.de>
|
|
||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.nextcloud.talk.contacts.components
|
|
||||||
|
|
||||||
import android.app.Activity
|
|
||||||
import android.content.Intent
|
|
||||||
import androidx.compose.foundation.clickable
|
|
||||||
import androidx.compose.foundation.layout.height
|
|
||||||
import androidx.compose.material.icons.Icons
|
|
||||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
|
||||||
import androidx.compose.material.icons.filled.Search
|
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
|
||||||
import androidx.compose.material3.Icon
|
|
||||||
import androidx.compose.material3.IconButton
|
|
||||||
import androidx.compose.material3.Text
|
|
||||||
import androidx.compose.material3.TopAppBar
|
|
||||||
import androidx.compose.runtime.Composable
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.compose.ui.platform.LocalContext
|
|
||||||
import androidx.compose.ui.res.stringResource
|
|
||||||
import androidx.compose.ui.unit.dp
|
|
||||||
import com.nextcloud.talk.R
|
|
||||||
import com.nextcloud.talk.components.VerticallyCenteredRow
|
|
||||||
import com.nextcloud.talk.models.json.autocomplete.AutocompleteUser
|
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
|
||||||
@Composable
|
|
||||||
fun ContactsAppBar(isAddParticipants: Boolean, autocompleteUsers: List<AutocompleteUser>, onStartSearch: () -> Unit) {
|
|
||||||
val context = LocalContext.current
|
|
||||||
TopAppBar(
|
|
||||||
modifier = Modifier
|
|
||||||
.height(60.dp),
|
|
||||||
title = {
|
|
||||||
VerticallyCenteredRow {
|
|
||||||
Text(
|
|
||||||
text = if (isAddParticipants) {
|
|
||||||
stringResource(R.string.nc_participants_add)
|
|
||||||
} else {
|
|
||||||
stringResource(R.string.nc_new_conversation)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
navigationIcon = {
|
|
||||||
VerticallyCenteredRow {
|
|
||||||
IconButton(onClick = { (context as? Activity)?.finish() }) {
|
|
||||||
Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = stringResource(R.string.back_button))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
actions = {
|
|
||||||
VerticallyCenteredRow {
|
|
||||||
IconButton(onClick = onStartSearch) {
|
|
||||||
Icon(Icons.Filled.Search, contentDescription = stringResource(R.string.search_icon))
|
|
||||||
}
|
|
||||||
if (isAddParticipants) {
|
|
||||||
Text(
|
|
||||||
text = stringResource(id = R.string.nc_contacts_done),
|
|
||||||
modifier = Modifier.clickable {
|
|
||||||
val resultIntent = Intent().apply {
|
|
||||||
putParcelableArrayListExtra("selectedParticipants", ArrayList(autocompleteUsers))
|
|
||||||
}
|
|
||||||
(context as? Activity)?.setResult(Activity.RESULT_OK, resultIntent)
|
|
||||||
(context as? Activity)?.finish()
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
@ -15,6 +15,7 @@ import androidx.compose.foundation.layout.Arrangement
|
|||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.PaddingValues
|
import androidx.compose.foundation.layout.PaddingValues
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.lazy.items
|
import androidx.compose.foundation.lazy.items
|
||||||
import androidx.compose.material3.HorizontalDivider
|
import androidx.compose.material3.HorizontalDivider
|
||||||
@ -43,13 +44,9 @@ fun ContactsItem(contacts: List<AutocompleteUser>, contactsViewModel: ContactsVi
|
|||||||
}
|
}
|
||||||
LazyColumn(
|
LazyColumn(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
|
.padding(8.dp)
|
||||||
.fillMaxWidth(),
|
.fillMaxWidth(),
|
||||||
contentPadding = PaddingValues(
|
contentPadding = PaddingValues(all = 10.dp),
|
||||||
top = 10.dp,
|
|
||||||
bottom = 40.dp,
|
|
||||||
start = 10.dp,
|
|
||||||
end = 10.dp
|
|
||||||
),
|
|
||||||
verticalArrangement = Arrangement.spacedBy(10.dp)
|
verticalArrangement = Arrangement.spacedBy(10.dp)
|
||||||
) {
|
) {
|
||||||
groupedContacts.forEach { (initial, contactsForInitial) ->
|
groupedContacts.forEach { (initial, contactsForInitial) ->
|
||||||
|
@ -1,117 +0,0 @@
|
|||||||
/*
|
|
||||||
* Nextcloud Talk - Android Client
|
|
||||||
*
|
|
||||||
* SPDX-FileCopyrightText: 2024 Sowjanya Kota <sowjanya.kch@gmail.com>
|
|
||||||
* SPDX-FileCopyrightText: 2025 Marcel Hibbe <dev@mhibbe.de>
|
|
||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.nextcloud.talk.contacts.components
|
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.height
|
|
||||||
import androidx.compose.foundation.layout.padding
|
|
||||||
import androidx.compose.foundation.text.KeyboardActions
|
|
||||||
import androidx.compose.foundation.text.KeyboardOptions
|
|
||||||
import androidx.compose.material.icons.Icons
|
|
||||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
|
||||||
import androidx.compose.material.icons.filled.Close
|
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
|
||||||
import androidx.compose.material3.Icon
|
|
||||||
import androidx.compose.material3.IconButton
|
|
||||||
import androidx.compose.material3.Surface
|
|
||||||
import androidx.compose.material3.Text
|
|
||||||
import androidx.compose.material3.TextButton
|
|
||||||
import androidx.compose.material3.TextField
|
|
||||||
import androidx.compose.material3.TextFieldDefaults
|
|
||||||
import androidx.compose.runtime.Composable
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.compose.ui.graphics.Color
|
|
||||||
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
|
|
||||||
import androidx.compose.ui.platform.SoftwareKeyboardController
|
|
||||||
import androidx.compose.ui.res.stringResource
|
|
||||||
import androidx.compose.ui.text.input.ImeAction
|
|
||||||
import androidx.compose.ui.unit.dp
|
|
||||||
import com.nextcloud.talk.R
|
|
||||||
import com.nextcloud.talk.components.VerticallyCenteredRow
|
|
||||||
|
|
||||||
@Suppress("LongParameterList")
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
|
||||||
@Composable
|
|
||||||
fun ContactsSearchAppBar(
|
|
||||||
searchQuery: String,
|
|
||||||
onTextChange: (String) -> Unit,
|
|
||||||
onCloseSearch: () -> Unit,
|
|
||||||
enableAddButton: Boolean,
|
|
||||||
isAddParticipants: Boolean,
|
|
||||||
clickAddButton: (Boolean) -> Unit
|
|
||||||
) {
|
|
||||||
val keyboardController = LocalSoftwareKeyboardController.current
|
|
||||||
|
|
||||||
Surface(
|
|
||||||
modifier = Modifier.height(60.dp)
|
|
||||||
) {
|
|
||||||
VerticallyCenteredRow {
|
|
||||||
IconButton(
|
|
||||||
modifier = Modifier.padding(start = 4.dp),
|
|
||||||
onClick = onCloseSearch
|
|
||||||
) {
|
|
||||||
Icon(
|
|
||||||
imageVector = Icons.AutoMirrored.Filled.ArrowBack,
|
|
||||||
contentDescription = stringResource(R.string.back_button)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
TextField(
|
|
||||||
value = searchQuery,
|
|
||||||
onValueChange = onTextChange,
|
|
||||||
placeholder = { Text(text = stringResource(R.string.nc_search)) },
|
|
||||||
singleLine = true,
|
|
||||||
modifier = Modifier
|
|
||||||
.weight(1f)
|
|
||||||
.padding(horizontal = 8.dp),
|
|
||||||
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search),
|
|
||||||
keyboardActions = searchKeyboardActions(searchQuery, keyboardController),
|
|
||||||
colors = searchTextFieldColors(),
|
|
||||||
trailingIcon = {
|
|
||||||
if (searchQuery.isNotEmpty()) {
|
|
||||||
IconButton(onClick = { onTextChange("") }) {
|
|
||||||
Icon(
|
|
||||||
imageVector = Icons.Default.Close,
|
|
||||||
contentDescription = stringResource(R.string.nc_search_clear)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
if (isAddParticipants) {
|
|
||||||
TextButton(
|
|
||||||
onClick = {
|
|
||||||
onCloseSearch()
|
|
||||||
clickAddButton(true)
|
|
||||||
},
|
|
||||||
enabled = enableAddButton
|
|
||||||
) {
|
|
||||||
Text(text = stringResource(R.string.add_participants))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun searchTextFieldColors() =
|
|
||||||
TextFieldDefaults.colors(
|
|
||||||
focusedIndicatorColor = Color.Transparent,
|
|
||||||
unfocusedIndicatorColor = Color.Transparent,
|
|
||||||
disabledIndicatorColor = Color.Transparent
|
|
||||||
)
|
|
||||||
|
|
||||||
fun searchKeyboardActions(text: String, keyboardController: SoftwareKeyboardController?) =
|
|
||||||
KeyboardActions(
|
|
||||||
onSearch = {
|
|
||||||
if (text.trim().isNotEmpty()) {
|
|
||||||
keyboardController?.hide()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
@ -0,0 +1,105 @@
|
|||||||
|
/*
|
||||||
|
* Nextcloud Talk - Android Client
|
||||||
|
*
|
||||||
|
* SPDX-FileCopyrightText: 2025 Julius Linus <juliuslinus1@gmail.com>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.nextcloud.talk.contacts.components
|
||||||
|
|
||||||
|
import androidx.compose.foundation.background
|
||||||
|
import androidx.compose.foundation.layout.height
|
||||||
|
import androidx.compose.foundation.text.KeyboardActions
|
||||||
|
import androidx.compose.foundation.text.KeyboardOptions
|
||||||
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||||
|
import androidx.compose.material.icons.filled.Close
|
||||||
|
import androidx.compose.material3.Icon
|
||||||
|
import androidx.compose.material3.IconButton
|
||||||
|
import androidx.compose.material3.MaterialTheme
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.material3.TextField
|
||||||
|
import androidx.compose.material3.TextFieldDefaults
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
|
||||||
|
import androidx.compose.ui.platform.SoftwareKeyboardController
|
||||||
|
import androidx.compose.ui.res.stringResource
|
||||||
|
import androidx.compose.ui.text.TextStyle
|
||||||
|
import androidx.compose.ui.text.input.ImeAction
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.compose.ui.unit.sp
|
||||||
|
import com.nextcloud.talk.R
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun SearchComponent(
|
||||||
|
text: String,
|
||||||
|
onTextChange: (String) -> Unit,
|
||||||
|
onDisableSearch: () -> Unit,
|
||||||
|
modifier: Modifier = Modifier
|
||||||
|
) {
|
||||||
|
val keyboardController = LocalSoftwareKeyboardController.current
|
||||||
|
TextField(
|
||||||
|
value = text,
|
||||||
|
onValueChange = { onTextChange(it) },
|
||||||
|
modifier = modifier
|
||||||
|
.background(MaterialTheme.colorScheme.background)
|
||||||
|
.height(60.dp),
|
||||||
|
placeholder = { Text(text = stringResource(R.string.nc_search)) },
|
||||||
|
textStyle = TextStyle(fontSize = 16.sp),
|
||||||
|
singleLine = true,
|
||||||
|
leadingIcon = { LeadingIcon(onTextChange, onDisableSearch) },
|
||||||
|
trailingIcon = { TrailingIcon(text, onTextChange) },
|
||||||
|
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search),
|
||||||
|
keyboardActions = searchKeyboardActions(text, keyboardController),
|
||||||
|
colors = searchTextFieldColors(),
|
||||||
|
maxLines = 1
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun searchTextFieldColors() =
|
||||||
|
TextFieldDefaults.colors(
|
||||||
|
focusedIndicatorColor = Color.Transparent,
|
||||||
|
unfocusedIndicatorColor = Color.Transparent,
|
||||||
|
disabledIndicatorColor = Color.Transparent
|
||||||
|
)
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun LeadingIcon(onTextChange: (String) -> Unit, onDisableSearch: () -> Unit) {
|
||||||
|
IconButton(
|
||||||
|
onClick = {
|
||||||
|
onTextChange("")
|
||||||
|
onDisableSearch()
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.AutoMirrored.Default.ArrowBack,
|
||||||
|
contentDescription = stringResource(R.string.back_button)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun TrailingIcon(text: String, onTextChange: (String) -> Unit) {
|
||||||
|
if (text.isNotEmpty()) {
|
||||||
|
IconButton(
|
||||||
|
onClick = { onTextChange("") }
|
||||||
|
) {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Default.Close,
|
||||||
|
contentDescription = stringResource(R.string.close_icon)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun searchKeyboardActions(text: String, keyboardController: SoftwareKeyboardController?) =
|
||||||
|
KeyboardActions(
|
||||||
|
onSearch = {
|
||||||
|
if (text.trim().isNotEmpty()) {
|
||||||
|
keyboardController?.hide()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
@ -84,8 +84,8 @@ import com.nextcloud.talk.R
|
|||||||
import com.nextcloud.talk.activities.BaseActivity
|
import com.nextcloud.talk.activities.BaseActivity
|
||||||
import com.nextcloud.talk.application.NextcloudTalkApplication
|
import com.nextcloud.talk.application.NextcloudTalkApplication
|
||||||
import com.nextcloud.talk.chat.ChatActivity
|
import com.nextcloud.talk.chat.ChatActivity
|
||||||
import com.nextcloud.talk.components.ColoredStatusBar
|
|
||||||
import com.nextcloud.talk.contacts.ContactsActivity
|
import com.nextcloud.talk.contacts.ContactsActivity
|
||||||
|
import com.nextcloud.talk.components.SetupSystemBars
|
||||||
import com.nextcloud.talk.contacts.loadImage
|
import com.nextcloud.talk.contacts.loadImage
|
||||||
import com.nextcloud.talk.extensions.getParcelableArrayListExtraProvider
|
import com.nextcloud.talk.extensions.getParcelableArrayListExtraProvider
|
||||||
import com.nextcloud.talk.models.json.autocomplete.AutocompleteUser
|
import com.nextcloud.talk.models.json.autocomplete.AutocompleteUser
|
||||||
@ -117,6 +117,7 @@ class ConversationCreationActivity : BaseActivity() {
|
|||||||
colorScheme = colorScheme
|
colorScheme = colorScheme
|
||||||
) {
|
) {
|
||||||
ConversationCreationScreen(conversationCreationViewModel, context, pickImage)
|
ConversationCreationScreen(conversationCreationViewModel, context, pickImage)
|
||||||
|
SetupSystemBars()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -171,7 +172,6 @@ fun ConversationCreationScreen(
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
ColoredStatusBar()
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = {
|
topBar = {
|
||||||
TopAppBar(
|
TopAppBar(
|
||||||
@ -191,7 +191,7 @@ fun ConversationCreationScreen(
|
|||||||
content = { paddingValues ->
|
content = { paddingValues ->
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(0.dp, paddingValues.calculateTopPadding(), 0.dp, 0.dp)
|
.padding(paddingValues)
|
||||||
.background(colorResource(id = R.color.bg_default))
|
.background(colorResource(id = R.color.bg_default))
|
||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
.verticalScroll(rememberScrollState())
|
.verticalScroll(rememberScrollState())
|
||||||
@ -289,7 +289,7 @@ fun UploadAvatar(
|
|||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
painter = painterResource(id = R.drawable.ic_folder),
|
painter = painterResource(id = R.drawable.ic_mimetype_folder),
|
||||||
contentDescription = null,
|
contentDescription = null,
|
||||||
modifier = Modifier.size(24.dp)
|
modifier = Modifier.size(24.dp)
|
||||||
)
|
)
|
||||||
|
@ -190,7 +190,7 @@ class ConversationInfoActivity :
|
|||||||
binding = ActivityConversationInfoBinding.inflate(layoutInflater)
|
binding = ActivityConversationInfoBinding.inflate(layoutInflater)
|
||||||
setupActionBar()
|
setupActionBar()
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
initSystemBars()
|
setupSystemColors()
|
||||||
|
|
||||||
viewModel =
|
viewModel =
|
||||||
ViewModelProvider(this, viewModelFactory)[ConversationInfoViewModel::class.java]
|
ViewModelProvider(this, viewModelFactory)[ConversationInfoViewModel::class.java]
|
||||||
@ -1065,13 +1065,21 @@ class ConversationInfoActivity :
|
|||||||
) {
|
) {
|
||||||
binding.addParticipantsAction.visibility = GONE
|
binding.addParticipantsAction.visibility = GONE
|
||||||
binding.startGroupChat.visibility = VISIBLE
|
binding.startGroupChat.visibility = VISIBLE
|
||||||
showDeleteAllMessagesOption(conversationCopy)
|
|
||||||
} else if (ConversationUtils.canModerate(conversationCopy, spreedCapabilities)) {
|
} else if (ConversationUtils.canModerate(conversationCopy, spreedCapabilities)) {
|
||||||
binding.addParticipantsAction.visibility = VISIBLE
|
binding.addParticipantsAction.visibility = VISIBLE
|
||||||
showDeleteAllMessagesOption(conversationCopy)
|
if (hasSpreedFeatureCapability(
|
||||||
|
spreedCapabilities,
|
||||||
|
SpreedFeatures.CLEAR_HISTORY
|
||||||
|
) && conversationCopy.canDeleteConversation
|
||||||
|
) {
|
||||||
|
binding.clearConversationHistory.visibility = VISIBLE
|
||||||
|
} else {
|
||||||
|
binding.clearConversationHistory.visibility = GONE
|
||||||
|
}
|
||||||
showOptionsMenu()
|
showOptionsMenu()
|
||||||
} else {
|
} else {
|
||||||
binding.addParticipantsAction.visibility = GONE
|
binding.addParticipantsAction.visibility = GONE
|
||||||
|
|
||||||
if (ConversationUtils.isNoteToSelfConversation(conversation)) {
|
if (ConversationUtils.isNoteToSelfConversation(conversation)) {
|
||||||
binding.notificationSettingsView.notificationSettings.visibility = VISIBLE
|
binding.notificationSettingsView.notificationSettings.visibility = VISIBLE
|
||||||
} else {
|
} else {
|
||||||
@ -1303,18 +1311,6 @@ class ConversationInfoActivity :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun showDeleteAllMessagesOption(conversationCopy: ConversationModel) {
|
|
||||||
if (hasSpreedFeatureCapability(
|
|
||||||
spreedCapabilities,
|
|
||||||
SpreedFeatures.CLEAR_HISTORY
|
|
||||||
) && conversationCopy.canDeleteConversation
|
|
||||||
) {
|
|
||||||
binding.clearConversationHistory.visibility = VISIBLE
|
|
||||||
} else {
|
|
||||||
binding.clearConversationHistory.visibility = GONE
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun submitRecordingConsentChanges() {
|
private fun submitRecordingConsentChanges() {
|
||||||
val state = if (binding.recordingConsentView.recordingConsentForConversationSwitch.isChecked) {
|
val state = if (binding.recordingConsentView.recordingConsentForConversationSwitch.isChecked) {
|
||||||
RECORDING_CONSENT_REQUIRED_FOR_CONVERSATION
|
RECORDING_CONSENT_REQUIRED_FOR_CONVERSATION
|
||||||
|
@ -99,7 +99,7 @@ class ConversationInfoEditActivity : BaseActivity() {
|
|||||||
binding = ActivityConversationInfoEditBinding.inflate(layoutInflater)
|
binding = ActivityConversationInfoEditBinding.inflate(layoutInflater)
|
||||||
setupActionBar()
|
setupActionBar()
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
initSystemBars()
|
setupSystemColors()
|
||||||
|
|
||||||
val extras: Bundle? = intent.extras
|
val extras: Bundle? = intent.extras
|
||||||
|
|
||||||
|
@ -81,7 +81,6 @@ import com.nextcloud.talk.adapters.items.GenericTextHeaderItem
|
|||||||
import com.nextcloud.talk.adapters.items.LoadMoreResultsItem
|
import com.nextcloud.talk.adapters.items.LoadMoreResultsItem
|
||||||
import com.nextcloud.talk.adapters.items.MessageResultItem
|
import com.nextcloud.talk.adapters.items.MessageResultItem
|
||||||
import com.nextcloud.talk.adapters.items.MessagesTextHeaderItem
|
import com.nextcloud.talk.adapters.items.MessagesTextHeaderItem
|
||||||
import com.nextcloud.talk.adapters.items.SpacerItem
|
|
||||||
import com.nextcloud.talk.api.NcApi
|
import com.nextcloud.talk.api.NcApi
|
||||||
import com.nextcloud.talk.application.NextcloudTalkApplication
|
import com.nextcloud.talk.application.NextcloudTalkApplication
|
||||||
import com.nextcloud.talk.arbitrarystorage.ArbitraryStorageManager
|
import com.nextcloud.talk.arbitrarystorage.ArbitraryStorageManager
|
||||||
@ -267,7 +266,7 @@ class ConversationsListActivity :
|
|||||||
binding = ActivityConversationsBinding.inflate(layoutInflater)
|
binding = ActivityConversationsBinding.inflate(layoutInflater)
|
||||||
setupActionBar()
|
setupActionBar()
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
initSystemBars()
|
setupSystemColors()
|
||||||
viewThemeUtils.material.themeCardView(binding.searchToolbar)
|
viewThemeUtils.material.themeCardView(binding.searchToolbar)
|
||||||
viewThemeUtils.material.themeSearchBarText(binding.searchText)
|
viewThemeUtils.material.themeSearchBarText(binding.searchText)
|
||||||
|
|
||||||
@ -294,9 +293,10 @@ class ConversationsListActivity :
|
|||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
|
|
||||||
|
// actionBar?.show()
|
||||||
if (adapter == null) {
|
if (adapter == null) {
|
||||||
adapter = FlexibleAdapter(conversationItems, this, true)
|
adapter = FlexibleAdapter(conversationItems, this, true)
|
||||||
addEmptyItemForEdgeToEdgeIfNecessary()
|
|
||||||
} else {
|
} else {
|
||||||
binding.loadingContent.visibility = View.GONE
|
binding.loadingContent.visibility = View.GONE
|
||||||
}
|
}
|
||||||
@ -342,14 +342,6 @@ class ConversationsListActivity :
|
|||||||
showSearchOrToolbar()
|
showSearchOrToolbar()
|
||||||
}
|
}
|
||||||
|
|
||||||
// if edge to edge is used, add an empty item at the bottom of the list
|
|
||||||
@Suppress("MagicNumber")
|
|
||||||
private fun addEmptyItemForEdgeToEdgeIfNecessary() {
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
|
|
||||||
adapter?.addScrollableFooter(SpacerItem(200))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Suppress("LongMethod")
|
@Suppress("LongMethod")
|
||||||
private fun initObservers() {
|
private fun initObservers() {
|
||||||
this.lifecycleScope.launch {
|
this.lifecycleScope.launch {
|
||||||
@ -971,7 +963,8 @@ class ConversationsListActivity :
|
|||||||
} else {
|
} else {
|
||||||
showToolbar()
|
showToolbar()
|
||||||
}
|
}
|
||||||
initSystemBars()
|
colorizeStatusBar()
|
||||||
|
colorizeNavigationBar()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1974,9 +1967,9 @@ class ConversationsListActivity :
|
|||||||
WorkManager.getInstance(applicationContext).enqueue(accountRemovalWork)
|
WorkManager.getInstance(applicationContext).enqueue(accountRemovalWork)
|
||||||
|
|
||||||
WorkManager.getInstance(context).getWorkInfoByIdLiveData(accountRemovalWork.id)
|
WorkManager.getInstance(context).getWorkInfoByIdLiveData(accountRemovalWork.id)
|
||||||
.observeForever { workInfo: WorkInfo? ->
|
.observeForever { workInfo: WorkInfo ->
|
||||||
|
|
||||||
when (workInfo?.state) {
|
when (workInfo.state) {
|
||||||
WorkInfo.State.SUCCEEDED -> {
|
WorkInfo.State.SUCCEEDED -> {
|
||||||
val text = String.format(
|
val text = String.format(
|
||||||
context.resources.getString(R.string.nc_deleted_user),
|
context.resources.getString(R.string.nc_deleted_user),
|
||||||
|
@ -50,18 +50,6 @@ interface ChatMessagesDao {
|
|||||||
)
|
)
|
||||||
fun getTempMessagesForConversation(internalConversationId: String): Flow<List<ChatMessageEntity>>
|
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(
|
@Query(
|
||||||
"""
|
"""
|
||||||
SELECT *
|
SELECT *
|
||||||
@ -72,7 +60,7 @@ interface ChatMessagesDao {
|
|||||||
ORDER BY timestamp DESC, id DESC
|
ORDER BY timestamp DESC, id DESC
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
fun getTempMessageForConversation(internalConversationId: String, referenceId: String): Flow<ChatMessageEntity?>
|
fun getTempMessageForConversation(internalConversationId: String, referenceId: String): Flow<ChatMessageEntity>
|
||||||
|
|
||||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
suspend fun upsertChatMessages(chatMessages: List<ChatMessageEntity>)
|
suspend fun upsertChatMessages(chatMessages: List<ChatMessageEntity>)
|
||||||
|
@ -68,7 +68,7 @@ fun ChatMessageEntity.asModel() =
|
|||||||
isDeleted = deleted,
|
isDeleted = deleted,
|
||||||
referenceId = referenceId,
|
referenceId = referenceId,
|
||||||
isTemporary = isTemporary,
|
isTemporary = isTemporary,
|
||||||
sendStatus = sendStatus,
|
sendingFailed = sendingFailed,
|
||||||
readStatus = ReadStatus.NONE,
|
readStatus = ReadStatus.NONE,
|
||||||
silent = silent
|
silent = silent
|
||||||
)
|
)
|
||||||
|
@ -64,7 +64,7 @@ data class ChatMessageEntity(
|
|||||||
@ColumnInfo(name = "reactions") var reactions: LinkedHashMap<String, Int>? = null,
|
@ColumnInfo(name = "reactions") var reactions: LinkedHashMap<String, Int>? = null,
|
||||||
@ColumnInfo(name = "reactionsSelf") var reactionsSelf: ArrayList<String>? = null,
|
@ColumnInfo(name = "reactionsSelf") var reactionsSelf: ArrayList<String>? = null,
|
||||||
@ColumnInfo(name = "referenceId") var referenceId: String? = null,
|
@ColumnInfo(name = "referenceId") var referenceId: String? = null,
|
||||||
@ColumnInfo(name = "sendStatus") var sendStatus: SendStatus? = null,
|
@ColumnInfo(name = "sendingFailed") var sendingFailed: Boolean = false,
|
||||||
@ColumnInfo(name = "silent") var silent: Boolean = false,
|
@ColumnInfo(name = "silent") var silent: Boolean = false,
|
||||||
@ColumnInfo(name = "systemMessage") var systemMessageType: ChatMessage.SystemMessageType,
|
@ColumnInfo(name = "systemMessage") var systemMessageType: ChatMessage.SystemMessageType,
|
||||||
@ColumnInfo(name = "timestamp") var timestamp: Long = 0
|
@ColumnInfo(name = "timestamp") var timestamp: Long = 0
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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,31 +1,18 @@
|
|||||||
/*
|
/*
|
||||||
* Nextcloud Talk - Android Client
|
* Nextcloud Talk - Android Client
|
||||||
*
|
*
|
||||||
* SPDX-FileCopyrightText: 2024-2025 Marcel Hibbe <dev@mhibbe.de>
|
|
||||||
* SPDX-FileCopyrightText: 2022 Andy Scherzinger <info@andy-scherzinger.de>
|
* SPDX-FileCopyrightText: 2022 Andy Scherzinger <info@andy-scherzinger.de>
|
||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
*/
|
*/
|
||||||
package com.nextcloud.talk.data.source.local
|
package com.nextcloud.talk.data.source.local
|
||||||
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.room.DeleteColumn
|
|
||||||
import androidx.room.migration.AutoMigrationSpec
|
|
||||||
import androidx.room.migration.Migration
|
import androidx.room.migration.Migration
|
||||||
import androidx.sqlite.db.SupportSQLiteDatabase
|
import androidx.sqlite.db.SupportSQLiteDatabase
|
||||||
import java.sql.SQLException
|
import java.sql.SQLException
|
||||||
|
|
||||||
@Suppress("MagicNumber")
|
@Suppress("MagicNumber")
|
||||||
object Migrations {
|
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) {
|
val MIGRATION_6_8 = object : Migration(6, 8) {
|
||||||
override fun migrate(db: SupportSQLiteDatabase) {
|
override fun migrate(db: SupportSQLiteDatabase) {
|
||||||
Log.i("Migrations", "Migrating 6 to 8")
|
Log.i("Migrations", "Migrating 6 to 8")
|
||||||
@ -89,8 +76,6 @@ object Migrations {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//endregion
|
|
||||||
|
|
||||||
fun migrateToRoom(db: SupportSQLiteDatabase) {
|
fun migrateToRoom(db: SupportSQLiteDatabase) {
|
||||||
db.execSQL(
|
db.execSQL(
|
||||||
"CREATE TABLE User_new (" +
|
"CREATE TABLE User_new (" +
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Nextcloud Talk - Android Client
|
* Nextcloud Talk - Android Client
|
||||||
*
|
*
|
||||||
* SPDX-FileCopyrightText: 2023-2025 Marcel Hibbe <dev@mhibbe.de>
|
* SPDX-FileCopyrightText: 2023-2024 Marcel Hibbe <dev@mhibbe.de>
|
||||||
* SPDX-FileCopyrightText: 2022 Andy Scherzinger <info@andy-scherzinger.de>
|
* SPDX-FileCopyrightText: 2022 Andy Scherzinger <info@andy-scherzinger.de>
|
||||||
* SPDX-FileCopyrightText: 2017-2020 Mario Danic <mario@lovelyhq.com>
|
* SPDX-FileCopyrightText: 2017-2020 Mario Danic <mario@lovelyhq.com>
|
||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
@ -23,14 +23,12 @@ import com.nextcloud.talk.data.database.dao.ConversationsDao
|
|||||||
import com.nextcloud.talk.data.database.model.ChatBlockEntity
|
import com.nextcloud.talk.data.database.model.ChatBlockEntity
|
||||||
import com.nextcloud.talk.data.database.model.ChatMessageEntity
|
import com.nextcloud.talk.data.database.model.ChatMessageEntity
|
||||||
import com.nextcloud.talk.data.database.model.ConversationEntity
|
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.ArrayListConverter
|
||||||
import com.nextcloud.talk.data.source.local.converters.CapabilitiesConverter
|
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.ExternalSignalingServerConverter
|
||||||
import com.nextcloud.talk.data.source.local.converters.HashMapHashMapConverter
|
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.LinkedHashMapConverter
|
||||||
import com.nextcloud.talk.data.source.local.converters.PushConfigurationConverter
|
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.ServerVersionConverter
|
||||||
import com.nextcloud.talk.data.source.local.converters.SignalingSettingsConverter
|
import com.nextcloud.talk.data.source.local.converters.SignalingSettingsConverter
|
||||||
import com.nextcloud.talk.data.storage.ArbitraryStoragesDao
|
import com.nextcloud.talk.data.storage.ArbitraryStoragesDao
|
||||||
@ -51,10 +49,9 @@ import java.util.Locale
|
|||||||
ChatMessageEntity::class,
|
ChatMessageEntity::class,
|
||||||
ChatBlockEntity::class
|
ChatBlockEntity::class
|
||||||
],
|
],
|
||||||
version = 17,
|
version = 16,
|
||||||
autoMigrations = [
|
autoMigrations = [
|
||||||
AutoMigration(from = 9, to = 10),
|
AutoMigration(from = 9, to = 10)
|
||||||
AutoMigration(from = 16, to = 17, spec = AutoMigration16To17::class)
|
|
||||||
],
|
],
|
||||||
exportSchema = true
|
exportSchema = true
|
||||||
)
|
)
|
||||||
@ -66,8 +63,7 @@ import java.util.Locale
|
|||||||
SignalingSettingsConverter::class,
|
SignalingSettingsConverter::class,
|
||||||
HashMapHashMapConverter::class,
|
HashMapHashMapConverter::class,
|
||||||
LinkedHashMapConverter::class,
|
LinkedHashMapConverter::class,
|
||||||
ArrayListConverter::class,
|
ArrayListConverter::class
|
||||||
SendStatusConverter::class
|
|
||||||
)
|
)
|
||||||
abstract class TalkDatabase : RoomDatabase() {
|
abstract class TalkDatabase : RoomDatabase() {
|
||||||
|
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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)
|
|
||||||
}
|
|
||||||
}
|
|
@ -21,7 +21,6 @@ import androidx.compose.foundation.background
|
|||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.statusBarsPadding
|
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.collectAsState
|
||||||
@ -29,9 +28,8 @@ import androidx.compose.runtime.mutableStateOf
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.res.colorResource
|
import androidx.compose.ui.res.colorResource
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.unit.dp
|
|
||||||
import androidx.core.net.toUri
|
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
|
import androidx.core.net.toUri
|
||||||
import autodagger.AutoInjector
|
import autodagger.AutoInjector
|
||||||
import com.nextcloud.talk.BuildConfig
|
import com.nextcloud.talk.BuildConfig
|
||||||
import com.nextcloud.talk.R
|
import com.nextcloud.talk.R
|
||||||
@ -39,8 +37,8 @@ import com.nextcloud.talk.activities.BaseActivity
|
|||||||
import com.nextcloud.talk.api.NcApi
|
import com.nextcloud.talk.api.NcApi
|
||||||
import com.nextcloud.talk.application.NextcloudTalkApplication
|
import com.nextcloud.talk.application.NextcloudTalkApplication
|
||||||
import com.nextcloud.talk.arbitrarystorage.ArbitraryStorageManager
|
import com.nextcloud.talk.arbitrarystorage.ArbitraryStorageManager
|
||||||
import com.nextcloud.talk.components.ColoredStatusBar
|
|
||||||
import com.nextcloud.talk.components.StandardAppBar
|
import com.nextcloud.talk.components.StandardAppBar
|
||||||
|
import com.nextcloud.talk.components.SetupSystemBars
|
||||||
import com.nextcloud.talk.users.UserManager
|
import com.nextcloud.talk.users.UserManager
|
||||||
import com.nextcloud.talk.utils.BrandingUtils
|
import com.nextcloud.talk.utils.BrandingUtils
|
||||||
import com.nextcloud.talk.utils.ClosedInterfaceImpl
|
import com.nextcloud.talk.utils.ClosedInterfaceImpl
|
||||||
@ -111,22 +109,18 @@ class DiagnoseActivity : BaseActivity() {
|
|||||||
MaterialTheme(
|
MaterialTheme(
|
||||||
colorScheme = colorScheme
|
colorScheme = colorScheme
|
||||||
) {
|
) {
|
||||||
ColoredStatusBar()
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
modifier = Modifier
|
|
||||||
.statusBarsPadding(),
|
|
||||||
topBar = {
|
topBar = {
|
||||||
StandardAppBar(
|
StandardAppBar(
|
||||||
title = stringResource(R.string.nc_settings_diagnose_title),
|
title = stringResource(R.string.nc_settings_diagnose_title),
|
||||||
menuItems
|
menuItems
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
content = { paddingValues ->
|
content = {
|
||||||
val viewState = diagnoseViewModel.notificationViewState.collectAsState().value
|
val viewState = diagnoseViewModel.notificationViewState.collectAsState().value
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
Modifier
|
Modifier
|
||||||
.padding(0.dp, paddingValues.calculateTopPadding(), 0.dp, 0.dp)
|
.padding(it)
|
||||||
.background(backgroundColor)
|
.background(backgroundColor)
|
||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
) {
|
) {
|
||||||
@ -142,6 +136,7 @@ class DiagnoseActivity : BaseActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
SetupSystemBars()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -65,12 +65,7 @@ fun DiagnoseContentComposable(
|
|||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
.padding(
|
.padding(16.dp)
|
||||||
start = 16.dp,
|
|
||||||
top = 0.dp,
|
|
||||||
end = 16.dp,
|
|
||||||
bottom = 0.dp
|
|
||||||
)
|
|
||||||
.verticalScroll(rememberScrollState())
|
.verticalScroll(rememberScrollState())
|
||||||
) {
|
) {
|
||||||
data.value.forEach { element ->
|
data.value.forEach { element ->
|
||||||
@ -105,7 +100,6 @@ fun DiagnoseContentComposable(
|
|||||||
ShowTestPushButton(onTestPushClick)
|
ShowTestPushButton(onTestPushClick)
|
||||||
}
|
}
|
||||||
ShowNotificationData(isLoading, showDialog, context, viewState, onDismissDialog)
|
ShowNotificationData(isLoading, showDialog, context, viewState, onDismissDialog)
|
||||||
Spacer(modifier = Modifier.height(40.dp))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ class InvitationsActivity : BaseActivity() {
|
|||||||
binding = ActivityInvitationsBinding.inflate(layoutInflater)
|
binding = ActivityInvitationsBinding.inflate(layoutInflater)
|
||||||
setupActionBar()
|
setupActionBar()
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
initSystemBars()
|
setupSystemColors()
|
||||||
|
|
||||||
adapter = InvitationsAdapter(currentUser) { invitation, action ->
|
adapter = InvitationsAdapter(currentUser) { invitation, action ->
|
||||||
handleInvitation(invitation, action)
|
handleInvitation(invitation, action)
|
||||||
|
@ -67,7 +67,7 @@ class GeocodingActivity :
|
|||||||
binding = ActivityGeocodingBinding.inflate(layoutInflater)
|
binding = ActivityGeocodingBinding.inflate(layoutInflater)
|
||||||
setupActionBar()
|
setupActionBar()
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
initSystemBars()
|
setupSystemColors()
|
||||||
|
|
||||||
Configuration.getInstance().load(context, PreferenceManager.getDefaultSharedPreferences(context))
|
Configuration.getInstance().load(context, PreferenceManager.getDefaultSharedPreferences(context))
|
||||||
|
|
||||||
|
@ -129,7 +129,7 @@ class LocationPickerActivity :
|
|||||||
binding = ActivityLocationBinding.inflate(layoutInflater)
|
binding = ActivityLocationBinding.inflate(layoutInflater)
|
||||||
setupActionBar()
|
setupActionBar()
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
initSystemBars()
|
setupSystemColors()
|
||||||
|
|
||||||
getInstance().load(context, PreferenceManager.getDefaultSharedPreferences(context))
|
getInstance().load(context, PreferenceManager.getDefaultSharedPreferences(context))
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ class MessageSearchActivity : BaseActivity() {
|
|||||||
binding = ActivityMessageSearchBinding.inflate(layoutInflater)
|
binding = ActivityMessageSearchBinding.inflate(layoutInflater)
|
||||||
setupActionBar()
|
setupActionBar()
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
initSystemBars()
|
setupSystemColors()
|
||||||
|
|
||||||
viewModel = ViewModelProvider(this, viewModelFactory)[MessageSearchViewModel::class.java]
|
viewModel = ViewModelProvider(this, viewModelFactory)[MessageSearchViewModel::class.java]
|
||||||
user = currentUserProvider.currentUser.blockingGet()
|
user = currentUserProvider.currentUser.blockingGet()
|
||||||
|
@ -57,7 +57,7 @@ class ListOpenConversationsActivity : BaseActivity() {
|
|||||||
binding = ActivityOpenConversationsBinding.inflate(layoutInflater)
|
binding = ActivityOpenConversationsBinding.inflate(layoutInflater)
|
||||||
setupActionBar()
|
setupActionBar()
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
initSystemBars()
|
setupSystemColors()
|
||||||
viewThemeUtils.platform.colorImageView(binding.searchOpenConversations, ColorRole.ON_SURFACE)
|
viewThemeUtils.platform.colorImageView(binding.searchOpenConversations, ColorRole.ON_SURFACE)
|
||||||
viewThemeUtils.material.colorTextInputLayout(binding.textInputLayout)
|
viewThemeUtils.material.colorTextInputLayout(binding.textInputLayout)
|
||||||
|
|
||||||
|
@ -119,7 +119,7 @@ class ProfileActivity : BaseActivity() {
|
|||||||
binding = ActivityProfileBinding.inflate(layoutInflater)
|
binding = ActivityProfileBinding.inflate(layoutInflater)
|
||||||
setupActionBar()
|
setupActionBar()
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
initSystemBars()
|
setupSystemColors()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
|
@ -145,7 +145,7 @@ class SettingsActivity :
|
|||||||
binding = ActivitySettingsBinding.inflate(layoutInflater)
|
binding = ActivitySettingsBinding.inflate(layoutInflater)
|
||||||
setupActionBar()
|
setupActionBar()
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
initSystemBars()
|
setupSystemColors()
|
||||||
|
|
||||||
binding.avatarImage.let { ViewCompat.setTransitionName(it, "userAvatar.transitionTag") }
|
binding.avatarImage.let { ViewCompat.setTransitionName(it, "userAvatar.transitionTag") }
|
||||||
|
|
||||||
@ -681,9 +681,9 @@ class SettingsActivity :
|
|||||||
WorkManager.getInstance(applicationContext).enqueue(accountRemovalWork)
|
WorkManager.getInstance(applicationContext).enqueue(accountRemovalWork)
|
||||||
|
|
||||||
WorkManager.getInstance(context).getWorkInfoByIdLiveData(accountRemovalWork.id)
|
WorkManager.getInstance(context).getWorkInfoByIdLiveData(accountRemovalWork.id)
|
||||||
.observeForever { workInfo: WorkInfo? ->
|
.observeForever { workInfo: WorkInfo ->
|
||||||
|
|
||||||
when (workInfo?.state) {
|
when (workInfo.state) {
|
||||||
WorkInfo.State.SUCCEEDED -> {
|
WorkInfo.State.SUCCEEDED -> {
|
||||||
val text = String.format(
|
val text = String.format(
|
||||||
context.resources.getString(R.string.nc_deleted_user),
|
context.resources.getString(R.string.nc_deleted_user),
|
||||||
|
@ -13,6 +13,7 @@ import android.os.Bundle
|
|||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import androidx.core.content.res.ResourcesCompat
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
@ -27,6 +28,7 @@ import com.nextcloud.talk.databinding.ActivitySharedItemsBinding
|
|||||||
import com.nextcloud.talk.shareditems.adapters.SharedItemsAdapter
|
import com.nextcloud.talk.shareditems.adapters.SharedItemsAdapter
|
||||||
import com.nextcloud.talk.shareditems.model.SharedItemType
|
import com.nextcloud.talk.shareditems.model.SharedItemType
|
||||||
import com.nextcloud.talk.shareditems.viewmodels.SharedItemsViewModel
|
import com.nextcloud.talk.shareditems.viewmodels.SharedItemsViewModel
|
||||||
|
import com.nextcloud.talk.utils.DisplayUtils
|
||||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_CONVERSATION_NAME
|
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_CONVERSATION_NAME
|
||||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN
|
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@ -55,11 +57,15 @@ class SharedItemsActivity : BaseActivity() {
|
|||||||
setSupportActionBar(binding.sharedItemsToolbar)
|
setSupportActionBar(binding.sharedItemsToolbar)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
|
|
||||||
initSystemBars()
|
viewThemeUtils.platform.themeStatusBar(this)
|
||||||
|
|
||||||
viewThemeUtils.material.themeToolbar(binding.sharedItemsToolbar)
|
viewThemeUtils.material.themeToolbar(binding.sharedItemsToolbar)
|
||||||
viewThemeUtils.material.themeTabLayoutOnSurface(binding.sharedItemsTabs)
|
viewThemeUtils.material.themeTabLayoutOnSurface(binding.sharedItemsTabs)
|
||||||
|
|
||||||
|
DisplayUtils.applyColorToNavigationBar(
|
||||||
|
this.window,
|
||||||
|
ResourcesCompat.getColor(resources, R.color.bg_default, null)
|
||||||
|
)
|
||||||
|
|
||||||
supportActionBar?.title = conversationName
|
supportActionBar?.title = conversationName
|
||||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ class TranslateActivity : BaseActivity() {
|
|||||||
}
|
}
|
||||||
setupActionBar()
|
setupActionBar()
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
initSystemBars()
|
setupSystemColors()
|
||||||
setupTextViews()
|
setupTextViews()
|
||||||
viewModel.getLanguages()
|
viewModel.getLanguages()
|
||||||
setupCopyButton()
|
setupCopyButton()
|
||||||
|
@ -18,7 +18,6 @@ import com.nextcloud.talk.R
|
|||||||
import com.nextcloud.talk.application.NextcloudTalkApplication
|
import com.nextcloud.talk.application.NextcloudTalkApplication
|
||||||
import com.nextcloud.talk.chat.ChatActivity
|
import com.nextcloud.talk.chat.ChatActivity
|
||||||
import com.nextcloud.talk.chat.data.model.ChatMessage
|
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.network.NetworkMonitor
|
||||||
import com.nextcloud.talk.databinding.DialogTempMessageActionsBinding
|
import com.nextcloud.talk.databinding.DialogTempMessageActionsBinding
|
||||||
import com.nextcloud.talk.ui.theme.ViewThemeUtils
|
import com.nextcloud.talk.ui.theme.ViewThemeUtils
|
||||||
@ -59,10 +58,9 @@ class TempMessageActionsDialog(
|
|||||||
|
|
||||||
private fun initMenuItems() {
|
private fun initMenuItems() {
|
||||||
this.lifecycleScope.launch {
|
this.lifecycleScope.launch {
|
||||||
val sendingFailed = message.sendStatus == SendStatus.FAILED
|
initResendMessage(message.sendingFailed && networkMonitor.isOnline.value)
|
||||||
initResendMessage(sendingFailed && networkMonitor.isOnline.value)
|
initMenuEditMessage(message.sendingFailed || !networkMonitor.isOnline.value)
|
||||||
initMenuEditMessage(sendingFailed || !networkMonitor.isOnline.value)
|
initMenuDeleteMessage(message.sendingFailed || !networkMonitor.isOnline.value)
|
||||||
initMenuDeleteMessage(sendingFailed || !networkMonitor.isOnline.value)
|
|
||||||
initMenuItemCopy()
|
initMenuItemCopy()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
* Nextcloud Talk - Android Client
|
|
||||||
*
|
|
||||||
* SPDX-FileCopyrightText: 2025 Marcel Hibbe <dev@mhibbe.de>
|
|
||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.nextcloud.talk.utils
|
|
||||||
|
|
||||||
import android.graphics.Color
|
|
||||||
import android.os.Build
|
|
||||||
import androidx.activity.SystemBarStyle
|
|
||||||
import androidx.activity.enableEdgeToEdge
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is similar to "adjustUIForAPILevel35" in
|
|
||||||
* AppCompatActivityExtensions.kt in https://github.com/nextcloud/android-common/
|
|
||||||
* Only window.addSystemBarPaddings() had to be removed. This could be unified again at some point.
|
|
||||||
*/
|
|
||||||
@JvmOverloads
|
|
||||||
fun AppCompatActivity.adjustUIForAPILevel35(
|
|
||||||
statusBarStyle: SystemBarStyle = SystemBarStyle.auto(Color.TRANSPARENT, Color.TRANSPARENT),
|
|
||||||
// It may make sense to change navigationBarStyle to "SystemBarStyle.auto(Color.TRANSPARENT, Color.TRANSPARENT)"
|
|
||||||
// For now, it is set to "light" to have a fully transparent navigation bar to align with the XML screens.
|
|
||||||
// It may be wanted to have a semi transparent navigation bar in the future. Then set it to "auto" and try to
|
|
||||||
// migrate the XML screens to Compose (having semi transparent navigation bar for XML did not work out. In
|
|
||||||
// general, supporting both XML and Compose system bar handling is a pain and we will have it easier without XML)
|
|
||||||
// So in short: migrate all screens to Compose. Then it's easier to decide if navigation bar should be semi
|
|
||||||
// transparent or not for all screens.
|
|
||||||
navigationBarStyle: SystemBarStyle = SystemBarStyle.light(Color.TRANSPARENT, Color.TRANSPARENT)
|
|
||||||
) {
|
|
||||||
val isApiLevel35OrHigher = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM)
|
|
||||||
if (!isApiLevel35OrHigher) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
enableEdgeToEdge(statusBarStyle, navigationBarStyle)
|
|
||||||
}
|
|
@ -30,11 +30,6 @@ class DummyChatMessagesDaoImpl : ChatMessagesDao {
|
|||||||
override fun getTempMessagesForConversation(internalConversationId: String): Flow<List<ChatMessageEntity>> =
|
override fun getTempMessagesForConversation(internalConversationId: String): Flow<List<ChatMessageEntity>> =
|
||||||
flowOf()
|
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(
|
override fun getTempMessageForConversation(
|
||||||
internalConversationId: String,
|
internalConversationId: String,
|
||||||
referenceId: String
|
referenceId: String
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2018-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2018-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
@ -11,6 +11,5 @@
|
|||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="#FFFFFFFF"
|
android:fillColor="#FFFFFFFF"
|
||||||
android:pathData="M280,920Q247,920 223.5,896.5Q200,873 200,840L200,120Q200,87 223.5,63.5Q247,40 280,40L680,40Q713,40 736.5,63.5Q760,87 760,120L760,244Q778,251 789,266Q800,281 800,300L800,380Q800,399 789,414Q778,429 760,436L760,840Q760,873 736.5,896.5Q713,920 680,920L280,920ZM280,840L680,840Q680,840 680,840Q680,840 680,840L680,120Q680,120 680,120Q680,120 680,120L280,120Q280,120 280,120Q280,120 280,120L280,840Q280,840 280,840Q280,840 280,840ZM280,840Q280,840 280,840Q280,840 280,840L280,120Q280,120 280,120Q280,120 280,120L280,120Q280,120 280,120Q280,120 280,120L280,840Q280,840 280,840Q280,840 280,840ZM480,240Q497,240 508.5,228.5Q520,217 520,200Q520,183 508.5,171.5Q497,160 480,160Q463,160 451.5,171.5Q440,183 440,200Q440,217 451.5,228.5Q463,240 480,240Z" />
|
android:pathData="M280,920Q247,920 223.5,896.5Q200,873 200,840L200,120Q200,87 223.5,63.5Q247,40 280,40L680,40Q713,40 736.5,63.5Q760,87 760,120L760,840Q760,873 736.5,896.5Q713,920 680,920L280,920ZM280,720L680,720L680,240L280,240L280,720Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2018-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2018-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
@ -12,5 +12,5 @@
|
|||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M40,800L40,688Q40,654 57.5,625.5Q75,597 104,582Q166,551 230,535.5Q294,520 360,520Q426,520 490,535.5Q554,551 616,582Q645,597 662.5,625.5Q680,654 680,688L680,800L40,800ZM760,800L760,680Q760,636 735.5,595.5Q711,555 666,526Q717,532 762,546.5Q807,561 846,582Q882,602 901,626.5Q920,651 920,680L920,800L760,800ZM360,480Q294,480 247,433Q200,386 200,320Q200,254 247,207Q294,160 360,160Q426,160 473,207Q520,254 520,320Q520,386 473,433Q426,480 360,480ZM760,320Q760,386 713,433Q666,480 600,480Q589,480 572,477.5Q555,475 544,472Q571,440 585.5,401Q600,362 600,320Q600,278 585.5,239Q571,200 544,168Q558,163 572,161.5Q586,160 600,160Q666,160 713,207Q760,254 760,320ZM120,720L600,720L600,688Q600,677 594.5,668Q589,659 580,654Q526,627 471,613.5Q416,600 360,600Q304,600 249,613.5Q194,627 140,654Q131,659 125.5,668Q120,677 120,688L120,720ZM360,400Q393,400 416.5,376.5Q440,353 440,320Q440,287 416.5,263.5Q393,240 360,240Q327,240 303.5,263.5Q280,287 280,320Q280,353 303.5,376.5Q327,400 360,400ZM360,720L360,720L360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720ZM360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Z" />
|
android:pathData="M-19,861L-19,718Q-19,677 0.69,644.15Q20.38,611.29 53,594Q119,560 189.27,543Q259.54,526 332,526Q404.12,526 474.06,543Q544,560 610,594Q642.63,611.29 662.31,644.15Q682,677 682,718L682,861L-19,861ZM767,861L767,706Q767,664 744,614Q721,564 672,529Q735,535 790.5,551.5Q846,568 893,594Q934.84,617.77 956.92,646.88Q979,676 979,706L979,861L767,861ZM331,473Q253.45,473 198.23,417.78Q143,362.55 143,285Q143,207.45 198.23,152.22Q253.45,97 331,97Q408.55,97 463.77,152.22Q519,207.45 519,285Q519,362.55 463.77,417.78Q408.55,473 331,473ZM816,285Q816,362.55 760.78,417.78Q705.55,473 628,473Q613,473 587,469.5Q561,466 546,461Q575,423 589.5,378.15Q604,333.3 604,285Q604,236.7 589.5,191.85Q575,147 546,109Q566,102 587,99.5Q608,97 628,97Q705.55,97 760.78,152.22Q816,207.45 816,285Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,16 +1,15 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2018-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="24dp"
|
android:width="16dp"
|
||||||
android:height="24dp"
|
android:height="16dp"
|
||||||
android:tint="#FFFFFFFF"
|
android:viewportWidth="16"
|
||||||
android:viewportWidth="960"
|
android:viewportHeight="16">
|
||||||
android:viewportHeight="960">
|
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="#FFFFFFFF"
|
||||||
android:pathData="M480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q614,800 707,707Q800,614 800,480Q800,473 799.5,465.5Q799,458 799,453Q794,482 772,501Q750,520 720,520L640,520Q607,520 583.5,496.5Q560,473 560,440L560,400L400,400L400,320Q400,287 423.5,263.5Q447,240 480,240L520,240L520,240Q520,217 532.5,199.5Q545,182 563,171Q543,166 522.5,163Q502,160 480,160Q346,160 253,253Q160,346 160,480Q160,480 160,480Q160,480 160,480L360,480Q426,480 473,527Q520,574 520,640L520,680L400,680L400,790Q420,795 439.5,797.5Q459,800 480,800Z" />
|
android:pathData="m7.95,0.65c-4.1,0 -7.4,3.3 -7.4,7.4s3.3,7.4 7.4,7.4 7.4,-3.3 7.4,-7.4 -3.3,-7.4 -7.4,-7.4zM8.75,1.55c1.3,0 2.4,0.8 3.5,1.3l1.8,2.5 -0.3,1.1 0.6,0.3v2.4c-0.2,0.7 -0.6,1.3 -0.9,2 -0.2,0.1 0,-0.8 -0.1,-1 0,-0.6 -0.5,-0.6 -0.9,-0.2 -0.4,0.3 -1.4,0.3 -1.5,-0.4 -0.3,-0.8 0,-1.7 0.3,-2.5l-0.6,-0.7 0.2,-1.8 -0.8,-0.9 0.2,-1 -1,-0.6c-0.2,-0.2 -0.6,-0.2 -0.7,-0.4 0.1,0 0.2,-0.1 0.2,-0.1zM6.15,1.65s0.1,0 0.1,0.1c0.4,0.2 -0.1,0.4 -0.2,0.6 -0.5,0.3 0.3,0.7 0.5,1 0.4,-0.1 0.8,-0.7 1.4,-0.5 0.7,-0.2 0.6,0.6 1.1,1 0.1,0.2 0.9,0.8 0.4,0.6 -0.5,-0.4 -1,-0.4 -1.3,0.1 -0.8,0.5 -0.3,-0.9 -0.7,-1.2 -0.6,-0.7 -0.4,0.5 -0.4,0.9 -0.4,0 -1.1,-0.3 -1.5,0.2l0.4,0.6 0.5,-0.7c0,-0.3 0.1,0.2 0.3,0.3 0.1,0.2 0.8,0.7 0.3,0.9 -0.8,0.4 -1.4,1.1 -2.1,1.7 -0.2,0.5 -0.7,0.4 -1,0 -0.7,-0.4 -0.7,0.7 -0.6,1.1l0.6,-0.4v1.1c-0.4,0.4 -0.9,-0.7 -1.3,-0.9v-1.6c0,-0.4 -0.1,-0.9 0,-1.3 0.8,-0.9 1.7,-1.9 2.2,-3h0.8c0.6,0.2 0.3,-0.7 0.5,-0.6zM4.95,9.85c0.1,0 0.2,0 0.3,0.1 0.8,0.1 1.4,0.7 2,1.1 0.5,0.5 1.6,0.3 1.7,1.2 -0.2,0.9 -1.1,1.4 -1.8,1.7 -0.2,0.1 -0.4,0.2 -0.6,0.2 -0.7,0.2 -1,-0.6 -1.2,-1.1 -0.3,-0.7 -1.1,-1.2 -1,-2.1 0,-0.4 0.2,-1 0.6,-1.1z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,16 +1,15 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2018-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2018-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="24dp"
|
android:width="16dp"
|
||||||
android:height="24dp"
|
android:height="16dp"
|
||||||
android:tint="#FFFFFFFF"
|
|
||||||
android:viewportWidth="960"
|
android:viewportWidth="960"
|
||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="#FFFFFFFF"
|
||||||
android:pathData="M240,880Q207,880 183.5,856.5Q160,833 160,800L160,400Q160,367 183.5,343.5Q207,320 240,320L280,320L280,240Q280,157 338.5,98.5Q397,40 480,40Q563,40 621.5,98.5Q680,157 680,240L680,320L720,320Q753,320 776.5,343.5Q800,367 800,400L800,800Q800,833 776.5,856.5Q753,880 720,880L240,880ZM240,800L720,800Q720,800 720,800Q720,800 720,800L720,400Q720,400 720,400Q720,400 720,400L240,400Q240,400 240,400Q240,400 240,400L240,800Q240,800 240,800Q240,800 240,800ZM480,680Q513,680 536.5,656.5Q560,633 560,600Q560,567 536.5,543.5Q513,520 480,520Q447,520 423.5,543.5Q400,567 400,600Q400,633 423.5,656.5Q447,680 480,680ZM360,320L600,320L600,240Q600,190 565,155Q530,120 480,120Q430,120 395,155Q360,190 360,240L360,320ZM240,800Q240,800 240,800Q240,800 240,800L240,400Q240,400 240,400Q240,400 240,400L240,400Q240,400 240,400Q240,400 240,400L240,800Q240,800 240,800Q240,800 240,800Z" />
|
android:pathData="M240,880Q207,880 183.5,856.5Q160,833 160,800L160,400Q160,367 183.5,343.5Q207,320 240,320L280,320L280,240Q280,157 338.5,98.5Q397,40 480,40Q563,40 621.5,98.5Q680,157 680,240L680,320L720,320Q753,320 776.5,343.5Q800,367 800,400L800,800Q800,833 776.5,856.5Q753,880 720,880L240,880ZM480,680Q513,680 536.5,656.5Q560,633 560,600Q560,567 536.5,543.5Q513,520 480,520Q447,520 423.5,543.5Q400,567 400,600Q400,633 423.5,656.5Q447,680 480,680ZM360,320L600,320L600,240Q600,190 565,155Q530,120 480,120Q430,120 395,155Q360,190 360,240L360,320Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2018-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2018-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="24dp"
|
android:width="24dp"
|
||||||
android:height="24dp"
|
android:height="24dp"
|
||||||
android:tint="#ffffff"
|
android:fillColor="#ffffff"
|
||||||
android:viewportWidth="960"
|
android:viewportWidth="960"
|
||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M480,680Q497,680 508.5,668.5Q520,657 520,640Q520,623 508.5,611.5Q497,600 480,600Q463,600 451.5,611.5Q440,623 440,640Q440,657 451.5,668.5Q463,680 480,680ZM440,520L520,520L520,280L440,280L440,520ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q614,800 707,707Q800,614 800,480Q800,346 707,253Q614,160 480,160Q346,160 253,253Q160,346 160,480Q160,614 253,707Q346,800 480,800ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z" />
|
android:pathData="M480,680Q497,680 508.5,668.5Q520,657 520,640Q520,623 508.5,611.5Q497,600 480,600Q463,600 451.5,611.5Q440,623 440,640Q440,657 451.5,668.5Q463,680 480,680ZM440,520L520,520L520,280L440,280L440,520ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -4,13 +4,15 @@
|
|||||||
~ SPDX-FileCopyrightText: 2018-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2018-2025 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector
|
||||||
android:width="24dp"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:height="24dp"
|
android:height="24dp"
|
||||||
android:tint="#969696"
|
android:tint="#969696"
|
||||||
android:viewportWidth="960"
|
android:viewportHeight="24"
|
||||||
android:viewportHeight="960">
|
android:viewportWidth="24"
|
||||||
<path
|
android:width="24dp">
|
||||||
android:fillColor="#969696"
|
|
||||||
android:pathData="M200,840Q167,840 143.5,816.5Q120,793 120,760L120,200Q120,167 143.5,143.5Q167,120 200,120L760,120Q793,120 816.5,143.5Q840,167 840,200L840,760Q840,793 816.5,816.5Q793,840 760,840L200,840ZM240,680L720,680L570,480L450,640L360,520L240,680ZM340,400Q365,400 382.5,382.5Q400,365 400,340Q400,315 382.5,297.5Q365,280 340,280Q315,280 297.5,297.5Q280,315 280,340Q280,365 297.5,382.5Q315,400 340,400Z" />
|
<path android:fillColor="#969696"
|
||||||
|
android:pathData="M21,19V5c0,-1.1 -0.9,-2 -2,-2H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2zM8.5,13.5l2.5,3.01L14.5,12l4.5,6H5l3.5,-4.5z"/>
|
||||||
|
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2023-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2023-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
@ -12,5 +12,5 @@
|
|||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M480,680Q497,680 508.5,668.5Q520,657 520,640Q520,623 508.5,611.5Q497,600 480,600Q463,600 451.5,611.5Q440,623 440,640Q440,657 451.5,668.5Q463,680 480,680ZM440,520L520,520L520,280L440,280L440,520ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q614,800 707,707Q800,614 800,480Q800,346 707,253Q614,160 480,160Q346,160 253,253Q160,346 160,480Q160,614 253,707Q346,800 480,800ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z" />
|
android:pathData="M480,680Q497,680 508.5,668.5Q520,657 520,640Q520,623 508.5,611.5Q497,600 480,600Q463,600 451.5,611.5Q440,623 440,640Q440,657 451.5,668.5Q463,680 480,680ZM440,520L520,520L520,280L440,280L440,520ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -5,13 +5,14 @@
|
|||||||
~ SPDX-License-Identifier: GPL-3.0-or-later
|
~ SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="24dp"
|
|
||||||
android:height="24dp"
|
|
||||||
android:autoMirrored="true"
|
android:autoMirrored="true"
|
||||||
|
android:height="24dp"
|
||||||
android:tint="#969696"
|
android:tint="#969696"
|
||||||
android:viewportWidth="960"
|
android:viewportHeight="24"
|
||||||
android:viewportHeight="960">
|
android:viewportWidth="24"
|
||||||
<path
|
android:width="24dp">
|
||||||
android:fillColor="#969696"
|
|
||||||
android:pathData="M240,880Q207,880 183.5,856.5Q160,833 160,800L160,160Q160,127 183.5,103.5Q207,80 240,80L560,80L800,320L800,800Q800,833 776.5,856.5Q753,880 720,880L240,880ZM520,360L720,360L520,160L520,360Z"/>
|
<path android:fillColor="#969696"
|
||||||
|
android:pathData="M6,2c-1.1,0 -1.99,0.9 -1.99,2L4,20c0,1.1 0.89,2 1.99,2L18,22c1.1,0 2,-0.9 2,-2L20,8l-6,-6L6,2zM13,9L13,3.5L18.5,9L13,9z"/>
|
||||||
|
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -4,13 +4,15 @@
|
|||||||
~ SPDX-FileCopyrightText: 2025 Google LLC
|
~ SPDX-FileCopyrightText: 2025 Google LLC
|
||||||
~ SPDX-License-Identifier: GPL-3.0-or-later
|
~ SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="24dp"
|
|
||||||
android:height="24dp"
|
android:height="24dp"
|
||||||
android:tint="#969696"
|
android:tint="#969696"
|
||||||
android:viewportWidth="960"
|
android:viewportHeight="24"
|
||||||
android:viewportHeight="960">
|
android:viewportWidth="24"
|
||||||
<path
|
android:width="24dp">
|
||||||
android:fillColor="#969696"
|
|
||||||
android:pathData="M480,480Q513,480 536.5,456.5Q560,433 560,400Q560,367 536.5,343.5Q513,320 480,320Q447,320 423.5,343.5Q400,367 400,400Q400,433 423.5,456.5Q447,480 480,480ZM480,880Q319,743 239.5,625.5Q160,508 160,408Q160,258 256.5,169Q353,80 480,80Q607,80 703.5,169Q800,258 800,408Q800,508 720.5,625.5Q641,743 480,880Z" />
|
<path android:fillColor="#969696"
|
||||||
|
android:pathData="M12,2L12,2C8.13,2 5,5.13 5,9c0,1.74 0.5,3.37 1.41,4.84c0.95,1.54 2.2,2.86 3.16,4.4c0.47,0.75 0.81,1.45 1.17,2.26C11,21.05 11.21,22 12,22h0c0.79,0 1,-0.95 1.25,-1.5c0.37,-0.81 0.7,-1.51 1.17,-2.26c0.96,-1.53 2.21,-2.85 3.16,-4.4C18.5,12.37 19,10.74 19,9C19,5.13 15.87,2 12,2zM12,11.75c-1.38,0 -2.5,-1.12 -2.5,-2.5s1.12,-2.5 2.5,-2.5s2.5,1.12 2.5,2.5S13.38,11.75 12,11.75z"/>
|
||||||
|
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2025 Google LLC
|
~ SPDX-FileCopyrightText: 2024 Google LLC
|
||||||
~ SPDX-License-Identifier: GPL-3.0-or-later
|
~ SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
@ -5,12 +5,13 @@
|
|||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="24dp"
|
|
||||||
android:height="24dp"
|
android:height="24dp"
|
||||||
android:tint="#969696"
|
android:tint="#969696"
|
||||||
android:viewportWidth="960"
|
android:viewportHeight="24"
|
||||||
android:viewportHeight="960">
|
android:viewportWidth="24"
|
||||||
<path
|
android:width="24dp">
|
||||||
android:fillColor="@android:color/white"
|
|
||||||
android:pathData="M480,560Q430,560 395,525Q360,490 360,440L360,200Q360,150 395,115Q430,80 480,80Q530,80 565,115Q600,150 600,200L600,440Q600,490 565,525Q530,560 480,560ZM480,320Q480,320 480,320Q480,320 480,320L480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320L480,320Q480,320 480,320Q480,320 480,320ZM440,840L440,717Q336,703 268,624Q200,545 200,440L280,440Q280,523 338.5,581.5Q397,640 480,640Q563,640 621.5,581.5Q680,523 680,440L760,440Q760,545 692,624Q624,703 520,717L520,840L440,840ZM480,480Q497,480 508.5,468.5Q520,457 520,440L520,200Q520,183 508.5,171.5Q497,160 480,160Q463,160 451.5,171.5Q440,183 440,200L440,440Q440,457 451.5,468.5Q463,480 480,480Z" />
|
<path android:fillColor="#969696"
|
||||||
|
android:pathData="M12,14c1.66,0 2.99,-1.34 2.99,-3L15,5c0,-1.66 -1.34,-3 -3,-3S9,3.34 9,5v6c0,1.66 1.34,3 3,3zM17.3,11c0,3 -2.54,5.1 -5.3,5.1S6.7,14 6.7,11L5,11c0,3.41 2.72,6.23 6,6.72L11,21h2v-3.28c3.28,-0.48 6,-3.3 6,-6.72h-1.7z"/>
|
||||||
|
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2021-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2021-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
@ -12,5 +12,5 @@
|
|||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="#FF000000"
|
android:fillColor="#FF000000"
|
||||||
android:pathData="M160,760L160,680L240,680L240,400Q240,317 290,252.5Q340,188 420,168L420,140Q420,115 437.5,97.5Q455,80 480,80Q505,80 522.5,97.5Q540,115 540,140L540,168Q620,188 670,252.5Q720,317 720,400L720,680L800,680L800,760L160,760ZM480,460L480,460L480,460L480,460Q480,460 480,460Q480,460 480,460Q480,460 480,460Q480,460 480,460ZM480,880Q447,880 423.5,856.5Q400,833 400,800L560,800Q560,833 536.5,856.5Q513,880 480,880ZM320,680L640,680L640,400Q640,334 593,287Q546,240 480,240Q414,240 367,287Q320,334 320,400L320,680Z" />
|
android:pathData="M160,760L160,680L240,680L240,400Q240,317 290,252.5Q340,188 420,168L420,140Q420,115 437.5,97.5Q455,80 480,80Q505,80 522.5,97.5Q540,115 540,140L540,168Q620,188 670,252.5Q720,317 720,400L720,680L800,680L800,760L160,760ZM480,880Q447,880 423.5,856.5Q400,833 400,800L560,800Q560,833 536.5,856.5Q513,880 480,880Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -8,9 +8,8 @@
|
|||||||
android:width="24dp"
|
android:width="24dp"
|
||||||
android:height="24dp"
|
android:height="24dp"
|
||||||
android:tint="#000000"
|
android:tint="#000000"
|
||||||
android:viewportWidth="960"
|
android:viewportWidth="24"
|
||||||
android:viewportHeight="960">
|
android:viewportHeight="24">
|
||||||
<path
|
<path android:fillColor="@android:color/white"
|
||||||
android:fillColor="@android:color/white"
|
android:pathData="M22,16L22,4c0,-1.1 -0.9,-2 -2,-2L8,2c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2zM11,12l2.03,2.71L16,11l4,5L8,16l3,-4zM2,6v14c0,1.1 0.9,2 2,2h14v-2L4,20L4,6L2,6z"/>
|
||||||
android:pathData="M360,560L760,560L622,380L530,500L468,420L360,560ZM320,720Q287,720 263.5,696.5Q240,673 240,640L240,160Q240,127 263.5,103.5Q287,80 320,80L800,80Q833,80 856.5,103.5Q880,127 880,160L880,640Q880,673 856.5,696.5Q833,720 800,720L320,720ZM320,640L800,640Q800,640 800,640Q800,640 800,640L800,160Q800,160 800,160Q800,160 800,160L320,160Q320,160 320,160Q320,160 320,160L320,640Q320,640 320,640Q320,640 320,640ZM160,880Q127,880 103.5,856.5Q80,833 80,800L80,240L160,240L160,800Q160,800 160,800Q160,800 160,800L720,800L720,880L160,880ZM320,160L320,160Q320,160 320,160Q320,160 320,160L320,640Q320,640 320,640Q320,640 320,640L320,640Q320,640 320,640Q320,640 320,640L320,160Q320,160 320,160Q320,160 320,160Z" />
|
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2021-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2021-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
@ -12,5 +12,5 @@
|
|||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M40,840L480,80L920,840L40,840ZM178,760L782,760L480,240L178,760ZM480,720Q497,720 508.5,708.5Q520,697 520,680Q520,663 508.5,651.5Q497,640 480,640Q463,640 451.5,651.5Q440,663 440,680Q440,697 451.5,708.5Q463,720 480,720ZM440,600L520,600L520,400L440,400L440,600ZM480,500L480,500L480,500Z" />
|
android:pathData="M40,840L480,80L920,840L40,840ZM480,720Q497,720 508.5,708.5Q520,697 520,680Q520,663 508.5,651.5Q497,640 480,640Q463,640 451.5,651.5Q440,663 440,680Q440,697 451.5,708.5Q463,720 480,720ZM440,600L520,600L520,400L440,400L440,600Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2023-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2023-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
@ -11,6 +11,6 @@
|
|||||||
android:viewportWidth="960"
|
android:viewportWidth="960"
|
||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="#FF000000"
|
||||||
android:pathData="M720,560L720,440L600,440L600,360L720,360L720,240L800,240L800,360L920,360L920,440L800,440L800,560L720,560ZM360,480Q294,480 247,433Q200,386 200,320Q200,254 247,207Q294,160 360,160Q426,160 473,207Q520,254 520,320Q520,386 473,433Q426,480 360,480ZM40,800L40,688Q40,654 57.5,625.5Q75,597 104,582Q166,551 230,535.5Q294,520 360,520Q426,520 490,535.5Q554,551 616,582Q645,597 662.5,625.5Q680,654 680,688L680,800L40,800ZM120,720L600,720L600,688Q600,677 594.5,668Q589,659 580,654Q526,627 471,613.5Q416,600 360,600Q304,600 249,613.5Q194,627 140,654Q131,659 125.5,668Q120,677 120,688L120,720ZM360,400Q393,400 416.5,376.5Q440,353 440,320Q440,287 416.5,263.5Q393,240 360,240Q327,240 303.5,263.5Q280,287 280,320Q280,353 303.5,376.5Q327,400 360,400ZM360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320ZM360,720L360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720L360,720Z" />
|
android:pathData="M720,560L720,440L600,440L600,360L720,360L720,240L800,240L800,360L920,360L920,440L800,440L800,560L720,560ZM360,480Q294,480 247,433Q200,386 200,320Q200,254 247,207Q294,160 360,160Q426,160 473,207Q520,254 520,320Q520,386 473,433Q426,480 360,480ZM40,800L40,688Q40,654 57.5,625.5Q75,597 104,582Q166,551 230,535.5Q294,520 360,520Q426,520 490,535.5Q554,551 616,582Q645,597 662.5,625.5Q680,654 680,688L680,800L40,800Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2018-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="24dp"
|
android:width="24dp"
|
||||||
@ -12,5 +12,5 @@
|
|||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M40,800L40,688Q40,654 57.5,625.5Q75,597 104,582Q166,551 230,535.5Q294,520 360,520Q426,520 490,535.5Q554,551 616,582Q645,597 662.5,625.5Q680,654 680,688L680,800L40,800ZM760,800L760,680Q760,636 735.5,595.5Q711,555 666,526Q717,532 762,546.5Q807,561 846,582Q882,602 901,626.5Q920,651 920,680L920,800L760,800ZM360,480Q294,480 247,433Q200,386 200,320Q200,254 247,207Q294,160 360,160Q426,160 473,207Q520,254 520,320Q520,386 473,433Q426,480 360,480ZM760,320Q760,386 713,433Q666,480 600,480Q589,480 572,477.5Q555,475 544,472Q571,440 585.5,401Q600,362 600,320Q600,278 585.5,239Q571,200 544,168Q558,163 572,161.5Q586,160 600,160Q666,160 713,207Q760,254 760,320ZM120,720L600,720L600,688Q600,677 594.5,668Q589,659 580,654Q526,627 471,613.5Q416,600 360,600Q304,600 249,613.5Q194,627 140,654Q131,659 125.5,668Q120,677 120,688L120,720ZM360,400Q393,400 416.5,376.5Q440,353 440,320Q440,287 416.5,263.5Q393,240 360,240Q327,240 303.5,263.5Q280,287 280,320Q280,353 303.5,376.5Q327,400 360,400ZM360,720L360,720L360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720Q360,720 360,720ZM360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Q360,320 360,320Z" />
|
android:pathData="M40,800L40,688Q40,654 57.5,625.5Q75,597 104,582Q166,551 230,535.5Q294,520 360,520Q426,520 490,535.5Q554,551 616,582Q645,597 662.5,625.5Q680,654 680,688L680,800L40,800ZM760,800L760,680Q760,636 735.5,595.5Q711,555 666,526Q717,532 762,546.5Q807,561 846,582Q882,602 901,626.5Q920,651 920,680L920,800L760,800ZM360,480Q294,480 247,433Q200,386 200,320Q200,254 247,207Q294,160 360,160Q426,160 473,207Q520,254 520,320Q520,386 473,433Q426,480 360,480ZM760,320Q760,386 713,433Q666,480 600,480Q589,480 572,477.5Q555,475 544,472Q571,440 585.5,401Q600,362 600,320Q600,278 585.5,239Q571,200 544,168Q558,163 572,161.5Q586,160 600,160Q666,160 713,207Q760,254 760,320Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,15 +1,16 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2018-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2018-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="24dp"
|
android:width="24dp"
|
||||||
android:height="24dp"
|
android:height="24dp"
|
||||||
android:viewportWidth="960"
|
android:viewportWidth="24"
|
||||||
android:viewportHeight="960">
|
android:viewportHeight="24">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="#ffffff"
|
||||||
android:pathData="M160,800Q127,800 103.5,776.5Q80,753 80,720L80,240Q80,207 103.5,183.5Q127,160 160,160L800,160Q833,160 856.5,183.5Q880,207 880,240L880,720Q880,753 856.5,776.5Q833,800 800,800L160,800ZM480,520L160,320L160,720Q160,720 160,720Q160,720 160,720L800,720Q800,720 800,720Q800,720 800,720L800,320L480,520ZM480,440L800,240L160,240L480,440ZM160,320L160,240L160,240L160,320L160,720Q160,720 160,720Q160,720 160,720L160,720Q160,720 160,720Q160,720 160,720L160,320Z" />
|
android:fillType="nonZero"
|
||||||
|
android:pathData="M7.2,15.8C6.87,15.8 6.587,15.682 6.353,15.448C6.118,15.213 6,14.93 6,14.6L6,7.4C6,7.07 6.118,6.787 6.353,6.552C6.587,6.318 6.87,6.2 7.2,6.2L16.8,6.2C17.13,6.2 17.413,6.318 17.648,6.552C17.882,6.787 18,7.07 18,7.4L18,14.6C18,14.93 17.882,15.213 17.648,15.448C17.413,15.682 17.13,15.8 16.8,15.8L7.2,15.8ZM12,11.6L16.8,8.6L16.8,7.4L12,10.4L7.2,7.4L7.2,8.6L12,11.6Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2023-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2023-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
@ -11,5 +11,5 @@
|
|||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M840,726L760,646L760,200Q760,183 771.5,171.5Q783,160 800,160Q817,160 828.5,171.5Q840,183 840,200L840,726ZM360,246L280,166L280,160Q280,143 291.5,131.5Q303,120 320,120Q337,120 348.5,131.5Q360,143 360,160L360,246ZM520,406L440,326L440,80Q440,63 451.5,51.5Q463,40 480,40Q497,40 508.5,51.5Q520,63 520,80L520,406ZM680,487L600,487L600,487L600,120Q600,103 611.5,91.5Q623,80 640,80Q657,80 668.5,91.5Q680,103 680,120L680,487ZM717,830L360,473L360,697L212,593L369,822Q374,830 383,835Q392,840 402,840L680,840Q690,840 699.5,837.5Q709,835 717,830ZM402,920Q372,920 346,906.5Q320,893 303,868L48,495L72,472Q91,453 117,450Q143,447 164,462L280,543L280,393L27,140L84,83L876,875L819,932L775,888Q755,903 731,911.5Q707,920 680,920L402,920ZM539,652Q539,652 539,652Q539,652 539,652L539,652Q539,652 539,652Q539,652 539,652L539,652L539,652L539,652ZM600,487L600,487L600,487Z" />
|
android:pathData="M84,83L876,875L819,932L775,888Q755,903 731,911.5Q707,920 680,920L402,920Q372,920 346,906.5Q320,893 303,868L48,495L72,472Q91,453 117,450Q143,447 164,462L280,543L280,393L27,140L84,83ZM840,726L600,487L600,487L600,120Q600,103 611.5,91.5Q623,80 640,80Q657,80 668.5,91.5Q680,103 680,120L680,487L760,487L760,200Q760,183 771.5,171.5Q783,160 800,160Q817,160 828.5,171.5Q840,183 840,200L840,726ZM520,406L440,326L440,80Q440,63 451.5,51.5Q463,40 480,40Q497,40 508.5,51.5Q520,63 520,80L520,406ZM360,246L280,166L280,160Q280,143 291.5,131.5Q303,120 320,120Q337,120 348.5,131.5Q360,143 360,160L360,246Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2021-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2021-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="24dp"
|
android:width="24dp"
|
||||||
android:height="24dp"
|
android:height="24dp"
|
||||||
android:tint="#757575"
|
android:tint="#757575"
|
||||||
android:viewportWidth="960"
|
android:viewportWidth="24"
|
||||||
android:viewportHeight="960">
|
android:viewportHeight="24">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M280,80L680,80L600,360L760,360L643,529L586,472L608,440L554,440L507,393L574,160L360,160L360,246L280,166L280,80ZM400,880L400,560L280,560L280,394L55,169L112,112L848,848L791,905L550,664L400,880ZM473,359L473,359L473,359L473,359L473,359L473,359L473,359Z" />
|
android:pathData="M3.27,3L2,4.27l5,5V13h3v9l3.58,-6.14L17.73,20 19,18.73 3.27,3zM17,10h-4l4,-8H7v2.18l8.46,8.46L17,10z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2021-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2021-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="24dp"
|
android:width="24dp"
|
||||||
android:height="24dp"
|
android:height="24dp"
|
||||||
android:tint="#757575"
|
android:tint="#757575"
|
||||||
android:viewportWidth="960"
|
android:viewportWidth="24"
|
||||||
android:viewportHeight="960">
|
android:viewportHeight="24">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M480,624L608,440L494,440L574,160L360,160L360,480L480,480L480,624ZM400,880L400,560L280,560L280,80L680,80L600,360L760,360L400,880ZM480,480L480,480L360,480L360,480L480,480L480,480L480,480Z" />
|
android:pathData="M7,2v11h3v9l7,-12h-4l4,-8z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2018-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2018-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
@ -12,5 +12,5 @@
|
|||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M480,920L480,840L760,840Q760,840 760,840Q760,840 760,840L760,800L600,800L600,480L760,480L760,440Q760,324 678,242Q596,160 480,160Q364,160 282,242Q200,324 200,440L200,480L360,480L360,800L200,800Q167,800 143.5,776.5Q120,753 120,720L120,440Q120,366 148.5,300.5Q177,235 226,186Q275,137 340.5,108.5Q406,80 480,80Q554,80 619.5,108.5Q685,137 734,186Q783,235 811.5,300.5Q840,366 840,440L840,840Q840,873 816.5,896.5Q793,920 760,920L480,920ZM200,720L280,720L280,560L200,560L200,720Q200,720 200,720Q200,720 200,720ZM680,720L760,720L760,560L680,560L680,720ZM200,560Q200,560 200,560Q200,560 200,560L200,560L280,560L280,560L200,560ZM680,560L680,560L760,560L760,560L680,560Z" />
|
android:pathData="M480,920L480,840L760,840Q760,840 760,840Q760,840 760,840L760,800L600,800L600,480L760,480L760,440Q760,324 678,242Q596,160 480,160Q364,160 282,242Q200,324 200,440L200,480L360,480L360,800L200,800Q167,800 143.5,776.5Q120,753 120,720L120,440Q120,366 148.5,300.5Q177,235 226,186Q275,137 340.5,108.5Q406,80 480,80Q554,80 619.5,108.5Q685,137 734,186Q783,235 811.5,300.5Q840,366 840,440L840,840Q840,873 816.5,896.5Q793,920 760,920L480,920Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2021-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2021-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
@ -12,5 +12,5 @@
|
|||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M160,760Q127,760 103.5,736.5Q80,713 80,680L80,280Q80,247 103.5,223.5Q127,200 160,200L800,200Q833,200 856.5,223.5Q880,247 880,280L880,680Q880,713 856.5,736.5Q833,760 800,760L160,760ZM160,680L800,680Q800,680 800,680Q800,680 800,680L800,280Q800,280 800,280Q800,280 800,280L160,280Q160,280 160,280Q160,280 160,280L160,680Q160,680 160,680Q160,680 160,680ZM320,640L640,640L640,560L320,560L320,640ZM200,520L280,520L280,440L200,440L200,520ZM320,520L400,520L400,440L320,440L320,520ZM440,520L520,520L520,440L440,440L440,520ZM560,520L640,520L640,440L560,440L560,520ZM680,520L760,520L760,440L680,440L680,520ZM200,400L280,400L280,320L200,320L200,400ZM320,400L400,400L400,320L320,320L320,400ZM440,400L520,400L520,320L440,320L440,400ZM560,400L640,400L640,320L560,320L560,400ZM680,400L760,400L760,320L680,320L680,400ZM160,680Q160,680 160,680Q160,680 160,680L160,280Q160,280 160,280Q160,280 160,280L160,280Q160,280 160,280Q160,280 160,280L160,680Q160,680 160,680Q160,680 160,680Z" />
|
android:pathData="M160,760Q127,760 103.5,736.5Q80,713 80,680L80,280Q80,247 103.5,223.5Q127,200 160,200L800,200Q833,200 856.5,223.5Q880,247 880,280L880,680Q880,713 856.5,736.5Q833,760 800,760L160,760ZM320,640L640,640L640,560L320,560L320,640ZM200,520L280,520L280,440L200,440L200,520ZM320,520L400,520L400,440L320,440L320,520ZM440,520L520,520L520,440L440,440L440,520ZM560,520L640,520L640,440L560,440L560,520ZM680,520L760,520L760,440L680,440L680,520ZM200,400L280,400L280,320L200,320L200,400ZM320,400L400,400L400,320L320,320L320,400ZM440,400L520,400L520,320L440,320L440,400ZM560,400L640,400L640,320L560,320L560,400ZM680,400L760,400L760,320L680,320L680,400Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2021-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2021-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
@ -11,6 +11,6 @@
|
|||||||
android:viewportWidth="960"
|
android:viewportWidth="960"
|
||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="#757575"
|
||||||
android:pathData="M480,480Q513,480 536.5,456.5Q560,433 560,400Q560,367 536.5,343.5Q513,320 480,320Q447,320 423.5,343.5Q400,367 400,400Q400,433 423.5,456.5Q447,480 480,480ZM480,774Q602,662 661,570.5Q720,479 720,408Q720,299 650.5,229.5Q581,160 480,160Q379,160 309.5,229.5Q240,299 240,408Q240,479 299,570.5Q358,662 480,774ZM480,880Q319,743 239.5,625.5Q160,508 160,408Q160,258 256.5,169Q353,80 480,80Q607,80 703.5,169Q800,258 800,408Q800,508 720.5,625.5Q641,743 480,880ZM480,400Q480,400 480,400Q480,400 480,400Q480,400 480,400Q480,400 480,400Q480,400 480,400Q480,400 480,400Q480,400 480,400Q480,400 480,400Z" />
|
android:pathData="M480,480Q513,480 536.5,456.5Q560,433 560,400Q560,367 536.5,343.5Q513,320 480,320Q447,320 423.5,343.5Q400,367 400,400Q400,433 423.5,456.5Q447,480 480,480ZM480,880Q319,743 239.5,625.5Q160,508 160,408Q160,258 256.5,169Q353,80 480,80Q607,80 703.5,169Q800,258 800,408Q800,508 720.5,625.5Q641,743 480,880Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2021-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2021-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="24dp"
|
android:width="24dp"
|
||||||
android:height="24dp"
|
android:height="24dp"
|
||||||
android:tint="?attr/colorControlNormal"
|
android:tint="?attr/colorControlNormal"
|
||||||
android:viewportWidth="960"
|
android:viewportWidth="24"
|
||||||
android:viewportHeight="960">
|
android:viewportHeight="24">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@color/fontAppbar"
|
android:fillColor="@color/fontAppbar"
|
||||||
android:pathData="M480,560Q430,560 395,525Q360,490 360,440L360,200Q360,150 395,115Q430,80 480,80Q530,80 565,115Q600,150 600,200L600,440Q600,490 565,525Q530,560 480,560ZM480,320Q480,320 480,320Q480,320 480,320L480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320L480,320Q480,320 480,320Q480,320 480,320ZM440,840L440,717Q336,703 268,624Q200,545 200,440L280,440Q280,523 338.5,581.5Q397,640 480,640Q563,640 621.5,581.5Q680,523 680,440L760,440Q760,545 692,624Q624,703 520,717L520,840L440,840ZM480,480Q497,480 508.5,468.5Q520,457 520,440L520,200Q520,183 508.5,171.5Q497,160 480,160Q463,160 451.5,171.5Q440,183 440,200L440,440Q440,457 451.5,468.5Q463,480 480,480Z" />
|
android:pathData="M12,14c1.66,0 2.99,-1.34 2.99,-3L15,5c0,-1.66 -1.34,-3 -3,-3S9,3.34 9,5v6c0,1.66 1.34,3 3,3zM17.3,11c0,3 -2.54,5.1 -5.3,5.1S6.7,14 6.7,11L5,11c0,3.41 2.72,6.23 6,6.72L11,21h2v-3.28c3.28,-0.48 6,-3.3 6,-6.72h-1.7z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2021-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2021-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="24dp"
|
android:width="24dp"
|
||||||
android:height="24dp"
|
android:height="24dp"
|
||||||
android:tint="@color/nc_darkRed"
|
android:tint="@color/nc_darkRed"
|
||||||
android:viewportWidth="960"
|
android:viewportWidth="24"
|
||||||
android:viewportHeight="960">
|
android:viewportHeight="24">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@color/fontAppbar"
|
android:fillColor="@color/fontAppbar"
|
||||||
android:pathData="M480,560Q430,560 395,525Q360,490 360,440L360,200Q360,150 395,115Q430,80 480,80Q530,80 565,115Q600,150 600,200L600,440Q600,490 565,525Q530,560 480,560ZM480,320Q480,320 480,320Q480,320 480,320L480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320L480,320Q480,320 480,320Q480,320 480,320ZM440,840L440,717Q336,703 268,624Q200,545 200,440L280,440Q280,523 338.5,581.5Q397,640 480,640Q563,640 621.5,581.5Q680,523 680,440L760,440Q760,545 692,624Q624,703 520,717L520,840L440,840ZM480,480Q497,480 508.5,468.5Q520,457 520,440L520,200Q520,183 508.5,171.5Q497,160 480,160Q463,160 451.5,171.5Q440,183 440,200L440,440Q440,457 451.5,468.5Q463,480 480,480Z" />
|
android:pathData="M12,14c1.66,0 2.99,-1.34 2.99,-3L15,5c0,-1.66 -1.34,-3 -3,-3S9,3.34 9,5v6c0,1.66 1.34,3 3,3zM17.3,11c0,3 -2.54,5.1 -5.3,5.1S6.7,14 6.7,11L5,11c0,3.41 2.72,6.23 6,6.72L11,21h2v-3.28c3.28,-0.48 6,-3.3 6,-6.72h-1.7z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2021-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2021-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
@ -12,5 +12,5 @@
|
|||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M160,760L160,680L240,680L240,400Q240,367 248.5,335Q257,303 274,274L334,334Q327,350 323.5,366.5Q320,383 320,400L320,680L568,680L56,168L112,112L848,848L792,904L646,760L160,760ZM720,606L640,526L640,400Q640,334 593,287Q546,240 480,240Q454,240 430,248Q406,256 386,272L328,214Q348,198 371,186Q394,174 420,168L420,140Q420,115 437.5,97.5Q455,80 480,80Q505,80 522.5,97.5Q540,115 540,140L540,168Q620,188 670,252.5Q720,317 720,400L720,606ZM444,556L444,556L444,556L444,556ZM480,880Q447,880 423.5,856.5Q400,833 400,800L560,800Q560,833 536.5,856.5Q513,880 480,880ZM513,399Q513,399 513,399Q513,399 513,399L513,399L513,399Q513,399 513,399Q513,399 513,399Z" />
|
android:pathData="M160,760L160,680L240,680L240,400Q240,367 248.5,335Q257,303 274,274L400,400L288,400L56,168L112,112L848,848L792,904L646,760L160,760ZM720,606L328,214Q348,198 371,186Q394,174 420,168L420,140Q420,115 437.5,97.5Q455,80 480,80Q505,80 522.5,97.5Q540,115 540,140L540,168Q620,188 670,252.5Q720,317 720,400L720,606ZM480,880Q447,880 423.5,856.5Q400,833 400,800L560,800Q560,833 536.5,856.5Q513,880 480,880Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2021-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2021-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="24dp"
|
android:width="24dp"
|
||||||
android:height="24dp"
|
android:height="24dp"
|
||||||
android:tint="?attr/colorControlNormal"
|
android:tint="?attr/colorControlNormal"
|
||||||
android:viewportWidth="960"
|
android:viewportWidth="24"
|
||||||
android:viewportHeight="960">
|
android:viewportHeight="24">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M480,480Q414,480 367,433Q320,386 320,320Q320,254 367,207Q414,160 480,160Q546,160 593,207Q640,254 640,320Q640,386 593,433Q546,480 480,480ZM160,800L160,688Q160,654 177.5,625.5Q195,597 224,582Q286,551 350,535.5Q414,520 480,520Q546,520 610,535.5Q674,551 736,582Q765,597 782.5,625.5Q800,654 800,688L800,800L160,800ZM240,720L720,720L720,688Q720,677 714.5,668Q709,659 700,654Q646,627 591,613.5Q536,600 480,600Q424,600 369,613.5Q314,627 260,654Q251,659 245.5,668Q240,677 240,688L240,720ZM480,400Q513,400 536.5,376.5Q560,353 560,320Q560,287 536.5,263.5Q513,240 480,240Q447,240 423.5,263.5Q400,287 400,320Q400,353 423.5,376.5Q447,400 480,400ZM480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320Q480,320 480,320ZM480,720L480,720Q480,720 480,720Q480,720 480,720Q480,720 480,720Q480,720 480,720Q480,720 480,720Q480,720 480,720Q480,720 480,720Q480,720 480,720L480,720Z" />
|
android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM12,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2018-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2018-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
@ -12,5 +12,5 @@
|
|||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M760,480Q760,363 678.5,281.5Q597,200 480,200L480,120Q555,120 620.5,148.5Q686,177 734.5,225.5Q783,274 811.5,339.5Q840,405 840,480L760,480ZM600,480Q600,430 565,395Q530,360 480,360L480,280Q563,280 621.5,338.5Q680,397 680,480L600,480ZM798,840Q673,840 551,785.5Q429,731 329,631Q229,531 174.5,409Q120,287 120,162Q120,144 132,132Q144,120 162,120L324,120Q338,120 349,129.5Q360,139 362,152L388,292Q390,308 387,319Q384,330 376,338L279,436Q299,473 326.5,507.5Q354,542 387,574Q418,605 452,631.5Q486,658 524,680L618,586Q627,577 641.5,572.5Q656,568 670,570L808,598Q822,602 831,612.5Q840,623 840,636L840,798Q840,816 828,828Q816,840 798,840ZM241,360L307,294Q307,294 307,294Q307,294 307,294L290,200Q290,200 290,200Q290,200 290,200L201,200Q201,200 201,200Q201,200 201,200Q206,241 215,281Q224,321 241,360ZM599,718Q638,735 678.5,745Q719,755 760,758Q760,758 760,758Q760,758 760,758L760,670Q760,670 760,670Q760,670 760,670L666,651Q666,651 666,651Q666,651 666,651L599,718ZM241,360Q241,360 241,360Q241,360 241,360Q241,360 241,360Q241,360 241,360L241,360Q241,360 241,360Q241,360 241,360L241,360Q241,360 241,360Q241,360 241,360ZM599,718L599,718Q599,718 599,718Q599,718 599,718L599,718Q599,718 599,718Q599,718 599,718L599,718Q599,718 599,718Q599,718 599,718Q599,718 599,718Q599,718 599,718Z" />
|
android:pathData="M760,478Q760,361 678.5,279.5Q597,198 480,198L480,118Q555,118 620.5,146.5Q686,175 734.5,223.5Q783,272 811.5,337.5Q840,403 840,478L760,478ZM600,478Q600,428 565,393Q530,358 480,358L480,278Q563,278 621.5,336.5Q680,395 680,478L600,478ZM798,840Q673,840 551,785.5Q429,731 329,631Q229,531 174.5,409Q120,287 120,162Q120,144 132,132Q144,120 162,120L324,120Q338,120 349,129.5Q360,139 362,152L388,292Q390,308 387,319Q384,330 376,338L279,436Q299,473 326.5,507.5Q354,542 387,574Q418,605 452,631.5Q486,658 524,680L618,586Q627,577 641.5,572.5Q656,568 670,570L808,598Q822,602 831,612.5Q840,623 840,636L840,798Q840,816 828,828Q816,840 798,840Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2018-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2018-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
@ -13,5 +13,5 @@
|
|||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M136,816L44,726Q32,714 32,698Q32,682 44,670Q132,575 247,527.5Q362,480 480,480Q598,480 712.5,527.5Q827,575 916,670Q928,682 928,698Q928,714 916,726L824,816Q813,827 798.5,828Q784,829 772,820L656,732Q648,726 644,718Q640,710 640,700L640,586Q602,574 562,567Q522,560 480,560Q438,560 398,567Q358,574 320,586L320,700Q320,710 316,718Q312,726 304,732L188,820Q176,829 161.5,828Q147,827 136,816ZM240,614Q211,629 184,648.5Q157,668 128,692Q128,692 128,692Q128,692 128,692L168,732Q168,732 168,732Q168,732 168,732L240,676Q240,676 240,676Q240,676 240,676L240,614ZM720,616L720,676Q720,676 720,676Q720,676 720,676L792,732Q792,732 792,732Q792,732 792,732L832,694Q832,694 832,694Q832,694 832,694Q803,668 776,649Q749,630 720,616ZM240,614L240,614Q240,614 240,614Q240,614 240,614L240,614Q240,614 240,614Q240,614 240,614L240,614Q240,614 240,614Q240,614 240,614Q240,614 240,614Q240,614 240,614ZM720,616Q720,616 720,616Q720,616 720,616Q720,616 720,616Q720,616 720,616L720,616Q720,616 720,616Q720,616 720,616L720,616Q720,616 720,616Q720,616 720,616ZM478,454L280,256L280,360L200,360L200,120L440,120L440,200L336,200L477,341L703,115L760,172L478,454Z" />
|
android:pathData="M136,816L44,726Q32,714 32,698Q32,682 44,670Q132,575 247,527.5Q362,480 480,480Q598,480 712.5,527.5Q827,575 916,670Q928,682 928,698Q928,714 916,726L824,816Q813,827 798.5,828Q784,829 772,820L656,732Q648,726 644,718Q640,710 640,700L640,586Q602,574 562,567Q522,560 480,560Q438,560 398,567Q358,574 320,586L320,700Q320,710 316,718Q312,726 304,732L188,820Q176,829 161.5,828Q147,827 136,816ZM478,454L280,256L280,360L200,360L200,120L440,120L440,200L336,200L477,341L703,115L760,172L478,454Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2021-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2021-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
@ -12,5 +12,5 @@
|
|||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M480,700Q555,700 607.5,647.5Q660,595 660,520Q660,445 607.5,392.5Q555,340 480,340Q405,340 352.5,392.5Q300,445 300,520Q300,595 352.5,647.5Q405,700 480,700ZM480,620Q438,620 409,591Q380,562 380,520Q380,478 409,449Q438,420 480,420Q522,420 551,449Q580,478 580,520Q580,562 551,591Q522,620 480,620ZM160,840Q127,840 103.5,816.5Q80,793 80,760L80,280Q80,247 103.5,223.5Q127,200 160,200L286,200L360,120L600,120L674,200L800,200Q833,200 856.5,223.5Q880,247 880,280L880,760Q880,793 856.5,816.5Q833,840 800,840L160,840ZM160,760L800,760Q800,760 800,760Q800,760 800,760L800,280Q800,280 800,280Q800,280 800,280L638,280L565,200L395,200L322,280L160,280Q160,280 160,280Q160,280 160,280L160,760Q160,760 160,760Q160,760 160,760ZM480,520Q480,520 480,520Q480,520 480,520L480,520Q480,520 480,520Q480,520 480,520L480,520L480,520L480,520L480,520L480,520Q480,520 480,520Q480,520 480,520L480,520Q480,520 480,520Q480,520 480,520Z" />
|
android:pathData="M480,700Q555,700 607.5,647.5Q660,595 660,520Q660,445 607.5,392.5Q555,340 480,340Q405,340 352.5,392.5Q300,445 300,520Q300,595 352.5,647.5Q405,700 480,700ZM480,620Q438,620 409,591Q380,562 380,520Q380,478 409,449Q438,420 480,420Q522,420 551,449Q580,478 580,520Q580,562 551,591Q522,620 480,620ZM160,840Q127,840 103.5,816.5Q80,793 80,760L80,280Q80,247 103.5,223.5Q127,200 160,200L286,200L360,120L600,120L674,200L800,200Q833,200 856.5,223.5Q880,247 880,280L880,760Q880,793 856.5,816.5Q833,840 800,840L160,840Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2021-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2021-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
@ -13,5 +13,5 @@
|
|||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M160,800Q127,800 103.5,776.5Q80,753 80,720L80,240Q80,207 103.5,183.5Q127,160 160,160L800,160Q833,160 856.5,183.5Q880,207 880,240L880,720Q880,753 856.5,776.5Q833,800 800,800L160,800ZM160,720L800,720Q800,720 800,720Q800,720 800,720L800,240Q800,240 800,240Q800,240 800,240L160,240Q160,240 160,240Q160,240 160,240L160,720Q160,720 160,720Q160,720 160,720ZM160,720Q160,720 160,720Q160,720 160,720L160,240Q160,240 160,240Q160,240 160,240L160,240Q160,240 160,240Q160,240 160,240L160,720Q160,720 160,720Q160,720 160,720ZM440,680L760,680L760,440L440,440L440,680ZM520,600L520,520L680,520L680,600L520,600Z" />
|
android:pathData="M440,680L760,680L760,440L440,440L440,680ZM160,800Q127,800 103.5,776.5Q80,753 80,720L80,240Q80,207 103.5,183.5Q127,160 160,160L800,160Q833,160 856.5,183.5Q880,207 880,240L880,720Q880,753 856.5,776.5Q833,800 800,800L160,800Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,17 +1,16 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2018-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2018-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="24dp"
|
android:width="24dp"
|
||||||
android:height="24dp"
|
android:height="24dp"
|
||||||
android:autoMirrored="true"
|
|
||||||
android:tint="#000000"
|
android:tint="#000000"
|
||||||
android:viewportWidth="960"
|
android:viewportWidth="24"
|
||||||
android:viewportHeight="960">
|
android:viewportHeight="24">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M160,800Q127,800 103.5,776.5Q80,753 80,720L80,240Q80,207 103.5,183.5Q127,160 160,160L640,160Q673,160 696.5,183.5Q720,207 720,240L720,420L880,260L880,700L720,540L720,720Q720,753 696.5,776.5Q673,800 640,800L160,800ZM160,720L640,720Q640,720 640,720Q640,720 640,720L640,240Q640,240 640,240Q640,240 640,240L160,240Q160,240 160,240Q160,240 160,240L160,720Q160,720 160,720Q160,720 160,720ZM160,720Q160,720 160,720Q160,720 160,720L160,240Q160,240 160,240Q160,240 160,240L160,240Q160,240 160,240Q160,240 160,240L160,720Q160,720 160,720Q160,720 160,720Z" />
|
android:pathData="M17,10.5V7c0,-0.55 -0.45,-1 -1,-1H4c-0.55,0 -1,0.45 -1,1v10c0,0.55 0.45,1 1,1h12c0.55,0 1,-0.45 1,-1v-3.5l4,4v-11l-4,4z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2018-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2018-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
@ -11,5 +11,5 @@
|
|||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="#FF000000"
|
android:fillColor="#FF000000"
|
||||||
android:pathData="M798,840Q673,840 551,785.5Q429,731 329,631Q229,531 174.5,409Q120,287 120,162Q120,144 132,132Q144,120 162,120L324,120Q338,120 349,129.5Q360,139 362,152L388,292Q390,308 387,319Q384,330 376,338L279,436Q299,473 326.5,507.5Q354,542 387,574Q418,605 452,631.5Q486,658 524,680L618,586Q627,577 641.5,572.5Q656,568 670,570L808,598Q822,602 831,612.5Q840,623 840,636L840,798Q840,816 828,828Q816,840 798,840ZM241,360L307,294Q307,294 307,294Q307,294 307,294L290,200Q290,200 290,200Q290,200 290,200L201,200Q201,200 201,200Q201,200 201,200Q206,241 215,281Q224,321 241,360ZM599,718Q638,735 678.5,745Q719,755 760,758Q760,758 760,758Q760,758 760,758L760,670Q760,670 760,670Q760,670 760,670L666,651Q666,651 666,651Q666,651 666,651L599,718ZM241,360Q241,360 241,360Q241,360 241,360Q241,360 241,360Q241,360 241,360L241,360Q241,360 241,360Q241,360 241,360L241,360Q241,360 241,360Q241,360 241,360ZM599,718L599,718Q599,718 599,718Q599,718 599,718L599,718Q599,718 599,718Q599,718 599,718L599,718Q599,718 599,718Q599,718 599,718Q599,718 599,718Q599,718 599,718Z" />
|
android:pathData="M798,840Q673,840 551,785.5Q429,731 329,631Q229,531 174.5,409Q120,287 120,162Q120,144 132,132Q144,120 162,120L324,120Q338,120 349,129.5Q360,139 362,152L388,292Q390,308 387,319Q384,330 376,338L279,436Q299,473 326.5,507.5Q354,542 387,574Q418,605 452,631.5Q486,658 524,680L618,586Q627,577 641.5,572.5Q656,568 670,570L808,598Q822,602 831,612.5Q840,623 840,636L840,798Q840,816 828,828Q816,840 798,840Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2018-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2018-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
@ -11,5 +11,5 @@
|
|||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="@android:color/white"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M136,656L44,566Q32,554 32,538Q32,522 44,510Q132,415 247,367.5Q362,320 480,320Q598,320 712.5,367.5Q827,415 916,510Q928,522 928,538Q928,554 916,566L824,656Q813,667 798.5,668Q784,669 772,660L656,572Q648,566 644,558Q640,550 640,540L640,426Q602,414 562,407Q522,400 480,400Q438,400 398,407Q358,414 320,426L320,540Q320,550 316,558Q312,566 304,572L188,660Q176,669 161.5,668Q147,667 136,656ZM240,458Q211,473 184,492.5Q157,512 128,536Q128,536 128,536Q128,536 128,536L168,576Q168,576 168,576Q168,576 168,576L240,520Q240,520 240,520Q240,520 240,520L240,458ZM720,460L720,520Q720,520 720,520Q720,520 720,520L792,576Q792,576 792,576Q792,576 792,576L832,538Q832,538 832,538Q832,538 832,538Q803,512 776,493Q749,474 720,460ZM240,458L240,458Q240,458 240,458Q240,458 240,458L240,458Q240,458 240,458Q240,458 240,458L240,458Q240,458 240,458Q240,458 240,458Q240,458 240,458Q240,458 240,458ZM720,460Q720,460 720,460Q720,460 720,460Q720,460 720,460Q720,460 720,460L720,460Q720,460 720,460Q720,460 720,460L720,460Q720,460 720,460Q720,460 720,460Z" />
|
android:pathData="M480,320Q598,320 712.5,367.5Q827,415 916,510Q928,522 928,538Q928,554 916,566L824,656Q813,667 798.5,668Q784,669 772,660L656,572Q648,566 644,558Q640,550 640,540L640,426Q602,414 562,407Q522,400 480,400Q438,400 398,407Q358,414 320,426L320,540Q320,550 316,558Q312,566 304,572L188,660Q176,669 161.5,668Q147,667 136,656L44,566Q32,554 32,538Q32,522 44,510Q132,415 247,367.5Q362,320 480,320Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,16 +1,17 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2018-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2018-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="24dp"
|
android:width="24dp"
|
||||||
android:height="24dp"
|
android:height="24dp"
|
||||||
|
android:autoMirrored="true"
|
||||||
android:tint="#757575"
|
android:tint="#757575"
|
||||||
android:viewportWidth="960"
|
android:viewportWidth="960"
|
||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="#FF000000"
|
android:fillColor="#FF000000"
|
||||||
android:pathData="M798,840Q673,840 551,785.5Q429,731 329,631Q229,531 174.5,409Q120,287 120,162Q120,144 132,132Q144,120 162,120L324,120Q338,120 349,129.5Q360,139 362,152L388,292Q390,308 387,319Q384,330 376,338L279,436Q299,473 326.5,507.5Q354,542 387,574Q418,605 452,631.5Q486,658 524,680L618,586Q627,577 641.5,572.5Q656,568 670,570L808,598Q822,602 831,612.5Q840,623 840,636L840,798Q840,816 828,828Q816,840 798,840ZM241,360L307,294Q307,294 307,294Q307,294 307,294L290,200Q290,200 290,200Q290,200 290,200L201,200Q201,200 201,200Q201,200 201,200Q206,241 215,281Q224,321 241,360ZM599,718Q638,735 678.5,745Q719,755 760,758Q760,758 760,758Q760,758 760,758L760,670Q760,670 760,670Q760,670 760,670L666,651Q666,651 666,651Q666,651 666,651L599,718ZM241,360Q241,360 241,360Q241,360 241,360Q241,360 241,360Q241,360 241,360L241,360Q241,360 241,360Q241,360 241,360L241,360Q241,360 241,360Q241,360 241,360ZM599,718L599,718Q599,718 599,718Q599,718 599,718L599,718Q599,718 599,718Q599,718 599,718L599,718Q599,718 599,718Q599,718 599,718Q599,718 599,718Q599,718 599,718Z" />
|
android:pathData="M798,840Q673,840 551,785.5Q429,731 329,631Q229,531 174.5,409Q120,287 120,162Q120,144 132,132Q144,120 162,120L324,120Q338,120 349,129.5Q360,139 362,152L388,292Q390,308 387,319Q384,330 376,338L279,436Q299,473 326.5,507.5Q354,542 387,574Q418,605 452,631.5Q486,658 524,680L618,586Q627,577 641.5,572.5Q656,568 670,570L808,598Q822,602 831,612.5Q840,623 840,636L840,798Q840,816 828,828Q816,840 798,840Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2018-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2018-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
@ -11,5 +11,5 @@
|
|||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="#FFFFFFFF"
|
android:fillColor="#FFFFFFFF"
|
||||||
android:pathData="M798,840Q673,840 551,785.5Q429,731 329,631Q229,531 174.5,409Q120,287 120,162Q120,144 132,132Q144,120 162,120L324,120Q338,120 349,129.5Q360,139 362,152L388,292Q390,308 387,319Q384,330 376,338L279,436Q299,473 326.5,507.5Q354,542 387,574Q418,605 452,631.5Q486,658 524,680L618,586Q627,577 641.5,572.5Q656,568 670,570L808,598Q822,602 831,612.5Q840,623 840,636L840,798Q840,816 828,828Q816,840 798,840ZM241,360L307,294Q307,294 307,294Q307,294 307,294L290,200Q290,200 290,200Q290,200 290,200L201,200Q201,200 201,200Q201,200 201,200Q206,241 215,281Q224,321 241,360ZM599,718Q638,735 678.5,745Q719,755 760,758Q760,758 760,758Q760,758 760,758L760,670Q760,670 760,670Q760,670 760,670L666,651Q666,651 666,651Q666,651 666,651L599,718ZM241,360Q241,360 241,360Q241,360 241,360Q241,360 241,360Q241,360 241,360L241,360Q241,360 241,360Q241,360 241,360L241,360Q241,360 241,360Q241,360 241,360ZM599,718L599,718Q599,718 599,718Q599,718 599,718L599,718Q599,718 599,718Q599,718 599,718L599,718Q599,718 599,718Q599,718 599,718Q599,718 599,718Q599,718 599,718Z" />
|
android:pathData="M798,840Q673,840 551,785.5Q429,731 329,631Q229,531 174.5,409Q120,287 120,162Q120,144 132,132Q144,120 162,120L324,120Q338,120 349,129.5Q360,139 362,152L388,292Q390,308 387,319Q384,330 376,338L279,436Q299,473 326.5,507.5Q354,542 387,574Q418,605 452,631.5Q486,658 524,680L618,586Q627,577 641.5,572.5Q656,568 670,570L808,598Q822,602 831,612.5Q840,623 840,636L840,798Q840,816 828,828Q816,840 798,840Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,15 +1,16 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2018-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2018-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="24dp"
|
android:width="24dp"
|
||||||
android:height="24dp"
|
android:height="24dp"
|
||||||
android:viewportWidth="960"
|
android:autoMirrored="true"
|
||||||
android:viewportHeight="960">
|
android:viewportWidth="24.0"
|
||||||
|
android:viewportHeight="24.0">
|
||||||
<path
|
<path
|
||||||
android:fillColor="#FF000000"
|
android:fillColor="#FF000000"
|
||||||
android:pathData="M336,680L480,536L624,680L680,624L536,480L680,336L624,280L480,424L336,280L280,336L424,480L280,624L336,680ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q614,800 707,707Q800,614 800,480Q800,346 707,253Q614,160 480,160Q346,160 253,253Q160,346 160,480Q160,614 253,707Q346,800 480,800ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z" />
|
android:pathData="M12,2C6.47,2 2,6.47 2,12s4.47,10 10,10 10,-4.47 10,-10S17.53,2 12,2zM17,15.59L15.59,17 12,13.41 8.41,17 7,15.59 10.59,12 7,8.41 8.41,7 12,10.59 15.59,7 17,8.41 13.41,12 17,15.59z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2018-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2018-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="24dp"
|
android:width="24dp"
|
||||||
android:height="24dp"
|
android:height="24dp"
|
||||||
android:tint="#FFFFFF"
|
android:tint="#FFFFFF"
|
||||||
android:viewportWidth="960"
|
android:viewportWidth="24"
|
||||||
android:viewportHeight="960">
|
android:viewportHeight="24">
|
||||||
<path
|
<path
|
||||||
android:fillColor="#FF000000"
|
android:fillColor="@android:color/white"
|
||||||
android:pathData="M336,680L480,536L624,680L680,624L536,480L680,336L624,280L480,424L336,280L280,336L424,480L280,624L336,680ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q614,800 707,707Q800,614 800,480Q800,346 707,253Q614,160 480,160Q346,160 253,253Q160,346 160,480Q160,614 253,707Q346,800 480,800ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z" />
|
android:pathData="M12,2C6.47,2 2,6.47 2,12s4.47,10 10,10 10,-4.47 10,-10S17.53,2 12,2zM17,15.59L15.59,17 12,13.41 8.41,17 7,15.59 10.59,12 7,8.41 8.41,7 12,10.59 15.59,7 17,8.41 13.41,12 17,15.59z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<!--
|
<!--
|
||||||
~ Nextcloud Talk - Android Client
|
~ Nextcloud Talk - Android Client
|
||||||
~
|
~
|
||||||
~ SPDX-FileCopyrightText: 2018-2025 Google LLC
|
~ SPDX-FileCopyrightText: 2018-2024 Google LLC
|
||||||
~ SPDX-License-Identifier: Apache-2.0
|
~ SPDX-License-Identifier: Apache-2.0
|
||||||
-->
|
-->
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
@ -11,5 +11,5 @@
|
|||||||
android:viewportHeight="960">
|
android:viewportHeight="960">
|
||||||
<path
|
<path
|
||||||
android:fillColor="#FF000000"
|
android:fillColor="#FF000000"
|
||||||
android:pathData="M280,920Q247,920 223.5,896.5Q200,873 200,840L200,120Q200,87 223.5,63.5Q247,40 280,40L680,40Q713,40 736.5,63.5Q760,87 760,120L760,244Q778,251 789,266Q800,281 800,300L800,380Q800,399 789,414Q778,429 760,436L760,840Q760,873 736.5,896.5Q713,920 680,920L280,920ZM280,840L680,840Q680,840 680,840Q680,840 680,840L680,120Q680,120 680,120Q680,120 680,120L280,120Q280,120 280,120Q280,120 280,120L280,840Q280,840 280,840Q280,840 280,840ZM280,840Q280,840 280,840Q280,840 280,840L280,120Q280,120 280,120Q280,120 280,120L280,120Q280,120 280,120Q280,120 280,120L280,840Q280,840 280,840Q280,840 280,840ZM480,240Q497,240 508.5,228.5Q520,217 520,200Q520,183 508.5,171.5Q497,160 480,160Q463,160 451.5,171.5Q440,183 440,200Q440,217 451.5,228.5Q463,240 480,240Z" />
|
android:pathData="M280,920Q247,920 223.5,896.5Q200,873 200,840L200,120Q200,87 223.5,63.5Q247,40 280,40L680,40Q713,40 736.5,63.5Q760,87 760,120L760,840Q760,873 736.5,896.5Q713,920 680,920L280,920ZM280,720L680,720L680,240L280,240L280,720Z" />
|
||||||
</vector>
|
</vector>
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user