Skip to content

Commit d9c268f

Browse files
authored
Merge pull request #16 from QuickBlox/rc-0.10.1
0.10.1
2 parents 0ef856d + 202a0be commit d9c268f

File tree

8 files changed

+62
-11
lines changed

8 files changed

+62
-11
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ Then need to add implementation of QuickBlox UIKit and QuickBlox SDK to dependen
7474

7575
```
7676
dependencies {
77-
implementation "com.quickblox:android-ui-kit:0.10.0"
77+
implementation "com.quickblox:android-ui-kit:0.10.1"
7878
7979
implementation 'com.quickblox:quickblox-android-sdk-messages:4.2.2'
8080
implementation 'com.quickblox:quickblox-android-sdk-chat:4.2.2'

ui-kit/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ ext {
1010
qbSdkVersion = '4.2.2'
1111

1212
uiKitVersionCode = 1
13-
uiKitVersionName = "0.10.0"
13+
uiKitVersionName = "0.10.1"
1414
}
1515

1616
android {

ui-kit/src/main/java/com/quickblox/android_ui_kit/data/source/remote/RemoteDataSourceImpl.kt

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import com.quickblox.chat.JIDHelper
3535
import com.quickblox.chat.QBAbstractChat
3636
import com.quickblox.chat.QBChatService
3737
import com.quickblox.chat.QBGroupChat
38+
import com.quickblox.chat.QBGroupChatManager
3839
import com.quickblox.chat.QBRestChatService
3940
import com.quickblox.chat.model.QBChatDialog
4041
import com.quickblox.chat.model.QBChatMessage
@@ -1052,20 +1053,32 @@ open class RemoteDataSourceImpl : RemoteDataSource {
10521053
val groupChatManager = QBChatService.getInstance().groupChatManager
10531054
val fields = groupChatManager.javaClass.declaredFields
10541055

1055-
val dialogsField: Field = fields[1]
1056-
dialogsField.isAccessible = true
1056+
for (field in fields) {
1057+
if (isGroupChatField(groupChatManager, field)) {
1058+
field.isAccessible = true
10571059

1058-
val dialogsFieldValue = dialogsField.get(groupChatManager)
1060+
val dialogsFieldValue = field.get(groupChatManager)
10591061

1060-
if (dialogsFieldValue is Map<*, *>) {
1061-
val dialogs = dialogsFieldValue as Map<String, QBGroupChat>
1062-
for ((jid, groupChat) in dialogs) {
1063-
joinGroupDialog(groupChat)
1062+
val dialogs = dialogsFieldValue as Map<String, QBGroupChat>
1063+
for ((jid, groupChat) in dialogs) {
1064+
joinGroupDialog(groupChat)
1065+
}
1066+
break
10641067
}
10651068
}
10661069
}
10671070
}
10681071

1072+
private fun isGroupChatField(groupChatManager: QBGroupChatManager, field: Field): Boolean {
1073+
try {
1074+
val dialogsFieldValue = field.get(groupChatManager) as Map<String, QBChatDialog>
1075+
val isFirstKeyString = dialogsFieldValue.keys.toList().get(0) is String
1076+
return isFirstKeyString
1077+
} catch (e: Exception) {
1078+
return false
1079+
}
1080+
}
1081+
10691082
private fun joinGroupDialog(groupChat: QBGroupChat) {
10701083
// TODO: Need to add Exception handling
10711084
try {

ui-kit/src/main/java/com/quickblox/android_ui_kit/presentation/components/dialogs/DialogsComponentImpl.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ class DialogsComponentImpl : LinearLayoutCompat, DialogsComponent {
5050
binding?.rvDialogs?.background = ColorDrawable(theme.getMainBackgroundColor())
5151
binding?.rvDialogs?.itemAnimator = null
5252
binding?.rvDialogs?.adapter = adapter as Adapter<*>
53+
binding?.rvDialogs?.layoutManager = LinearLayoutManagerWrapper(context)
5354

5455
adapter?.setTheme(theme)
5556
adapter?.setDialogAdapterListener(DialogAdapterListenerImpl())
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
* Created by Injoit on 9.1.2025.
3+
* Copyright © 2025 Quickblox. All rights reserved.
4+
*/
5+
6+
package com.quickblox.android_ui_kit.presentation.components.dialogs
7+
8+
import android.content.Context
9+
import android.util.Log
10+
import androidx.recyclerview.widget.LinearLayoutManager
11+
import androidx.recyclerview.widget.RecyclerView
12+
import com.quickblox.android_ui_kit.BuildConfig
13+
14+
class LinearLayoutManagerWrapper(
15+
context: Context, orientation: Int = RecyclerView.VERTICAL, reverseLayout: Boolean = false,
16+
) : LinearLayoutManager(context, orientation, reverseLayout) {
17+
18+
override fun onLayoutChildren(recycler: RecyclerView.Recycler, state: RecyclerView.State) {
19+
try {
20+
super.onLayoutChildren(recycler, state)
21+
} catch (e: IndexOutOfBoundsException) {
22+
if (BuildConfig.DEBUG) {
23+
Log.d("LinearLayoutManager", "IndexOutOfBoundsException in onLayoutChildren", e)
24+
}
25+
}
26+
}
27+
}

ui-kit/src/main/java/com/quickblox/android_ui_kit/presentation/screens/dialogs/DialogsFragment.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,15 +137,22 @@ open class DialogsFragment : BaseFragment() {
137137
DialogsViewModel.DialogChangeType.UPDATED_RANGE -> {
138138
adapter.notifyItemRangeChanged(0, index)
139139
}
140+
140141
DialogsViewModel.DialogChangeType.UPDATED -> {
141142
adapter.notifyItemChanged(index)
142143
}
144+
143145
DialogsViewModel.DialogChangeType.ADDED -> {
144146
adapter.notifyItemInserted(index)
145147
}
148+
146149
DialogsViewModel.DialogChangeType.DELETED -> {
147150
adapter.notifyItemRemoved(index)
148151
}
152+
153+
DialogsViewModel.DialogChangeType.CLEARED -> {
154+
adapter.notifyItemRangeRemoved(0, index)
155+
}
149156
}
150157
}
151158
}
@@ -209,9 +216,11 @@ open class DialogsFragment : BaseFragment() {
209216
DialogEntity.Types.GROUP -> {
210217
startGroupChatActivity(dialogEntity)
211218
}
219+
212220
DialogEntity.Types.PRIVATE -> {
213221
startPrivateChatActivity(dialogEntity)
214222
}
223+
215224
else -> {
216225
showToast(getString(R.string.wrong_dialog_type))
217226
}

ui-kit/src/main/java/com/quickblox/android_ui_kit/presentation/screens/dialogs/DialogsViewModel.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class DialogsViewModel : BaseViewModel() {
2828
private val TAG: String = DialogsViewModel::class.java.simpleName
2929

3030
enum class DialogChangeType {
31-
ADDED, UPDATED, UPDATED_RANGE, DELETED
31+
ADDED, UPDATED, UPDATED_RANGE, DELETED, CLEARED
3232
}
3333

3434
private var connectionRepository = QuickBloxUiKit.getDependency().getConnectionRepository()
@@ -117,7 +117,9 @@ class DialogsViewModel : BaseViewModel() {
117117
getDialogsJob?.cancel()
118118

119119
foundDialogs?.let {
120+
val lastIndex = dialogs.lastIndex
120121
dialogs.clear()
122+
_updatedDialogs.postValue(Pair(DialogChangeType.CLEARED, lastIndex))
121123

122124
for (dialog in it) {
123125
dialogs.add(dialog)

ui-kit/src/main/res/layout/dialogs_component.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@
5959
android:clipToPadding="false"
6060
android:orientation="vertical"
6161
android:paddingBottom="8dp"
62-
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
6362
app:layout_behavior="@string/appbar_scrolling_view_behavior"
6463
tools:listitem="@layout/dialog_group_item" />
6564
</androidx.coordinatorlayout.widget.CoordinatorLayout>

0 commit comments

Comments
 (0)