diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml
deleted file mode 100644
index a0ccdcbf2..000000000
--- a/.idea/codeStyleSettings.xml
+++ /dev/null
@@ -1,229 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index a1757ae52..000000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/copyright/GPL3.xml b/.idea/copyright/GPL3.xml
deleted file mode 100644
index 421c5b53b..000000000
--- a/.idea/copyright/GPL3.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml
deleted file mode 100644
index ac4072ce8..000000000
--- a/.idea/copyright/profiles_settings.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
deleted file mode 100644
index 97626ba45..000000000
--- a/.idea/encodings.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index f5c6d9eb6..7bfef59df 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,9 @@
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 4de83c3f1..a4d92409c 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,10 +2,8 @@
-
-
\ No newline at end of file
diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/MentionAutocompleteItem.kt b/app/src/main/java/com/nextcloud/talk/adapters/items/MentionAutocompleteItem.kt
index b82feffff..6d0815423 100644
--- a/app/src/main/java/com/nextcloud/talk/adapters/items/MentionAutocompleteItem.kt
+++ b/app/src/main/java/com/nextcloud/talk/adapters/items/MentionAutocompleteItem.kt
@@ -27,6 +27,7 @@ import coil.transform.CircleCropTransformation
import com.nextcloud.talk.R
import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.models.database.UserEntity
+import com.nextcloud.talk.newarch.local.models.UserNgEntity
import com.nextcloud.talk.utils.ApiUtils
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
@@ -39,7 +40,7 @@ class MentionAutocompleteItem(
val objectId: String?,
val displayName: String?,
var source: String?,
- private val currentUser: UserEntity
+ private val currentUser: UserNgEntity
) : AbstractFlexibleItem(), IFilterable {
override fun equals(other: Any?): Boolean {
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java b/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java
index a9ebdf1fc..4d5ee737e 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java
+++ b/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java
@@ -309,18 +309,14 @@ public class AccountVerificationController extends BaseController {
@Override
public void onNext(UserProfileOverall userProfileOverall) {
String displayName = null;
- if (!TextUtils.isEmpty(userProfileOverall.getOcs().getData()
- .getDisplayName())) {
- displayName = userProfileOverall.getOcs().getData()
- .getDisplayName();
- } else if (!TextUtils.isEmpty(userProfileOverall.getOcs().getData()
- .getDisplayNameAlt())) {
- displayName = userProfileOverall.getOcs().getData()
- .getDisplayNameAlt();
+ if (!TextUtils.isEmpty(userProfileOverall.ocs.data.displayName)) {
+ displayName = userProfileOverall.ocs.data.displayName;
+ } else if (!TextUtils.isEmpty(userProfileOverall.ocs.data.displayNameAlt)) {
+ displayName = userProfileOverall.ocs.data.displayNameAlt;
}
if (!TextUtils.isEmpty(displayName)) {
- storeProfile(displayName, userProfileOverall.getOcs().getData().getUserId());
+ storeProfile(displayName, userProfileOverall.ocs.data.userId);
} else {
if (getActivity() != null) {
getActivity().runOnUiThread(
@@ -356,28 +352,28 @@ public class AccountVerificationController extends BaseController {
@Subscribe(threadMode = ThreadMode.BACKGROUND)
public void onMessageEvent(EventStatus eventStatus) {
- if (eventStatus.getEventType().equals(EventStatus.EventType.PUSH_REGISTRATION)) {
- if (internalAccountId == eventStatus.getUserId()
- && !eventStatus.isAllGood()
+ if (EventStatus.EventType.PUSH_REGISTRATION == eventStatus.eventType) {
+ if (internalAccountId == eventStatus.userId
+ && !eventStatus.allGood
&& getActivity() != null) {
getActivity().runOnUiThread(
() -> progressText.setText(progressText.getText().toString() + "\n" +
getResources().getString(R.string.nc_push_disabled)));
}
fetchAndStoreCapabilities();
- } else if (eventStatus.getEventType().equals(EventStatus.EventType.CAPABILITIES_FETCH)) {
- if (internalAccountId == eventStatus.getUserId() && !eventStatus.isAllGood()) {
+ } else if (EventStatus.EventType.CAPABILITIES_FETCH == eventStatus.eventType) {
+ if (internalAccountId == eventStatus.userId && !eventStatus.allGood) {
if (getActivity() != null) {
getActivity().runOnUiThread(
() -> progressText.setText(progressText.getText().toString() + "\n" +
getResources().getString(R.string.nc_capabilities_failed)));
}
abortVerification();
- } else if (internalAccountId == eventStatus.getUserId() && eventStatus.isAllGood()) {
+ } else if (internalAccountId == eventStatus.userId && eventStatus.allGood) {
fetchAndStoreExternalSignalingSettings();
}
- } else if (eventStatus.getEventType().equals(EventStatus.EventType.SIGNALING_SETTINGS)) {
- if (internalAccountId == eventStatus.getUserId() && !eventStatus.isAllGood()) {
+ } else if (EventStatus.EventType.SIGNALING_SETTINGS == eventStatus.eventType) {
+ if (internalAccountId == eventStatus.userId && !eventStatus.allGood) {
if (getActivity() != null) {
getActivity().runOnUiThread(
() -> progressText.setText(progressText.getText().toString() + "\n" +
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/CallController.kt b/app/src/main/java/com/nextcloud/talk/controllers/CallController.kt
index 4e600c973..3adf42e3d 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/CallController.kt
+++ b/app/src/main/java/com/nextcloud/talk/controllers/CallController.kt
@@ -1259,8 +1259,8 @@ class CallController(args: Bundle) : BaseController() {
if (webSocketClient == null) {
webSocketClient = WebSocketConnectionHelper.getExternalSignalingInstanceForServer(
- externalSignalingServer!!.externalSignalingServer,
- conversationUser, externalSignalingServer!!.externalSignalingTicket,
+ externalSignalingServer!!.externalSignalingServer!!,
+ conversationUser!!, externalSignalingServer!!.externalSignalingTicket,
TextUtils.isEmpty(credentials)
)
} else {
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt
index accddef5a..8da5c7bf5 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt
+++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt
@@ -650,7 +650,7 @@ class ChatController(args: Bundle) : BaseController(), MessagesListAdapter
private fun setupMentionAutocomplete() {
val elevation = 6f
val backgroundDrawable = ColorDrawable(resources!!.getColor(R.color.bg_default))
- val presenter = MentionAutocompletePresenter(applicationContext, roomToken)
+ val presenter = MentionAutocompletePresenter(applicationContext!!, roomToken)
val callback = MentionAutocompleteCallback(
activity,
conversationUser, messageInput
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt
index 327bc41a3..238c1a90b 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt
+++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt
@@ -756,8 +756,7 @@ class ConversationInfoController(args: Bundle) : BaseController(),
putExtra(
Intent.EXTRA_TEXT, ShareUtils.getStringForIntent(
- context, conversation!!.password,
- userUtils, conversation
+ context, conversation!!.password, conversation!!
)
)
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.java b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.java
index 1366b594e..bc0cc10af 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.java
+++ b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.java
@@ -173,7 +173,7 @@ public class EntryMenuController extends BaseController {
} else if (operationCode == 7) {
if (getActivity() != null) {
shareIntent.putExtra(Intent.EXTRA_TEXT, ShareUtils.getStringForIntent(getActivity(),
- editText.getText().toString(), userUtils, conversation));
+ editText.getText().toString(), conversation));
Intent intent = new Intent(shareIntent);
intent.setComponent(new ComponentName(packageName, name));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
diff --git a/app/src/main/java/com/nextcloud/talk/events/EventStatus.java b/app/src/main/java/com/nextcloud/talk/events/EventStatus.java
index d2a60f35d..f246aa182 100644
--- a/app/src/main/java/com/nextcloud/talk/events/EventStatus.java
+++ b/app/src/main/java/com/nextcloud/talk/events/EventStatus.java
@@ -24,9 +24,9 @@ import lombok.Data;
@Data
public class EventStatus {
- private long userId;
- private EventType eventType;
- private boolean allGood;
+ public long userId;
+ public EventType eventType;
+ public boolean allGood;
public EventStatus(long userId, EventType eventType, boolean allGood) {
this.userId = userId;
diff --git a/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java b/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java
deleted file mode 100644
index 0d29d4c45..000000000
--- a/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Nextcloud Talk application
- *
- * @author Mario Danic
- * Copyright (C) 2017-2019 Mario Danic
- *
- * 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 .
- */
-
-package com.nextcloud.talk.jobs;
-
-import android.content.Context;
-import androidx.annotation.NonNull;
-import androidx.work.Data;
-import androidx.work.Worker;
-import androidx.work.WorkerParameters;
-import autodagger.AutoInjector;
-import com.nextcloud.talk.api.NcApi;
-import com.nextcloud.talk.application.NextcloudTalkApplication;
-import com.nextcloud.talk.events.EventStatus;
-import com.nextcloud.talk.models.RetrofitBucket;
-import com.nextcloud.talk.models.database.UserEntity;
-import com.nextcloud.talk.utils.ApiUtils;
-import com.nextcloud.talk.utils.bundle.BundleKeys;
-import com.nextcloud.talk.utils.database.user.UserUtils;
-import io.reactivex.schedulers.Schedulers;
-import javax.inject.Inject;
-import org.greenrobot.eventbus.EventBus;
-
-@AutoInjector(NextcloudTalkApplication.class)
-public class AddParticipantsToConversation extends Worker {
- @Inject
- NcApi ncApi;
-
- @Inject
- UserUtils userUtils;
-
- @Inject
- EventBus eventBus;
-
- public AddParticipantsToConversation(@NonNull Context context,
- @NonNull WorkerParameters workerParams) {
- super(context, workerParams);
- NextcloudTalkApplication.Companion.getSharedApplication()
- .getComponentApplication()
- .inject(this);
- }
-
- @NonNull
- @Override
- public Result doWork() {
- Data data = getInputData();
- String[] selectedUserIds = data.getStringArray(BundleKeys.INSTANCE.getKEY_SELECTED_USERS());
- String[] selectedGroupIds = data.getStringArray(BundleKeys.INSTANCE.getKEY_SELECTED_GROUPS());
- UserEntity user = userUtils.getUserWithInternalId(
- data.getLong(BundleKeys.INSTANCE.getKEY_INTERNAL_USER_ID(), -1));
- String conversationToken = data.getString(BundleKeys.INSTANCE.getKEY_TOKEN());
- String credentials = ApiUtils.getCredentials(user.getUsername(), user.getToken());
-
- RetrofitBucket retrofitBucket;
- for (String userId : selectedUserIds) {
- retrofitBucket =
- ApiUtils.getRetrofitBucketForAddParticipant(user.getBaseUrl(), conversationToken,
- userId);
-
- ncApi.addParticipant(credentials, retrofitBucket.getUrl(), retrofitBucket.getQueryMap())
- .subscribeOn(Schedulers.io())
- .blockingSubscribe();
- }
-
- for (String groupId : selectedGroupIds) {
- retrofitBucket =
- ApiUtils.getRetrofitBucketForAddGroupParticipant(user.getBaseUrl(), conversationToken,
- groupId);
-
- ncApi.addParticipant(credentials, retrofitBucket.getUrl(), retrofitBucket.getQueryMap())
- .subscribeOn(Schedulers.io())
- .blockingSubscribe();
- }
-
- eventBus.post(new EventStatus(user.getId(), EventStatus.EventType.PARTICIPANTS_UPDATE, true));
- return Result.success();
- }
-}
diff --git a/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.kt b/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.kt
new file mode 100644
index 000000000..564ebcf3c
--- /dev/null
+++ b/app/src/main/java/com/nextcloud/talk/jobs/AddParticipantsToConversation.kt
@@ -0,0 +1,86 @@
+/*
+ * Nextcloud Talk application
+ *
+ * @author Mario Danic
+ * Copyright (C) 2017-2019 Mario Danic
+ *
+ * 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 .
+ */
+package com.nextcloud.talk.jobs
+
+import android.content.Context
+import androidx.work.CoroutineWorker
+import androidx.work.Worker
+import androidx.work.WorkerParameters
+import autodagger.AutoInjector
+import com.nextcloud.talk.api.NcApi
+import com.nextcloud.talk.application.NextcloudTalkApplication
+import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
+import com.nextcloud.talk.events.EventStatus
+import com.nextcloud.talk.models.RetrofitBucket
+import com.nextcloud.talk.newarch.domain.repository.offline.UsersRepository
+import com.nextcloud.talk.utils.ApiUtils
+import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID
+import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_SELECTED_GROUPS
+import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_SELECTED_USERS
+import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_TOKEN
+import com.nextcloud.talk.utils.database.user.UserUtils
+import io.reactivex.schedulers.Schedulers
+import org.greenrobot.eventbus.EventBus
+import org.koin.core.KoinComponent
+import org.koin.core.inject
+import javax.inject.Inject
+
+@AutoInjector(NextcloudTalkApplication::class)
+class AddParticipantsToConversation(context: Context,
+ workerParams: WorkerParameters) : CoroutineWorker(context, workerParams), KoinComponent {
+ @JvmField
+ @Inject
+ var ncApi: NcApi? = null
+
+ val eventBus: EventBus by inject()
+ val usersRepository: UsersRepository by inject()
+
+ override suspend fun doWork(): Result {
+ val data = inputData
+ val selectedUserIds = data.getStringArray(KEY_SELECTED_USERS)
+ val selectedGroupIds = data.getStringArray(KEY_SELECTED_GROUPS)
+ val user = usersRepository.getUserWithId(data.getLong(KEY_INTERNAL_USER_ID, -1))
+ val conversationToken = data.getString(KEY_TOKEN)
+ val credentials = ApiUtils.getCredentials(user.username, user.token)
+ var retrofitBucket: RetrofitBucket
+ for (userId in selectedUserIds!!) {
+ retrofitBucket = ApiUtils.getRetrofitBucketForAddParticipant(user.baseUrl, conversationToken,
+ userId)
+ ncApi!!.addParticipant(credentials, retrofitBucket.url, retrofitBucket.queryMap)
+ .subscribeOn(Schedulers.io())
+ .blockingSubscribe()
+ }
+ for (groupId in selectedGroupIds!!) {
+ retrofitBucket = ApiUtils.getRetrofitBucketForAddGroupParticipant(user.baseUrl, conversationToken,
+ groupId)
+ ncApi!!.addParticipant(credentials, retrofitBucket.url, retrofitBucket.queryMap)
+ .subscribeOn(Schedulers.io())
+ .blockingSubscribe()
+ }
+ eventBus.post(EventStatus(user.id, EventStatus.EventType.PARTICIPANTS_UPDATE, true))
+ return Result.success()
+ }
+
+ init {
+ sharedApplication
+ ?.componentApplication
+ ?.inject(this)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/nextcloud/talk/jobs/CapabilitiesWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/CapabilitiesWorker.java
deleted file mode 100644
index 9e86808e7..000000000
--- a/app/src/main/java/com/nextcloud/talk/jobs/CapabilitiesWorker.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Nextcloud Talk application
- *
- * @author Mario Danic
- * Copyright (C) 2017-2018 Mario Danic
- *
- * 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 .
- */
-
-package com.nextcloud.talk.jobs;
-
-import android.content.Context;
-import android.util.Log;
-import androidx.annotation.NonNull;
-import androidx.work.Data;
-import androidx.work.Worker;
-import androidx.work.WorkerParameters;
-import autodagger.AutoInjector;
-import com.bluelinelabs.logansquare.LoganSquare;
-import com.nextcloud.talk.api.NcApi;
-import com.nextcloud.talk.application.NextcloudTalkApplication;
-import com.nextcloud.talk.events.EventStatus;
-import com.nextcloud.talk.models.database.UserEntity;
-import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall;
-import com.nextcloud.talk.utils.ApiUtils;
-import com.nextcloud.talk.utils.bundle.BundleKeys;
-import com.nextcloud.talk.utils.database.user.UserUtils;
-import io.reactivex.Observer;
-import io.reactivex.disposables.Disposable;
-import java.io.IOException;
-import java.net.CookieManager;
-import java.util.ArrayList;
-import java.util.List;
-import javax.inject.Inject;
-import okhttp3.JavaNetCookieJar;
-import okhttp3.OkHttpClient;
-import org.greenrobot.eventbus.EventBus;
-import retrofit2.Retrofit;
-
-@AutoInjector(NextcloudTalkApplication.class)
-public class CapabilitiesWorker extends Worker {
- public static final String TAG = "CapabilitiesWorker";
-
- @Inject
- UserUtils userUtils;
-
- @Inject
- Retrofit retrofit;
-
- @Inject
- EventBus eventBus;
-
- @Inject
- OkHttpClient okHttpClient;
-
- NcApi ncApi;
-
- public CapabilitiesWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
- super(context, workerParams);
- }
-
- private void updateUser(CapabilitiesOverall capabilitiesOverall, UserEntity internalUserEntity) {
- try {
- userUtils.createOrUpdateUser(null, null,
- null, null,
- null, null, null, internalUserEntity.getId(),
- LoganSquare.serialize(capabilitiesOverall.getOcs().getData().getCapabilities()), null,
- null)
- .blockingSubscribe(new Observer() {
- @Override
- public void onSubscribe(Disposable d) {
-
- }
-
- @Override
- public void onNext(UserEntity userEntity) {
- eventBus.post(new EventStatus(userEntity.getId(),
- EventStatus.EventType.CAPABILITIES_FETCH, true));
- }
-
- @Override
- public void onError(Throwable e) {
- eventBus.post(new EventStatus(internalUserEntity.getId(),
- EventStatus.EventType.CAPABILITIES_FETCH, false));
- }
-
- @Override
- public void onComplete() {
-
- }
- });
- } catch (IOException e) {
- Log.e(TAG, "Failed to create or update user");
- }
- }
-
- @NonNull
- @Override
- public Result doWork() {
- NextcloudTalkApplication.Companion.getSharedApplication()
- .getComponentApplication()
- .inject(this);
-
- Data data = getInputData();
-
- long internalUserId = data.getLong(BundleKeys.INSTANCE.getKEY_INTERNAL_USER_ID(), -1);
-
- UserEntity userEntity;
- List userEntityObjectList = new ArrayList();
-
- if (internalUserId == -1
- || (userEntity = userUtils.getUserWithInternalId(internalUserId)) == null) {
- userEntityObjectList = userUtils.getUsers();
- } else {
- userEntityObjectList.add(userEntity);
- }
-
- for (Object userEntityObject : userEntityObjectList) {
- UserEntity internalUserEntity = (UserEntity) userEntityObject;
-
- ncApi = retrofit.newBuilder().client(okHttpClient.newBuilder().cookieJar(new
- JavaNetCookieJar(new CookieManager())).build()).build().create(NcApi.class);
-
- ncApi.getCapabilities(ApiUtils.getCredentials(internalUserEntity.getUsername(),
- internalUserEntity.getToken()),
- ApiUtils.getUrlForCapabilities(internalUserEntity.getBaseUrl()))
- .retry(3)
- .blockingSubscribe(new Observer() {
- @Override
- public void onSubscribe(Disposable d) {
-
- }
-
- @Override
- public void onNext(CapabilitiesOverall capabilitiesOverall) {
- updateUser(capabilitiesOverall, internalUserEntity);
- }
-
- @Override
- public void onError(Throwable e) {
- eventBus.post(new EventStatus(internalUserEntity.getId(),
- EventStatus.EventType.CAPABILITIES_FETCH, false));
- }
-
- @Override
- public void onComplete() {
-
- }
- });
- }
-
- return Result.success();
- }
-}
diff --git a/app/src/main/java/com/nextcloud/talk/jobs/CapabilitiesWorker.kt b/app/src/main/java/com/nextcloud/talk/jobs/CapabilitiesWorker.kt
new file mode 100644
index 000000000..2ee4d936f
--- /dev/null
+++ b/app/src/main/java/com/nextcloud/talk/jobs/CapabilitiesWorker.kt
@@ -0,0 +1,103 @@
+/*
+ * Nextcloud Talk application
+ *
+ * @author Mario Danic
+ * Copyright (C) 2017-2018 Mario Danic
+ *
+ * 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 .
+ */
+package com.nextcloud.talk.jobs
+
+import android.content.Context
+import androidx.work.CoroutineWorker
+import androidx.work.WorkerParameters
+import autodagger.AutoInjector
+import com.nextcloud.talk.api.NcApi
+import com.nextcloud.talk.application.NextcloudTalkApplication
+import com.nextcloud.talk.events.EventStatus
+import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall
+import com.nextcloud.talk.newarch.domain.repository.offline.UsersRepository
+import com.nextcloud.talk.newarch.local.models.UserNgEntity
+import com.nextcloud.talk.utils.ApiUtils
+import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID
+import io.reactivex.Observer
+import io.reactivex.disposables.Disposable
+import kotlinx.coroutines.runBlocking
+import okhttp3.JavaNetCookieJar
+import okhttp3.OkHttpClient
+import org.greenrobot.eventbus.EventBus
+import org.koin.core.KoinComponent
+import org.koin.core.inject
+import retrofit2.Retrofit
+import java.net.CookieManager
+import java.util.*
+
+@AutoInjector(NextcloudTalkApplication::class)
+class CapabilitiesWorker(context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams), KoinComponent {
+ val retrofit: Retrofit by inject()
+ val eventBus: EventBus by inject()
+ val okHttpClient: OkHttpClient by inject()
+ val usersRepository: UsersRepository by inject()
+ var ncApi: NcApi? = null
+
+ private fun updateUser(capabilitiesOverall: CapabilitiesOverall, internalUserEntity: UserNgEntity) {
+ internalUserEntity.capabilities = capabilitiesOverall.ocs.data.capabilities
+ runBlocking {
+ val result = usersRepository.updateUser(internalUserEntity)
+ eventBus!!.post(EventStatus(internalUserEntity.id,
+ EventStatus.EventType.CAPABILITIES_FETCH, result > 0))
+ }
+
+ }
+
+ override suspend fun doWork(): Result {
+ val data = inputData
+ val internalUserId = data.getLong(KEY_INTERNAL_USER_ID, -1)
+ var userEntity: UserNgEntity?
+ var userEntityObjectList: MutableList = ArrayList()
+ if (internalUserId == -1L || usersRepository.getUserWithId(internalUserId) == null) {
+ userEntityObjectList = usersRepository.getUsers().toMutableList()
+ } else {
+ userEntity = usersRepository.getUserWithId(internalUserId)
+ userEntityObjectList.add(userEntity)
+ }
+
+ for (userEntityObject in userEntityObjectList) {
+ val internalUserEntity = userEntityObject
+ ncApi = retrofit.newBuilder().client(okHttpClient.newBuilder().cookieJar(JavaNetCookieJar(CookieManager())).build()).build().create(NcApi::class.java)
+ ncApi!!.getCapabilities(ApiUtils.getCredentials(internalUserEntity.username,
+ internalUserEntity.token),
+ ApiUtils.getUrlForCapabilities(internalUserEntity.baseUrl))
+ .retry(3)
+ .blockingSubscribe(object : Observer {
+ override fun onSubscribe(d: Disposable) {}
+ override fun onNext(capabilitiesOverall: CapabilitiesOverall) {
+ updateUser(capabilitiesOverall, internalUserEntity)
+ }
+
+ override fun onError(e: Throwable) {
+ eventBus.post(EventStatus(internalUserEntity.id,
+ EventStatus.EventType.CAPABILITIES_FETCH, false))
+ }
+
+ override fun onComplete() {}
+ })
+ }
+ return Result.success()
+ }
+
+ companion object {
+ const val TAG = "CapabilitiesWorker"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java
deleted file mode 100644
index 3ef237196..000000000
--- a/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Nextcloud Talk application
- *
- * @author Mario Danic
- * Copyright (C) 2017-2018 Mario Danic
- *
- * 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 .
- */
-
-package com.nextcloud.talk.jobs;
-
-import android.content.Context;
-import androidx.annotation.NonNull;
-import androidx.work.Data;
-import androidx.work.Worker;
-import androidx.work.WorkerParameters;
-import autodagger.AutoInjector;
-import com.nextcloud.talk.api.NcApi;
-import com.nextcloud.talk.application.NextcloudTalkApplication;
-import com.nextcloud.talk.events.EventStatus;
-import com.nextcloud.talk.models.database.UserEntity;
-import com.nextcloud.talk.models.json.generic.GenericOverall;
-import com.nextcloud.talk.utils.ApiUtils;
-import com.nextcloud.talk.utils.bundle.BundleKeys;
-import com.nextcloud.talk.utils.database.user.UserUtils;
-import io.reactivex.Observer;
-import io.reactivex.disposables.Disposable;
-import io.reactivex.schedulers.Schedulers;
-import java.net.CookieManager;
-import javax.inject.Inject;
-import okhttp3.JavaNetCookieJar;
-import okhttp3.OkHttpClient;
-import org.greenrobot.eventbus.EventBus;
-import retrofit2.Retrofit;
-
-@AutoInjector(NextcloudTalkApplication.class)
-public class LeaveConversationWorker extends Worker {
- @Inject
- Retrofit retrofit;
-
- @Inject
- OkHttpClient okHttpClient;
-
- @Inject
- UserUtils userUtils;
-
- @Inject
- EventBus eventBus;
-
- NcApi ncApi;
-
- public LeaveConversationWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
- super(context, workerParams);
- NextcloudTalkApplication.Companion.getSharedApplication()
- .getComponentApplication()
- .inject(this);
- }
-
- @NonNull
- @Override
- public Result doWork() {
- Data data = getInputData();
- long operationUserId = data.getLong(BundleKeys.INSTANCE.getKEY_INTERNAL_USER_ID(), -1);
- String conversationToken = data.getString(BundleKeys.INSTANCE.getKEY_ROOM_TOKEN());
- UserEntity operationUser = userUtils.getUserWithId(operationUserId);
-
- if (operationUser != null) {
- String credentials =
- ApiUtils.getCredentials(operationUser.getUsername(), operationUser.getToken());
- ncApi = retrofit.newBuilder().client(okHttpClient.newBuilder().cookieJar(new
- JavaNetCookieJar(new CookieManager())).build()).build().create(NcApi.class);
-
- EventStatus eventStatus = new EventStatus(operationUser.getId(),
- EventStatus.EventType.CONVERSATION_UPDATE, true);
-
- ncApi.removeSelfFromRoom(credentials,
- ApiUtils.getUrlForRemoveSelfFromRoom(operationUser.getBaseUrl(), conversationToken))
- .subscribeOn(Schedulers.io())
- .blockingSubscribe(new Observer() {
- Disposable disposable;
-
- @Override
- public void onSubscribe(Disposable d) {
- disposable = d;
- }
-
- @Override
- public void onNext(GenericOverall genericOverall) {
- eventBus.postSticky(eventStatus);
- }
-
- @Override
- public void onError(Throwable e) {
-
- }
-
- @Override
- public void onComplete() {
- disposable.dispose();
- }
- });
- }
-
- return Result.success();
- }
-}
diff --git a/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.kt b/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.kt
new file mode 100644
index 000000000..6c87e6d71
--- /dev/null
+++ b/app/src/main/java/com/nextcloud/talk/jobs/LeaveConversationWorker.kt
@@ -0,0 +1,85 @@
+/*
+ * Nextcloud Talk application
+ *
+ * @author Mario Danic
+ * Copyright (C) 2017-2018 Mario Danic
+ *
+ * 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 .
+ */
+package com.nextcloud.talk.jobs
+
+import android.content.Context
+import androidx.work.Worker
+import androidx.work.WorkerParameters
+import autodagger.AutoInjector
+import com.nextcloud.talk.api.NcApi
+import com.nextcloud.talk.application.NextcloudTalkApplication
+import com.nextcloud.talk.events.EventStatus
+import com.nextcloud.talk.models.json.generic.GenericOverall
+import com.nextcloud.talk.newarch.domain.repository.offline.UsersRepository
+import com.nextcloud.talk.newarch.local.models.UserNgEntity
+import com.nextcloud.talk.newarch.local.models.getCredentials
+import com.nextcloud.talk.utils.ApiUtils
+import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID
+import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN
+import io.reactivex.Observer
+import io.reactivex.disposables.Disposable
+import io.reactivex.schedulers.Schedulers
+import okhttp3.JavaNetCookieJar
+import okhttp3.OkHttpClient
+import org.greenrobot.eventbus.EventBus
+import org.koin.core.KoinComponent
+import org.koin.core.inject
+import retrofit2.Retrofit
+import java.net.CookieManager
+
+@AutoInjector(NextcloudTalkApplication::class)
+class LeaveConversationWorker(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams), KoinComponent {
+ val retrofit: Retrofit by inject()
+ val okHttpClient: OkHttpClient by inject()
+ val eventBus: EventBus by inject()
+ val usersRepository: UsersRepository by inject()
+ var ncApi: NcApi? = null
+ override fun doWork(): Result {
+ val data = inputData
+ val operationUserId = data.getLong(KEY_INTERNAL_USER_ID, -1)
+ val conversationToken = data.getString(KEY_ROOM_TOKEN)
+ val operationUser: UserNgEntity? = usersRepository.getUserWithId(operationUserId)
+ if (operationUser != null) {
+ val credentials = operationUser.getCredentials()
+ ncApi = retrofit.newBuilder().client(okHttpClient.newBuilder().cookieJar(JavaNetCookieJar(CookieManager())).build()).build().create(NcApi::class.java)
+ val eventStatus = EventStatus(operationUser.id,
+ EventStatus.EventType.CONVERSATION_UPDATE, true)
+ ncApi!!.removeSelfFromRoom(credentials,
+ ApiUtils.getUrlForRemoveSelfFromRoom(operationUser.baseUrl, conversationToken))
+ .subscribeOn(Schedulers.io())
+ .blockingSubscribe(object : Observer {
+ var disposable: Disposable? = null
+ override fun onSubscribe(d: Disposable) {
+ disposable = d
+ }
+
+ override fun onNext(t: GenericOverall) {
+ eventBus.postSticky(eventStatus)
+ }
+
+ override fun onError(e: Throwable) {}
+ override fun onComplete() {
+ disposable!!.dispose()
+ }
+ })
+ }
+ return Result.success()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.kt b/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.kt
index 7434d24c6..cb981a516 100644
--- a/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.kt
+++ b/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.kt
@@ -67,7 +67,6 @@ import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedA
import com.nextcloud.talk.models.RingtoneSettings
import com.nextcloud.talk.models.SignatureVerification
import com.nextcloud.talk.models.database.ArbitraryStorageEntity
-import com.nextcloud.talk.models.database.UserEntity
import com.nextcloud.talk.models.json.chat.ChatUtils
import com.nextcloud.talk.models.json.conversations.Conversation
import com.nextcloud.talk.models.json.conversations.Conversation.ConversationType.GROUP_CONVERSATION
diff --git a/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsWorker.java
deleted file mode 100644
index 3c5553a0e..000000000
--- a/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsWorker.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Nextcloud Talk application
- *
- * @author Mario Danic
- * Copyright (C) 2017-2018 Mario Danic
- *
- * 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 .
- */
-
-package com.nextcloud.talk.jobs;
-
-import android.content.Context;
-import android.util.Log;
-import androidx.annotation.NonNull;
-import androidx.work.Data;
-import androidx.work.OneTimeWorkRequest;
-import androidx.work.WorkManager;
-import androidx.work.Worker;
-import androidx.work.WorkerParameters;
-import autodagger.AutoInjector;
-import com.bluelinelabs.logansquare.LoganSquare;
-import com.nextcloud.talk.api.NcApi;
-import com.nextcloud.talk.application.NextcloudTalkApplication;
-import com.nextcloud.talk.events.EventStatus;
-import com.nextcloud.talk.models.ExternalSignalingServer;
-import com.nextcloud.talk.models.database.UserEntity;
-import com.nextcloud.talk.models.json.signaling.settings.SignalingSettingsOverall;
-import com.nextcloud.talk.utils.ApiUtils;
-import com.nextcloud.talk.utils.bundle.BundleKeys;
-import com.nextcloud.talk.utils.database.user.UserUtils;
-import io.reactivex.Observer;
-import io.reactivex.disposables.Disposable;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import javax.inject.Inject;
-import org.greenrobot.eventbus.EventBus;
-
-@AutoInjector(NextcloudTalkApplication.class)
-public class SignalingSettingsWorker extends Worker {
- private static final String TAG = "SignalingSettingsJob";
-
- @Inject
- UserUtils userUtils;
-
- @Inject
- NcApi ncApi;
-
- @Inject
- EventBus eventBus;
-
- public SignalingSettingsWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
- super(context, workerParams);
- }
-
- @NonNull
- @Override
- public Result doWork() {
- NextcloudTalkApplication.Companion.getSharedApplication()
- .getComponentApplication()
- .inject(this);
-
- Data data = getInputData();
-
- long internalUserId = data.getLong(BundleKeys.INSTANCE.getKEY_INTERNAL_USER_ID(), -1);
-
- List userEntityList = new ArrayList<>();
- UserEntity userEntity;
- if (internalUserId == -1
- || (userEntity = userUtils.getUserWithInternalId(internalUserId)) == null) {
- userEntityList = userUtils.getUsers();
- } else {
- userEntityList.add(userEntity);
- }
-
- for (int i = 0; i < userEntityList.size(); i++) {
- userEntity = userEntityList.get(i);
- UserEntity finalUserEntity = userEntity;
- ncApi.getSignalingSettings(
- ApiUtils.getCredentials(userEntity.getUsername(), userEntity.getToken()),
- ApiUtils.getUrlForSignalingSettings(userEntity.getBaseUrl()))
- .blockingSubscribe(new Observer() {
- @Override
- public void onSubscribe(Disposable d) {
-
- }
-
- @Override
- public void onNext(SignalingSettingsOverall signalingSettingsOverall) {
- ExternalSignalingServer externalSignalingServer;
- externalSignalingServer = new ExternalSignalingServer();
- externalSignalingServer.setExternalSignalingServer(
- signalingSettingsOverall.getOcs().getSettings().getExternalSignalingServer());
- externalSignalingServer.setExternalSignalingTicket(
- signalingSettingsOverall.getOcs().getSettings().getExternalSignalingTicket());
-
- try {
- userUtils.createOrUpdateUser(null, null, null, null, null,
- null, null, finalUserEntity.getId(), null, null,
- LoganSquare.serialize(externalSignalingServer))
- .subscribe(new Observer() {
- @Override
- public void onSubscribe(Disposable d) {
-
- }
-
- @Override
- public void onNext(UserEntity userEntity) {
- eventBus.post(new EventStatus(finalUserEntity.getId(),
- EventStatus.EventType.SIGNALING_SETTINGS, true));
- }
-
- @Override
- public void onError(Throwable e) {
- eventBus.post(new EventStatus(finalUserEntity.getId(),
- EventStatus.EventType.SIGNALING_SETTINGS, false));
- }
-
- @Override
- public void onComplete() {
-
- }
- });
- } catch (IOException e) {
- Log.e(TAG, "Failed to serialize external signaling server");
- }
- }
-
- @Override
- public void onError(Throwable e) {
- eventBus.post(
- new EventStatus(finalUserEntity.getId(), EventStatus.EventType.SIGNALING_SETTINGS,
- false));
- }
-
- @Override
- public void onComplete() {
-
- }
- });
- }
-
- OneTimeWorkRequest websocketConnectionsWorker =
- new OneTimeWorkRequest.Builder(WebsocketConnectionsWorker.class).build();
- WorkManager.getInstance().enqueue(websocketConnectionsWorker);
-
- return Result.success();
- }
-}
diff --git a/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsWorker.kt b/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsWorker.kt
new file mode 100644
index 000000000..75030ec39
--- /dev/null
+++ b/app/src/main/java/com/nextcloud/talk/jobs/SignalingSettingsWorker.kt
@@ -0,0 +1,109 @@
+/*
+ * Nextcloud Talk application
+ *
+ * @author Mario Danic
+ * Copyright (C) 2017-2018 Mario Danic
+ *
+ * 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 .
+ */
+package com.nextcloud.talk.jobs
+
+import android.content.Context
+import android.util.Log
+import androidx.work.*
+import autodagger.AutoInjector
+import com.bluelinelabs.logansquare.LoganSquare
+import com.nextcloud.talk.api.NcApi
+import com.nextcloud.talk.application.NextcloudTalkApplication
+import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
+import com.nextcloud.talk.events.EventStatus
+import com.nextcloud.talk.jobs.WebsocketConnectionsWorker
+import com.nextcloud.talk.models.ExternalSignalingServer
+import com.nextcloud.talk.models.database.UserEntity
+import com.nextcloud.talk.models.json.signaling.settings.SignalingSettingsOverall
+import com.nextcloud.talk.newarch.domain.repository.offline.UsersRepository
+import com.nextcloud.talk.newarch.local.models.UserNgEntity
+import com.nextcloud.talk.newarch.local.models.getCredentials
+import com.nextcloud.talk.utils.ApiUtils
+import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID
+import com.nextcloud.talk.utils.database.user.UserUtils
+import io.reactivex.Observer
+import io.reactivex.disposables.Disposable
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.runBlocking
+import org.greenrobot.eventbus.EventBus
+import org.koin.core.KoinComponent
+import org.koin.core.inject
+import java.io.IOException
+import java.util.*
+import javax.inject.Inject
+
+@AutoInjector(NextcloudTalkApplication::class)
+class SignalingSettingsWorker(context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams), KoinComponent {
+ @JvmField @Inject
+ var ncApi: NcApi? = null
+ val eventBus: EventBus by inject()
+ val usersRepository: UsersRepository by inject()
+
+ override suspend fun doWork(): Result {
+ sharedApplication
+ ?.componentApplication
+ ?.inject(this)
+ val data = inputData
+ val internalUserId = data.getLong(KEY_INTERNAL_USER_ID, -1)
+ var userEntityList: MutableList = ArrayList()
+ var userEntity: UserNgEntity?
+ if (internalUserId == -1L || usersRepository.getUserWithId(internalUserId) == null) {
+ userEntityList = usersRepository.getUsers().toMutableList()
+ } else {
+ userEntity = usersRepository.getUserWithId(internalUserId)
+ userEntityList.add(userEntity)
+ }
+ for (i in userEntityList.indices) {
+ userEntity = userEntityList[i]
+ val finalUserEntity: UserNgEntity? = userEntity
+ ncApi!!.getSignalingSettings(
+ userEntity!!.getCredentials(),
+ ApiUtils.getUrlForSignalingSettings(userEntity.baseUrl))
+ .blockingSubscribe(object : Observer {
+ override fun onSubscribe(d: Disposable) {}
+ override fun onNext(signalingSettingsOverall: SignalingSettingsOverall) {
+ val externalSignalingServer: ExternalSignalingServer
+ externalSignalingServer = ExternalSignalingServer()
+ externalSignalingServer.externalSignalingServer = signalingSettingsOverall.ocs.settings.externalSignalingServer
+ externalSignalingServer.externalSignalingTicket = signalingSettingsOverall.ocs.settings.externalSignalingTicket
+ val user = usersRepository.getUserWithId(userEntity.id)
+ user.externalSignaling = externalSignalingServer
+ runBlocking {
+ val result = usersRepository.updateUser(user)
+ eventBus.post(EventStatus(user.id,
+ EventStatus.EventType.SIGNALING_SETTINGS, result > 0))
+ }
+
+ }
+
+ override fun onError(e: Throwable) {
+ eventBus.post(EventStatus(finalUserEntity!!.id,
+ EventStatus.EventType.SIGNALING_SETTINGS, false))
+ }
+
+ override fun onComplete() {}
+ })
+ }
+ val websocketConnectionsWorker = OneTimeWorkRequest.Builder(WebsocketConnectionsWorker::class.java).build()
+ WorkManager.getInstance().enqueue(websocketConnectionsWorker)
+ return Result.success()
+ }
+}
diff --git a/app/src/main/java/com/nextcloud/talk/jobs/WebsocketConnectionsWorker.kt b/app/src/main/java/com/nextcloud/talk/jobs/WebsocketConnectionsWorker.kt
index 5a0f372a1..c3dd56272 100644
--- a/app/src/main/java/com/nextcloud/talk/jobs/WebsocketConnectionsWorker.kt
+++ b/app/src/main/java/com/nextcloud/talk/jobs/WebsocketConnectionsWorker.kt
@@ -62,7 +62,7 @@ class WebsocketConnectionsWorker(
if (!userEntity.externalSignaling!!.externalSignalingServer.isNullOrEmpty() &&
!userEntity.externalSignaling!!.externalSignalingTicket.isNullOrEmpty()) {
WebSocketConnectionHelper.getExternalSignalingInstanceForServer(
- userEntity.externalSignaling!!.externalSignalingServer,
+ userEntity.externalSignaling!!.externalSignalingServer!!,
userEntity, userEntity.externalSignaling!!.externalSignalingTicket,
false
)
diff --git a/app/src/main/java/com/nextcloud/talk/models/json/mention/Mention.java b/app/src/main/java/com/nextcloud/talk/models/json/mention/Mention.java
index 6197b323d..d1607f67a 100644
--- a/app/src/main/java/com/nextcloud/talk/models/json/mention/Mention.java
+++ b/app/src/main/java/com/nextcloud/talk/models/json/mention/Mention.java
@@ -29,12 +29,12 @@ import org.parceler.Parcel;
@JsonObject
public class Mention {
@JsonField(name = "id")
- String id;
+ public String id;
@JsonField(name = "label")
- String label;
+ public String label;
// type of user (guests or users or calls)
@JsonField(name = "source")
- String source;
+ public String source;
}
diff --git a/app/src/main/java/com/nextcloud/talk/models/json/mention/MentionOCS.java b/app/src/main/java/com/nextcloud/talk/models/json/mention/MentionOCS.java
index 7bce06012..d7f8dde05 100644
--- a/app/src/main/java/com/nextcloud/talk/models/json/mention/MentionOCS.java
+++ b/app/src/main/java/com/nextcloud/talk/models/json/mention/MentionOCS.java
@@ -31,5 +31,5 @@ import org.parceler.Parcel;
@JsonObject
public class MentionOCS extends GenericOCS {
@JsonField(name = "data")
- List data;
+ public List data;
}
diff --git a/app/src/main/java/com/nextcloud/talk/models/json/mention/MentionOverall.java b/app/src/main/java/com/nextcloud/talk/models/json/mention/MentionOverall.java
index a7e6a1cf1..38ce49f84 100644
--- a/app/src/main/java/com/nextcloud/talk/models/json/mention/MentionOverall.java
+++ b/app/src/main/java/com/nextcloud/talk/models/json/mention/MentionOverall.java
@@ -29,5 +29,5 @@ import org.parceler.Parcel;
@JsonObject
public class MentionOverall {
@JsonField(name = "ocs")
- MentionOCS ocs;
+ public MentionOCS ocs;
}
diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthParametersWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthParametersWebSocketMessage.java
index b0ae7ca2a..a8c864c01 100644
--- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthParametersWebSocketMessage.java
+++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthParametersWebSocketMessage.java
@@ -30,8 +30,8 @@ import org.parceler.Parcel;
@Parcel
public class AuthParametersWebSocketMessage {
@JsonField(name = "userid")
- String userid;
+ public String userid;
@JsonField(name = "ticket")
- String ticket;
+ public String ticket;
}
diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthWebSocketMessage.java
index caa406f87..dd904f860 100644
--- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthWebSocketMessage.java
+++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/AuthWebSocketMessage.java
@@ -30,8 +30,8 @@ import org.parceler.Parcel;
@Parcel
public class AuthWebSocketMessage {
@JsonField(name = "url")
- String url;
+ public String url;
@JsonField(name = "params")
- AuthParametersWebSocketMessage authParametersWebSocketMessage;
+ public AuthParametersWebSocketMessage authParametersWebSocketMessage;
}
diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloOverallWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloOverallWebSocketMessage.java
index ce209ea42..2f3c3956f 100644
--- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloOverallWebSocketMessage.java
+++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloOverallWebSocketMessage.java
@@ -30,5 +30,5 @@ import org.parceler.Parcel;
@Parcel
public class HelloOverallWebSocketMessage extends BaseWebSocketMessage {
@JsonField(name = "hello")
- HelloWebSocketMessage helloWebSocketMessage;
+ public HelloWebSocketMessage helloWebSocketMessage;
}
diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloWebSocketMessage.java
index b619b1245..10fc23769 100644
--- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloWebSocketMessage.java
+++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/HelloWebSocketMessage.java
@@ -30,11 +30,11 @@ import org.parceler.Parcel;
@Parcel
public class HelloWebSocketMessage {
@JsonField(name = "version")
- String version;
+ public String version;
@JsonField(name = "resumeid")
- String resumeid;
+ public String resumeid;
@JsonField(name = "auth")
- AuthWebSocketMessage authWebSocketMessage;
+ public AuthWebSocketMessage authWebSocketMessage;
}
diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferOverallWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferOverallWebSocketMessage.java
index 1a1e38212..8eb48b071 100644
--- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferOverallWebSocketMessage.java
+++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferOverallWebSocketMessage.java
@@ -30,5 +30,5 @@ import org.parceler.Parcel;
@Parcel
public class RequestOfferOverallWebSocketMessage extends BaseWebSocketMessage {
@JsonField(name = "message")
- RequestOfferSignalingMessage requestOfferOverallWebSocketMessage;
+ public RequestOfferSignalingMessage requestOfferOverallWebSocketMessage;
}
diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferSignalingMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferSignalingMessage.java
index c18cf2dff..a16a6f3cf 100644
--- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferSignalingMessage.java
+++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RequestOfferSignalingMessage.java
@@ -30,8 +30,8 @@ import org.parceler.Parcel;
@Parcel
public class RequestOfferSignalingMessage {
@JsonField(name = "recipient")
- ActorWebSocketMessage actorWebSocketMessage;
+ public ActorWebSocketMessage actorWebSocketMessage;
@JsonField(name = "data")
- SignalingDataWebSocketMessageForOffer signalingDataWebSocketMessageForOffer;
+ public SignalingDataWebSocketMessageForOffer signalingDataWebSocketMessageForOffer;
}
diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomOverallWebSocketMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomOverallWebSocketMessage.java
index 7ca845104..1ba2874d1 100644
--- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomOverallWebSocketMessage.java
+++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/RoomOverallWebSocketMessage.java
@@ -30,5 +30,5 @@ import org.parceler.Parcel;
@Parcel
public class RoomOverallWebSocketMessage extends BaseWebSocketMessage {
@JsonField(name = "room")
- RoomWebSocketMessage roomWebSocketMessage;
+ public RoomWebSocketMessage roomWebSocketMessage;
}
diff --git a/app/src/main/java/com/nextcloud/talk/models/json/websocket/SignalingDataWebSocketMessageForOffer.java b/app/src/main/java/com/nextcloud/talk/models/json/websocket/SignalingDataWebSocketMessageForOffer.java
index 805bb0f69..791d11501 100644
--- a/app/src/main/java/com/nextcloud/talk/models/json/websocket/SignalingDataWebSocketMessageForOffer.java
+++ b/app/src/main/java/com/nextcloud/talk/models/json/websocket/SignalingDataWebSocketMessageForOffer.java
@@ -30,8 +30,8 @@ import org.parceler.Parcel;
@Parcel
public class SignalingDataWebSocketMessageForOffer {
@JsonField(name = "type")
- String type;
+ public String type;
@JsonField(name = "roomType")
- String roomType;
+ public String roomType;
}
diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListViewModel.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListViewModel.kt
index 8e50e7a8d..a8cb36456 100644
--- a/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListViewModel.kt
+++ b/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListViewModel.kt
@@ -64,7 +64,7 @@ class ConversationsListViewModel constructor(
val searchQuery = MutableLiveData()
val currentUserLiveData: LiveData = usersRepository.getActiveUserLiveData()
val conversationsLiveData = Transformations.switchMap(currentUserLiveData) {
- if (!LOADING.equals(viewState.value)) {
+ if (LOADING != viewState.value) {
viewState.value = LOADING
}
conversationsRepository.getConversationsForUser(it.id)
@@ -192,8 +192,7 @@ class ConversationsListViewModel constructor(
// TODO, make sure we ask for password if needed
putExtra(
Intent.EXTRA_TEXT, ShareUtils.getStringForIntent(
- context, null,
- userUtils, conversation
+ context, null, conversation
)
)
diff --git a/app/src/main/java/com/nextcloud/talk/newarch/utils/Extensions.kt b/app/src/main/java/com/nextcloud/talk/newarch/utils/Extensions.kt
index 382b5e7be..474e583c2 100644
--- a/app/src/main/java/com/nextcloud/talk/newarch/utils/Extensions.kt
+++ b/app/src/main/java/com/nextcloud/talk/newarch/utils/Extensions.kt
@@ -21,7 +21,6 @@
package com.nextcloud.talk.newarch.utils
import com.nextcloud.talk.models.database.UserEntity
-import com.nextcloud.talk.newarch.local.models.UserNgEntity
import com.nextcloud.talk.utils.ApiUtils
fun UserEntity.getCredentials() = ApiUtils.getCredentials(username, token)
diff --git a/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java b/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java
deleted file mode 100644
index b211c213a..000000000
--- a/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Nextcloud Talk application
- *
- * @author Mario Danic
- * Copyright (C) 2017-2018 Mario Danic
- *
- * 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 .
- */
-
-package com.nextcloud.talk.presenters;
-
-import android.content.Context;
-import android.view.View;
-import androidx.annotation.Nullable;
-import androidx.recyclerview.widget.RecyclerView;
-import autodagger.AutoInjector;
-import com.nextcloud.talk.adapters.items.MentionAutocompleteItem;
-import com.nextcloud.talk.api.NcApi;
-import com.nextcloud.talk.application.NextcloudTalkApplication;
-import com.nextcloud.talk.models.database.UserEntity;
-import com.nextcloud.talk.models.json.mention.Mention;
-import com.nextcloud.talk.models.json.mention.MentionOverall;
-import com.nextcloud.talk.utils.ApiUtils;
-import com.nextcloud.talk.utils.database.user.UserUtils;
-import com.otaliastudios.autocomplete.RecyclerViewPresenter;
-import eu.davidea.flexibleadapter.FlexibleAdapter;
-import eu.davidea.flexibleadapter.items.AbstractFlexibleItem;
-import io.reactivex.Observer;
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.disposables.Disposable;
-import io.reactivex.schedulers.Schedulers;
-import java.util.ArrayList;
-import java.util.List;
-import javax.inject.Inject;
-
-@AutoInjector(NextcloudTalkApplication.class)
-public class MentionAutocompletePresenter extends RecyclerViewPresenter
- implements FlexibleAdapter.OnItemClickListener {
- @Inject
- NcApi ncApi;
- @Inject
- UserUtils userUtils;
- private UserEntity currentUser;
- private FlexibleAdapter adapter;
- private Context context;
-
- private String roomToken;
-
- private List abstractFlexibleItemList = new ArrayList<>();
-
- public MentionAutocompletePresenter(Context context) {
- super(context);
- this.context = context;
- NextcloudTalkApplication.Companion.getSharedApplication()
- .getComponentApplication()
- .inject(this);
- currentUser = userUtils.getCurrentUser();
- }
-
- public MentionAutocompletePresenter(Context context, String roomToken) {
- super(context);
- this.roomToken = roomToken;
- this.context = context;
- NextcloudTalkApplication.Companion.getSharedApplication()
- .getComponentApplication()
- .inject(this);
- currentUser = userUtils.getCurrentUser();
- }
-
- @Override
- protected RecyclerView.Adapter instantiateAdapter() {
- adapter = new FlexibleAdapter<>(abstractFlexibleItemList, context, false);
- adapter.addListener(this);
- return adapter;
- }
-
- @Override
- protected void onQuery(@Nullable CharSequence query) {
-
- String queryString;
- if (query != null && query.length() > 1) {
- queryString = String.valueOf(query.subSequence(1, query.length()));
- } else {
- queryString = "";
- }
-
- adapter.setFilter(queryString);
- ncApi.getMentionAutocompleteSuggestions(
- ApiUtils.getCredentials(currentUser.getUsername(), currentUser
- .getToken()), ApiUtils.getUrlForMentionSuggestions(currentUser.getBaseUrl(), roomToken),
- queryString, 5)
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .retry(3)
- .subscribe(new Observer() {
- @Override
- public void onSubscribe(Disposable d) {
- }
-
- @Override
- public void onNext(MentionOverall mentionOverall) {
- List mentionsList = mentionOverall.getOcs().getData();
-
- if (mentionsList.size() == 0) {
- adapter.clear();
- } else {
- List internalAbstractFlexibleItemList = new ArrayList<>();
- for (Mention mention : mentionsList) {
- internalAbstractFlexibleItemList.add(
- new MentionAutocompleteItem(mention.getId(),
- mention.getLabel(), mention.getSource(),
- currentUser));
- }
-
- if (adapter.getItemCount() != 0) {
- adapter.clear();
- }
-
- adapter.updateDataSet(internalAbstractFlexibleItemList);
- }
- }
-
- @Override
- public void onError(Throwable e) {
- adapter.clear();
- }
-
- @Override
- public void onComplete() {
-
- }
- });
- }
-
- @Override
- public boolean onItemClick(View view, int position) {
- Mention mention = new Mention();
- MentionAutocompleteItem mentionAutocompleteItem =
- (MentionAutocompleteItem) adapter.getItem(position);
- if (mentionAutocompleteItem != null) {
- mention.setId(mentionAutocompleteItem.getObjectId());
- mention.setLabel(mentionAutocompleteItem.getDisplayName());
- mention.setSource(mentionAutocompleteItem.getSource());
- dispatchClick(mention);
- }
- return true;
- }
-}
diff --git a/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.kt b/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.kt
new file mode 100644
index 000000000..5e785e254
--- /dev/null
+++ b/app/src/main/java/com/nextcloud/talk/presenters/MentionAutocompletePresenter.kt
@@ -0,0 +1,136 @@
+/*
+ * Nextcloud Talk application
+ *
+ * @author Mario Danic
+ * Copyright (C) 2017-2018 Mario Danic
+ *
+ * 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 .
+ */
+package com.nextcloud.talk.presenters
+
+import android.content.Context
+import android.view.View
+import androidx.recyclerview.widget.RecyclerView
+import autodagger.AutoInjector
+import com.nextcloud.talk.adapters.items.MentionAutocompleteItem
+import com.nextcloud.talk.api.NcApi
+import com.nextcloud.talk.application.NextcloudTalkApplication
+import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
+import com.nextcloud.talk.models.json.mention.Mention
+import com.nextcloud.talk.models.json.mention.MentionOverall
+import com.nextcloud.talk.newarch.domain.repository.offline.UsersRepository
+import com.nextcloud.talk.newarch.local.models.UserNgEntity
+import com.nextcloud.talk.newarch.local.models.getCredentials
+import com.nextcloud.talk.utils.ApiUtils
+import com.otaliastudios.autocomplete.RecyclerViewPresenter
+import eu.davidea.flexibleadapter.FlexibleAdapter
+import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
+import io.reactivex.android.schedulers.AndroidSchedulers
+import io.reactivex.disposables.Disposable
+import io.reactivex.schedulers.Schedulers
+import org.koin.core.KoinComponent
+import org.koin.core.inject
+import java.util.*
+import javax.inject.Inject
+
+@AutoInjector(NextcloudTalkApplication::class)
+class MentionAutocompletePresenter : RecyclerViewPresenter, FlexibleAdapter.OnItemClickListener, KoinComponent {
+ @JvmField @Inject
+ var ncApi: NcApi? = null
+
+ val usersRepository: UsersRepository by inject()
+ private var currentUser: UserNgEntity?
+ private var adapter: FlexibleAdapter>? = null
+ private var internalContext: Context
+ private var roomToken: String? = null
+ private val abstractFlexibleItemList: List> = ArrayList()
+
+ constructor(context: Context) : super(context) {
+ this.internalContext = context
+ sharedApplication
+ ?.componentApplication
+ ?.inject(this)
+ currentUser = usersRepository.getActiveUser()
+ }
+
+ constructor(context: Context, roomToken: String?) : super(context) {
+ this.roomToken = roomToken
+ this.internalContext = context
+ sharedApplication
+ ?.componentApplication
+ ?.inject(this)
+ currentUser = usersRepository.getActiveUser()
+ }
+
+ override fun instantiateAdapter(): RecyclerView.Adapter<*> {
+ adapter = FlexibleAdapter(abstractFlexibleItemList, context, false)
+ adapter!!.addListener(this)
+ return adapter!!
+ }
+
+ override fun onQuery(query: CharSequence?) {
+ val queryString: String
+ queryString = if (query != null && query.length > 1) {
+ query.subSequence(1, query.length).toString()
+ } else {
+ ""
+ }
+ adapter!!.setFilter(queryString)
+ ncApi!!.getMentionAutocompleteSuggestions(
+ currentUser!!.getCredentials(), ApiUtils.getUrlForMentionSuggestions(currentUser!!.baseUrl, roomToken),
+ queryString, 5)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .retry(3)
+ .subscribe(object : io.reactivex.Observer {
+ override fun onSubscribe(d: Disposable) {}
+ override fun onNext(mentionOverall: MentionOverall) {
+ val mentionsList: List = mentionOverall.ocs.data
+ if (mentionsList.isEmpty()) {
+ adapter!!.clear()
+ } else {
+ val internalAbstractFlexibleItemList: MutableList> = ArrayList()
+ for (mention in mentionsList) {
+ internalAbstractFlexibleItemList.add(
+ MentionAutocompleteItem(mention.id,
+ mention.label, mention.source,
+ currentUser!!))
+ }
+ if (adapter!!.itemCount != 0) {
+ adapter!!.clear()
+ }
+ adapter!!.updateDataSet(internalAbstractFlexibleItemList)
+ }
+ }
+
+ override fun onError(e: Throwable) {
+ adapter!!.clear()
+ }
+
+ override fun onComplete() {}
+ })
+ }
+
+ override fun onItemClick(view: View, position: Int): Boolean {
+ val mention = Mention()
+ val mentionAutocompleteItem = adapter!!.getItem(position) as MentionAutocompleteItem?
+ if (mentionAutocompleteItem != null) {
+ mention.id = mentionAutocompleteItem.objectId
+ mention.label = mentionAutocompleteItem.displayName
+ mention.source = mentionAutocompleteItem.source
+ dispatchClick(mention)
+ }
+ return true
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/nextcloud/talk/utils/ShareUtils.java b/app/src/main/java/com/nextcloud/talk/utils/ShareUtils.java
deleted file mode 100644
index 0c42c8ceb..000000000
--- a/app/src/main/java/com/nextcloud/talk/utils/ShareUtils.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Nextcloud Talk application
- *
- * @author Mario Danic
- * Copyright (C) 2017 Mario Danic
- *
- * 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 .
- *
- */
-
-package com.nextcloud.talk.utils;
-
-import android.content.Context;
-import android.text.TextUtils;
-import androidx.annotation.Nullable;
-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;
-
-public class ShareUtils {
-
- public static String getStringForIntent(Context context, @Nullable String password,
- UserUtils userUtils, Conversation conversation) {
- UserEntity userEntity = userUtils.getCurrentUser();
-
- String shareString = "";
- if (userEntity != null && context != null) {
- shareString = String.format(context.getResources().getString(R.string.nc_share_text),
- userEntity.getBaseUrl(), conversation.getToken());
-
- if (!TextUtils.isEmpty(password)) {
- shareString +=
- String.format(context.getResources().getString(R.string.nc_share_text_pass), password);
- }
- }
-
- return shareString;
- }
-}
diff --git a/app/src/main/java/com/nextcloud/talk/utils/ShareUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/ShareUtils.kt
new file mode 100644
index 000000000..b5203c7f0
--- /dev/null
+++ b/app/src/main/java/com/nextcloud/talk/utils/ShareUtils.kt
@@ -0,0 +1,48 @@
+/*
+ * Nextcloud Talk application
+ *
+ * @author Mario Danic
+ * Copyright (C) 2017 Mario Danic
+ *
+ * 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 .
+ *
+ */
+package com.nextcloud.talk.utils
+
+import android.content.Context
+import android.text.TextUtils
+import com.nextcloud.talk.R
+import com.nextcloud.talk.models.json.conversations.Conversation
+import com.nextcloud.talk.newarch.domain.repository.offline.UsersRepository
+import com.nextcloud.talk.newarch.local.models.UserNgEntity
+import org.koin.core.KoinComponent
+import org.koin.core.inject
+
+object ShareUtils: KoinComponent {
+ val usersRepository: UsersRepository by inject()
+
+ @JvmStatic
+ fun getStringForIntent(context: Context?, password: String?, conversation: Conversation): String {
+ val userEntity: UserNgEntity? = usersRepository.getActiveUser()
+ var shareString = ""
+ if (userEntity != null && context != null) {
+ shareString = java.lang.String.format(context.resources.getString(R.string.nc_share_text),
+ userEntity.baseUrl, conversation.token)
+ if (!TextUtils.isEmpty(password)) {
+ shareString += String.format(context.resources.getString(R.string.nc_share_text_pass), password)
+ }
+ }
+ return shareString
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java
deleted file mode 100644
index cad7cfb85..000000000
--- a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Nextcloud Talk application
- *
- * @author Mario Danic
- * Copyright (C) 2017-2018 Mario Danic
- *
- * 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 .
- */
-
-package com.nextcloud.talk.webrtc;
-
-import autodagger.AutoInjector;
-import com.nextcloud.talk.application.NextcloudTalkApplication;
-import com.nextcloud.talk.models.database.UserEntity;
-import com.nextcloud.talk.models.json.signaling.NCMessageWrapper;
-import com.nextcloud.talk.models.json.websocket.ActorWebSocketMessage;
-import com.nextcloud.talk.models.json.websocket.AuthParametersWebSocketMessage;
-import com.nextcloud.talk.models.json.websocket.AuthWebSocketMessage;
-import com.nextcloud.talk.models.json.websocket.CallOverallWebSocketMessage;
-import com.nextcloud.talk.models.json.websocket.CallWebSocketMessage;
-import com.nextcloud.talk.models.json.websocket.HelloOverallWebSocketMessage;
-import com.nextcloud.talk.models.json.websocket.HelloWebSocketMessage;
-import com.nextcloud.talk.models.json.websocket.RequestOfferOverallWebSocketMessage;
-import com.nextcloud.talk.models.json.websocket.RequestOfferSignalingMessage;
-import com.nextcloud.talk.models.json.websocket.RoomOverallWebSocketMessage;
-import com.nextcloud.talk.models.json.websocket.RoomWebSocketMessage;
-import com.nextcloud.talk.models.json.websocket.SignalingDataWebSocketMessageForOffer;
-import com.nextcloud.talk.newarch.local.models.UserNgEntity;
-import com.nextcloud.talk.utils.ApiUtils;
-import java.util.HashMap;
-import java.util.Map;
-import javax.inject.Inject;
-import okhttp3.OkHttpClient;
-
-@AutoInjector(NextcloudTalkApplication.class)
-public class WebSocketConnectionHelper {
- private static Map magicWebSocketInstanceMap = new HashMap<>();
-
- @Inject
- OkHttpClient okHttpClient;
-
- public WebSocketConnectionHelper() {
- NextcloudTalkApplication.Companion.getSharedApplication()
- .getComponentApplication()
- .inject(this);
- }
-
- public static synchronized MagicWebSocketInstance getMagicWebSocketInstanceForUserId(
- long userId) {
- if (userId != -1 && magicWebSocketInstanceMap.containsKey(userId)) {
- return magicWebSocketInstanceMap.get(userId);
- }
-
- return null;
- }
-
- public static synchronized MagicWebSocketInstance getExternalSignalingInstanceForServer(
- String url, UserNgEntity userEntity, String webSocketTicket, boolean isGuest) {
- String generatedURL = url.replace("https://", "wss://").replace("http://", "ws://");
-
- if (generatedURL.endsWith("/")) {
- generatedURL += "spreed";
- } else {
- generatedURL += "/spreed";
- }
-
- long userId = isGuest ? -1 : userEntity.getId();
-
- MagicWebSocketInstance magicWebSocketInstance;
- if (userId != -1
- && magicWebSocketInstanceMap.containsKey(userEntity.getId())
- && (magicWebSocketInstance = magicWebSocketInstanceMap.get(userEntity.getId())) != null) {
- return magicWebSocketInstance;
- } else {
- if (userId == -1) {
- deleteExternalSignalingInstanceForUserEntity(userId);
- }
- magicWebSocketInstance =
- new MagicWebSocketInstance(userEntity, generatedURL, webSocketTicket);
- magicWebSocketInstanceMap.put(userEntity.getId(), magicWebSocketInstance);
- return magicWebSocketInstance;
- }
- }
-
- public static synchronized void deleteExternalSignalingInstanceForUserEntity(long id) {
- MagicWebSocketInstance magicWebSocketInstance;
- if ((magicWebSocketInstance = magicWebSocketInstanceMap.get(id)) != null) {
- if (magicWebSocketInstance.isConnected()) {
- magicWebSocketInstance.sendBye();
- magicWebSocketInstanceMap.remove(id);
- }
- }
- }
-
- HelloOverallWebSocketMessage getAssembledHelloModel(UserNgEntity userEntity, String ticket) {
- HelloOverallWebSocketMessage helloOverallWebSocketMessage = new HelloOverallWebSocketMessage();
- helloOverallWebSocketMessage.setType("hello");
- HelloWebSocketMessage helloWebSocketMessage = new HelloWebSocketMessage();
- helloWebSocketMessage.setVersion("1.0");
- AuthWebSocketMessage authWebSocketMessage = new AuthWebSocketMessage();
- authWebSocketMessage.setUrl(
- ApiUtils.getUrlForExternalServerAuthBackend(userEntity.getBaseUrl()));
- AuthParametersWebSocketMessage authParametersWebSocketMessage =
- new AuthParametersWebSocketMessage();
- authParametersWebSocketMessage.setTicket(ticket);
- authParametersWebSocketMessage.setUserid(userEntity.getUserId());
- authWebSocketMessage.setAuthParametersWebSocketMessage(authParametersWebSocketMessage);
- helloWebSocketMessage.setAuthWebSocketMessage(authWebSocketMessage);
- helloOverallWebSocketMessage.setHelloWebSocketMessage(helloWebSocketMessage);
- return helloOverallWebSocketMessage;
- }
-
- HelloOverallWebSocketMessage getAssembledHelloModelForResume(String resumeId) {
- HelloOverallWebSocketMessage helloOverallWebSocketMessage = new HelloOverallWebSocketMessage();
- helloOverallWebSocketMessage.setType("hello");
- HelloWebSocketMessage helloWebSocketMessage = new HelloWebSocketMessage();
- helloWebSocketMessage.setVersion("1.0");
- helloWebSocketMessage.setResumeid(resumeId);
- helloOverallWebSocketMessage.setHelloWebSocketMessage(helloWebSocketMessage);
- return helloOverallWebSocketMessage;
- }
-
- RoomOverallWebSocketMessage getAssembledJoinOrLeaveRoomModel(String roomId, String sessionId) {
- RoomOverallWebSocketMessage roomOverallWebSocketMessage = new RoomOverallWebSocketMessage();
- roomOverallWebSocketMessage.setType("room");
- RoomWebSocketMessage roomWebSocketMessage = new RoomWebSocketMessage();
- roomWebSocketMessage.setRoomId(roomId);
- roomWebSocketMessage.setSessiondId(sessionId);
- roomOverallWebSocketMessage.setRoomWebSocketMessage(roomWebSocketMessage);
- return roomOverallWebSocketMessage;
- }
-
- RequestOfferOverallWebSocketMessage getAssembledRequestOfferModel(String sessionId,
- String roomType) {
- RequestOfferOverallWebSocketMessage requestOfferOverallWebSocketMessage =
- new RequestOfferOverallWebSocketMessage();
- requestOfferOverallWebSocketMessage.setType("message");
-
- RequestOfferSignalingMessage requestOfferSignalingMessage = new RequestOfferSignalingMessage();
-
- ActorWebSocketMessage actorWebSocketMessage = new ActorWebSocketMessage();
- actorWebSocketMessage.setType("session");
- actorWebSocketMessage.setSessionId(sessionId);
- requestOfferSignalingMessage.setActorWebSocketMessage(actorWebSocketMessage);
-
- SignalingDataWebSocketMessageForOffer signalingDataWebSocketMessageForOffer =
- new SignalingDataWebSocketMessageForOffer();
- signalingDataWebSocketMessageForOffer.setRoomType(roomType);
- signalingDataWebSocketMessageForOffer.setType("requestoffer");
- requestOfferSignalingMessage.setSignalingDataWebSocketMessageForOffer(
- signalingDataWebSocketMessageForOffer);
-
- requestOfferOverallWebSocketMessage.setRequestOfferOverallWebSocketMessage(
- requestOfferSignalingMessage);
- return requestOfferOverallWebSocketMessage;
- }
-
- CallOverallWebSocketMessage getAssembledCallMessageModel(NCMessageWrapper ncMessageWrapper) {
- CallOverallWebSocketMessage callOverallWebSocketMessage = new CallOverallWebSocketMessage();
- callOverallWebSocketMessage.setType("message");
-
- CallWebSocketMessage callWebSocketMessage = new CallWebSocketMessage();
-
- ActorWebSocketMessage actorWebSocketMessage = new ActorWebSocketMessage();
- actorWebSocketMessage.setType("session");
- actorWebSocketMessage.setSessionId(ncMessageWrapper.getSignalingMessage().getTo());
- callWebSocketMessage.setRecipientWebSocketMessage(actorWebSocketMessage);
- callWebSocketMessage.setNcSignalingMessage(ncMessageWrapper.getSignalingMessage());
-
- callOverallWebSocketMessage.setCallWebSocketMessage(callWebSocketMessage);
- return callOverallWebSocketMessage;
- }
-}
diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.kt b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.kt
new file mode 100644
index 000000000..994292ad2
--- /dev/null
+++ b/app/src/main/java/com/nextcloud/talk/webrtc/WebSocketConnectionHelper.kt
@@ -0,0 +1,148 @@
+/*
+ * Nextcloud Talk application
+ *
+ * @author Mario Danic
+ * Copyright (C) 2017-2018 Mario Danic
+ *
+ * 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 .
+ */
+package com.nextcloud.talk.webrtc
+
+import com.nextcloud.talk.models.json.signaling.NCMessageWrapper
+import com.nextcloud.talk.models.json.websocket.*
+import com.nextcloud.talk.newarch.local.models.UserNgEntity
+import com.nextcloud.talk.utils.ApiUtils
+import okhttp3.OkHttpClient
+import org.koin.core.KoinComponent
+import org.koin.core.inject
+import java.util.*
+
+class WebSocketConnectionHelper: KoinComponent {
+ val okHttpClient: OkHttpClient by inject()
+
+ fun getAssembledHelloModel(userEntity: UserNgEntity, ticket: String?): HelloOverallWebSocketMessage {
+ val helloOverallWebSocketMessage = HelloOverallWebSocketMessage()
+ helloOverallWebSocketMessage.type = "hello"
+ val helloWebSocketMessage = HelloWebSocketMessage()
+ helloWebSocketMessage.version = "1.0"
+ val authWebSocketMessage = AuthWebSocketMessage()
+ authWebSocketMessage.url =
+ ApiUtils.getUrlForExternalServerAuthBackend(userEntity.baseUrl)
+ val authParametersWebSocketMessage = AuthParametersWebSocketMessage()
+ authParametersWebSocketMessage.ticket = ticket
+ authParametersWebSocketMessage.userid = userEntity.userId
+ authWebSocketMessage.authParametersWebSocketMessage = authParametersWebSocketMessage
+ helloWebSocketMessage.authWebSocketMessage = authWebSocketMessage
+ helloOverallWebSocketMessage.helloWebSocketMessage = helloWebSocketMessage
+ return helloOverallWebSocketMessage
+ }
+
+ fun getAssembledHelloModelForResume(resumeId: String?): HelloOverallWebSocketMessage {
+ val helloOverallWebSocketMessage = HelloOverallWebSocketMessage()
+ helloOverallWebSocketMessage.type = "hello"
+ val helloWebSocketMessage = HelloWebSocketMessage()
+ helloWebSocketMessage.version = "1.0"
+ helloWebSocketMessage.resumeid = resumeId
+ helloOverallWebSocketMessage.helloWebSocketMessage = helloWebSocketMessage
+ return helloOverallWebSocketMessage
+ }
+
+ fun getAssembledJoinOrLeaveRoomModel(roomId: String?, sessionId: String?): RoomOverallWebSocketMessage {
+ val roomOverallWebSocketMessage = RoomOverallWebSocketMessage()
+ roomOverallWebSocketMessage.type = "room"
+ val roomWebSocketMessage = RoomWebSocketMessage()
+ roomWebSocketMessage.roomId = roomId
+ roomWebSocketMessage.sessiondId = sessionId
+ roomOverallWebSocketMessage.roomWebSocketMessage = roomWebSocketMessage
+ return roomOverallWebSocketMessage
+ }
+
+ fun getAssembledRequestOfferModel(sessionId: String?,
+ roomType: String?): RequestOfferOverallWebSocketMessage {
+ val requestOfferOverallWebSocketMessage = RequestOfferOverallWebSocketMessage()
+ requestOfferOverallWebSocketMessage.type = "message"
+ val requestOfferSignalingMessage = RequestOfferSignalingMessage()
+ val actorWebSocketMessage = ActorWebSocketMessage()
+ actorWebSocketMessage.type = "session"
+ actorWebSocketMessage.sessionId = sessionId
+ requestOfferSignalingMessage.actorWebSocketMessage = actorWebSocketMessage
+ val signalingDataWebSocketMessageForOffer = SignalingDataWebSocketMessageForOffer()
+ signalingDataWebSocketMessageForOffer.roomType = roomType
+ signalingDataWebSocketMessageForOffer.type = "requestoffer"
+ requestOfferSignalingMessage.signalingDataWebSocketMessageForOffer =
+ signalingDataWebSocketMessageForOffer
+ requestOfferOverallWebSocketMessage.requestOfferOverallWebSocketMessage =
+ requestOfferSignalingMessage
+ return requestOfferOverallWebSocketMessage
+ }
+
+ fun getAssembledCallMessageModel(ncMessageWrapper: NCMessageWrapper): CallOverallWebSocketMessage {
+ val callOverallWebSocketMessage = CallOverallWebSocketMessage()
+ callOverallWebSocketMessage.type = "message"
+ val callWebSocketMessage = CallWebSocketMessage()
+ val actorWebSocketMessage = ActorWebSocketMessage()
+ actorWebSocketMessage.type = "session"
+ actorWebSocketMessage.sessionId = ncMessageWrapper.signalingMessage.to
+ callWebSocketMessage.recipientWebSocketMessage = actorWebSocketMessage
+ callWebSocketMessage.ncSignalingMessage = ncMessageWrapper.signalingMessage
+ callOverallWebSocketMessage.callWebSocketMessage = callWebSocketMessage
+ return callOverallWebSocketMessage
+ }
+
+ companion object {
+ private val magicWebSocketInstanceMap: MutableMap = HashMap()
+ @Synchronized
+ fun getMagicWebSocketInstanceForUserId(
+ userId: Long): MagicWebSocketInstance? {
+ return if (userId != -1L && magicWebSocketInstanceMap.containsKey(userId)) {
+ magicWebSocketInstanceMap[userId]
+ } else null
+ }
+
+ @Synchronized
+ fun getExternalSignalingInstanceForServer(
+ url: String, userEntity: UserNgEntity, webSocketTicket: String?, isGuest: Boolean): MagicWebSocketInstance? {
+ var generatedURL = url.replace("https://", "wss://").replace("http://", "ws://")
+ generatedURL += if (generatedURL.endsWith("/")) {
+ "spreed"
+ } else {
+ "/spreed"
+ }
+ val userId = if (isGuest) -1 else userEntity.id
+ var magicWebSocketInstance: MagicWebSocketInstance
+ if (userId != -1L && magicWebSocketInstanceMap.containsKey(userEntity.id)) {
+ return magicWebSocketInstanceMap[userEntity.id] as MagicWebSocketInstance
+ } else {
+ if (userId == -1L) {
+ deleteExternalSignalingInstanceForUserEntity(userId)
+ }
+ magicWebSocketInstance = MagicWebSocketInstance(userEntity, generatedURL, webSocketTicket!!)
+ magicWebSocketInstanceMap[userEntity.id] = magicWebSocketInstance
+ return magicWebSocketInstance
+ }
+ }
+
+ @JvmStatic
+ @Synchronized
+ fun deleteExternalSignalingInstanceForUserEntity(id: Long) {
+ var magicWebSocketInstance: MagicWebSocketInstance
+ if (magicWebSocketInstanceMap[id].also { magicWebSocketInstance = it!! } != null) {
+ if (magicWebSocketInstance.isConnected) {
+ magicWebSocketInstance.sendBye()
+ magicWebSocketInstanceMap.remove(id)
+ }
+ }
+ }
+ }
+}
diff --git a/build.gradle b/build.gradle
index 6673348aa..689dab2fe 100644
--- a/build.gradle
+++ b/build.gradle
@@ -22,7 +22,7 @@
buildscript {
ext {
- kotlin_version = '1.3.50'
+ kotlin_version = '1.3.61'
}
repositories {
@@ -33,9 +33,8 @@ buildscript {
}
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.5.2'
+ classpath 'com.android.tools.build:gradle:3.5.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlin_version}"
- classpath "io.realm:realm-gradle-plugin:6.0.0"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
@@ -44,7 +43,7 @@ buildscript {
configurations.all {
// check for updates every build
- resolutionStrategy.cacheChangingModulesFor 3600, 'seconds'
+ //resolutionStrategy.cacheChangingModulesFor 3600, 'seconds'
}
allprojects {
diff --git a/gradle.properties b/gradle.properties
index a8dc25248..7c7ec3f93 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -29,7 +29,7 @@
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
-org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m
+org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=2048m
android.useAndroidX=true
android.enableJetifier=true