mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-19 19:49:33 +01:00
Bug fixes, improvements, and significant changes to the conversation menu & info
Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
parent
59030fe9a5
commit
bf3d5c2c65
518
app/build.gradle
518
app/build.gradle
@ -23,285 +23,305 @@ apply plugin: 'findbugs'
|
||||
apply plugin: 'kotlin-android'
|
||||
apply plugin: 'kotlin-android-extensions'
|
||||
apply plugin: 'kotlin-kapt'
|
||||
apply plugin: 'realm-android'
|
||||
|
||||
def taskRequest = getGradle().getStartParameter().getTaskRequests().toString()
|
||||
if (taskRequest.contains("Gplay") || taskRequest.contains("findbugs") || taskRequest.contains("lint")) {
|
||||
apply from: 'gplay.gradle'
|
||||
if (taskRequest.contains("Gplay") || taskRequest.contains("findbugs") ||
|
||||
taskRequest.contains("lint")) {
|
||||
apply from: 'gplay.gradle'
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion 29
|
||||
buildToolsVersion '29.0.2'
|
||||
defaultConfig {
|
||||
applicationId "com.nextcloud.talk2"
|
||||
versionName version
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 29
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
compileSdkVersion 29
|
||||
buildToolsVersion '29.0.2'
|
||||
defaultConfig {
|
||||
applicationId "com.nextcloud.talk2"
|
||||
versionName version
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 29
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
||||
versionCode 119
|
||||
versionName "7.0.5"
|
||||
versionCode 120
|
||||
versionName "8.0.0alpha1"
|
||||
|
||||
flavorDimensions "default"
|
||||
renderscriptTargetApi 19
|
||||
renderscriptSupportModeEnabled true
|
||||
flavorDimensions "default"
|
||||
renderscriptTargetApi 19
|
||||
renderscriptSupportModeEnabled true
|
||||
|
||||
productFlavors {
|
||||
dev {
|
||||
resConfigs "en", "xxxhdpi"
|
||||
}
|
||||
// used for f-droid
|
||||
generic
|
||||
gplay
|
||||
|
||||
}
|
||||
|
||||
// Enabling multidex support.
|
||||
multiDexEnabled true
|
||||
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
|
||||
lintOptions {
|
||||
disable 'InvalidPackage'
|
||||
disable 'MissingTranslation'
|
||||
disable "ValidController"
|
||||
disable "ValidControllerChangeHandler"
|
||||
}
|
||||
|
||||
javaCompileOptions {
|
||||
annotationProcessorOptions {
|
||||
arguments = [
|
||||
parcelerStacktrace: "true"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
dataBinding {
|
||||
enabled = true
|
||||
}
|
||||
productFlavors {
|
||||
dev {
|
||||
resConfigs "en", "xxxhdpi"
|
||||
}
|
||||
// used for f-droid
|
||||
generic
|
||||
gplay
|
||||
}
|
||||
|
||||
dexOptions {
|
||||
javaMaxHeapSize "4g"
|
||||
}
|
||||
// Enabling multidex support.
|
||||
multiDexEnabled true
|
||||
|
||||
buildTypes {
|
||||
debug {
|
||||
applicationIdSuffix '.debug'
|
||||
splits.abi.enable = false
|
||||
splits.density.enable = false
|
||||
}
|
||||
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
|
||||
packagingOptions {
|
||||
exclude 'META-INF/LICENSE'
|
||||
exclude 'META-INF/NOTICE'
|
||||
exclude 'META-INF/rxjava.properties'
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
|
||||
lintOptions {
|
||||
abortOnError false
|
||||
htmlReport true
|
||||
htmlOutput file("$project.buildDir/reports/lint/lint.html")
|
||||
disable 'MissingTranslation'
|
||||
disable 'InvalidPackage'
|
||||
disable 'MissingTranslation'
|
||||
disable "ValidController"
|
||||
disable "ValidControllerChangeHandler"
|
||||
}
|
||||
|
||||
task findbugs(type: FindBugs) {
|
||||
ignoreFailures = false
|
||||
effort = "max"
|
||||
reportLevel = "medium"
|
||||
classes = fileTree("$project.buildDir/intermediates/classes/gplay/debug/com/nextcloud")
|
||||
excludeFilter = file("${project.rootDir}/findbugs-filter.xml")
|
||||
source = fileTree('src/main/java')
|
||||
pluginClasspath = project.configurations.findbugsPlugins
|
||||
classpath = files()
|
||||
include '**/*.java'
|
||||
exclude '**/gen/**'
|
||||
|
||||
reports {
|
||||
xml.enabled = false
|
||||
html.enabled = true
|
||||
html {
|
||||
destination = file("$project.buildDir/reports/findbugs/findbugs.html")
|
||||
}
|
||||
}
|
||||
javaCompileOptions {
|
||||
annotationProcessorOptions {
|
||||
arguments = [
|
||||
parcelerStacktrace: "true"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
dataBinding {
|
||||
enabled = true
|
||||
}
|
||||
}
|
||||
|
||||
dexOptions {
|
||||
javaMaxHeapSize "4g"
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
debug {
|
||||
applicationIdSuffix '.debug'
|
||||
splits.abi.enable = false
|
||||
splits.density.enable = false
|
||||
}
|
||||
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
|
||||
packagingOptions {
|
||||
exclude 'META-INF/LICENSE'
|
||||
exclude 'META-INF/NOTICE'
|
||||
exclude 'META-INF/rxjava.properties'
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
lintOptions {
|
||||
abortOnError false
|
||||
htmlReport true
|
||||
htmlOutput file("$project.buildDir/reports/lint/lint.html")
|
||||
disable 'MissingTranslation'
|
||||
}
|
||||
|
||||
task findbugs(type: FindBugs) {
|
||||
ignoreFailures = false
|
||||
effort = "max"
|
||||
reportLevel = "medium"
|
||||
classes = fileTree("$project.buildDir/intermediates/classes/gplay/debug/com/nextcloud")
|
||||
excludeFilter = file("${project.rootDir}/findbugs-filter.xml")
|
||||
source = fileTree('src/main/java')
|
||||
pluginClasspath = project.configurations.findbugsPlugins
|
||||
classpath = files()
|
||||
include '**/*.java'
|
||||
exclude '**/gen/**'
|
||||
|
||||
reports {
|
||||
xml.enabled = false
|
||||
html.enabled = true
|
||||
html {
|
||||
destination = file("$project.buildDir/reports/findbugs/findbugs.html")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ext {
|
||||
work_version = "1.0.1"
|
||||
koin_version = "2.1.0-alpha-1"
|
||||
lifecycle_version = "2.1.0"
|
||||
coil_version = "0.7.0"
|
||||
work_version = "2.3.0-alpha02"
|
||||
koin_version = "2.1.0-alpha-1"
|
||||
lifecycle_version = "2.2.0-beta01"
|
||||
coil_version = "0.7.0"
|
||||
room_version = "2.2.0"
|
||||
}
|
||||
|
||||
|
||||
configurations.all {
|
||||
exclude group: 'com.google.firebase', module: 'firebase-core'
|
||||
exclude group: 'com.google.firebase', module: 'firebase-analytics'
|
||||
exclude group: 'com.google.firebase', module: 'firebase-measurement-connector'
|
||||
exclude group: 'com.google.firebase', module: 'firebase-core'
|
||||
exclude group: 'com.google.firebase', module: 'firebase-analytics'
|
||||
exclude group: 'com.google.firebase', module: 'firebase-measurement-connector'
|
||||
}
|
||||
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(include: ['*'], dir: 'libs')
|
||||
implementation fileTree(include: ['*'], dir: 'libs')
|
||||
|
||||
// Koin for Android
|
||||
implementation "org.koin:koin-android:$koin_version"
|
||||
// Koin AndroidX Scope features
|
||||
implementation "org.koin:koin-androidx-scope:$koin_version"
|
||||
// Koin AndroidX ViewModel features
|
||||
implementation "org.koin:koin-androidx-viewmodel:$koin_version"
|
||||
// Koin AndroidX Experimental features
|
||||
implementation "org.koin:koin-androidx-ext:$koin_version"
|
||||
// Koin for Android
|
||||
implementation "org.koin:koin-android:$koin_version"
|
||||
// Koin AndroidX Scope features
|
||||
implementation "org.koin:koin-androidx-scope:$koin_version"
|
||||
// Koin AndroidX ViewModel features
|
||||
implementation "org.koin:koin-androidx-viewmodel:$koin_version"
|
||||
// Koin AndroidX Experimental features
|
||||
implementation "org.koin:koin-androidx-ext:$koin_version"
|
||||
|
||||
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2'
|
||||
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.2'
|
||||
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
|
||||
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2'
|
||||
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.2'
|
||||
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
|
||||
|
||||
implementation "com.github.stateless4j:stateless4j:2.6.0"
|
||||
implementation "com.github.stateless4j:stateless4j:2.6.0"
|
||||
|
||||
// ViewModel and LiveData
|
||||
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
|
||||
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
|
||||
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
|
||||
// ViewModel and LiveData
|
||||
implementation "androidx.core:core-ktx:1.1.0"
|
||||
implementation "androidx.sqlite:sqlite-ktx:2.0.1"
|
||||
implementation "androidx.collection:collection-ktx:1.1.0"
|
||||
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
|
||||
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
|
||||
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
|
||||
|
||||
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0-beta01"
|
||||
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.2.0-beta01"
|
||||
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0-beta01"
|
||||
|
||||
// optional - ReactiveStreams support for LiveData
|
||||
implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version" // For Kotlin use lifecycle-reactivestreams-ktx
|
||||
|
||||
// optional - Test helpers for LiveData
|
||||
testImplementation "androidx.arch.core:core-testing:$lifecycle_version"
|
||||
|
||||
implementation 'androidx.appcompat:appcompat:1.1.0'
|
||||
implementation 'com.google.android.material:material:1.1.0-beta01'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'
|
||||
implementation 'com.github.vanniktech:Emoji:0.6.0'
|
||||
implementation group: 'androidx.emoji', name: 'emoji-bundled', version: '1.0.0'
|
||||
implementation 'org.michaelevans.colorart:library:0.0.3'
|
||||
implementation "android.arch.work:work-runtime:${work_version}"
|
||||
implementation "android.arch.work:work-rxjava2:${work_version}"
|
||||
implementation 'com.google.android:flexbox:1.1.0'
|
||||
androidTestImplementation "android.arch.work:work-testing:${work_version}"
|
||||
implementation 'com.gitlab.bitfireAT:dav4jvm:ee66e8e5'
|
||||
implementation 'org.conscrypt:conscrypt-android:2.2.1'
|
||||
|
||||
implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
|
||||
|
||||
implementation 'androidx.biometric:biometric:1.0.0-rc01'
|
||||
implementation "androidx.lifecycle:lifecycle-extensions:2.1.0"
|
||||
|
||||
implementation 'androidx.multidex:multidex:2.0.1'
|
||||
|
||||
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
|
||||
implementation "io.reactivex.rxjava2:rxjava:2.2.11"
|
||||
|
||||
implementation 'com.bluelinelabs:conductor:3.0.0-rc2'
|
||||
implementation 'com.bluelinelabs:conductor-support:3.0.0-rc2'
|
||||
implementation 'com.bluelinelabs:conductor-archlifecycle:3.0.0-rc2'
|
||||
implementation 'com.bluelinelabs:conductor-rxlifecycle2:3.0.0-rc2'
|
||||
implementation 'com.bluelinelabs:conductor-autodispose:3.0.0-rc2'
|
||||
implementation "com.github.miquelbeltran:conductor-viewmodel:1.0.3"
|
||||
|
||||
implementation 'com.squareup.okhttp3:okhttp:3.14.4'
|
||||
implementation 'com.squareup.okhttp3:okhttp-urlconnection:3.14.4'
|
||||
implementation 'com.squareup.okhttp3:logging-interceptor:3.14.4'
|
||||
|
||||
implementation 'com.squareup.retrofit2:retrofit:2.6.2'
|
||||
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.6.2'
|
||||
implementation 'com.github.aurae.retrofit2:converter-logansquare:1.4.1'
|
||||
implementation group: 'joda-time', name: 'joda-time', version: '2.10.3'
|
||||
implementation 'com.bluelinelabs:logansquare:1.3.7'
|
||||
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.10.0.pr1'
|
||||
kapt 'com.bluelinelabs:logansquare-compiler:1.3.7'
|
||||
|
||||
implementation 'com.google.dagger:dagger:2.24'
|
||||
kapt 'com.google.dagger:dagger-compiler:2.24'
|
||||
implementation 'com.github.lukaspili.autodagger2:autodagger2:1.1'
|
||||
kapt 'com.github.lukaspili.autodagger2:autodagger2-compiler:1.1'
|
||||
compileOnly 'javax.annotation:jsr250-api:1.0'
|
||||
// Android only
|
||||
implementation 'org.greenrobot:eventbus:3.1.1'
|
||||
implementation 'io.requery:requery:1.5.1'
|
||||
implementation 'io.requery:requery-android:1.5.1'
|
||||
implementation 'net.zetetic:android-database-sqlcipher:3.5.9'
|
||||
kapt 'io.requery:requery-processor:1.5.1'
|
||||
implementation 'net.orange-box.storebox:storebox-lib:1.4.0'
|
||||
compileOnly 'org.projectlombok:lombok:1.18.10'
|
||||
annotationProcessor 'org.projectlombok:lombok:1.18.10'
|
||||
kapt "org.projectlombok:lombok:1.18.10"
|
||||
|
||||
implementation 'com.jakewharton:butterknife:10.2.0'
|
||||
kapt 'com.jakewharton:butterknife-compiler:10.2.0'
|
||||
implementation 'com.github.HITGIF:TextFieldBoxes:1.4.5'
|
||||
implementation 'eu.davidea:flexible-adapter:5.1.0'
|
||||
implementation 'eu.davidea:flexible-adapter-ui:1.0.0'
|
||||
implementation 'eu.davidea:flexible-adapter-livedata:1.0.0-b3'
|
||||
implementation 'org.webrtc:google-webrtc:1.0.23295'
|
||||
implementation 'com.yarolegovich:lovely-dialog:1.1.0'
|
||||
implementation 'com.yarolegovich:lovelyinput:1.0.9'
|
||||
implementation 'com.yarolegovich:mp:1.0.9'
|
||||
implementation 'me.zhanghai.android.effortlesspermissions:library:1.1.0'
|
||||
implementation 'org.apache.commons:commons-lang3:3.9'
|
||||
implementation 'com.github.wooplr:Spotlight:1.3'
|
||||
implementation('com.github.mario:chatkit:a183142049', {
|
||||
exclude group: 'com.facebook.fresco'
|
||||
})
|
||||
|
||||
implementation 'com.github.mario.fresco:fresco:111'
|
||||
implementation 'com.github.mario.fresco:animated-webp:111'
|
||||
implementation 'com.github.mario.fresco:webpsupport:111'
|
||||
implementation 'com.github.mario.fresco:animated-gif:111'
|
||||
implementation 'com.github.mario.fresco:imagepipeline-okhttp3:111'
|
||||
|
||||
implementation "io.coil-kt:coil:${coil_version}"
|
||||
implementation "io.coil-kt:coil-gif:${coil_version}"
|
||||
implementation "io.coil-kt:coil-svg:${coil_version}"
|
||||
|
||||
implementation 'com.github.natario1:Autocomplete:v1.1.0'
|
||||
|
||||
implementation 'com.github.cotechde.hwsecurity:hwsecurity-fido:2.4.5'
|
||||
|
||||
implementation 'com.novoda:merlin:1.2.1'
|
||||
|
||||
implementation 'com.github.Kennyc1012:BottomSheet:2.4.1'
|
||||
implementation 'com.github.mario:PopupBubble:a365177d96'
|
||||
implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
|
||||
implementation 'eu.medsea.mimeutil:mime-util:2.1.3'
|
||||
|
||||
implementation 'com.afollestad.material-dialogs:core:3.1.0'
|
||||
implementation 'com.afollestad.material-dialogs:datetime:3.1.0'
|
||||
implementation 'com.afollestad.material-dialogs:bottomsheets:3.1.0'
|
||||
implementation 'com.afollestad.material-dialogs:lifecycle:3.1.0'
|
||||
|
||||
implementation 'org.parceler:parceler-api:1.1.12'
|
||||
kapt 'org.parceler:parceler:1.1.12'
|
||||
|
||||
testImplementation 'junit:junit:4.12'
|
||||
testImplementation 'org.mockito:mockito-core:3.0.0'
|
||||
testImplementation 'org.powermock:powermock-core:2.0.2'
|
||||
testImplementation 'org.powermock:powermock-module-junit4:2.0.2'
|
||||
testImplementation 'org.powermock:powermock-api-mockito2:2.0.2'
|
||||
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
|
||||
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
|
||||
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
|
||||
|
||||
|
||||
androidTestImplementation ('androidx.test.espresso:espresso-core:3.3.0-alpha02', {
|
||||
exclude group: 'com.android.support', module: 'support-annotations'
|
||||
})
|
||||
findbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.9.0'
|
||||
findbugsPlugins 'com.mebigfatguy.fb-contrib:fb-contrib:7.4.6'
|
||||
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'
|
||||
|
||||
// optional - ReactiveStreams support for LiveData
|
||||
implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version"
|
||||
|
||||
// optional - Test helpers for LiveData
|
||||
testImplementation "androidx.arch.core:core-testing:2.1.0"
|
||||
|
||||
implementation "androidx.room:room-runtime:$room_version"
|
||||
kapt "androidx.room:room-compiler:$room_version" // For Kotlin use kapt instead of
|
||||
// annotationProcessor
|
||||
|
||||
// optional - Kotlin Extensions and Coroutines support for Room
|
||||
implementation "androidx.room:room-ktx:$room_version"
|
||||
|
||||
// optional - RxJava support for Room
|
||||
implementation "androidx.room:room-rxjava2:$room_version"
|
||||
|
||||
// optional - Guava support for Room, including Optional and ListenableFuture
|
||||
//implementation "androidx.room:room-guava:$room_version"
|
||||
|
||||
// Test helpers
|
||||
testImplementation "androidx.room:room-testing:$room_version"
|
||||
|
||||
implementation "androidx.work:work-runtime-ktx:$work_version"
|
||||
implementation "androidx.work:work-rxjava2:$work_version"
|
||||
androidTestImplementation "androidx.work:work-testing:$work_version"
|
||||
|
||||
implementation 'androidx.appcompat:appcompat:1.1.0'
|
||||
implementation 'com.google.android.material:material:1.1.0-beta01'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'
|
||||
implementation 'com.github.vanniktech:Emoji:0.6.0'
|
||||
implementation group: 'androidx.emoji', name: 'emoji-bundled', version: '1.0.0'
|
||||
implementation 'org.michaelevans.colorart:library:0.0.3'
|
||||
implementation 'com.google.android:flexbox:1.1.0'
|
||||
implementation 'com.gitlab.bitfireAT:dav4jvm:ee66e8e5'
|
||||
implementation 'org.conscrypt:conscrypt-android:2.2.1'
|
||||
|
||||
implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
|
||||
|
||||
implementation 'androidx.biometric:biometric:1.0.0-rc01'
|
||||
implementation "androidx.lifecycle:lifecycle-extensions:2.1.0"
|
||||
|
||||
implementation 'androidx.multidex:multidex:2.0.1'
|
||||
|
||||
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
|
||||
implementation "io.reactivex.rxjava2:rxjava:2.2.11"
|
||||
|
||||
implementation 'com.bluelinelabs:conductor:3.0.0-rc2'
|
||||
implementation 'com.bluelinelabs:conductor-support:3.0.0-rc2'
|
||||
implementation 'com.bluelinelabs:conductor-archlifecycle:3.0.0-rc2'
|
||||
implementation 'com.bluelinelabs:conductor-rxlifecycle2:3.0.0-rc2'
|
||||
implementation 'com.bluelinelabs:conductor-autodispose:3.0.0-rc2'
|
||||
implementation "com.github.miquelbeltran:conductor-viewmodel:1.0.3"
|
||||
|
||||
implementation 'com.squareup.okhttp3:okhttp:3.14.4'
|
||||
implementation 'com.squareup.okhttp3:okhttp-urlconnection:3.14.4'
|
||||
implementation 'com.squareup.okhttp3:logging-interceptor:3.14.4'
|
||||
|
||||
implementation 'com.squareup.retrofit2:retrofit:2.6.2'
|
||||
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.6.2'
|
||||
implementation 'com.github.aurae.retrofit2:converter-logansquare:1.4.1'
|
||||
implementation group: 'joda-time', name: 'joda-time', version: '2.10.3'
|
||||
implementation 'com.bluelinelabs:logansquare:1.3.7'
|
||||
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.10.0.pr1'
|
||||
kapt 'com.bluelinelabs:logansquare-compiler:1.3.7'
|
||||
|
||||
implementation 'com.google.dagger:dagger:2.24'
|
||||
kapt 'com.google.dagger:dagger-compiler:2.24'
|
||||
kapt 'com.google.dagger:dagger-android-processor:2.24'
|
||||
implementation 'com.github.lukaspili.autodagger2:autodagger2:1.1'
|
||||
kapt 'com.github.lukaspili.autodagger2:autodagger2-compiler:1.1'
|
||||
compileOnly 'javax.annotation:jsr250-api:1.0'
|
||||
// Android only
|
||||
implementation 'org.greenrobot:eventbus:3.1.1'
|
||||
implementation 'io.requery:requery:1.5.1'
|
||||
implementation 'io.requery:requery-android:1.5.1'
|
||||
implementation 'net.zetetic:android-database-sqlcipher:3.5.9'
|
||||
kapt 'io.requery:requery-processor:1.5.1'
|
||||
implementation 'net.orange-box.storebox:storebox-lib:1.4.0'
|
||||
compileOnly 'org.projectlombok:lombok:1.18.10'
|
||||
annotationProcessor 'org.projectlombok:lombok:1.18.10'
|
||||
kapt "org.projectlombok:lombok:1.18.10"
|
||||
|
||||
implementation 'com.jakewharton:butterknife:10.2.0'
|
||||
kapt 'com.jakewharton:butterknife-compiler:10.2.0'
|
||||
implementation 'com.github.HITGIF:TextFieldBoxes:1.4.5'
|
||||
implementation 'eu.davidea:flexible-adapter:5.1.0'
|
||||
implementation 'eu.davidea:flexible-adapter-ui:1.0.0'
|
||||
implementation 'eu.davidea:flexible-adapter-livedata:1.0.0-b3'
|
||||
implementation 'org.webrtc:google-webrtc:1.0.23295'
|
||||
implementation 'com.yarolegovich:lovely-dialog:1.1.0'
|
||||
implementation 'com.yarolegovich:lovelyinput:1.0.9'
|
||||
implementation 'com.yarolegovich:mp:1.0.9'
|
||||
implementation 'me.zhanghai.android.effortlesspermissions:library:1.1.0'
|
||||
implementation 'org.apache.commons:commons-lang3:3.9'
|
||||
implementation 'com.github.wooplr:Spotlight:1.3'
|
||||
implementation('com.github.mario:chatkit:c6a6176729', {
|
||||
exclude group: 'com.facebook.fresco'
|
||||
})
|
||||
|
||||
implementation 'com.github.mario.fresco:fresco:111'
|
||||
implementation 'com.github.mario.fresco:animated-webp:111'
|
||||
implementation 'com.github.mario.fresco:webpsupport:111'
|
||||
implementation 'com.github.mario.fresco:animated-gif:111'
|
||||
implementation 'com.github.mario.fresco:imagepipeline-okhttp3:111'
|
||||
|
||||
implementation "io.coil-kt:coil:${coil_version}"
|
||||
implementation "io.coil-kt:coil-gif:${coil_version}"
|
||||
implementation "io.coil-kt:coil-svg:${coil_version}"
|
||||
|
||||
implementation 'com.github.natario1:Autocomplete:v1.1.0'
|
||||
|
||||
implementation 'com.github.cotechde.hwsecurity:hwsecurity-fido:2.4.5'
|
||||
|
||||
implementation 'com.novoda:merlin:1.2.1'
|
||||
|
||||
implementation 'com.github.mario:PopupBubble:a365177d96'
|
||||
implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
|
||||
implementation 'eu.medsea.mimeutil:mime-util:2.1.3'
|
||||
|
||||
implementation 'com.afollestad.material-dialogs:core:3.1.0'
|
||||
implementation 'com.afollestad.material-dialogs:datetime:3.1.0'
|
||||
implementation 'com.afollestad.material-dialogs:bottomsheets:3.1.0'
|
||||
implementation 'com.afollestad.material-dialogs:lifecycle:3.1.0'
|
||||
|
||||
implementation 'org.parceler:parceler-api:1.1.12'
|
||||
kapt 'org.parceler:parceler:1.1.12'
|
||||
|
||||
testImplementation 'junit:junit:4.12'
|
||||
testImplementation 'org.mockito:mockito-core:3.0.0'
|
||||
testImplementation 'org.powermock:powermock-core:2.0.2'
|
||||
testImplementation 'org.powermock:powermock-module-junit4:2.0.2'
|
||||
testImplementation 'org.powermock:powermock-api-mockito2:2.0.2'
|
||||
|
||||
androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0-alpha02', {
|
||||
exclude group: 'com.android.support', module: 'support-annotations'
|
||||
})
|
||||
findbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.9.0'
|
||||
findbugsPlugins 'com.mebigfatguy.fb-contrib:fb-contrib:7.4.6'
|
||||
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'
|
||||
implementation 'com.github.Kennyc1012:BottomSheet:2.4.1'
|
||||
}
|
||||
|
@ -19,5 +19,6 @@
|
||||
*/
|
||||
|
||||
dependencies {
|
||||
implementation "androidx.work:work-gcm:$work_version"
|
||||
implementation "com.google.firebase:firebase-messaging:20.0.0"
|
||||
}
|
||||
|
29
app/ic_public_black_24px.xml
Normal file
29
app/ic_public_black_24px.xml
Normal file
@ -0,0 +1,29 @@
|
||||
<!--
|
||||
~ Nextcloud Talk application
|
||||
~
|
||||
~ @author Mario Danic
|
||||
~ Copyright (C) 2017-2019 Mario Danic <mario@lovelyhq.com>
|
||||
~
|
||||
~ This program is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ at your option) any later version.
|
||||
~
|
||||
~ This program is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<!-- drawable/link_variant.xml -->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:height="24dp"
|
||||
android:width="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path android:fillColor="#000000"
|
||||
android:pathData="M10.59,13.41C11,13.8 11,14.44 10.59,14.83C10.2,15.22 9.56,15.22 9.17,14.83C7.22,12.88 7.22,9.71 9.17,7.76V7.76L12.71,4.22C14.66,2.27 17.83,2.27 19.78,4.22C21.73,6.17 21.73,9.34 19.78,11.29L18.29,12.78C18.3,11.96 18.17,11.14 17.89,10.36L18.36,9.88C19.54,8.71 19.54,6.81 18.36,5.64C17.19,4.46 15.29,4.46 14.12,5.64L10.59,9.17C9.41,10.34 9.41,12.24 10.59,13.41M13.41,9.17C13.8,8.78 14.44,8.78 14.83,9.17C16.78,11.12 16.78,14.29 14.83,16.24V16.24L11.29,19.78C9.34,21.73 6.17,21.73 4.22,19.78C2.27,17.83 2.27,14.66 4.22,12.71L5.71,11.22C5.7,12.04 5.83,12.86 6.11,13.65L5.64,14.12C4.46,15.29 4.46,17.19 5.64,18.36C6.81,19.54 8.71,19.54 9.88,18.36L13.41,14.83C14.59,13.66 14.59,11.76 13.41,10.59C13,10.2 13,9.56 13.41,9.17Z" />
|
||||
</vector>
|
@ -20,6 +20,7 @@
|
||||
|
||||
package com.nextcloud.talk.controllers
|
||||
|
||||
import android.content.Intent
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.graphics.drawable.LayerDrawable
|
||||
import android.os.Bundle
|
||||
@ -48,6 +49,7 @@ import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler
|
||||
import com.facebook.drawee.backends.pipeline.Fresco
|
||||
import com.facebook.drawee.view.SimpleDraweeView
|
||||
import com.nextcloud.talk.R
|
||||
import com.nextcloud.talk.R.string
|
||||
import com.nextcloud.talk.adapters.items.UserItem
|
||||
import com.nextcloud.talk.api.NcApi
|
||||
import com.nextcloud.talk.application.NextcloudTalkApplication
|
||||
@ -55,24 +57,30 @@ import com.nextcloud.talk.controllers.base.BaseController
|
||||
import com.nextcloud.talk.controllers.bottomsheet.items.BasicListItemWithImage
|
||||
import com.nextcloud.talk.controllers.bottomsheet.items.listItemsWithImage
|
||||
import com.nextcloud.talk.events.EventStatus
|
||||
import com.nextcloud.talk.interfaces.ConversationInfoInterface
|
||||
import com.nextcloud.talk.jobs.DeleteConversationWorker
|
||||
import com.nextcloud.talk.jobs.LeaveConversationWorker
|
||||
import com.nextcloud.talk.models.database.UserEntity
|
||||
import com.nextcloud.talk.models.json.conversations.Conversation
|
||||
import com.nextcloud.talk.models.json.conversations.Conversation.ConversationType.ROOM_PUBLIC_CALL
|
||||
import com.nextcloud.talk.models.json.conversations.RoomOverall
|
||||
import com.nextcloud.talk.models.json.converters.EnumNotificationLevelConverter
|
||||
import com.nextcloud.talk.models.json.generic.GenericOverall
|
||||
import com.nextcloud.talk.models.json.participants.Participant
|
||||
import com.nextcloud.talk.models.json.participants.ParticipantsOverall
|
||||
import com.nextcloud.talk.newarch.utils.getCredentials
|
||||
import com.nextcloud.talk.utils.ApiUtils
|
||||
import com.nextcloud.talk.utils.DateUtils
|
||||
import com.nextcloud.talk.utils.DisplayUtils
|
||||
import com.nextcloud.talk.utils.ShareUtils
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys
|
||||
import com.nextcloud.talk.utils.database.user.UserUtils
|
||||
import com.nextcloud.talk.utils.preferences.preferencestorage.DatabaseStorageModule
|
||||
import com.nextcloud.talk.utils.ui.MaterialPreferenceCategoryWithRightLink
|
||||
import com.yarolegovich.lovelydialog.LovelySaveStateHandler
|
||||
import com.yarolegovich.lovelydialog.LovelyStandardDialog
|
||||
import com.yarolegovich.mp.MaterialChoicePreference
|
||||
import com.yarolegovich.mp.MaterialEditTextPreference
|
||||
import com.yarolegovich.mp.MaterialPreferenceCategory
|
||||
import com.yarolegovich.mp.MaterialPreferenceScreen
|
||||
import com.yarolegovich.mp.MaterialStandardPreference
|
||||
@ -92,7 +100,24 @@ import javax.inject.Inject
|
||||
|
||||
@AutoInjector(NextcloudTalkApplication::class)
|
||||
class ConversationInfoController(args: Bundle) : BaseController(),
|
||||
FlexibleAdapter.OnItemClickListener {
|
||||
FlexibleAdapter.OnItemClickListener, ConversationInfoInterface {
|
||||
|
||||
override fun conversationNameSet(name: String?) {
|
||||
conversationDisplayName.post {
|
||||
conversationDisplayName.text = name
|
||||
}
|
||||
}
|
||||
|
||||
override fun passwordSet(isCleared: Boolean) {
|
||||
passwordAction.post {
|
||||
if (!isCleared) {
|
||||
passwordAction.setSummary(context.getString(string.nc_password_redacted))
|
||||
} else {
|
||||
passwordAction.setSummary(context.getString(string.nc_manual))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@BindView(R.id.notification_settings)
|
||||
lateinit var notificationsPreferenceScreen: MaterialPreferenceScreen
|
||||
@BindView(R.id.progressBar)
|
||||
@ -125,9 +150,23 @@ class ConversationInfoController(args: Bundle) : BaseController(),
|
||||
lateinit var muteCalls: MaterialSwitchPreference
|
||||
@BindView(R.id.mpc_action)
|
||||
lateinit var actionTextView: TextView
|
||||
@BindView(R.id.generalConversationOptions)
|
||||
lateinit var generalConversationOptions: MaterialPreferenceScreen
|
||||
@BindView(R.id.changeConversationName)
|
||||
lateinit var changeConversationName: MaterialEditTextPreference
|
||||
@BindView(R.id.favoriteConversationAction)
|
||||
lateinit var favoriteConversationAction: MaterialSwitchPreference
|
||||
@BindView(R.id.allowGuestsAction)
|
||||
lateinit var allowGuestsAction: MaterialSwitchPreference
|
||||
@BindView(R.id.passwordAction)
|
||||
lateinit var passwordAction: MaterialEditTextPreference
|
||||
@BindView(R.id.shareAction)
|
||||
lateinit var shareAction: MaterialStandardPreference
|
||||
|
||||
@set:Inject
|
||||
lateinit var ncApi: NcApi
|
||||
@set:Inject
|
||||
lateinit var userUtils: UserUtils
|
||||
|
||||
private val conversationToken: String?
|
||||
private val conversationUser: UserEntity?
|
||||
@ -189,13 +228,6 @@ class ConversationInfoController(args: Bundle) : BaseController(),
|
||||
super.onAttach(view)
|
||||
eventBus.register(this)
|
||||
|
||||
if (databaseStorageModule == null) {
|
||||
databaseStorageModule = DatabaseStorageModule(conversationUser!!, conversationToken)
|
||||
}
|
||||
|
||||
notificationsPreferenceScreen.setStorageModule(databaseStorageModule)
|
||||
conversationInfoWebinar.setStorageModule(databaseStorageModule)
|
||||
|
||||
fetchRoomInfo()
|
||||
}
|
||||
|
||||
@ -206,6 +238,15 @@ class ConversationInfoController(args: Bundle) : BaseController(),
|
||||
saveStateHandler = LovelySaveStateHandler()
|
||||
}
|
||||
|
||||
if (databaseStorageModule == null) {
|
||||
databaseStorageModule = DatabaseStorageModule(
|
||||
conversationUser, conversationToken, this)
|
||||
}
|
||||
|
||||
notificationsPreferenceScreen.setStorageModule(databaseStorageModule)
|
||||
conversationInfoWebinar.setStorageModule(databaseStorageModule)
|
||||
generalConversationOptions.setStorageModule(databaseStorageModule)
|
||||
|
||||
actionTextView.visibility = View.GONE
|
||||
}
|
||||
|
||||
@ -280,6 +321,91 @@ class ConversationInfoController(args: Bundle) : BaseController(),
|
||||
}
|
||||
}
|
||||
|
||||
fun submitGuestChange() {
|
||||
if (databaseStorageModule != null && conversationUser != null && conversation != null) {
|
||||
if ((allowGuestsAction.findViewById<View>(R.id.mp_checkable) as SwitchCompat).isChecked) {
|
||||
ncApi.makeRoomPublic(conversationUser.getCredentials(), ApiUtils.getUrlForRoomVisibility
|
||||
(conversationUser.baseUrl, conversation!!.token))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(object : Observer<GenericOverall> {
|
||||
override fun onComplete() {
|
||||
}
|
||||
|
||||
override fun onSubscribe(d: Disposable) {
|
||||
}
|
||||
|
||||
override fun onNext(t: GenericOverall) {
|
||||
}
|
||||
|
||||
override fun onError(e: Throwable) {
|
||||
}
|
||||
})
|
||||
} else {
|
||||
ncApi.makeRoomPrivate(conversationUser.getCredentials(), ApiUtils.getUrlForRoomVisibility
|
||||
(conversationUser.baseUrl, conversation!!.token))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(object : Observer<GenericOverall> {
|
||||
override fun onComplete() {
|
||||
}
|
||||
|
||||
override fun onSubscribe(d: Disposable) {
|
||||
}
|
||||
|
||||
override fun onNext(t: GenericOverall) {
|
||||
}
|
||||
|
||||
override fun onError(e: Throwable) {
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun submitFavoriteChange() {
|
||||
if (databaseStorageModule != null && conversationUser != null && conversation != null) {
|
||||
if ((favoriteConversationAction.findViewById<View>(R.id.mp_checkable) as SwitchCompat).isChecked) {
|
||||
ncApi.addConversationToFavorites(conversationUser.getCredentials(), ApiUtils
|
||||
.getUrlForConversationFavorites(conversationUser.baseUrl, conversation!!.token))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(object : Observer<GenericOverall> {
|
||||
override fun onComplete() {
|
||||
}
|
||||
|
||||
override fun onSubscribe(d: Disposable) {
|
||||
}
|
||||
|
||||
override fun onNext(t: GenericOverall) {
|
||||
}
|
||||
|
||||
override fun onError(e: Throwable) {
|
||||
}
|
||||
|
||||
})
|
||||
} else {
|
||||
ncApi.removeConversationFromFavorites(conversationUser.getCredentials(), ApiUtils
|
||||
.getUrlForConversationFavorites(conversationUser.baseUrl, conversation!!.token))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(object : Observer<GenericOverall> {
|
||||
override fun onComplete() {
|
||||
}
|
||||
|
||||
override fun onSubscribe(d: Disposable) {
|
||||
}
|
||||
|
||||
override fun onNext(t: GenericOverall) {
|
||||
}
|
||||
|
||||
override fun onError(e: Throwable) {
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
fun submitLobbyChanges() {
|
||||
val state = if ((conversationInfoLobby.findViewById<View>(
|
||||
R.id
|
||||
@ -518,15 +644,17 @@ class ConversationInfoController(args: Bundle) : BaseController(),
|
||||
|
||||
val conversationCopy = conversation
|
||||
|
||||
if (conversationCopy!!.canModerate(conversationUser)) {
|
||||
actionTextView.visibility = View.VISIBLE
|
||||
} else {
|
||||
actionTextView.visibility = View.GONE
|
||||
}
|
||||
|
||||
if (isAttached && (!isBeingDestroyed || !isDestroyed)) {
|
||||
if (conversationCopy!!.canModerate(conversationUser)) {
|
||||
actionTextView.visibility = View.VISIBLE
|
||||
} else {
|
||||
actionTextView.visibility = View.GONE
|
||||
}
|
||||
|
||||
ownOptionsCategory.visibility = View.VISIBLE
|
||||
|
||||
setupGeneralSettings()
|
||||
setupWebinaryView()
|
||||
|
||||
if (!conversation!!.canLeave(conversationUser)) {
|
||||
@ -571,6 +699,83 @@ class ConversationInfoController(args: Bundle) : BaseController(),
|
||||
})
|
||||
}
|
||||
|
||||
private fun setupGeneralSettings() {
|
||||
if (conversation != null) {
|
||||
changeConversationName.value = conversation!!.displayName
|
||||
|
||||
if (conversation!!.isNameEditable(conversationUser)) {
|
||||
changeConversationName.visibility = View.VISIBLE
|
||||
} else {
|
||||
changeConversationName.visibility = View.GONE
|
||||
}
|
||||
|
||||
favoriteConversationAction.value = conversation!!.isFavorite
|
||||
allowGuestsAction.value = conversation!!.type == ROOM_PUBLIC_CALL
|
||||
|
||||
(allowGuestsAction.findViewById<View>(R.id.mp_checkable) as SwitchCompat)
|
||||
.isChecked = allowGuestsAction.value
|
||||
(favoriteConversationAction.findViewById<View>(R.id.mp_checkable) as SwitchCompat)
|
||||
.isChecked = favoriteConversationAction.value
|
||||
|
||||
(favoriteConversationAction.findViewById<View>(R.id.mp_checkable) as SwitchCompat).setOnCheckedChangeListener { buttonView, isChecked ->
|
||||
submitFavoriteChange()
|
||||
}
|
||||
|
||||
(allowGuestsAction.findViewById<View>(R.id.mp_checkable) as SwitchCompat).setOnCheckedChangeListener { buttonView, isChecked ->
|
||||
if (isChecked) {
|
||||
passwordAction.visibility = View.VISIBLE
|
||||
shareAction.visibility = View.VISIBLE
|
||||
} else {
|
||||
passwordAction.visibility = View.GONE
|
||||
shareAction.visibility = View.GONE
|
||||
}
|
||||
|
||||
submitGuestChange()
|
||||
}
|
||||
|
||||
shareAction.setOnClickListener {
|
||||
val sendIntent: Intent = Intent().apply {
|
||||
action = Intent.ACTION_SEND
|
||||
putExtra(
|
||||
Intent.EXTRA_SUBJECT,
|
||||
String.format(
|
||||
context.getString(R.string.nc_share_subject),
|
||||
context.getString(R.string.nc_app_name)
|
||||
)
|
||||
)
|
||||
|
||||
putExtra(
|
||||
Intent.EXTRA_TEXT, ShareUtils.getStringForIntent(
|
||||
context, conversation!!.password,
|
||||
userUtils, conversation
|
||||
)
|
||||
)
|
||||
|
||||
type = "text/plain"
|
||||
}
|
||||
|
||||
val intent = Intent.createChooser(sendIntent, context.getString(string.nc_share_link))
|
||||
startActivity(intent)
|
||||
}
|
||||
|
||||
if (allowGuestsAction.value) {
|
||||
passwordAction.visibility = View.VISIBLE
|
||||
shareAction.visibility = View.VISIBLE
|
||||
|
||||
passwordAction.value = conversation!!.hasPassword.toString()
|
||||
if (conversation!!.hasPassword) {
|
||||
passwordAction.setSummary(context.getString(string.nc_password_redacted))
|
||||
} else {
|
||||
passwordAction.setSummary(context.getString(string.nc_manual))
|
||||
}
|
||||
} else {
|
||||
passwordAction.visibility = View.GONE
|
||||
shareAction.visibility = View.GONE
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private fun adjustNotificationLevelUI() {
|
||||
if (conversation != null) {
|
||||
if (conversationUser != null && conversationUser.hasSpreedFeatureCapability(
|
||||
|
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Nextcloud Talk application
|
||||
*
|
||||
* @author Mario Danic
|
||||
* Copyright (C) 2017-2019 Mario Danic <mario@lovelyhq.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.nextcloud.talk.interfaces;
|
||||
|
||||
public interface ConversationInfoInterface {
|
||||
void conversationNameSet(String name);
|
||||
void passwordSet(boolean isCleared);
|
||||
}
|
@ -27,6 +27,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.media.AudioAttributes;
|
||||
import android.media.MediaPlayer;
|
||||
import android.net.Uri;
|
||||
|
@ -345,7 +345,7 @@ class ConversationsListView : BaseView(), OnQueryTextListener,
|
||||
drawable.ic_star_black_24dp -> {
|
||||
viewModel.changeFavoriteValueForConversation(conversation, true)
|
||||
}
|
||||
drawable.ic_link_grey600_24px -> {
|
||||
drawable.ic_share_black_24dp -> {
|
||||
startActivity(viewModel.getShareIntentForConversation(conversation))
|
||||
}
|
||||
drawable.ic_exit_to_app_black_24dp -> {
|
||||
|
@ -276,7 +276,7 @@ class ConversationsListViewModel constructor(
|
||||
items.add(
|
||||
(BasicListItemWithImage(
|
||||
drawable
|
||||
.ic_link_grey600_24px, context.getString(string.nc_share_link)
|
||||
.ic_share_black_24dp, context.getString(string.nc_share_link)
|
||||
))
|
||||
)
|
||||
}
|
||||
|
@ -60,32 +60,30 @@ class PackageReplacedReceiver : BroadcastReceiver() {
|
||||
.NOTIFICATION_SERVICE
|
||||
) as NotificationManager
|
||||
|
||||
if (notificationManager != null) {
|
||||
if (!appPreferences.isNotificationChannelUpgradedToV2) {
|
||||
for (notificationChannelGroup in notificationManager
|
||||
.notificationChannelGroups) {
|
||||
notificationManager.deleteNotificationChannelGroup(notificationChannelGroup.id)
|
||||
}
|
||||
|
||||
notificationManager.deleteNotificationChannel(
|
||||
NotificationUtils.NOTIFICATION_CHANNEL_CALLS
|
||||
)
|
||||
notificationManager.deleteNotificationChannel(
|
||||
NotificationUtils.NOTIFICATION_CHANNEL_MESSAGES
|
||||
)
|
||||
|
||||
appPreferences.setNotificationChannelIsUpgradedToV2(true)
|
||||
if (!appPreferences.isNotificationChannelUpgradedToV2) {
|
||||
for (notificationChannelGroup in notificationManager
|
||||
.notificationChannelGroups) {
|
||||
notificationManager.deleteNotificationChannelGroup(notificationChannelGroup.id)
|
||||
}
|
||||
|
||||
if (!appPreferences.isNotificationChannelUpgradedToV3 && packageInfo.versionCode > 51) {
|
||||
notificationManager.deleteNotificationChannel(
|
||||
NotificationUtils.NOTIFICATION_CHANNEL_MESSAGES_V2
|
||||
)
|
||||
notificationManager.deleteNotificationChannel(
|
||||
NotificationUtils.NOTIFICATION_CHANNEL_CALLS_V2
|
||||
)
|
||||
appPreferences.setNotificationChannelIsUpgradedToV3(true)
|
||||
}
|
||||
notificationManager.deleteNotificationChannel(
|
||||
NotificationUtils.NOTIFICATION_CHANNEL_CALLS
|
||||
)
|
||||
notificationManager.deleteNotificationChannel(
|
||||
NotificationUtils.NOTIFICATION_CHANNEL_MESSAGES
|
||||
)
|
||||
|
||||
appPreferences.setNotificationChannelIsUpgradedToV2(true)
|
||||
}
|
||||
|
||||
if (!appPreferences.isNotificationChannelUpgradedToV3 && packageInfo.versionCode > 51) {
|
||||
notificationManager.deleteNotificationChannel(
|
||||
NotificationUtils.NOTIFICATION_CHANNEL_MESSAGES_V2
|
||||
)
|
||||
notificationManager.deleteNotificationChannel(
|
||||
NotificationUtils.NOTIFICATION_CHANNEL_CALLS_V2
|
||||
)
|
||||
appPreferences.setNotificationChannelIsUpgradedToV3(true)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -17,27 +17,17 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Part of the code in ShareUtils was inspired by BottomSheet under the Apache licence
|
||||
* located here: https://github.com/Kennyc1012/BottomSheet/blob/master/library/src/main/java/com/kennyc/bottomsheet/BottomSheet.java#L425
|
||||
*/
|
||||
|
||||
package com.nextcloud.talk.utils;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.text.TextUtils;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.kennyc.bottomsheet.adapters.AppAdapter;
|
||||
import com.nextcloud.talk.R;
|
||||
import com.nextcloud.talk.models.database.UserEntity;
|
||||
import com.nextcloud.talk.models.json.conversations.Conversation;
|
||||
import com.nextcloud.talk.utils.database.user.UserUtils;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class ShareUtils {
|
||||
|
||||
@ -58,47 +48,4 @@ public class ShareUtils {
|
||||
|
||||
return shareString;
|
||||
}
|
||||
|
||||
public static List<AppAdapter.AppInfo> getShareApps(Context context, Intent intent,
|
||||
@Nullable Set<String> appsFilter, @Nullable Set<String> toExclude) {
|
||||
|
||||
if (context == null || intent == null) return null;
|
||||
|
||||
PackageManager manager = context.getPackageManager();
|
||||
List<ResolveInfo> apps = manager.queryIntentActivities(intent, 0);
|
||||
|
||||
if (apps != null && !apps.isEmpty()) {
|
||||
List<AppAdapter.AppInfo> appResources = new ArrayList<>(apps.size());
|
||||
boolean shouldCheckPackages = appsFilter != null && !appsFilter.isEmpty();
|
||||
|
||||
for (ResolveInfo resolveInfo : apps) {
|
||||
String packageName = resolveInfo.activityInfo.packageName;
|
||||
|
||||
if (shouldCheckPackages && !appsFilter.contains(packageName)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
String title = resolveInfo.loadLabel(manager).toString();
|
||||
String name = resolveInfo.activityInfo.name;
|
||||
Drawable drawable = resolveInfo.loadIcon(manager);
|
||||
appResources.add(new AppAdapter.AppInfo(title, packageName, name, drawable));
|
||||
}
|
||||
|
||||
if (toExclude != null && !toExclude.isEmpty()) {
|
||||
List<AppAdapter.AppInfo> toRemove = new ArrayList<>();
|
||||
|
||||
for (AppAdapter.AppInfo appInfo : appResources) {
|
||||
if (toExclude.contains(appInfo.packageName)) {
|
||||
toRemove.add(appInfo);
|
||||
}
|
||||
}
|
||||
|
||||
if (!toRemove.isEmpty()) appResources.removeAll(toRemove);
|
||||
}
|
||||
|
||||
return appResources;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -21,20 +21,24 @@
|
||||
package com.nextcloud.talk.utils.preferences.preferencestorage;
|
||||
|
||||
import android.content.Context;
|
||||
import com.nextcloud.talk.interfaces.ConversationInfoInterface;
|
||||
import com.nextcloud.talk.models.database.UserEntity;
|
||||
import com.yarolegovich.mp.io.StorageModule;
|
||||
|
||||
public class DatabaseStorageFactory implements StorageModule.Factory {
|
||||
private UserEntity conversationUser;
|
||||
private String conversationToken;
|
||||
private ConversationInfoInterface conversationInfoInterface;
|
||||
|
||||
public DatabaseStorageFactory(UserEntity conversationUser, String conversationToken) {
|
||||
public DatabaseStorageFactory(UserEntity conversationUser, String conversationToken,
|
||||
ConversationInfoInterface conversationInfoInterface) {
|
||||
this.conversationUser = conversationUser;
|
||||
this.conversationToken = conversationToken;
|
||||
this.conversationInfoInterface = conversationInfoInterface;
|
||||
}
|
||||
|
||||
@Override
|
||||
public StorageModule create(Context context) {
|
||||
return new DatabaseStorageModule(conversationUser, conversationToken);
|
||||
return new DatabaseStorageModule(conversationUser, conversationToken, conversationInfoInterface);
|
||||
}
|
||||
}
|
||||
|
@ -25,6 +25,7 @@ import android.text.TextUtils;
|
||||
import autodagger.AutoInjector;
|
||||
import com.nextcloud.talk.api.NcApi;
|
||||
import com.nextcloud.talk.application.NextcloudTalkApplication;
|
||||
import com.nextcloud.talk.interfaces.ConversationInfoInterface;
|
||||
import com.nextcloud.talk.models.database.ArbitraryStorageEntity;
|
||||
import com.nextcloud.talk.models.database.UserEntity;
|
||||
import com.nextcloud.talk.models.json.generic.GenericOverall;
|
||||
@ -50,10 +51,17 @@ public class DatabaseStorageModule implements StorageModule {
|
||||
private long accountIdentifier;
|
||||
|
||||
private boolean lobbyValue;
|
||||
private boolean favoriteConversationValue;
|
||||
private boolean allowGuestsValue;
|
||||
|
||||
private Boolean hasPassword;
|
||||
private String conversationNameValue;
|
||||
|
||||
private String messageNotificationLevel;
|
||||
private ConversationInfoInterface conversationInfoInterface;
|
||||
|
||||
public DatabaseStorageModule(UserEntity conversationUser, String conversationToken) {
|
||||
public DatabaseStorageModule(UserEntity conversationUser, String conversationToken,
|
||||
ConversationInfoInterface conversationInfoInterface) {
|
||||
NextcloudTalkApplication.Companion.getSharedApplication()
|
||||
.getComponentApplication()
|
||||
.inject(this);
|
||||
@ -61,46 +69,94 @@ public class DatabaseStorageModule implements StorageModule {
|
||||
this.conversationUser = conversationUser;
|
||||
this.accountIdentifier = conversationUser.getId();
|
||||
this.conversationToken = conversationToken;
|
||||
this.conversationInfoInterface = conversationInfoInterface;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveBoolean(String key, boolean value) {
|
||||
if (!key.equals("conversation_lobby")) {
|
||||
if (!key.equals("conversation_lobby") && !key.equals("allow_guests") && !key.equals(
|
||||
"favorite_conversation")) {
|
||||
arbitraryStorageUtils.storeStorageSetting(accountIdentifier, key, Boolean.toString(value),
|
||||
conversationToken);
|
||||
} else {
|
||||
lobbyValue = value;
|
||||
switch (key) {
|
||||
case "conversation_lobby":
|
||||
lobbyValue = value;
|
||||
break;
|
||||
case "allow_guests":
|
||||
allowGuestsValue = value;
|
||||
break;
|
||||
case "favorite_conversation":
|
||||
favoriteConversationValue = value;
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveString(String key, String value) {
|
||||
if (!key.equals("message_notification_level")) {
|
||||
if (!key.equals("message_notification_level")
|
||||
&& !key.equals("conversation_name")
|
||||
&& !key.equals("conversation_password")) {
|
||||
arbitraryStorageUtils.storeStorageSetting(accountIdentifier, key, value, conversationToken);
|
||||
} else {
|
||||
if (conversationUser.hasSpreedFeatureCapability("notification-levels")) {
|
||||
if (!TextUtils.isEmpty(messageNotificationLevel) && !messageNotificationLevel.equals(
|
||||
value)) {
|
||||
int intValue;
|
||||
switch (value) {
|
||||
case "never":
|
||||
intValue = 3;
|
||||
break;
|
||||
case "mention":
|
||||
intValue = 2;
|
||||
break;
|
||||
case "always":
|
||||
intValue = 1;
|
||||
break;
|
||||
default:
|
||||
intValue = 0;
|
||||
}
|
||||
if (key.equals("message_notification_level")) {
|
||||
if (conversationUser.hasSpreedFeatureCapability("notification-levels")) {
|
||||
if (!TextUtils.isEmpty(messageNotificationLevel) && !messageNotificationLevel.equals(
|
||||
value)) {
|
||||
int intValue;
|
||||
switch (value) {
|
||||
case "never":
|
||||
intValue = 3;
|
||||
break;
|
||||
case "mention":
|
||||
intValue = 2;
|
||||
break;
|
||||
case "always":
|
||||
intValue = 1;
|
||||
break;
|
||||
default:
|
||||
intValue = 0;
|
||||
}
|
||||
|
||||
ncApi.setNotificationLevel(
|
||||
ApiUtils.getCredentials(conversationUser.getUsername(), conversationUser.getToken()),
|
||||
ApiUtils.getUrlForSettingNotificationlevel(conversationUser.getBaseUrl(),
|
||||
conversationToken),
|
||||
intValue)
|
||||
ncApi.setNotificationLevel(
|
||||
ApiUtils.getCredentials(conversationUser.getUsername(),
|
||||
conversationUser.getToken()),
|
||||
ApiUtils.getUrlForSettingNotificationlevel(conversationUser.getBaseUrl(),
|
||||
conversationToken),
|
||||
intValue)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.subscribe(new Observer<GenericOverall>() {
|
||||
@Override
|
||||
public void onSubscribe(Disposable d) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(GenericOverall genericOverall) {
|
||||
messageNotificationLevel = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete() {
|
||||
}
|
||||
});
|
||||
} else {
|
||||
messageNotificationLevel = value;
|
||||
}
|
||||
}
|
||||
} else if (key.equals("conversation_password")) {
|
||||
if (hasPassword != null) {
|
||||
ncApi.setPassword(ApiUtils.getCredentials(conversationUser.getUsername(),
|
||||
conversationUser.getToken()),
|
||||
ApiUtils.getUrlForPassword(conversationUser.getBaseUrl(),
|
||||
conversationToken), value)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.subscribe(new Observer<GenericOverall>() {
|
||||
@Override
|
||||
@ -110,7 +166,8 @@ public class DatabaseStorageModule implements StorageModule {
|
||||
|
||||
@Override
|
||||
public void onNext(GenericOverall genericOverall) {
|
||||
messageNotificationLevel = value;
|
||||
hasPassword = !TextUtils.isEmpty(value);
|
||||
conversationInfoInterface.passwordSet(TextUtils.isEmpty(value));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -123,7 +180,37 @@ public class DatabaseStorageModule implements StorageModule {
|
||||
}
|
||||
});
|
||||
} else {
|
||||
messageNotificationLevel = value;
|
||||
hasPassword = Boolean.parseBoolean(value);
|
||||
}
|
||||
} else if (key.equals("conversation_name")) {
|
||||
if (!TextUtils.isEmpty(conversationNameValue) && !conversationNameValue.equals(value)) {
|
||||
ncApi.renameRoom(ApiUtils.getCredentials(conversationUser.getUsername(),
|
||||
conversationUser.getToken()), ApiUtils.getRoom(conversationUser.getBaseUrl(),
|
||||
conversationToken), value)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.subscribe(new Observer<GenericOverall>() {
|
||||
@Override
|
||||
public void onSubscribe(Disposable d) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(GenericOverall genericOverall) {
|
||||
conversationNameValue = value;
|
||||
conversationInfoInterface.conversationNameSet(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete() {
|
||||
}
|
||||
});
|
||||
} else {
|
||||
conversationNameValue = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -144,6 +231,10 @@ public class DatabaseStorageModule implements StorageModule {
|
||||
public boolean getBoolean(String key, boolean defaultVal) {
|
||||
if (key.equals("conversation_lobby")) {
|
||||
return lobbyValue;
|
||||
} else if (key.equals("allow_guests")) {
|
||||
return allowGuestsValue;
|
||||
} else if (key.equals("favorite_conversation")) {
|
||||
return favoriteConversationValue;
|
||||
} else {
|
||||
ArbitraryStorageEntity valueFromDb =
|
||||
arbitraryStorageUtils.getStorageSetting(accountIdentifier, key, conversationToken);
|
||||
@ -157,7 +248,9 @@ public class DatabaseStorageModule implements StorageModule {
|
||||
|
||||
@Override
|
||||
public String getString(String key, String defaultVal) {
|
||||
if (!key.equals("message_notification_level")) {
|
||||
if (!key.equals("message_notification_level")
|
||||
&& !key.equals("conversation_name")
|
||||
&& !key.equals("conversation_password")) {
|
||||
ArbitraryStorageEntity valueFromDb =
|
||||
arbitraryStorageUtils.getStorageSetting(accountIdentifier, key, conversationToken);
|
||||
if (valueFromDb == null) {
|
||||
@ -165,9 +258,15 @@ public class DatabaseStorageModule implements StorageModule {
|
||||
} else {
|
||||
return valueFromDb.getValue();
|
||||
}
|
||||
} else {
|
||||
} else if (key.equals("message_notification_level")) {
|
||||
return messageNotificationLevel;
|
||||
} else if (key.equals("conversation_name")) {
|
||||
return conversationNameValue;
|
||||
} else if (key.equals("conversation_password")) {
|
||||
return "";
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -18,12 +18,11 @@
|
||||
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<vector xmlns:tools="http://schemas.android.com/tools"
|
||||
android:autoMirrored="true" android:height="24dp"
|
||||
android:viewportHeight="24.0" android:viewportWidth="24.0"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="#000000" android:fillType="nonZero"
|
||||
android:pathData="M13,5.921L9.818,9.105C9.111,9.812 8.781,10.723 8.83,11.562C8.88,12.401 9.263,13.146 9.818,13.701L11.23,12.285C10.663,11.717 10.686,11.065 11.232,10.519L14.414,7.337C14.939,6.812 15.664,6.814 16.186,7.335C16.668,7.891 16.713,8.574 16.182,9.105L15.362,9.925C15.917,10.71 16.007,11.291 15.955,12.16L17.596,10.519C18.833,9.282 18.833,7.154 17.596,5.917C16.36,4.681 14.254,4.706 13,5.921L13,5.921ZM13.707,9.806L12.293,11.224L12.297,11.224C12.847,11.774 12.804,12.482 12.293,12.994L9.111,16.175C8.415,16.767 7.813,16.646 7.342,16.175C6.715,15.549 6.842,14.907 7.342,14.407L8.192,13.56C7.636,12.777 7.543,12.195 7.594,11.328L5.928,12.994C4.689,14.233 4.692,16.354 5.928,17.589C7.163,18.825 9.29,18.825 10.526,17.589L13.707,14.407C14.416,13.699 14.747,12.789 14.698,11.949C14.65,11.109 14.266,10.362 13.709,9.808L13.707,9.806Z"
|
||||
android:strokeColor="#00000000" android:strokeWidth="1"
|
||||
tools:ignore="VectorPath" />
|
||||
</vector>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:height="24dp"
|
||||
android:width="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path android:fillColor="#000000"
|
||||
android:pathData="M10.59,13.41C11,13.8 11,14.44 10.59,14.83C10.2,15.22 9.56,15.22 9.17,14.83C7.22,12.88 7.22,9.71 9.17,7.76V7.76L12.71,4.22C14.66,2.27 17.83,2.27 19.78,4.22C21.73,6.17 21.73,9.34 19.78,11.29L18.29,12.78C18.3,11.96 18.17,11.14 17.89,10.36L18.36,9.88C19.54,8.71 19.54,6.81 18.36,5.64C17.19,4.46 15.29,4.46 14.12,5.64L10.59,9.17C9.41,10.34 9.41,12.24 10.59,13.41M13.41,9.17C13.8,8.78 14.44,8.78 14.83,9.17C16.78,11.12 16.78,14.29 14.83,16.24V16.24L11.29,19.78C9.34,21.73 6.17,21.73 4.22,19.78C2.27,17.83 2.27,14.66 4.22,12.71L5.71,11.22C5.7,12.04 5.83,12.86 6.11,13.65L5.64,14.12C4.46,15.29 4.46,17.19 5.64,18.36C6.81,19.54 8.71,19.54 9.88,18.36L13.41,14.83C14.59,13.66 14.59,11.76 13.41,10.59C13,10.2 13,9.56 13.41,9.17Z" />
|
||||
</vector>
|
@ -1,29 +0,0 @@
|
||||
<!--
|
||||
~ Nextcloud Talk application
|
||||
~
|
||||
~ @author Mario Danic
|
||||
~ Copyright (C) 2017-2019 Mario Danic <mario@lovelyhq.com>
|
||||
~
|
||||
~ This program is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ at your option) any later version.
|
||||
~
|
||||
~ This program is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<vector xmlns:tools="http://schemas.android.com/tools"
|
||||
android:autoMirrored="true" android:height="24dp"
|
||||
android:viewportHeight="24.0" android:viewportWidth="24.0"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="#757575" android:fillType="nonZero"
|
||||
android:pathData="M13,5.921L9.818,9.105C9.111,9.812 8.781,10.723 8.83,11.562C8.88,12.401 9.263,13.146 9.818,13.701L11.23,12.285C10.663,11.717 10.686,11.065 11.232,10.519L14.414,7.337C14.939,6.812 15.664,6.814 16.186,7.335C16.668,7.891 16.713,8.574 16.182,9.105L15.362,9.925C15.917,10.71 16.007,11.291 15.955,12.16L17.596,10.519C18.833,9.282 18.833,7.154 17.596,5.917C16.36,4.681 14.254,4.706 13,5.921L13,5.921ZM13.707,9.806L12.293,11.224L12.297,11.224C12.847,11.774 12.804,12.482 12.293,12.994L9.111,16.175C8.415,16.767 7.813,16.646 7.342,16.175C6.715,15.549 6.842,14.907 7.342,14.407L8.192,13.56C7.636,12.777 7.543,12.195 7.594,11.328L5.928,12.994C4.689,14.233 4.692,16.354 5.928,17.589C7.163,18.825 9.29,18.825 10.526,17.589L13.707,14.407C14.416,13.699 14.747,12.789 14.698,11.949C14.65,11.109 14.266,10.362 13.709,9.808L13.707,9.806Z"
|
||||
android:strokeColor="#00000000" android:strokeWidth="1"
|
||||
tools:ignore="VectorPath" />
|
||||
</vector>
|
25
app/src/main/res/drawable/ic_message_black_24dp.xml
Normal file
25
app/src/main/res/drawable/ic_message_black_24dp.xml
Normal file
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
~ Nextcloud Talk application
|
||||
~
|
||||
~ @author Mario Danic
|
||||
~ Copyright (C) 2017-2019 Mario Danic <mario@lovelyhq.com>
|
||||
~
|
||||
~ This program is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ at your option) any later version.
|
||||
~
|
||||
~ This program is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||
android:viewportHeight="24.0" android:viewportWidth="24.0"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="#FF000000" android:pathData="M20,2L4,2c-1.1,0 -1.99,0.9 -1.99,2L2,22l4,-4h14c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM18,14L6,14v-2h12v2zM18,11L6,11L6,9h12v2zM18,8L6,8L6,6h12v2z"/>
|
||||
</vector>
|
@ -1,25 +0,0 @@
|
||||
<!--
|
||||
~ Nextcloud Talk application
|
||||
~
|
||||
~ @author Mario Danic
|
||||
~ Copyright (C) 2017-2018 Mario Danic <mario@lovelyhq.com>
|
||||
~
|
||||
~ This program is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ at your option) any later version.
|
||||
~
|
||||
~ This program is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<vector android:autoMirrored="true" android:height="24dp"
|
||||
android:viewportHeight="16.0" android:viewportWidth="16.0"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="#FF000000" android:pathData="m9.236,2.166 l-3.182,3.184c-0.707,0.707 -1.038,1.618 -0.988,2.457 0.05,0.839 0.433,1.584 0.988,2.139l1.412,-1.416c-0.567,-0.567 -0.544,-1.219 0.002,-1.766l3.181,-3.182c0.525,-0.525 1.251,-0.523 1.772,-0.002 0.482,0.556 0.527,1.238 -0.004,1.77l-0.82,0.82c0.555,0.785 0.645,1.366 0.593,2.234l1.641,-1.641c1.237,-1.237 1.237,-3.365 0,-4.602 -1.236,-1.236 -3.342,-1.211 -4.596,0.004zM9.943,6.051 L8.529,7.469c0,0 0.003,0 0.004,0 0.55,0.55 0.507,1.258 -0.004,1.77l-3.182,3.182c-0.696,0.592 -1.298,0.471 -1.77,0 -0.626,-0.626 -0.5,-1.268 0,-1.768l0.85,-0.847c-0.556,-0.784 -0.648,-1.365 -0.598,-2.232l-1.666,1.666c-1.239,1.239 -1.236,3.36 0,4.596 1.235,1.235 3.362,1.236 4.598,0l3.182,-3.182c0.709,-0.708 1.04,-1.618 0.991,-2.459 -0.048,-0.84 -0.432,-1.586 -0.989,-2.141z"/>
|
||||
</vector>
|
26
app/src/main/res/drawable/ic_share_black_24dp.xml
Normal file
26
app/src/main/res/drawable/ic_share_black_24dp.xml
Normal file
@ -0,0 +1,26 @@
|
||||
<!--
|
||||
~ Nextcloud Talk application
|
||||
~
|
||||
~ @author Mario Danic
|
||||
~ Copyright (C) 2017-2019 Mario Danic <mario@lovelyhq.com>
|
||||
~
|
||||
~ This program is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ at your option) any later version.
|
||||
~
|
||||
~ This program is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<vector android:height="24dp"
|
||||
android:viewportHeight="24.0" android:viewportWidth="24.0"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@color/grey_600"
|
||||
android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z"/>
|
||||
</vector>
|
25
app/src/main/res/drawable/ic_whatshot_black_24dp.xml
Normal file
25
app/src/main/res/drawable/ic_whatshot_black_24dp.xml
Normal file
@ -0,0 +1,25 @@
|
||||
<!--
|
||||
~ Nextcloud Talk application
|
||||
~
|
||||
~ @author Mario Danic
|
||||
~ Copyright (C) 2017-2019 Mario Danic <mario@lovelyhq.com>
|
||||
~
|
||||
~ This program is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ at your option) any later version.
|
||||
~
|
||||
~ This program is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||
android:viewportHeight="24.0" android:viewportWidth="24.0"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="#FF000000" android:pathData="M13.5,0.67s0.74,2.65 0.74,4.8c0,2.06 -1.35,3.73 -3.41,3.73 -2.07,0 -3.63,-1.67 -3.63,-3.73l0.03,-0.36C5.21,7.51 4,10.62 4,14c0,4.42 3.58,8 8,8s8,-3.58 8,-8C20,8.61 17.41,3.8 13.5,0.67zM11.71,19c-1.78,0 -3.22,-1.4 -3.22,-3.14 0,-1.62 1.05,-2.76 2.81,-3.12 1.77,-0.36 3.6,-1.21 4.62,-2.58 0.39,1.29 0.59,2.65 0.59,4.04 0,2.65 -2.15,4.8 -4.8,4.8z"/>
|
||||
</vector>
|
29
app/src/main/res/drawable/link_variant.xml
Normal file
29
app/src/main/res/drawable/link_variant.xml
Normal file
@ -0,0 +1,29 @@
|
||||
<!--
|
||||
~ Nextcloud Talk application
|
||||
~
|
||||
~ @author Mario Danic
|
||||
~ Copyright (C) 2017-2019 Mario Danic <mario@lovelyhq.com>
|
||||
~
|
||||
~ This program is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ at your option) any later version.
|
||||
~
|
||||
~ This program is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<!-- drawable/link_variant.xml -->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:height="24dp"
|
||||
android:width="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path android:fillColor="@color/grey_600"
|
||||
android:pathData="M10.59,13.41C11,13.8 11,14.44 10.59,14.83C10.2,15.22 9.56,15.22 9.17,14.83C7.22,12.88 7.22,9.71 9.17,7.76V7.76L12.71,4.22C14.66,2.27 17.83,2.27 19.78,4.22C21.73,6.17 21.73,9.34 19.78,11.29L18.29,12.78C18.3,11.96 18.17,11.14 17.89,10.36L18.36,9.88C19.54,8.71 19.54,6.81 18.36,5.64C17.19,4.46 15.29,4.46 14.12,5.64L10.59,9.17C9.41,10.34 9.41,12.24 10.59,13.41M13.41,9.17C13.8,8.78 14.44,8.78 14.83,9.17C16.78,11.12 16.78,14.29 14.83,16.24V16.24L11.29,19.78C9.34,21.73 6.17,21.73 4.22,19.78C2.27,17.83 2.27,14.66 4.22,12.71L5.71,11.22C5.7,12.04 5.83,12.86 6.11,13.65L5.64,14.12C4.46,15.29 4.46,17.19 5.64,18.36C6.81,19.54 8.71,19.54 9.88,18.36L13.41,14.83C14.59,13.66 14.59,11.76 13.41,10.59C13,10.2 13,9.56 13.41,9.17Z" />
|
||||
</vector>
|
@ -75,24 +75,12 @@
|
||||
</RelativeLayout>
|
||||
</com.yarolegovich.mp.MaterialPreferenceCategory>
|
||||
|
||||
<com.yarolegovich.mp.MaterialPreferenceCategory
|
||||
android:id="@+id/otherRoomOptions"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
<include layout="@layout/general_info_item"
|
||||
android:layout_below="@id/conversation_info_name"
|
||||
android:visibility="gone">
|
||||
|
||||
<com.yarolegovich.mp.MaterialStandardPreference
|
||||
android:id="@+id/favoriteConversationAction"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
apc:mp_icon="@drawable/ic_star_black_24dp"
|
||||
apc:mp_icon_tint="@color/grey_600"
|
||||
apc:mp_title="@string/nc_add_to_favorites">
|
||||
|
||||
</com.yarolegovich.mp.MaterialStandardPreference>
|
||||
|
||||
</com.yarolegovich.mp.MaterialPreferenceCategory>
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
/>
|
||||
|
||||
<com.nextcloud.talk.utils.ui.MaterialPreferenceCategoryWithRightLink
|
||||
android:id="@+id/participants_list_category"
|
||||
@ -142,7 +130,7 @@
|
||||
layout="@layout/notification_settings_item"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/otherRoomOptions"
|
||||
android:layout_below="@id/generalConversationOptions"
|
||||
android:visibility="gone" />
|
||||
|
||||
<include
|
||||
|
@ -38,7 +38,7 @@
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:contentDescription="@null"
|
||||
android:src="@drawable/ic_public_black_24px"
|
||||
android:src="@drawable/link_variant"
|
||||
android:tint="@color/colorPrimary" />
|
||||
|
||||
<TextView
|
||||
|
93
app/src/main/res/layout/general_info_item.xml
Normal file
93
app/src/main/res/layout/general_info_item.xml
Normal file
@ -0,0 +1,93 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
~ Nextcloud Talk application
|
||||
~
|
||||
~ @author Mario Danic
|
||||
~ Copyright (C) 2017-2019 Mario Danic <mario@lovelyhq.com>
|
||||
~
|
||||
~ This program is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ at your option) any later version.
|
||||
~
|
||||
~ This program is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<com.yarolegovich.mp.MaterialPreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:apc="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/generalConversationOptions"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:animateLayoutChanges="true"
|
||||
>
|
||||
|
||||
<com.yarolegovich.mp.MaterialPreferenceCategory
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:animateLayoutChanges="true"
|
||||
apc:mpc_title="@string/nc_general_settings"
|
||||
apc:mpc_title_color="@color/colorPrimary"
|
||||
>
|
||||
|
||||
<com.yarolegovich.mp.MaterialEditTextPreference
|
||||
android:id="@+id/changeConversationName"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
apc:mp_icon="@drawable/ic_pencil_grey600_24dp"
|
||||
apc:mp_icon_tint="@color/grey_600"
|
||||
apc:mp_key="conversation_name"
|
||||
apc:mp_title="@string/nc_rename"
|
||||
/>
|
||||
|
||||
<com.yarolegovich.mp.MaterialSwitchPreference
|
||||
android:id="@+id/favoriteConversationAction"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
apc:mp_icon="@drawable/ic_star_black_24dp"
|
||||
apc:mp_icon_tint="@color/grey_600"
|
||||
apc:mp_key="favorite_conversation"
|
||||
apc:mp_summary="@string/nc_favorites_explanation"
|
||||
apc:mp_title="@string/nc_favorite_conversation"
|
||||
/>
|
||||
|
||||
<com.yarolegovich.mp.MaterialSwitchPreference
|
||||
android:id="@+id/allowGuestsAction"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
apc:mp_icon="@drawable/link_variant"
|
||||
apc:mp_icon_tint="@color/grey_600"
|
||||
apc:mp_key="allow_guests"
|
||||
apc:mp_title="@string/nc_allow_guests"
|
||||
/>
|
||||
|
||||
<com.yarolegovich.mp.MaterialEditTextPreference
|
||||
android:id="@+id/passwordAction"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
apc:mp_icon="@drawable/ic_lock_grey600_24px"
|
||||
apc:mp_icon_tint="@color/grey_600"
|
||||
apc:mp_key="conversation_password"
|
||||
android:visibility="gone"
|
||||
apc:mp_summary="@string/nc_manual"
|
||||
apc:mp_title="@string/nc_password"
|
||||
/>
|
||||
|
||||
<com.yarolegovich.mp.MaterialStandardPreference
|
||||
android:id="@+id/shareAction"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
apc:mp_icon="@drawable/ic_share_black_24dp"
|
||||
apc:mp_icon_tint="@color/grey_600"
|
||||
android:visibility="gone"
|
||||
apc:mp_title="@string/nc_share_link"
|
||||
>
|
||||
|
||||
</com.yarolegovich.mp.MaterialStandardPreference>
|
||||
</com.yarolegovich.mp.MaterialPreferenceCategory>
|
||||
|
||||
</com.yarolegovich.mp.MaterialPreferenceScreen>
|
@ -33,7 +33,7 @@
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:contentDescription="@null"
|
||||
android:src="@drawable/ic_public_black_24px"
|
||||
android:src="@drawable/link_variant"
|
||||
android:tint="@color/colorPrimary" />
|
||||
|
||||
<TextView
|
||||
|
@ -37,6 +37,8 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
apc:mp_default_value="false"
|
||||
apc:mp_icon="@drawable/ic_whatshot_black_24dp"
|
||||
apc:mp_icon_tint="@color/grey_600"
|
||||
apc:mp_key="important_conversation"
|
||||
apc:mp_title="@string/nc_important_conversation"
|
||||
apc:mp_summary="@string/nc_important_conversation_desc"/>
|
||||
@ -45,6 +47,8 @@
|
||||
android:id="@+id/conversation_info_message_notifications"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
apc:mp_icon="@drawable/ic_message_black_24dp"
|
||||
apc:mp_icon_tint="@color/grey_600"
|
||||
apc:mp_entry_descriptions="@array/message_notification_levels"
|
||||
apc:mp_entry_values="@array/message_notification_levels_entry_values"
|
||||
apc:mp_key="message_notification_level"
|
||||
@ -57,6 +61,8 @@
|
||||
android:layout_height="wrap_content"
|
||||
apc:mp_default_value="false"
|
||||
apc:mp_key="mute_calls"
|
||||
apc:mp_icon="@drawable/ic_volume_mute_white_24dp"
|
||||
apc:mp_icon_tint="@color/grey_600"
|
||||
apc:mp_title="@string/nc_mute_calls"
|
||||
apc:mp_summary="@string/nc_mute_calls_desc"/>
|
||||
|
||||
|
@ -46,7 +46,6 @@
|
||||
android:layout_toStartOf="@id/checkedImageView"
|
||||
android:layout_toEndOf="@id/simple_drawee_view"
|
||||
android:ellipsize="end"
|
||||
android:textAppearance="@style/ListItem"
|
||||
tools:text="Contact item text" />
|
||||
|
||||
<com.facebook.drawee.view.SimpleDraweeView
|
||||
|
@ -61,13 +61,13 @@
|
||||
android:padding="4dp"
|
||||
android:scaleType="centerInside" />
|
||||
|
||||
<androidx.legacy.widget.Space
|
||||
<Space
|
||||
android:id="@id/attachmentButtonSpace"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_toEndOf="@id/attachmentButton" />
|
||||
|
||||
<androidx.legacy.widget.Space
|
||||
<Space
|
||||
android:id="@id/sendButtonSpace"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
|
@ -132,6 +132,7 @@
|
||||
<string name="nc_no_proxy">No proxy</string>
|
||||
<string name="nc_username">Username</string>
|
||||
<string name="nc_password">Password</string>
|
||||
<string name="nc_password_redacted">Redacted for privacy reasons</string>
|
||||
<string name="nc_conversation_link">Conversation link</string>
|
||||
<string name="nc_new_password">New password</string>
|
||||
<string name="nc_wrong_password">Wrong password</string>
|
||||
@ -169,8 +170,11 @@
|
||||
<string name="nc_new_conversation">New conversation</string>
|
||||
<string name="nc_join_via_link">Join with a link</string>
|
||||
<string name="nc_join_via_web">Join via web</string>
|
||||
<string name="nc_favorite_conversation">Favorite conversation</string>
|
||||
<string name="nc_add_to_favorites">Add to favorites</string>
|
||||
<string name="nc_remove_from_favorites">Remove from favorites</string>
|
||||
<string name="nc_favorites_explanation">Conversation will be pinned to the top of the
|
||||
conversations list</string>
|
||||
|
||||
<!-- Contacts -->
|
||||
<string name="nc_select_contacts">Select contacts</string>
|
||||
@ -311,4 +315,7 @@
|
||||
<string name="nc_not_defined_error">Unknown error</string>
|
||||
<string name="nc_unauthorized_error">No Unauthorized</string>
|
||||
|
||||
<string name="nc_general_settings">General</string>
|
||||
<string name="nc_allow_guests">Allow guests</string>
|
||||
|
||||
</resources>
|
||||
|
@ -39,10 +39,6 @@
|
||||
<item name="android:textSize">12sp</item>
|
||||
</style>
|
||||
|
||||
<style name="ListItem" parent="BottomSheet.ListItem.TextAppearance">
|
||||
<item name="android:textColor">@color/nc_incoming_text_default</item>
|
||||
</style>
|
||||
|
||||
<style name="ChipIncomingTextAppearance" parent="TextAppearance.MaterialComponents.Chip">
|
||||
<item name="android:textColor">@color/nc_incoming_text_default</item>
|
||||
</style>
|
||||
|
Loading…
Reference in New Issue
Block a user