Skip to content

Commit 3a44941

Browse files
authored
Merge pull request #5621 from nextcloud/fixCurrentUserCrashes
Fix "current user" crashes
2 parents cdaaf39 + 8f72798 commit 3a44941

File tree

109 files changed

+1344
-784
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

109 files changed

+1344
-784
lines changed

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ dependencies {
201201
implementation fileTree(include: ['*'], dir: 'libs')
202202

203203
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0"
204+
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-rx2:$coroutines_version"
204205

205206
implementation 'androidx.appcompat:appcompat:1.7.1'
206207
implementation 'com.google.android.material:material:1.13.0'

app/src/androidTest/java/com/nextcloud/talk/ui/LoginIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public void login() throws InterruptedException {
125125

126126
activityScenario.onActivity(activity -> {
127127
assertEquals(loginName,
128-
Objects.requireNonNull(activity.currentUserProvider.getCurrentUser().blockingGet()).getUserId());
128+
Objects.requireNonNull(activity.currentUserProviderOld.getCurrentUser().blockingGet()).getUserId());
129129
});
130130
}
131131
}

app/src/main/java/com/nextcloud/talk/account/AccountVerificationActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,7 @@ class AccountVerificationActivity : BaseActivity() {
416416
cookieManager.cookieStore.removeAll()
417417

418418
if (userManager.users.blockingGet().size == 1 ||
419-
currentUserProvider.currentUser.blockingGet().id != internalAccountId
419+
currentUserProviderOld.currentUser.blockingGet().id != internalAccountId
420420
) {
421421
val userToSetAsActive = userManager.getUserWithId(internalAccountId).blockingGet()
422422
Log.d(TAG, "userToSetAsActive: " + userToSetAsActive.username)

app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ import com.nextcloud.talk.utils.FileViewerUtils
4242
import com.nextcloud.talk.utils.UriUtils
4343
import com.nextcloud.talk.utils.adjustUIForAPILevel35
4444
import com.nextcloud.talk.utils.bundle.BundleKeys
45-
import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
45+
import com.nextcloud.talk.utils.database.user.CurrentUserProvider
46+
import com.nextcloud.talk.utils.database.user.CurrentUserProviderOld
4647
import com.nextcloud.talk.utils.preferences.AppPreferences
4748
import com.nextcloud.talk.utils.ssl.TrustManager
4849
import org.greenrobot.eventbus.EventBus
@@ -74,8 +75,12 @@ open class BaseActivity : AppCompatActivity() {
7475
@Inject
7576
lateinit var context: Context
7677

78+
@Deprecated("Use CurrentUserProvider instead")
7779
@Inject
78-
lateinit var currentUserProvider: CurrentUserProviderNew
80+
lateinit var currentUserProviderOld: CurrentUserProviderOld
81+
82+
@Inject
83+
lateinit var currentUserProvider: CurrentUserProvider
7984

8085
open val appBarLayoutType: AppBarLayoutType
8186
get() = AppBarLayoutType.TOOLBAR
@@ -254,7 +259,7 @@ open class BaseActivity : AppCompatActivity() {
254259
}
255260

256261
override fun startActivity(intent: Intent) {
257-
val user = currentUserProvider.currentUser.blockingGet()
262+
val user = currentUserProviderOld.currentUser.blockingGet()
258263
if (intent.data != null && TextUtils.equals(intent.action, Intent.ACTION_VIEW)) {
259264
val uri = intent.data.toString()
260265
if (user?.baseUrl != null && uri.startsWith(user.baseUrl!!)) {

app/src/main/java/com/nextcloud/talk/activities/CallActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,7 @@ class CallActivity : CallBaseActivity() {
434434

435435
hideNavigationIfNoPipAvailable()
436436
processExtras(intent.extras!!)
437-
conversationUser = currentUserProvider.currentUser.blockingGet()
437+
conversationUser = currentUserProviderOld.currentUser.blockingGet()
438438

439439
credentials = ApiUtils.getCredentials(conversationUser!!.username, conversationUser!!.token)
440440
if (TextUtils.isEmpty(baseUrl)) {

app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ class MainActivity :
166166
val user = userId.substringBeforeLast("@")
167167
val baseUrl = userId.substringAfterLast("@")
168168

169-
if (currentUserProvider.currentUser.blockingGet()?.baseUrl!!.endsWith(baseUrl) == true) {
169+
if (currentUserProviderOld.currentUser.blockingGet()?.baseUrl!!.endsWith(baseUrl) == true) {
170170
startConversation(user)
171171
} else {
172172
Snackbar.make(
@@ -183,7 +183,7 @@ class MainActivity :
183183
private fun startConversation(userId: String) {
184184
val roomType = "1"
185185

186-
val currentUser = currentUserProvider.currentUser.blockingGet()
186+
val currentUser = currentUserProviderOld.currentUser.blockingGet()
187187

188188
val apiVersion = ApiUtils.getConversationApiVersion(currentUser, intArrayOf(ApiUtils.API_V4, 1))
189189
val credentials = ApiUtils.getCredentials(currentUser?.username, currentUser?.token)

app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingTextMessageViewHolder.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import com.nextcloud.talk.utils.ChatMessageUtils
3636
import com.nextcloud.talk.utils.DateUtils
3737
import com.nextcloud.talk.utils.SpreedFeatures
3838
import com.nextcloud.talk.utils.TextMatchers
39-
import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
39+
import com.nextcloud.talk.utils.database.user.CurrentUserProviderOld
4040
import com.nextcloud.talk.utils.message.MessageCheckboxUtils.addCheckboxLine
4141
import com.nextcloud.talk.utils.message.MessageCheckboxUtils.addPlainTextLine
4242
import com.nextcloud.talk.utils.message.MessageCheckboxUtils.matchCheckbox
@@ -75,7 +75,7 @@ class IncomingTextMessageViewHolder(itemView: View, payload: Any) :
7575
lateinit var dateUtils: DateUtils
7676

7777
@Inject
78-
lateinit var currentUserProvider: CurrentUserProviderNew
78+
lateinit var currentUserProvider: CurrentUserProviderOld
7979

8080
lateinit var commonMessageInterface: CommonMessageInterface
8181

app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingTextMessageViewHolder.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ import com.nextcloud.talk.utils.CapabilitiesUtil.hasSpreedFeatureCapability
4141
import com.nextcloud.talk.utils.DateUtils
4242
import com.nextcloud.talk.utils.SpreedFeatures
4343
import com.nextcloud.talk.utils.TextMatchers
44-
import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
44+
import com.nextcloud.talk.utils.database.user.CurrentUserProviderOld
4545
import com.nextcloud.talk.utils.message.MessageCheckboxUtils.addCheckboxLine
4646
import com.nextcloud.talk.utils.message.MessageCheckboxUtils.addPlainTextLine
4747
import com.nextcloud.talk.utils.message.MessageCheckboxUtils.matchCheckbox
@@ -86,7 +86,7 @@ class OutcomingTextMessageViewHolder(itemView: View) :
8686
lateinit var chatRepository: ChatMessageRepository
8787

8888
@Inject
89-
lateinit var currentUserProvider: CurrentUserProviderNew
89+
lateinit var currentUserProvider: CurrentUserProviderOld
9090

9191
private var job: Job? = null
9292

app/src/main/java/com/nextcloud/talk/adapters/messages/SystemMessageViewHolder.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import com.nextcloud.talk.chat.data.model.ChatMessage
2828
import com.nextcloud.talk.databinding.ItemSystemMessageBinding
2929
import com.nextcloud.talk.utils.DateUtils
3030
import com.nextcloud.talk.utils.DisplayUtils
31-
import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
31+
import com.nextcloud.talk.utils.database.user.CurrentUserProviderOld
3232
import com.nextcloud.talk.utils.preferences.AppPreferences
3333
import com.stfalcon.chatkit.messages.MessageHolders
3434
import javax.inject.Inject
@@ -41,7 +41,7 @@ class SystemMessageViewHolder(itemView: View) :
4141
private val binding: ItemSystemMessageBinding = ItemSystemMessageBinding.bind(itemView)
4242

4343
@Inject
44-
lateinit var currentUserProvider: CurrentUserProviderNew
44+
lateinit var currentUserProvider: CurrentUserProviderOld
4545

4646
@JvmField
4747
@Inject

app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt

Lines changed: 45 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ class ChatActivity :
370370
var conversationThreadId: Long? = null
371371
var openedViaNotification: Boolean = false
372372
var conversationThreadInfo: ThreadInfo? = null
373-
var conversationUser: User? = null
373+
lateinit var conversationUser: User
374374
lateinit var spreedCapabilities: SpreedCapability
375375
var chatApiVersion: Int = 1
376376
private var roomPassword: String = ""
@@ -509,34 +509,41 @@ class ChatActivity :
509509
colorizeNavigationBar()
510510
}
511511

512-
conversationUser = currentUserProvider.currentUser.blockingGet()
513-
handleIntent(intent)
514-
515512
chatViewModel = ViewModelProvider(this, viewModelFactory)[ChatViewModel::class.java]
516513

517514
conversationInfoViewModel = ViewModelProvider(this, viewModelFactory)[ConversationInfoViewModel::class.java]
518515

519516
contextChatViewModel = ViewModelProvider(this, viewModelFactory)[ContextChatViewModel::class.java]
520517

521-
val urlForChatting = ApiUtils.getUrlForChat(chatApiVersion, conversationUser?.baseUrl, roomToken)
522-
val credentials = ApiUtils.getCredentials(conversationUser!!.username, conversationUser!!.token)
523-
chatViewModel.initData(
524-
credentials!!,
525-
urlForChatting,
526-
roomToken,
527-
conversationThreadId
528-
)
518+
lifecycleScope.launch {
519+
currentUserProvider.getCurrentUser()
520+
.onSuccess { user ->
521+
conversationUser = user
522+
handleIntent(intent)
523+
val urlForChatting = ApiUtils.getUrlForChat(chatApiVersion, conversationUser?.baseUrl, roomToken)
524+
val credentials = ApiUtils.getCredentials(conversationUser!!.username, conversationUser!!.token)
525+
chatViewModel.initData(
526+
user,
527+
credentials!!,
528+
urlForChatting,
529+
roomToken,
530+
conversationThreadId
531+
)
529532

530-
conversationThreadId?.let {
531-
val threadUrl = ApiUtils.getUrlForThread(
532-
version = 1,
533-
baseUrl = conversationUser!!.baseUrl,
534-
token = roomToken,
535-
threadId = it.toInt()
536-
)
537-
chatViewModel.getThread(credentials, threadUrl)
533+
conversationThreadId?.let {
534+
val threadUrl = ApiUtils.getUrlForThread(
535+
version = 1,
536+
baseUrl = conversationUser!!.baseUrl,
537+
token = roomToken,
538+
threadId = it.toInt()
539+
)
540+
chatViewModel.getThread(credentials, threadUrl)
541+
}
542+
}
543+
.onFailure {
544+
Snackbar.make(binding.root, R.string.nc_common_error_sorry, Snackbar.LENGTH_LONG).show()
545+
}
538546
}
539-
540547
messageInputFragment = getMessageInputFragment()
541548
messageInputViewModel = ViewModelProvider(this, viewModelFactory)[MessageInputViewModel::class.java]
542549
messageInputViewModel.setData(chatViewModel.getChatRepository())
@@ -1412,7 +1419,10 @@ class ChatActivity :
14121419

14131420
cancelNotificationsForCurrentConversation()
14141421

1415-
chatViewModel.getRoom(roomToken)
1422+
chatViewModel.getRoom(
1423+
conversationUser,
1424+
roomToken
1425+
)
14161426

14171427
actionBar?.show()
14181428

@@ -1891,7 +1901,10 @@ class ChatActivity :
18911901
}
18921902
getRoomInfoTimerHandler?.postDelayed(
18931903
{
1894-
chatViewModel.getRoom(roomToken)
1904+
chatViewModel.getRoom(
1905+
conversationUser,
1906+
roomToken
1907+
)
18951908
},
18961909
if (delay > 0) delay else delayForRecursiveCall
18971910
)
@@ -3636,18 +3649,20 @@ class ChatActivity :
36363649
}
36373650

36383651
private fun handleSystemMessages(chatMessageList: List<ChatMessage>): List<ChatMessage> {
3639-
val chatMessageMap = chatMessageList.associateBy { it.id }.toMutableMap()
3652+
fun shouldRemoveMessage(currentMessage: MutableMap.MutableEntry<String, ChatMessage>): Boolean =
3653+
isInfoMessageAboutDeletion(currentMessage) ||
3654+
isReactionsMessage(currentMessage) ||
3655+
isPollVotedMessage(currentMessage) ||
3656+
isEditMessage(currentMessage) ||
3657+
isThreadCreatedMessage(currentMessage)
36403658

3659+
val chatMessageMap = chatMessageList.associateBy { it.id }.toMutableMap()
36413660
val chatMessageIterator = chatMessageMap.iterator()
3661+
36423662
while (chatMessageIterator.hasNext()) {
36433663
val currentMessage = chatMessageIterator.next()
36443664

3645-
if (isInfoMessageAboutDeletion(currentMessage) ||
3646-
isReactionsMessage(currentMessage) ||
3647-
isPollVotedMessage(currentMessage) ||
3648-
isEditMessage(currentMessage) ||
3649-
isThreadCreatedMessage(currentMessage)
3650-
) {
3665+
if (shouldRemoveMessage(currentMessage)) {
36513666
chatMessageIterator.remove()
36523667
}
36533668
}

0 commit comments

Comments
 (0)