Remove unused module matrix-sdk-android-rx and do some cleanup
This commit is contained in:
parent
a208b48c15
commit
f2165201eb
|
@ -50,9 +50,6 @@ dependencies {
|
||||||
|
|
||||||
implementation 'com.github.chrisbanes:PhotoView:2.3.0'
|
implementation 'com.github.chrisbanes:PhotoView:2.3.0'
|
||||||
|
|
||||||
implementation libs.rx.rxKotlin
|
|
||||||
implementation libs.rx.rxAndroid
|
|
||||||
|
|
||||||
implementation libs.androidx.core
|
implementation libs.androidx.core
|
||||||
implementation libs.androidx.appCompat
|
implementation libs.androidx.appCompat
|
||||||
implementation libs.androidx.recyclerview
|
implementation libs.androidx.recyclerview
|
||||||
|
|
10
build.gradle
10
build.gradle
|
@ -153,13 +153,3 @@ project(":diff-match-patch") {
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
//}
|
//}
|
||||||
//
|
|
||||||
//project(":matrix-sdk-android-rx") {
|
|
||||||
// sonarqube {
|
|
||||||
// properties {
|
|
||||||
// property "sonar.sources", project(":matrix-sdk-android-rx").android.sourceSets.main.java.srcDirs
|
|
||||||
// // exclude source code from analyses separated by a colon (:)
|
|
||||||
// // property "sonar.exclusions", "**/*.*"
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Remove unused module matrix-sdk-android-rx and do some cleanup
|
|
@ -42,7 +42,6 @@ ext.libs = [
|
||||||
jetbrains : [
|
jetbrains : [
|
||||||
'coroutinesCore' : "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlinCoroutines",
|
'coroutinesCore' : "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlinCoroutines",
|
||||||
'coroutinesAndroid' : "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinCoroutines",
|
'coroutinesAndroid' : "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinCoroutines",
|
||||||
'coroutinesRx2' : "org.jetbrains.kotlinx:kotlinx-coroutines-rx2:$kotlinCoroutines",
|
|
||||||
'coroutinesTest' : "org.jetbrains.kotlinx:kotlinx-coroutines-test:$kotlinCoroutines"
|
'coroutinesTest' : "org.jetbrains.kotlinx:kotlinx-coroutines-test:$kotlinCoroutines"
|
||||||
],
|
],
|
||||||
androidx : [
|
androidx : [
|
||||||
|
@ -87,8 +86,7 @@ ext.libs = [
|
||||||
'retrofitMoshi' : "com.squareup.retrofit2:converter-moshi:$retrofit"
|
'retrofitMoshi' : "com.squareup.retrofit2:converter-moshi:$retrofit"
|
||||||
],
|
],
|
||||||
rx : [
|
rx : [
|
||||||
'rxKotlin' : "io.reactivex.rxjava2:rxkotlin:2.4.0",
|
'rxKotlin' : "io.reactivex.rxjava2:rxkotlin:2.4.0"
|
||||||
'rxAndroid' : "io.reactivex.rxjava2:rxandroid:2.1.1"
|
|
||||||
],
|
],
|
||||||
arrow : [
|
arrow : [
|
||||||
'core' : "io.arrow-kt:arrow-core:$arrow",
|
'core' : "io.arrow-kt:arrow-core:$arrow",
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
/build
|
|
|
@ -1,47 +0,0 @@
|
||||||
apply plugin: 'com.android.library'
|
|
||||||
apply plugin: 'kotlin-android'
|
|
||||||
apply plugin: 'kotlin-kapt'
|
|
||||||
|
|
||||||
android {
|
|
||||||
compileSdk versions.compileSdk
|
|
||||||
|
|
||||||
defaultConfig {
|
|
||||||
minSdk versions.minSdk
|
|
||||||
targetSdk versions.targetSdk
|
|
||||||
|
|
||||||
// Multidex is useful for tests
|
|
||||||
multiDexEnabled true
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
|
||||||
}
|
|
||||||
|
|
||||||
buildTypes {
|
|
||||||
release {
|
|
||||||
minifyEnabled false
|
|
||||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
compileOptions {
|
|
||||||
sourceCompatibility versions.sourceCompat
|
|
||||||
targetCompatibility versions.targetCompat
|
|
||||||
}
|
|
||||||
|
|
||||||
kotlinOptions {
|
|
||||||
jvmTarget = "11"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
|
|
||||||
implementation project(":matrix-sdk-android")
|
|
||||||
implementation libs.androidx.appCompat
|
|
||||||
implementation libs.rx.rxKotlin
|
|
||||||
implementation libs.rx.rxAndroid
|
|
||||||
implementation libs.jetbrains.coroutinesRx2
|
|
||||||
|
|
||||||
// Paging
|
|
||||||
implementation libs.androidx.pagingRuntimeKtx
|
|
||||||
|
|
||||||
// Logging
|
|
||||||
implementation libs.jakewharton.timber
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
# Add project specific ProGuard rules here.
|
|
||||||
# You can control the set of applied configuration files using the
|
|
||||||
# proguardFiles setting in build.gradle.
|
|
||||||
#
|
|
||||||
# For more details, see
|
|
||||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
|
||||||
|
|
||||||
# If your project uses WebView with JS, uncomment the following
|
|
||||||
# and specify the fully qualified class name to the JavaScript interface
|
|
||||||
# class:
|
|
||||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
|
||||||
# public *;
|
|
||||||
#}
|
|
||||||
|
|
||||||
# Uncomment this to preserve the line number information for
|
|
||||||
# debugging stack traces.
|
|
||||||
#-keepattributes SourceFile,LineNumberTable
|
|
||||||
|
|
||||||
# If you keep the line number information, uncomment this to
|
|
||||||
# hide the original source file name.
|
|
||||||
#-renamesourcefileattribute SourceFile
|
|
|
@ -1 +0,0 @@
|
||||||
<manifest package="org.matrix.android.sdk.rx" />
|
|
|
@ -1,71 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2020 The Matrix.org Foundation C.I.C.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.matrix.android.sdk.rx
|
|
||||||
|
|
||||||
import androidx.lifecycle.LiveData
|
|
||||||
import androidx.lifecycle.Observer
|
|
||||||
import io.reactivex.Observable
|
|
||||||
import io.reactivex.android.MainThreadDisposable
|
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
|
||||||
import io.reactivex.schedulers.Schedulers
|
|
||||||
|
|
||||||
private class LiveDataObservable<T>(
|
|
||||||
private val liveData: LiveData<T>,
|
|
||||||
private val valueIfNull: T? = null
|
|
||||||
) : Observable<T>() {
|
|
||||||
|
|
||||||
override fun subscribeActual(observer: io.reactivex.Observer<in T>) {
|
|
||||||
val relay = RemoveObserverInMainThread(observer)
|
|
||||||
observer.onSubscribe(relay)
|
|
||||||
liveData.observeForever(relay)
|
|
||||||
}
|
|
||||||
|
|
||||||
private inner class RemoveObserverInMainThread(private val observer: io.reactivex.Observer<in T>) :
|
|
||||||
MainThreadDisposable(), Observer<T> {
|
|
||||||
|
|
||||||
override fun onChanged(t: T?) {
|
|
||||||
if (!isDisposed) {
|
|
||||||
if (t == null) {
|
|
||||||
if (valueIfNull != null) {
|
|
||||||
observer.onNext(valueIfNull)
|
|
||||||
} else {
|
|
||||||
observer.onError(NullPointerException(
|
|
||||||
"convert liveData value t to RxJava onNext(t), t cannot be null"))
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
observer.onNext(t)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDispose() {
|
|
||||||
liveData.removeObserver(this)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun <T> LiveData<T>.asObservable(): Observable<T> {
|
|
||||||
return LiveDataObservable(this).observeOn(Schedulers.computation())
|
|
||||||
}
|
|
||||||
|
|
||||||
internal fun <T> Observable<T>.startWithCallable(supplier: () -> T): Observable<T> {
|
|
||||||
val startObservable = Observable
|
|
||||||
.fromCallable(supplier)
|
|
||||||
.subscribeOn(Schedulers.io())
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
return startWith(startObservable)
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2020 The Matrix.org Foundation C.I.C.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.matrix.android.sdk.rx
|
|
||||||
|
|
||||||
import io.reactivex.Observable
|
|
||||||
import org.matrix.android.sdk.api.util.Optional
|
|
||||||
|
|
||||||
fun <T : Any> Observable<Optional<T>>.unwrap(): Observable<T> {
|
|
||||||
return filter { it.hasValue() }.map { it.get() }
|
|
||||||
}
|
|
||||||
|
|
||||||
fun <T : Any, U : Any> Observable<Optional<T>>.mapOptional(fn: (T) -> U?): Observable<Optional<U>> {
|
|
||||||
return map {
|
|
||||||
it.map(fn)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,158 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2020 The Matrix.org Foundation C.I.C.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.matrix.android.sdk.rx
|
|
||||||
|
|
||||||
import android.net.Uri
|
|
||||||
import io.reactivex.Completable
|
|
||||||
import io.reactivex.Observable
|
|
||||||
import io.reactivex.Single
|
|
||||||
import kotlinx.coroutines.rx2.rxCompletable
|
|
||||||
import kotlinx.coroutines.rx2.rxSingle
|
|
||||||
import org.matrix.android.sdk.api.query.QueryStringValue
|
|
||||||
import org.matrix.android.sdk.api.session.content.ContentAttachmentData
|
|
||||||
import org.matrix.android.sdk.api.session.events.model.Event
|
|
||||||
import org.matrix.android.sdk.api.session.identity.ThreePid
|
|
||||||
import org.matrix.android.sdk.api.session.room.Room
|
|
||||||
import org.matrix.android.sdk.api.session.room.members.RoomMemberQueryParams
|
|
||||||
import org.matrix.android.sdk.api.session.room.model.EventAnnotationsSummary
|
|
||||||
import org.matrix.android.sdk.api.session.room.model.GuestAccess
|
|
||||||
import org.matrix.android.sdk.api.session.room.model.ReadReceipt
|
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomHistoryVisibility
|
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomJoinRules
|
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary
|
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomSummary
|
|
||||||
import org.matrix.android.sdk.api.session.room.notification.RoomNotificationState
|
|
||||||
import org.matrix.android.sdk.api.session.room.send.UserDraft
|
|
||||||
import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent
|
|
||||||
import org.matrix.android.sdk.api.util.Optional
|
|
||||||
import org.matrix.android.sdk.api.util.toOptional
|
|
||||||
|
|
||||||
class RxRoom(private val room: Room) {
|
|
||||||
|
|
||||||
fun liveRoomSummary(): Observable<Optional<RoomSummary>> {
|
|
||||||
return room.getRoomSummaryLive()
|
|
||||||
.asObservable()
|
|
||||||
.startWithCallable { room.roomSummary().toOptional() }
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveRoomMembers(queryParams: RoomMemberQueryParams): Observable<List<RoomMemberSummary>> {
|
|
||||||
return room.getRoomMembersLive(queryParams).asObservable()
|
|
||||||
.startWithCallable {
|
|
||||||
room.getRoomMembers(queryParams)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveAnnotationSummary(eventId: String): Observable<Optional<EventAnnotationsSummary>> {
|
|
||||||
return room.getEventAnnotationsSummaryLive(eventId).asObservable()
|
|
||||||
.startWithCallable {
|
|
||||||
room.getEventAnnotationsSummary(eventId).toOptional()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveTimelineEvent(eventId: String): Observable<Optional<TimelineEvent>> {
|
|
||||||
return room.getTimeLineEventLive(eventId).asObservable()
|
|
||||||
.startWithCallable {
|
|
||||||
room.getTimeLineEvent(eventId).toOptional()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveStateEvent(eventType: String, stateKey: QueryStringValue): Observable<Optional<Event>> {
|
|
||||||
return room.getStateEventLive(eventType, stateKey).asObservable()
|
|
||||||
.startWithCallable {
|
|
||||||
room.getStateEvent(eventType, stateKey).toOptional()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveStateEvents(eventTypes: Set<String>): Observable<List<Event>> {
|
|
||||||
return room.getStateEventsLive(eventTypes).asObservable()
|
|
||||||
.startWithCallable {
|
|
||||||
room.getStateEvents(eventTypes)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveReadMarker(): Observable<Optional<String>> {
|
|
||||||
return room.getReadMarkerLive().asObservable()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveReadReceipt(): Observable<Optional<String>> {
|
|
||||||
return room.getMyReadReceiptLive().asObservable()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun loadRoomMembersIfNeeded(): Single<Unit> = rxSingle {
|
|
||||||
room.loadRoomMembersIfNeeded()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun joinRoom(reason: String? = null,
|
|
||||||
viaServers: List<String> = emptyList()): Single<Unit> = rxSingle {
|
|
||||||
room.join(reason, viaServers)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveEventReadReceipts(eventId: String): Observable<List<ReadReceipt>> {
|
|
||||||
return room.getEventReadReceiptsLive(eventId).asObservable()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveDraft(): Observable<Optional<UserDraft>> {
|
|
||||||
return room.getDraftLive().asObservable()
|
|
||||||
.startWithCallable {
|
|
||||||
room.getDraft().toOptional()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveNotificationState(): Observable<RoomNotificationState> {
|
|
||||||
return room.getLiveRoomNotificationState().asObservable()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun invite(userId: String, reason: String? = null): Completable = rxCompletable {
|
|
||||||
room.invite(userId, reason)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun invite3pid(threePid: ThreePid): Completable = rxCompletable {
|
|
||||||
room.invite3pid(threePid)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun updateTopic(topic: String): Completable = rxCompletable {
|
|
||||||
room.updateTopic(topic)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun updateName(name: String): Completable = rxCompletable {
|
|
||||||
room.updateName(name)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun updateHistoryReadability(readability: RoomHistoryVisibility): Completable = rxCompletable {
|
|
||||||
room.updateHistoryReadability(readability)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun updateJoinRule(joinRules: RoomJoinRules?, guestAccess: GuestAccess?): Completable = rxCompletable {
|
|
||||||
room.updateJoinRule(joinRules, guestAccess)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun updateAvatar(avatarUri: Uri, fileName: String): Completable = rxCompletable {
|
|
||||||
room.updateAvatar(avatarUri, fileName)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun deleteAvatar(): Completable = rxCompletable {
|
|
||||||
room.deleteAvatar()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun sendMedia(attachment: ContentAttachmentData, compressBeforeSending: Boolean, roomIds: Set<String>): Completable = rxCompletable {
|
|
||||||
room.sendMedia(attachment, compressBeforeSending, roomIds)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Room.rx(): RxRoom {
|
|
||||||
return RxRoom(this)
|
|
||||||
}
|
|
|
@ -1,251 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2020 The Matrix.org Foundation C.I.C.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.matrix.android.sdk.rx
|
|
||||||
|
|
||||||
import androidx.paging.PagedList
|
|
||||||
import io.reactivex.Observable
|
|
||||||
import io.reactivex.Single
|
|
||||||
import io.reactivex.functions.Function3
|
|
||||||
import kotlinx.coroutines.rx2.rxSingle
|
|
||||||
import org.matrix.android.sdk.api.extensions.orFalse
|
|
||||||
import org.matrix.android.sdk.api.query.QueryStringValue
|
|
||||||
import org.matrix.android.sdk.api.session.Session
|
|
||||||
import org.matrix.android.sdk.api.session.accountdata.UserAccountDataEvent
|
|
||||||
import org.matrix.android.sdk.api.session.crypto.crosssigning.KEYBACKUP_SECRET_SSSS_NAME
|
|
||||||
import org.matrix.android.sdk.api.session.crypto.crosssigning.MASTER_KEY_SSSS_NAME
|
|
||||||
import org.matrix.android.sdk.api.session.crypto.crosssigning.MXCrossSigningInfo
|
|
||||||
import org.matrix.android.sdk.api.session.crypto.crosssigning.SELF_SIGNING_KEY_SSSS_NAME
|
|
||||||
import org.matrix.android.sdk.api.session.crypto.crosssigning.USER_SIGNING_KEY_SSSS_NAME
|
|
||||||
import org.matrix.android.sdk.api.session.group.GroupSummaryQueryParams
|
|
||||||
import org.matrix.android.sdk.api.session.group.model.GroupSummary
|
|
||||||
import org.matrix.android.sdk.api.session.identity.FoundThreePid
|
|
||||||
import org.matrix.android.sdk.api.session.identity.ThreePid
|
|
||||||
import org.matrix.android.sdk.api.session.pushers.Pusher
|
|
||||||
import org.matrix.android.sdk.api.session.room.RoomSummaryQueryParams
|
|
||||||
import org.matrix.android.sdk.api.session.room.accountdata.RoomAccountDataEvent
|
|
||||||
import org.matrix.android.sdk.api.session.room.members.ChangeMembershipState
|
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary
|
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomSummary
|
|
||||||
import org.matrix.android.sdk.api.session.room.model.create.CreateRoomParams
|
|
||||||
import org.matrix.android.sdk.api.session.space.SpaceSummaryQueryParams
|
|
||||||
import org.matrix.android.sdk.api.session.sync.SyncState
|
|
||||||
import org.matrix.android.sdk.api.session.user.model.User
|
|
||||||
import org.matrix.android.sdk.api.session.widgets.model.Widget
|
|
||||||
import org.matrix.android.sdk.api.util.JsonDict
|
|
||||||
import org.matrix.android.sdk.api.util.Optional
|
|
||||||
import org.matrix.android.sdk.api.util.toOptional
|
|
||||||
import org.matrix.android.sdk.internal.crypto.model.CryptoDeviceInfo
|
|
||||||
import org.matrix.android.sdk.internal.crypto.model.rest.DeviceInfo
|
|
||||||
import org.matrix.android.sdk.internal.crypto.store.PrivateKeysInfo
|
|
||||||
import org.matrix.android.sdk.internal.session.room.alias.RoomAliasDescription
|
|
||||||
|
|
||||||
class RxSession(private val session: Session) {
|
|
||||||
|
|
||||||
fun liveRoomSummaries(queryParams: RoomSummaryQueryParams): Observable<List<RoomSummary>> {
|
|
||||||
return session.getRoomSummariesLive(queryParams).asObservable()
|
|
||||||
.startWithCallable {
|
|
||||||
session.getRoomSummaries(queryParams)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveGroupSummaries(queryParams: GroupSummaryQueryParams): Observable<List<GroupSummary>> {
|
|
||||||
return session.getGroupSummariesLive(queryParams).asObservable()
|
|
||||||
.startWithCallable {
|
|
||||||
session.getGroupSummaries(queryParams)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveSpaceSummaries(queryParams: SpaceSummaryQueryParams): Observable<List<RoomSummary>> {
|
|
||||||
return session.spaceService().getSpaceSummariesLive(queryParams).asObservable()
|
|
||||||
.startWithCallable {
|
|
||||||
session.spaceService().getSpaceSummaries(queryParams)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveBreadcrumbs(queryParams: RoomSummaryQueryParams): Observable<List<RoomSummary>> {
|
|
||||||
return session.getBreadcrumbsLive(queryParams).asObservable()
|
|
||||||
.startWithCallable {
|
|
||||||
session.getBreadcrumbs(queryParams)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveMyDevicesInfo(): Observable<List<DeviceInfo>> {
|
|
||||||
return session.cryptoService().getLiveMyDevicesInfo().asObservable()
|
|
||||||
.startWithCallable {
|
|
||||||
session.cryptoService().getMyDevicesInfo()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveSyncState(): Observable<SyncState> {
|
|
||||||
return session.getSyncStateLive().asObservable()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun livePushers(): Observable<List<Pusher>> {
|
|
||||||
return session.getPushersLive().asObservable()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveUser(userId: String): Observable<Optional<User>> {
|
|
||||||
return session.getUserLive(userId).asObservable()
|
|
||||||
.startWithCallable {
|
|
||||||
session.getUser(userId).toOptional()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveRoomMember(userId: String, roomId: String): Observable<Optional<RoomMemberSummary>> {
|
|
||||||
return session.getRoomMemberLive(userId, roomId).asObservable()
|
|
||||||
.startWithCallable {
|
|
||||||
session.getRoomMember(userId, roomId).toOptional()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveUsers(): Observable<List<User>> {
|
|
||||||
return session.getUsersLive().asObservable()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveIgnoredUsers(): Observable<List<User>> {
|
|
||||||
return session.getIgnoredUsersLive().asObservable()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun livePagedUsers(filter: String? = null, excludedUserIds: Set<String>? = null): Observable<PagedList<User>> {
|
|
||||||
return session.getPagedUsersLive(filter, excludedUserIds).asObservable()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveThreePIds(refreshData: Boolean): Observable<List<ThreePid>> {
|
|
||||||
return session.getThreePidsLive(refreshData).asObservable()
|
|
||||||
.startWithCallable { session.getThreePids() }
|
|
||||||
}
|
|
||||||
|
|
||||||
fun livePendingThreePIds(): Observable<List<ThreePid>> {
|
|
||||||
return session.getPendingThreePidsLive().asObservable()
|
|
||||||
.startWithCallable { session.getPendingThreePids() }
|
|
||||||
}
|
|
||||||
|
|
||||||
fun createRoom(roomParams: CreateRoomParams): Single<String> = rxSingle {
|
|
||||||
session.createRoom(roomParams)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun searchUsersDirectory(search: String,
|
|
||||||
limit: Int,
|
|
||||||
excludedUserIds: Set<String>): Single<List<User>> = rxSingle {
|
|
||||||
session.searchUsersDirectory(search, limit, excludedUserIds)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun joinRoom(roomIdOrAlias: String,
|
|
||||||
reason: String? = null,
|
|
||||||
viaServers: List<String> = emptyList()): Single<Unit> = rxSingle {
|
|
||||||
session.joinRoom(roomIdOrAlias, reason, viaServers)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getRoomIdByAlias(roomAlias: String,
|
|
||||||
searchOnServer: Boolean): Single<Optional<RoomAliasDescription>> = rxSingle {
|
|
||||||
session.getRoomIdByAlias(roomAlias, searchOnServer)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getProfileInfo(userId: String): Single<JsonDict> = rxSingle {
|
|
||||||
session.getProfile(userId)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveUserCryptoDevices(userId: String): Observable<List<CryptoDeviceInfo>> {
|
|
||||||
return session.cryptoService().getLiveCryptoDeviceInfo(userId).asObservable().startWithCallable {
|
|
||||||
session.cryptoService().getCryptoDeviceInfo(userId)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveCrossSigningInfo(userId: String): Observable<Optional<MXCrossSigningInfo>> {
|
|
||||||
return session.cryptoService().crossSigningService().getLiveCrossSigningKeys(userId).asObservable()
|
|
||||||
.startWithCallable {
|
|
||||||
session.cryptoService().crossSigningService().getUserCrossSigningKeys(userId).toOptional()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveCrossSigningPrivateKeys(): Observable<Optional<PrivateKeysInfo>> {
|
|
||||||
return session.cryptoService().crossSigningService().getLiveCrossSigningPrivateKeys().asObservable()
|
|
||||||
.startWithCallable {
|
|
||||||
session.cryptoService().crossSigningService().getCrossSigningPrivateKeys().toOptional()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveUserAccountData(types: Set<String>): Observable<List<UserAccountDataEvent>> {
|
|
||||||
return session.accountDataService().getLiveUserAccountDataEvents(types).asObservable()
|
|
||||||
.startWithCallable {
|
|
||||||
session.accountDataService().getUserAccountDataEvents(types)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveRoomAccountData(types: Set<String>): Observable<List<RoomAccountDataEvent>> {
|
|
||||||
return session.accountDataService().getLiveRoomAccountDataEvents(types).asObservable()
|
|
||||||
.startWithCallable {
|
|
||||||
session.accountDataService().getRoomAccountDataEvents(types)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveRoomWidgets(
|
|
||||||
roomId: String,
|
|
||||||
widgetId: QueryStringValue,
|
|
||||||
widgetTypes: Set<String>? = null,
|
|
||||||
excludedTypes: Set<String>? = null
|
|
||||||
): Observable<List<Widget>> {
|
|
||||||
return session.widgetService().getRoomWidgetsLive(roomId, widgetId, widgetTypes, excludedTypes).asObservable()
|
|
||||||
.startWithCallable {
|
|
||||||
session.widgetService().getRoomWidgets(roomId, widgetId, widgetTypes, excludedTypes)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveRoomChangeMembershipState(): Observable<Map<String, ChangeMembershipState>> {
|
|
||||||
return session.getChangeMembershipsLive().asObservable()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun liveSecretSynchronisationInfo(): Observable<SecretsSynchronisationInfo> {
|
|
||||||
return Observable.combineLatest<List<UserAccountDataEvent>, Optional<MXCrossSigningInfo>, Optional<PrivateKeysInfo>, SecretsSynchronisationInfo>(
|
|
||||||
liveUserAccountData(setOf(MASTER_KEY_SSSS_NAME, USER_SIGNING_KEY_SSSS_NAME, SELF_SIGNING_KEY_SSSS_NAME, KEYBACKUP_SECRET_SSSS_NAME)),
|
|
||||||
liveCrossSigningInfo(session.myUserId),
|
|
||||||
liveCrossSigningPrivateKeys(),
|
|
||||||
Function3 { _, crossSigningInfo, pInfo ->
|
|
||||||
// first check if 4S is already setup
|
|
||||||
val is4SSetup = session.sharedSecretStorageService.isRecoverySetup()
|
|
||||||
val isCrossSigningEnabled = crossSigningInfo.getOrNull() != null
|
|
||||||
val isCrossSigningTrusted = crossSigningInfo.getOrNull()?.isTrusted() == true
|
|
||||||
val allPrivateKeysKnown = pInfo.getOrNull()?.allKnown().orFalse()
|
|
||||||
|
|
||||||
val keysBackupService = session.cryptoService().keysBackupService()
|
|
||||||
val currentBackupVersion = keysBackupService.currentBackupVersion
|
|
||||||
val megolmBackupAvailable = currentBackupVersion != null
|
|
||||||
val savedBackupKey = keysBackupService.getKeyBackupRecoveryKeyInfo()
|
|
||||||
|
|
||||||
val megolmKeyKnown = savedBackupKey?.version == currentBackupVersion
|
|
||||||
SecretsSynchronisationInfo(
|
|
||||||
isBackupSetup = is4SSetup,
|
|
||||||
isCrossSigningEnabled = isCrossSigningEnabled,
|
|
||||||
isCrossSigningTrusted = isCrossSigningTrusted,
|
|
||||||
allPrivateKeysKnown = allPrivateKeysKnown,
|
|
||||||
megolmBackupAvailable = megolmBackupAvailable,
|
|
||||||
megolmSecretKnown = megolmKeyKnown,
|
|
||||||
isMegolmKeyIn4S = session.sharedSecretStorageService.isMegolmKeyInBackup()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
.distinctUntilChanged()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun lookupThreePid(threePid: ThreePid): Single<Optional<FoundThreePid>> = rxSingle {
|
|
||||||
session.identityService().lookUp(listOf(threePid)).firstOrNull().toOptional()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Session.rx(): RxSession {
|
|
||||||
return RxSession(this)
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2020 The Matrix.org Foundation C.I.C.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.matrix.android.sdk.rx
|
|
||||||
|
|
||||||
data class SecretsSynchronisationInfo(
|
|
||||||
val isBackupSetup: Boolean,
|
|
||||||
val isCrossSigningEnabled: Boolean,
|
|
||||||
val isCrossSigningTrusted: Boolean,
|
|
||||||
val allPrivateKeysKnown: Boolean,
|
|
||||||
val megolmBackupAvailable: Boolean,
|
|
||||||
val megolmSecretKnown: Boolean,
|
|
||||||
val isMegolmKeyIn4S: Boolean
|
|
||||||
)
|
|
|
@ -1,6 +1,5 @@
|
||||||
include ':vector'
|
include ':vector'
|
||||||
include ':matrix-sdk-android'
|
include ':matrix-sdk-android'
|
||||||
include ':matrix-sdk-android-rx'
|
|
||||||
include ':diff-match-patch'
|
include ':diff-match-patch'
|
||||||
include ':attachment-viewer'
|
include ':attachment-viewer'
|
||||||
include ':multipicker'
|
include ':multipicker'
|
||||||
|
|
Loading…
Reference in New Issue