mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-20 12:09:45 +01:00
Add support for autodispose to lots of views
Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
parent
6719159dd7
commit
dfedbc26f9
@ -23,6 +23,7 @@ apply plugin: 'kotlin-android'
|
|||||||
apply plugin: 'findbugs'
|
apply plugin: 'findbugs'
|
||||||
apply plugin: 'kotlin-kapt'
|
apply plugin: 'kotlin-kapt'
|
||||||
apply plugin: 'kotlin-android-extensions'
|
apply plugin: 'kotlin-android-extensions'
|
||||||
|
apply plugin: 'realm-android'
|
||||||
|
|
||||||
def taskRequest = getGradle().getStartParameter().getTaskRequests().toString()
|
def taskRequest = getGradle().getStartParameter().getTaskRequests().toString()
|
||||||
if (taskRequest.contains("Gplay") || taskRequest.contains("findbugs") || taskRequest.contains("lint")) {
|
if (taskRequest.contains("Gplay") || taskRequest.contains("findbugs") || taskRequest.contains("lint")) {
|
||||||
@ -169,8 +170,11 @@ dependencies {
|
|||||||
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
|
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
|
||||||
implementation "io.reactivex.rxjava2:rxjava:2.2.11"
|
implementation "io.reactivex.rxjava2:rxjava:2.2.11"
|
||||||
|
|
||||||
implementation 'com.bluelinelabs:conductor:2.1.5'
|
implementation 'com.bluelinelabs:conductor:3.0.0-rc1'
|
||||||
implementation 'com.bluelinelabs:conductor-support:2.1.5'
|
implementation 'com.bluelinelabs:conductor-support:3.0.0-rc1'
|
||||||
|
implementation 'com.bluelinelabs:conductor-archlifecycle:3.0.0-rc1'
|
||||||
|
implementation 'com.bluelinelabs:conductor-rxlifecycle2:3.0.0-rc1'
|
||||||
|
implementation 'com.bluelinelabs:conductor-autodispose:3.0.0-rc1'
|
||||||
|
|
||||||
implementation 'com.squareup.okhttp3:okhttp:3.14.2'
|
implementation 'com.squareup.okhttp3:okhttp:3.14.2'
|
||||||
implementation 'com.squareup.okhttp3:okhttp-urlconnection:3.14.2'
|
implementation 'com.squareup.okhttp3:okhttp-urlconnection:3.14.2'
|
||||||
@ -251,4 +255,5 @@ dependencies {
|
|||||||
})
|
})
|
||||||
findbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.9.0'
|
findbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.9.0'
|
||||||
findbugsPlugins 'com.mebigfatguy.fb-contrib:fb-contrib:7.4.6'
|
findbugsPlugins 'com.mebigfatguy.fb-contrib:fb-contrib:7.4.6'
|
||||||
|
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,7 @@ import com.nextcloud.talk.utils.bundle.BundleKeys;
|
|||||||
import com.nextcloud.talk.utils.database.user.UserUtils;
|
import com.nextcloud.talk.utils.database.user.UserUtils;
|
||||||
import com.nextcloud.talk.utils.preferences.AppPreferences;
|
import com.nextcloud.talk.utils.preferences.AppPreferences;
|
||||||
import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder;
|
import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder;
|
||||||
|
import com.uber.autodispose.AutoDispose;
|
||||||
|
|
||||||
import io.reactivex.CompletableObserver;
|
import io.reactivex.CompletableObserver;
|
||||||
import io.reactivex.Observer;
|
import io.reactivex.Observer;
|
||||||
@ -95,8 +96,6 @@ public class AccountVerificationController extends BaseController {
|
|||||||
|
|
||||||
private long internalAccountId = -1;
|
private long internalAccountId = -1;
|
||||||
|
|
||||||
private List<Disposable> disposables = new ArrayList<>();
|
|
||||||
|
|
||||||
private String baseUrl;
|
private String baseUrl;
|
||||||
private String username;
|
private String username;
|
||||||
private String token;
|
private String token;
|
||||||
@ -179,10 +178,10 @@ public class AccountVerificationController extends BaseController {
|
|||||||
ncApi.getServerStatus(queryUrl)
|
ncApi.getServerStatus(queryUrl)
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.as(AutoDispose.autoDisposable(scopeProvider))
|
||||||
.subscribe(new Observer<Status>() {
|
.subscribe(new Observer<Status>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSubscribe(Disposable d) {
|
public void onSubscribe(Disposable d) {
|
||||||
disposables.add(d);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -222,10 +221,10 @@ public class AccountVerificationController extends BaseController {
|
|||||||
private void findServerTalkApp(String credentials) {
|
private void findServerTalkApp(String credentials) {
|
||||||
ncApi.getRooms(credentials, ApiUtils.getUrlForGetRooms(baseUrl))
|
ncApi.getRooms(credentials, ApiUtils.getUrlForGetRooms(baseUrl))
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
|
.as(AutoDispose.autoDisposable(scopeProvider))
|
||||||
.subscribe(new Observer<RoomsOverall>() {
|
.subscribe(new Observer<RoomsOverall>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSubscribe(Disposable d) {
|
public void onSubscribe(Disposable d) {
|
||||||
disposables.add(d);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -259,10 +258,10 @@ public class AccountVerificationController extends BaseController {
|
|||||||
userId, null, null,
|
userId, null, null,
|
||||||
appPreferences.getTemporaryClientCertAlias(), null)
|
appPreferences.getTemporaryClientCertAlias(), null)
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
|
.as(AutoDispose.autoDisposable(scopeProvider))
|
||||||
.subscribe(new Observer<UserEntity>() {
|
.subscribe(new Observer<UserEntity>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSubscribe(Disposable d) {
|
public void onSubscribe(Disposable d) {
|
||||||
disposables.add(d);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -299,10 +298,10 @@ public class AccountVerificationController extends BaseController {
|
|||||||
ncApi.getUserProfile(credentials,
|
ncApi.getUserProfile(credentials,
|
||||||
ApiUtils.getUrlForUserProfile(baseUrl))
|
ApiUtils.getUrlForUserProfile(baseUrl))
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
|
.as(AutoDispose.autoDisposable(scopeProvider))
|
||||||
.subscribe(new Observer<UserProfileOverall>() {
|
.subscribe(new Observer<UserProfileOverall>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSubscribe(Disposable d) {
|
public void onSubscribe(Disposable d) {
|
||||||
disposables.add(d);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -427,14 +426,6 @@ public class AccountVerificationController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void dispose() {
|
|
||||||
for (int i = 0; i < disposables.size(); i++) {
|
|
||||||
if (!disposables.get(i).isDisposed()) {
|
|
||||||
disposables.get(i).dispose();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDestroyView(@NonNull View view) {
|
protected void onDestroyView(@NonNull View view) {
|
||||||
super.onDestroyView(view);
|
super.onDestroyView(view);
|
||||||
@ -443,12 +434,6 @@ public class AccountVerificationController extends BaseController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDestroy() {
|
|
||||||
dispose();
|
|
||||||
super.onDestroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void abortVerification() {
|
private void abortVerification() {
|
||||||
|
|
||||||
if (!isAccountImport) {
|
if (!isAccountImport) {
|
||||||
|
@ -74,6 +74,8 @@ import com.nextcloud.talk.utils.DoNotDisturbUtils;
|
|||||||
import com.nextcloud.talk.utils.bundle.BundleKeys;
|
import com.nextcloud.talk.utils.bundle.BundleKeys;
|
||||||
import com.nextcloud.talk.utils.preferences.AppPreferences;
|
import com.nextcloud.talk.utils.preferences.AppPreferences;
|
||||||
import com.nextcloud.talk.utils.singletons.AvatarStatusCodeHolder;
|
import com.nextcloud.talk.utils.singletons.AvatarStatusCodeHolder;
|
||||||
|
import com.uber.autodispose.AutoDispose;
|
||||||
|
|
||||||
import io.reactivex.Observer;
|
import io.reactivex.Observer;
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
import io.reactivex.disposables.Disposable;
|
import io.reactivex.disposables.Disposable;
|
||||||
@ -198,6 +200,7 @@ public class CallNotificationController extends BaseController {
|
|||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.takeWhile(observable -> !leavingScreen)
|
.takeWhile(observable -> !leavingScreen)
|
||||||
.retry(3)
|
.retry(3)
|
||||||
|
.as(AutoDispose.autoDisposable(scopeProvider))
|
||||||
.subscribe(new Observer<ParticipantsOverall>() {
|
.subscribe(new Observer<ParticipantsOverall>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSubscribe(Disposable d) {
|
public void onSubscribe(Disposable d) {
|
||||||
@ -247,6 +250,7 @@ public class CallNotificationController extends BaseController {
|
|||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.retry(3)
|
.retry(3)
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.as(AutoDispose.autoDisposable(scopeProvider))
|
||||||
.subscribe(new Observer<RoomsOverall>() {
|
.subscribe(new Observer<RoomsOverall>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSubscribe(Disposable d) {
|
public void onSubscribe(Disposable d) {
|
||||||
|
@ -89,6 +89,7 @@ import com.stfalcon.chatkit.messages.MessageInput
|
|||||||
import com.stfalcon.chatkit.messages.MessagesList
|
import com.stfalcon.chatkit.messages.MessagesList
|
||||||
import com.stfalcon.chatkit.messages.MessagesListAdapter
|
import com.stfalcon.chatkit.messages.MessagesListAdapter
|
||||||
import com.stfalcon.chatkit.utils.DateFormatter
|
import com.stfalcon.chatkit.utils.DateFormatter
|
||||||
|
import com.uber.autodispose.AutoDispose
|
||||||
import com.vanniktech.emoji.EmojiPopup
|
import com.vanniktech.emoji.EmojiPopup
|
||||||
import com.webianks.library.PopupBubble
|
import com.webianks.library.PopupBubble
|
||||||
import io.reactivex.Observer
|
import io.reactivex.Observer
|
||||||
@ -149,7 +150,6 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
|
|||||||
@BindView(R.id.lobby_text_view)
|
@BindView(R.id.lobby_text_view)
|
||||||
@JvmField
|
@JvmField
|
||||||
var conversationLobbyText: TextView? = null
|
var conversationLobbyText: TextView? = null
|
||||||
val disposableList = ArrayList<Disposable>()
|
|
||||||
var roomToken: String? = null
|
var roomToken: String? = null
|
||||||
val conversationUser: UserEntity?
|
val conversationUser: UserEntity?
|
||||||
val roomPassword: String
|
val roomPassword: String
|
||||||
@ -222,9 +222,9 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
|
|||||||
if (conversationUser != null) {
|
if (conversationUser != null) {
|
||||||
ncApi?.getRoom(credentials, ApiUtils.getRoom(conversationUser.baseUrl, roomToken))?.subscribeOn(Schedulers.io())
|
ncApi?.getRoom(credentials, ApiUtils.getRoom(conversationUser.baseUrl, roomToken))?.subscribeOn(Schedulers.io())
|
||||||
?.observeOn(AndroidSchedulers.mainThread())
|
?.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
?.`as`(AutoDispose.autoDisposable(scopeProvider))
|
||||||
?.subscribe(object : Observer<RoomOverall> {
|
?.subscribe(object : Observer<RoomOverall> {
|
||||||
override fun onSubscribe(d: Disposable) {
|
override fun onSubscribe(d: Disposable) {
|
||||||
disposableList.add(d)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onNext(roomOverall: RoomOverall) {
|
override fun onNext(roomOverall: RoomOverall) {
|
||||||
@ -261,9 +261,10 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
|
|||||||
|
|
||||||
private fun handleFromNotification() {
|
private fun handleFromNotification() {
|
||||||
ncApi?.getRooms(credentials, ApiUtils.getUrlForGetRooms(conversationUser?.baseUrl))
|
ncApi?.getRooms(credentials, ApiUtils.getUrlForGetRooms(conversationUser?.baseUrl))
|
||||||
?.subscribeOn(Schedulers.io())?.observeOn(AndroidSchedulers.mainThread())?.subscribe(object : Observer<RoomsOverall> {
|
?.subscribeOn(Schedulers.io())?.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
?.`as`(AutoDispose.autoDisposable(scopeProvider))
|
||||||
|
?.subscribe(object : Observer<RoomsOverall> {
|
||||||
override fun onSubscribe(d: Disposable) {
|
override fun onSubscribe(d: Disposable) {
|
||||||
disposableList.add(d)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onNext(roomsOverall: RoomsOverall) {
|
override fun onNext(roomsOverall: RoomsOverall) {
|
||||||
@ -664,14 +665,6 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
|
|||||||
inConversation = false
|
inConversation = false
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun dispose() {
|
|
||||||
for (disposable in disposableList) {
|
|
||||||
if (!disposable.isDisposed()) {
|
|
||||||
disposable.dispose()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun startPing() {
|
private fun startPing() {
|
||||||
if (conversationUser != null && !conversationUser.hasSpreedFeatureCapability("no-ping")) {
|
if (conversationUser != null && !conversationUser.hasSpreedFeatureCapability("no-ping")) {
|
||||||
ncApi?.pingCall(credentials, ApiUtils.getUrlForCallPing(conversationUser.baseUrl,
|
ncApi?.pingCall(credentials, ApiUtils.getUrlForCallPing(conversationUser.baseUrl,
|
||||||
@ -681,9 +674,9 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
|
|||||||
?.repeatWhen { observable -> observable.delay(5000, TimeUnit.MILLISECONDS) }
|
?.repeatWhen { observable -> observable.delay(5000, TimeUnit.MILLISECONDS) }
|
||||||
?.takeWhile { observable -> inConversation }
|
?.takeWhile { observable -> inConversation }
|
||||||
?.retry(3) { observable -> inConversation }
|
?.retry(3) { observable -> inConversation }
|
||||||
|
?.`as`(AutoDispose.autoDisposable(scopeProvider))
|
||||||
?.subscribe(object : Observer<GenericOverall> {
|
?.subscribe(object : Observer<GenericOverall> {
|
||||||
override fun onSubscribe(d: Disposable) {
|
override fun onSubscribe(d: Disposable) {
|
||||||
disposableList.add(d)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onNext(genericOverall: GenericOverall) {
|
override fun onNext(genericOverall: GenericOverall) {
|
||||||
@ -711,9 +704,9 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
|
|||||||
?.subscribeOn(Schedulers.io())
|
?.subscribeOn(Schedulers.io())
|
||||||
?.observeOn(AndroidSchedulers.mainThread())
|
?.observeOn(AndroidSchedulers.mainThread())
|
||||||
?.retry(3)
|
?.retry(3)
|
||||||
|
?.`as`(AutoDispose.autoDisposable(scopeProvider))
|
||||||
?.subscribe(object : Observer<RoomOverall> {
|
?.subscribe(object : Observer<RoomOverall> {
|
||||||
override fun onSubscribe(d: Disposable) {
|
override fun onSubscribe(d: Disposable) {
|
||||||
disposableList.add(d)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onNext(roomOverall: RoomOverall) {
|
override fun onNext(roomOverall: RoomOverall) {
|
||||||
@ -772,9 +765,9 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
|
|||||||
roomToken))
|
roomToken))
|
||||||
?.subscribeOn(Schedulers.io())
|
?.subscribeOn(Schedulers.io())
|
||||||
?.observeOn(AndroidSchedulers.mainThread())
|
?.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
?.`as`(AutoDispose.autoDisposable(scopeProvider))
|
||||||
?.subscribe(object : Observer<GenericOverall> {
|
?.subscribe(object : Observer<GenericOverall> {
|
||||||
override fun onSubscribe(d: Disposable) {
|
override fun onSubscribe(d: Disposable) {
|
||||||
disposableList.add(d)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onNext(genericOverall: GenericOverall) {
|
override fun onNext(genericOverall: GenericOverall) {
|
||||||
@ -797,7 +790,6 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
|
|||||||
override fun onError(e: Throwable) {}
|
override fun onError(e: Throwable) {}
|
||||||
|
|
||||||
override fun onComplete() {
|
override fun onComplete() {
|
||||||
dispose()
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -843,6 +835,7 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
|
|||||||
message, conversationUser.displayName)
|
message, conversationUser.displayName)
|
||||||
?.subscribeOn(Schedulers.io())
|
?.subscribeOn(Schedulers.io())
|
||||||
?.observeOn(AndroidSchedulers.mainThread())
|
?.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
?.`as`(AutoDispose.autoDisposable(scopeProvider))
|
||||||
?.subscribe(object : Observer<GenericOverall> {
|
?.subscribe(object : Observer<GenericOverall> {
|
||||||
override fun onSubscribe(d: Disposable) {
|
override fun onSubscribe(d: Disposable) {
|
||||||
|
|
||||||
@ -939,9 +932,9 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
|
|||||||
?.subscribeOn(Schedulers.io())
|
?.subscribeOn(Schedulers.io())
|
||||||
?.observeOn(AndroidSchedulers.mainThread())
|
?.observeOn(AndroidSchedulers.mainThread())
|
||||||
?.takeWhile { observable -> inConversation && !wasDetached }
|
?.takeWhile { observable -> inConversation && !wasDetached }
|
||||||
|
?.`as`(AutoDispose.autoDisposable(scopeProvider))
|
||||||
?.subscribe(object : Observer<Response<*>> {
|
?.subscribe(object : Observer<Response<*>> {
|
||||||
override fun onSubscribe(d: Disposable) {
|
override fun onSubscribe(d: Disposable) {
|
||||||
disposableList.add(d)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onNext(response: Response<*>) {
|
override fun onNext(response: Response<*>) {
|
||||||
@ -968,9 +961,9 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
|
|||||||
?.observeOn(AndroidSchedulers.mainThread())
|
?.observeOn(AndroidSchedulers.mainThread())
|
||||||
?.retry(3) { observable -> inConversation && !wasDetached }
|
?.retry(3) { observable -> inConversation && !wasDetached }
|
||||||
?.takeWhile { observable -> inConversation && !wasDetached }
|
?.takeWhile { observable -> inConversation && !wasDetached }
|
||||||
|
?.`as`(AutoDispose.autoDisposable(scopeProvider))
|
||||||
?.subscribe(object : Observer<Response<*>> {
|
?.subscribe(object : Observer<Response<*>> {
|
||||||
override fun onSubscribe(d: Disposable) {
|
override fun onSubscribe(d: Disposable) {
|
||||||
disposableList.add(d)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onNext(response: Response<*>) {
|
override fun onNext(response: Response<*>) {
|
||||||
@ -1286,6 +1279,7 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
|
|||||||
retrofitBucket.url, retrofitBucket.queryMap)
|
retrofitBucket.url, retrofitBucket.queryMap)
|
||||||
?.subscribeOn(Schedulers.io())
|
?.subscribeOn(Schedulers.io())
|
||||||
?.observeOn(AndroidSchedulers.mainThread())
|
?.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
?.`as`(AutoDispose.autoDisposable(scopeProvider))
|
||||||
?.subscribe(object : Observer<RoomOverall> {
|
?.subscribe(object : Observer<RoomOverall> {
|
||||||
override fun onSubscribe(d: Disposable) {
|
override fun onSubscribe(d: Disposable) {
|
||||||
|
|
||||||
|
@ -70,6 +70,7 @@ import com.nextcloud.talk.utils.KeyboardUtils;
|
|||||||
import com.nextcloud.talk.utils.bundle.BundleKeys;
|
import com.nextcloud.talk.utils.bundle.BundleKeys;
|
||||||
import com.nextcloud.talk.utils.database.user.UserUtils;
|
import com.nextcloud.talk.utils.database.user.UserUtils;
|
||||||
import com.nextcloud.talk.utils.preferences.AppPreferences;
|
import com.nextcloud.talk.utils.preferences.AppPreferences;
|
||||||
|
import com.uber.autodispose.AutoDispose;
|
||||||
|
|
||||||
import org.greenrobot.eventbus.EventBus;
|
import org.greenrobot.eventbus.EventBus;
|
||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
@ -154,8 +155,6 @@ public class ContactsController extends BaseController implements SearchView.OnQ
|
|||||||
NcApi ncApi;
|
NcApi ncApi;
|
||||||
private String credentials;
|
private String credentials;
|
||||||
private UserEntity currentUser;
|
private UserEntity currentUser;
|
||||||
private Disposable contactsQueryDisposable;
|
|
||||||
private Disposable cacheQueryDisposable;
|
|
||||||
private FlexibleAdapter adapter;
|
private FlexibleAdapter adapter;
|
||||||
private List<AbstractFlexibleItem> contactItems;
|
private List<AbstractFlexibleItem> contactItems;
|
||||||
private BottomSheet bottomSheet;
|
private BottomSheet bottomSheet;
|
||||||
@ -289,6 +288,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ
|
|||||||
retrofitBucket.getUrl(), retrofitBucket.getQueryMap())
|
retrofitBucket.getUrl(), retrofitBucket.getQueryMap())
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.as(AutoDispose.autoDisposable(scopeProvider))
|
||||||
.subscribe(new Observer<RoomOverall>() {
|
.subscribe(new Observer<RoomOverall>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSubscribe(Disposable d) {
|
public void onSubscribe(Disposable d) {
|
||||||
@ -309,6 +309,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ
|
|||||||
roomOverall.getOcs().getData().getToken()))
|
roomOverall.getOcs().getData().getToken()))
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.as(AutoDispose.autoDisposable(scopeProvider))
|
||||||
.subscribe(new Observer<RoomOverall>() {
|
.subscribe(new Observer<RoomOverall>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -452,8 +453,6 @@ public class ContactsController extends BaseController implements SearchView.OnQ
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void fetchData(boolean startFromScratch) {
|
private void fetchData(boolean startFromScratch) {
|
||||||
dispose(null);
|
|
||||||
|
|
||||||
alreadyFetching = true;
|
alreadyFetching = true;
|
||||||
Set<Sharee> shareeHashSet = new HashSet<>();
|
Set<Sharee> shareeHashSet = new HashSet<>();
|
||||||
Set<AutocompleteUser> autocompleteUsersHashSet = new HashSet<>();
|
Set<AutocompleteUser> autocompleteUsersHashSet = new HashSet<>();
|
||||||
@ -507,10 +506,10 @@ public class ContactsController extends BaseController implements SearchView.OnQ
|
|||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.retry(3)
|
.retry(3)
|
||||||
|
.as(AutoDispose.autoDisposable(scopeProvider))
|
||||||
.subscribe(new Observer<ResponseBody>() {
|
.subscribe(new Observer<ResponseBody>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSubscribe(Disposable d) {
|
public void onSubscribe(Disposable d) {
|
||||||
contactsQueryDisposable = d;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -691,7 +690,6 @@ public class ContactsController extends BaseController implements SearchView.OnQ
|
|||||||
if (swipeRefreshLayout != null) {
|
if (swipeRefreshLayout != null) {
|
||||||
swipeRefreshLayout.setRefreshing(false);
|
swipeRefreshLayout.setRefreshing(false);
|
||||||
}
|
}
|
||||||
dispose(contactsQueryDisposable);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -700,7 +698,6 @@ public class ContactsController extends BaseController implements SearchView.OnQ
|
|||||||
if (swipeRefreshLayout != null) {
|
if (swipeRefreshLayout != null) {
|
||||||
swipeRefreshLayout.setRefreshing(false);
|
swipeRefreshLayout.setRefreshing(false);
|
||||||
}
|
}
|
||||||
dispose(contactsQueryDisposable);
|
|
||||||
alreadyFetching = false;
|
alreadyFetching = false;
|
||||||
|
|
||||||
disengageProgressBar();
|
disengageProgressBar();
|
||||||
@ -746,24 +743,6 @@ public class ContactsController extends BaseController implements SearchView.OnQ
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void dispose(@Nullable Disposable disposable) {
|
|
||||||
if (disposable != null && !disposable.isDisposed()) {
|
|
||||||
disposable.dispose();
|
|
||||||
} else if (disposable == null) {
|
|
||||||
|
|
||||||
if (contactsQueryDisposable != null && !contactsQueryDisposable.isDisposed()) {
|
|
||||||
contactsQueryDisposable.dispose();
|
|
||||||
contactsQueryDisposable = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cacheQueryDisposable != null && !cacheQueryDisposable.isDisposed()) {
|
|
||||||
cacheQueryDisposable.dispose();
|
|
||||||
cacheQueryDisposable = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSaveViewState(@NonNull View view, @NonNull Bundle outState) {
|
public void onSaveViewState(@NonNull View view, @NonNull Bundle outState) {
|
||||||
adapter.onSaveInstanceState(outState);
|
adapter.onSaveInstanceState(outState);
|
||||||
@ -778,12 +757,6 @@ public class ContactsController extends BaseController implements SearchView.OnQ
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDestroy() {
|
|
||||||
super.onDestroy();
|
|
||||||
dispose(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onQueryTextChange(String newText) {
|
public boolean onQueryTextChange(String newText) {
|
||||||
if (!newText.equals("") && adapter.hasNewFilter(newText)) {
|
if (!newText.equals("") && adapter.hasNewFilter(newText)) {
|
||||||
@ -910,6 +883,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ
|
|||||||
retrofitBucket.getUrl(), retrofitBucket.getQueryMap())
|
retrofitBucket.getUrl(), retrofitBucket.getQueryMap())
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.as(AutoDispose.autoDisposable(scopeProvider))
|
||||||
.subscribe(new Observer<RoomOverall>() {
|
.subscribe(new Observer<RoomOverall>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSubscribe(Disposable d) {
|
public void onSubscribe(Disposable d) {
|
||||||
|
@ -29,12 +29,17 @@ import android.os.Bundle;
|
|||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.text.InputType;
|
import android.text.InputType;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.view.*;
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuInflater;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.EditorInfo;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.RelativeLayout;
|
import android.widget.RelativeLayout;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.appcompat.widget.SearchView;
|
import androidx.appcompat.widget.SearchView;
|
||||||
import androidx.core.graphics.drawable.RoundedBitmapDrawable;
|
import androidx.core.graphics.drawable.RoundedBitmapDrawable;
|
||||||
import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
|
import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
|
||||||
@ -44,8 +49,7 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
|||||||
import androidx.work.Data;
|
import androidx.work.Data;
|
||||||
import androidx.work.OneTimeWorkRequest;
|
import androidx.work.OneTimeWorkRequest;
|
||||||
import androidx.work.WorkManager;
|
import androidx.work.WorkManager;
|
||||||
import autodagger.AutoInjector;
|
|
||||||
import butterknife.BindView;
|
|
||||||
import com.bluelinelabs.conductor.RouterTransaction;
|
import com.bluelinelabs.conductor.RouterTransaction;
|
||||||
import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler;
|
import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler;
|
||||||
import com.bluelinelabs.conductor.changehandler.TransitionChangeHandlerCompat;
|
import com.bluelinelabs.conductor.changehandler.TransitionChangeHandlerCompat;
|
||||||
@ -76,8 +80,8 @@ import com.nextcloud.talk.events.MoreMenuClickEvent;
|
|||||||
import com.nextcloud.talk.interfaces.ConversationMenuInterface;
|
import com.nextcloud.talk.interfaces.ConversationMenuInterface;
|
||||||
import com.nextcloud.talk.jobs.DeleteConversationWorker;
|
import com.nextcloud.talk.jobs.DeleteConversationWorker;
|
||||||
import com.nextcloud.talk.models.database.UserEntity;
|
import com.nextcloud.talk.models.database.UserEntity;
|
||||||
import com.nextcloud.talk.models.json.participants.Participant;
|
|
||||||
import com.nextcloud.talk.models.json.conversations.Conversation;
|
import com.nextcloud.talk.models.json.conversations.Conversation;
|
||||||
|
import com.nextcloud.talk.models.json.participants.Participant;
|
||||||
import com.nextcloud.talk.utils.ApiUtils;
|
import com.nextcloud.talk.utils.ApiUtils;
|
||||||
import com.nextcloud.talk.utils.ConductorRemapping;
|
import com.nextcloud.talk.utils.ConductorRemapping;
|
||||||
import com.nextcloud.talk.utils.DisplayUtils;
|
import com.nextcloud.talk.utils.DisplayUtils;
|
||||||
@ -86,27 +90,32 @@ import com.nextcloud.talk.utils.animations.SharedElementTransition;
|
|||||||
import com.nextcloud.talk.utils.bundle.BundleKeys;
|
import com.nextcloud.talk.utils.bundle.BundleKeys;
|
||||||
import com.nextcloud.talk.utils.database.user.UserUtils;
|
import com.nextcloud.talk.utils.database.user.UserUtils;
|
||||||
import com.nextcloud.talk.utils.preferences.AppPreferences;
|
import com.nextcloud.talk.utils.preferences.AppPreferences;
|
||||||
|
import com.uber.autodispose.AutoDispose;
|
||||||
import com.yarolegovich.lovelydialog.LovelySaveStateHandler;
|
import com.yarolegovich.lovelydialog.LovelySaveStateHandler;
|
||||||
import com.yarolegovich.lovelydialog.LovelyStandardDialog;
|
import com.yarolegovich.lovelydialog.LovelyStandardDialog;
|
||||||
import eu.davidea.fastscroller.FastScroller;
|
|
||||||
import eu.davidea.flexibleadapter.FlexibleAdapter;
|
|
||||||
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager;
|
|
||||||
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem;
|
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
|
||||||
import io.reactivex.disposables.Disposable;
|
|
||||||
import io.reactivex.schedulers.Schedulers;
|
|
||||||
import org.apache.commons.lang3.builder.CompareToBuilder;
|
import org.apache.commons.lang3.builder.CompareToBuilder;
|
||||||
import org.greenrobot.eventbus.EventBus;
|
import org.greenrobot.eventbus.EventBus;
|
||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
import org.greenrobot.eventbus.ThreadMode;
|
import org.greenrobot.eventbus.ThreadMode;
|
||||||
import org.parceler.Parcels;
|
import org.parceler.Parcels;
|
||||||
import retrofit2.HttpException;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import autodagger.AutoInjector;
|
||||||
|
import butterknife.BindView;
|
||||||
|
import eu.davidea.fastscroller.FastScroller;
|
||||||
|
import eu.davidea.flexibleadapter.FlexibleAdapter;
|
||||||
|
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager;
|
||||||
|
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem;
|
||||||
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
|
import io.reactivex.schedulers.Schedulers;
|
||||||
|
import retrofit2.HttpException;
|
||||||
|
|
||||||
@AutoInjector(NextcloudTalkApplication.class)
|
@AutoInjector(NextcloudTalkApplication.class)
|
||||||
public class ConversationsListController extends BaseController implements SearchView.OnQueryTextListener,
|
public class ConversationsListController extends BaseController implements SearchView.OnQueryTextListener,
|
||||||
FlexibleAdapter.OnItemClickListener, FlexibleAdapter.OnItemLongClickListener, FastScroller
|
FlexibleAdapter.OnItemClickListener, FlexibleAdapter.OnItemLongClickListener, FastScroller
|
||||||
@ -149,7 +158,6 @@ public class ConversationsListController extends BaseController implements Searc
|
|||||||
FloatingActionButton floatingActionButton;
|
FloatingActionButton floatingActionButton;
|
||||||
|
|
||||||
private UserEntity currentUser;
|
private UserEntity currentUser;
|
||||||
private Disposable roomsQueryDisposable;
|
|
||||||
private FlexibleAdapter<AbstractFlexibleItem> adapter;
|
private FlexibleAdapter<AbstractFlexibleItem> adapter;
|
||||||
private List<AbstractFlexibleItem> callItems = new ArrayList<>();
|
private List<AbstractFlexibleItem> callItems = new ArrayList<>();
|
||||||
|
|
||||||
@ -309,15 +317,14 @@ public class ConversationsListController extends BaseController implements Searc
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void fetchData(boolean fromBottomSheet) {
|
private void fetchData(boolean fromBottomSheet) {
|
||||||
dispose(null);
|
|
||||||
|
|
||||||
isRefreshing = true;
|
isRefreshing = true;
|
||||||
|
|
||||||
callItems = new ArrayList<>();
|
callItems = new ArrayList<>();
|
||||||
|
|
||||||
roomsQueryDisposable = ncApi.getRooms(credentials, ApiUtils.getUrlForGetRooms(currentUser.getBaseUrl()))
|
ncApi.getRooms(credentials, ApiUtils.getUrlForGetRooms(currentUser.getBaseUrl()))
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.as(AutoDispose.autoDisposable(scopeProvider))
|
||||||
.subscribe(roomsOverall -> {
|
.subscribe(roomsOverall -> {
|
||||||
|
|
||||||
if (adapterWasNull) {
|
if (adapterWasNull) {
|
||||||
@ -408,9 +415,7 @@ public class ConversationsListController extends BaseController implements Searc
|
|||||||
if (swipeRefreshLayout != null) {
|
if (swipeRefreshLayout != null) {
|
||||||
swipeRefreshLayout.setRefreshing(false);
|
swipeRefreshLayout.setRefreshing(false);
|
||||||
}
|
}
|
||||||
dispose(roomsQueryDisposable);
|
|
||||||
}, () -> {
|
}, () -> {
|
||||||
dispose(roomsQueryDisposable);
|
|
||||||
if (swipeRefreshLayout != null) {
|
if (swipeRefreshLayout != null) {
|
||||||
swipeRefreshLayout.setRefreshing(false);
|
swipeRefreshLayout.setRefreshing(false);
|
||||||
}
|
}
|
||||||
@ -471,18 +476,6 @@ public class ConversationsListController extends BaseController implements Searc
|
|||||||
.popChangeHandler(new HorizontalChangeHandler())));
|
.popChangeHandler(new HorizontalChangeHandler())));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void dispose(@Nullable Disposable disposable) {
|
|
||||||
if (disposable != null && !disposable.isDisposed()) {
|
|
||||||
disposable.dispose();
|
|
||||||
disposable = null;
|
|
||||||
} else if (disposable == null &&
|
|
||||||
roomsQueryDisposable != null && !roomsQueryDisposable.isDisposed()) {
|
|
||||||
roomsQueryDisposable.dispose();
|
|
||||||
roomsQueryDisposable = null;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSaveViewState(@NonNull View view, @NonNull Bundle outState) {
|
public void onSaveViewState(@NonNull View view, @NonNull Bundle outState) {
|
||||||
saveStateHandler.saveInstanceState(outState);
|
saveStateHandler.saveInstanceState(outState);
|
||||||
@ -505,12 +498,6 @@ public class ConversationsListController extends BaseController implements Searc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDestroy() {
|
|
||||||
super.onDestroy();
|
|
||||||
dispose(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onQueryTextChange(String newText) {
|
public boolean onQueryTextChange(String newText) {
|
||||||
if (adapter.hasNewFilter(newText) || !TextUtils.isEmpty(searchQuery)) {
|
if (adapter.hasNewFilter(newText) || !TextUtils.isEmpty(searchQuery)) {
|
||||||
|
@ -35,10 +35,9 @@ import android.view.ViewGroup;
|
|||||||
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.EditorInfo;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import autodagger.AutoInjector;
|
|
||||||
import butterknife.BindView;
|
|
||||||
import butterknife.OnClick;
|
|
||||||
import com.bluelinelabs.conductor.RouterTransaction;
|
import com.bluelinelabs.conductor.RouterTransaction;
|
||||||
import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler;
|
import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler;
|
||||||
import com.nextcloud.talk.R;
|
import com.nextcloud.talk.R;
|
||||||
@ -51,15 +50,20 @@ import com.nextcloud.talk.utils.bundle.BundleKeys;
|
|||||||
import com.nextcloud.talk.utils.database.user.UserUtils;
|
import com.nextcloud.talk.utils.database.user.UserUtils;
|
||||||
import com.nextcloud.talk.utils.preferences.AppPreferences;
|
import com.nextcloud.talk.utils.preferences.AppPreferences;
|
||||||
import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder;
|
import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder;
|
||||||
|
import com.uber.autodispose.AutoDispose;
|
||||||
|
|
||||||
|
import java.security.cert.CertificateException;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import autodagger.AutoInjector;
|
||||||
|
import butterknife.BindView;
|
||||||
|
import butterknife.OnClick;
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
import io.reactivex.disposables.Disposable;
|
|
||||||
import io.reactivex.schedulers.Schedulers;
|
import io.reactivex.schedulers.Schedulers;
|
||||||
import studio.carbonylgroup.textfieldboxes.ExtendedEditText;
|
import studio.carbonylgroup.textfieldboxes.ExtendedEditText;
|
||||||
import studio.carbonylgroup.textfieldboxes.TextFieldBoxes;
|
import studio.carbonylgroup.textfieldboxes.TextFieldBoxes;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import java.security.cert.CertificateException;
|
|
||||||
|
|
||||||
@AutoInjector(NextcloudTalkApplication.class)
|
@AutoInjector(NextcloudTalkApplication.class)
|
||||||
public class ServerSelectionController extends BaseController {
|
public class ServerSelectionController extends BaseController {
|
||||||
|
|
||||||
@ -85,8 +89,6 @@ public class ServerSelectionController extends BaseController {
|
|||||||
@Inject
|
@Inject
|
||||||
AppPreferences appPreferences;
|
AppPreferences appPreferences;
|
||||||
|
|
||||||
private Disposable statusQueryDisposable;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected View inflateView(@NonNull LayoutInflater inflater, @NonNull ViewGroup container) {
|
protected View inflateView(@NonNull LayoutInflater inflater, @NonNull ViewGroup container) {
|
||||||
return inflater.inflate(R.layout.controller_server_selection, container, false);
|
return inflater.inflate(R.layout.controller_server_selection, container, false);
|
||||||
@ -220,8 +222,6 @@ public class ServerSelectionController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void checkServerAndProceed() {
|
private void checkServerAndProceed() {
|
||||||
dispose();
|
|
||||||
|
|
||||||
String url = serverEntry.getText().toString().trim();
|
String url = serverEntry.getText().toString().trim();
|
||||||
|
|
||||||
serverEntry.setEnabled(false);
|
serverEntry.setEnabled(false);
|
||||||
@ -245,9 +245,10 @@ public class ServerSelectionController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void checkServer(String queryUrl, boolean checkForcedHttps) {
|
private void checkServer(String queryUrl, boolean checkForcedHttps) {
|
||||||
statusQueryDisposable = ncApi.getServerStatus(queryUrl)
|
ncApi.getServerStatus(queryUrl)
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.as(AutoDispose.autoDisposable(scopeProvider))
|
||||||
.subscribe(status -> {
|
.subscribe(status -> {
|
||||||
String productName = getResources().getString(R.string.nc_server_product_name);
|
String productName = getResources().getString(R.string.nc_server_product_name);
|
||||||
|
|
||||||
@ -307,8 +308,6 @@ public class ServerSelectionController extends BaseController {
|
|||||||
certTextView.setVisibility(View.VISIBLE);
|
certTextView.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
toggleProceedButton(false);
|
toggleProceedButton(false);
|
||||||
|
|
||||||
dispose();
|
|
||||||
}
|
}
|
||||||
}, () -> {
|
}, () -> {
|
||||||
progressBar.setVisibility(View.INVISIBLE);
|
progressBar.setVisibility(View.INVISIBLE);
|
||||||
@ -316,7 +315,6 @@ public class ServerSelectionController extends BaseController {
|
|||||||
providersTextView.setVisibility(View.VISIBLE);
|
providersTextView.setVisibility(View.VISIBLE);
|
||||||
certTextView.setVisibility(View.VISIBLE);
|
certTextView.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
dispose();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -366,20 +364,4 @@ public class ServerSelectionController extends BaseController {
|
|||||||
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
|
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDestroy() {
|
|
||||||
super.onDestroy();
|
|
||||||
dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void dispose() {
|
|
||||||
if (statusQueryDisposable != null && !statusQueryDisposable.isDisposed()) {
|
|
||||||
statusQueryDisposable.dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
statusQueryDisposable = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -67,6 +67,7 @@ import com.nextcloud.talk.utils.database.user.UserUtils;
|
|||||||
import com.nextcloud.talk.utils.preferences.AppPreferences;
|
import com.nextcloud.talk.utils.preferences.AppPreferences;
|
||||||
import com.nextcloud.talk.utils.preferences.MagicUserInputModule;
|
import com.nextcloud.talk.utils.preferences.MagicUserInputModule;
|
||||||
import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder;
|
import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder;
|
||||||
|
import com.uber.autodispose.AutoDispose;
|
||||||
import com.yarolegovich.lovelydialog.LovelySaveStateHandler;
|
import com.yarolegovich.lovelydialog.LovelySaveStateHandler;
|
||||||
import com.yarolegovich.lovelydialog.LovelyStandardDialog;
|
import com.yarolegovich.lovelydialog.LovelyStandardDialog;
|
||||||
import com.yarolegovich.mp.*;
|
import com.yarolegovich.mp.*;
|
||||||
@ -156,9 +157,6 @@ public class SettingsController extends BaseController {
|
|||||||
private OnPreferenceValueChangedListener<String> screenLockTimeoutChangeListener;
|
private OnPreferenceValueChangedListener<String> screenLockTimeoutChangeListener;
|
||||||
private OnPreferenceValueChangedListener<String> themeChangeListener;
|
private OnPreferenceValueChangedListener<String> themeChangeListener;
|
||||||
|
|
||||||
private Disposable profileQueryDisposable;
|
|
||||||
private Disposable dbQueryDisposable;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected View inflateView(@NonNull LayoutInflater inflater, @NonNull ViewGroup container) {
|
protected View inflateView(@NonNull LayoutInflater inflater, @NonNull ViewGroup container) {
|
||||||
return inflater.inflate(R.layout.controller_settings, container, false);
|
return inflater.inflate(R.layout.controller_settings, container, false);
|
||||||
@ -391,7 +389,6 @@ public class SettingsController extends BaseController {
|
|||||||
getActionBar().show();
|
getActionBar().show();
|
||||||
}
|
}
|
||||||
|
|
||||||
dispose(null);
|
|
||||||
getCurrentUser();
|
getCurrentUser();
|
||||||
|
|
||||||
if (!TextUtils.isEmpty(currentUser.getClientCertificate())) {
|
if (!TextUtils.isEmpty(currentUser.getClientCertificate())) {
|
||||||
@ -500,10 +497,11 @@ public class SettingsController extends BaseController {
|
|||||||
|
|
||||||
loadAvatarImage();
|
loadAvatarImage();
|
||||||
|
|
||||||
profileQueryDisposable = ncApi.getUserProfile(credentials,
|
ncApi.getUserProfile(credentials,
|
||||||
ApiUtils.getUrlForUserProfile(currentUser.getBaseUrl()))
|
ApiUtils.getUrlForUserProfile(currentUser.getBaseUrl()))
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.as(AutoDispose.autoDisposable(scopeProvider))
|
||||||
.subscribe(userProfileOverall -> {
|
.subscribe(userProfileOverall -> {
|
||||||
|
|
||||||
String displayName = null;
|
String displayName = null;
|
||||||
@ -520,23 +518,22 @@ public class SettingsController extends BaseController {
|
|||||||
|
|
||||||
if ((!TextUtils.isEmpty(displayName) && !displayName.equals(currentUser.getDisplayName()))) {
|
if ((!TextUtils.isEmpty(displayName) && !displayName.equals(currentUser.getDisplayName()))) {
|
||||||
|
|
||||||
dbQueryDisposable = userUtils.createOrUpdateUser(null,
|
userUtils.createOrUpdateUser(null,
|
||||||
null,
|
null,
|
||||||
null, displayName, null, null,
|
null, displayName, null, null,
|
||||||
null, currentUser.getId(), null, null, null)
|
null, currentUser.getId(), null, null, null)
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.as(AutoDispose.autoDisposable(scopeProvider))
|
||||||
.subscribe(userEntityResult -> {
|
.subscribe(userEntityResult -> {
|
||||||
displayNameTextView.setText(userEntityResult.getDisplayName());
|
displayNameTextView.setText(userEntityResult.getDisplayName());
|
||||||
},
|
},
|
||||||
throwable -> {
|
throwable -> {
|
||||||
dispose(dbQueryDisposable);
|
}, () -> Log.d(TAG, ""));
|
||||||
}, () -> dispose(dbQueryDisposable));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}, throwable -> {
|
}, throwable -> {
|
||||||
dispose(profileQueryDisposable);
|
}, () -> Log.d(TAG, ""));
|
||||||
}, () -> dispose(profileQueryDisposable));
|
|
||||||
|
|
||||||
|
|
||||||
removeAccountButton.addPreferenceClickListener(view1 -> {
|
removeAccountButton.addPreferenceClickListener(view1 -> {
|
||||||
@ -660,27 +657,6 @@ public class SettingsController extends BaseController {
|
|||||||
settingsScreen.findViewById(R.id.settings_proxy_password_edit).setVisibility(View.GONE);
|
settingsScreen.findViewById(R.id.settings_proxy_password_edit).setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void dispose(@Nullable Disposable disposable) {
|
|
||||||
if (disposable != null && !disposable.isDisposed()) {
|
|
||||||
disposable.dispose();
|
|
||||||
} else if (disposable == null) {
|
|
||||||
|
|
||||||
if (profileQueryDisposable != null && !profileQueryDisposable.isDisposed()) {
|
|
||||||
profileQueryDisposable.dispose();
|
|
||||||
profileQueryDisposable = null;
|
|
||||||
} else if (profileQueryDisposable != null) {
|
|
||||||
profileQueryDisposable = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dbQueryDisposable != null && !dbQueryDisposable.isDisposed()) {
|
|
||||||
dbQueryDisposable.dispose();
|
|
||||||
dbQueryDisposable = null;
|
|
||||||
} else if (dbQueryDisposable != null) {
|
|
||||||
dbQueryDisposable = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getTitle() {
|
protected String getTitle() {
|
||||||
return getResources().getString(R.string.nc_settings);
|
return getResources().getString(R.string.nc_settings);
|
||||||
|
@ -47,6 +47,8 @@ import com.nextcloud.talk.models.json.participants.Participant;
|
|||||||
import com.nextcloud.talk.utils.AccountUtils;
|
import com.nextcloud.talk.utils.AccountUtils;
|
||||||
import com.nextcloud.talk.utils.bundle.BundleKeys;
|
import com.nextcloud.talk.utils.bundle.BundleKeys;
|
||||||
import com.nextcloud.talk.utils.database.user.UserUtils;
|
import com.nextcloud.talk.utils.database.user.UserUtils;
|
||||||
|
import com.uber.autodispose.AutoDispose;
|
||||||
|
|
||||||
import eu.davidea.flexibleadapter.FlexibleAdapter;
|
import eu.davidea.flexibleadapter.FlexibleAdapter;
|
||||||
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager;
|
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager;
|
||||||
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem;
|
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem;
|
||||||
@ -97,6 +99,7 @@ public class SwitchAccountController extends BaseController {
|
|||||||
userUtils.createOrUpdateUser(null,
|
userUtils.createOrUpdateUser(null,
|
||||||
null, null, null,
|
null, null, null,
|
||||||
null, true, null, userEntity.getId(), null, null, null)
|
null, true, null, userEntity.getId(), null, null, null)
|
||||||
|
.as(AutoDispose.autoDisposable(scopeProvider))
|
||||||
.subscribe(new Observer<UserEntity>() {
|
.subscribe(new Observer<UserEntity>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSubscribe(Disposable d) {
|
public void onSubscribe(Disposable d) {
|
||||||
|
@ -55,6 +55,7 @@ import com.nextcloud.talk.utils.database.user.UserUtils;
|
|||||||
import com.nextcloud.talk.utils.preferences.AppPreferences;
|
import com.nextcloud.talk.utils.preferences.AppPreferences;
|
||||||
import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder;
|
import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder;
|
||||||
import com.nextcloud.talk.utils.ssl.MagicTrustManager;
|
import com.nextcloud.talk.utils.ssl.MagicTrustManager;
|
||||||
|
import com.uber.autodispose.AutoDispose;
|
||||||
|
|
||||||
import de.cotech.hw.fido.WebViewFidoBridge;
|
import de.cotech.hw.fido.WebViewFidoBridge;
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
@ -390,6 +391,7 @@ public class WebViewLoginController extends BaseController {
|
|||||||
null, currentUser.getId(), null, appPreferences.getTemporaryClientCertAlias(), null)
|
null, currentUser.getId(), null, appPreferences.getTemporaryClientCertAlias(), null)
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.as(AutoDispose.autoDisposable(scopeProvider))
|
||||||
.subscribe(userEntity -> {
|
.subscribe(userEntity -> {
|
||||||
if (finalMessageType != null) {
|
if (finalMessageType != null) {
|
||||||
ApplicationWideMessageHolder.getInstance().setMessageType(finalMessageType);
|
ApplicationWideMessageHolder.getInstance().setMessageType(finalMessageType);
|
||||||
|
@ -33,6 +33,7 @@ import androidx.annotation.RequiresApi;
|
|||||||
import androidx.appcompat.app.ActionBar;
|
import androidx.appcompat.app.ActionBar;
|
||||||
import autodagger.AutoInjector;
|
import autodagger.AutoInjector;
|
||||||
import com.bluelinelabs.conductor.Controller;
|
import com.bluelinelabs.conductor.Controller;
|
||||||
|
import com.bluelinelabs.conductor.autodispose.ControllerScopeProvider;
|
||||||
import com.nextcloud.talk.application.NextcloudTalkApplication;
|
import com.nextcloud.talk.application.NextcloudTalkApplication;
|
||||||
import com.nextcloud.talk.controllers.AccountVerificationController;
|
import com.nextcloud.talk.controllers.AccountVerificationController;
|
||||||
import com.nextcloud.talk.controllers.ServerSelectionController;
|
import com.nextcloud.talk.controllers.ServerSelectionController;
|
||||||
@ -40,6 +41,7 @@ import com.nextcloud.talk.controllers.SwitchAccountController;
|
|||||||
import com.nextcloud.talk.controllers.WebViewLoginController;
|
import com.nextcloud.talk.controllers.WebViewLoginController;
|
||||||
import com.nextcloud.talk.controllers.base.providers.ActionBarProvider;
|
import com.nextcloud.talk.controllers.base.providers.ActionBarProvider;
|
||||||
import com.nextcloud.talk.utils.preferences.AppPreferences;
|
import com.nextcloud.talk.utils.preferences.AppPreferences;
|
||||||
|
import com.uber.autodispose.lifecycle.LifecycleScopeProvider;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -49,6 +51,9 @@ import java.util.List;
|
|||||||
public abstract class BaseController extends ButterKnifeController {
|
public abstract class BaseController extends ButterKnifeController {
|
||||||
|
|
||||||
private static final String TAG = "BaseController";
|
private static final String TAG = "BaseController";
|
||||||
|
|
||||||
|
public final LifecycleScopeProvider scopeProvider = ControllerScopeProvider.from(this);
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
AppPreferences appPreferences;
|
AppPreferences appPreferences;
|
||||||
@Inject
|
@Inject
|
||||||
|
@ -35,6 +35,7 @@ buildscript {
|
|||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:3.5.1'
|
classpath 'com.android.tools.build:gradle:3.5.1'
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}"
|
||||||
|
classpath "io.realm:realm-gradle-plugin:6.0.0"
|
||||||
|
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
// in the individual module build.gradle files
|
// in the individual module build.gradle files
|
||||||
|
Loading…
Reference in New Issue
Block a user