Skip to content
This repository was archived by the owner on Jun 7, 2020. It is now read-only.

Commit 2832329

Browse files
committed
add leave/hide room and markunread
1 parent d4ebb4b commit 2832329

File tree

18 files changed

+155
-23
lines changed

18 files changed

+155
-23
lines changed

app/src/main/java/chat/rocket/android/chatrooms/adapter/RoomViewHolder.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,6 @@ import kotlinx.android.synthetic.main.unread_messages_badge.view.*
1717
class RoomViewHolder(itemView: View, private val listener: (RoomUiModel) -> Unit, actionsListener: ActionsListener) :
1818
ViewHolder<RoomItemHolder>(itemView, actionsListener) {
1919

20-
init {
21-
with(itemView) {
22-
setupActionMenu(itemView)
23-
}
24-
}
2520
private val resources: Resources = itemView.resources
2621
private val channelIcon: Drawable = resources.getDrawable(R.drawable.ic_hashtag_12dp, null)
2722
private val groupIcon: Drawable = resources.getDrawable(R.drawable.ic_lock_12_dp, null)
@@ -30,6 +25,12 @@ class RoomViewHolder(itemView: View, private val listener: (RoomUiModel) -> Unit
3025
private val busyIcon: Drawable = resources.getDrawable(R.drawable.ic_status_busy_12dp, null)
3126
private val offlineIcon: Drawable = resources.getDrawable(R.drawable.ic_status_invisible_12dp, null)
3227

28+
init {
29+
with(itemView) {
30+
setupActionMenu(itemView)
31+
}
32+
}
33+
3334
override fun bindViews(data: RoomItemHolder) {
3435
val room = data.data
3536
with(itemView) {

app/src/main/java/chat/rocket/android/chatrooms/adapter/RoomsAdapter.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,13 @@ class RoomsAdapter(private val listener: (RoomUiModel) -> Unit, presenter: ChatR
8585
presenter.toggleFavoriteChatRoom(this.id, this.favorite==true)
8686
}
8787
R.id.action_leave_room-> {
88-
88+
presenter.leaveChatRoom(this.id, this.type)
8989
}
9090
R.id.action_read->{
91-
this.unread.ifNotNullNorEmpty{ presenter.markRoomAsRead(this.id) }
91+
presenter.toggleMarkRead(this.id, this.unread)
9292
}
9393
R.id.action_hide_room->{
94-
94+
presenter.hideRoom(this.id, this.type)
9595
}
9696
else -> TODO("Not implemented")
9797
}

app/src/main/java/chat/rocket/android/chatrooms/adapter/ViewHolder.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import chat.rocket.android.R
1515
import chat.rocket.android.chatroom.ui.bottomsheet.ChatRoomActionBottomSheet
1616
import chat.rocket.android.chatroom.ui.bottomsheet.MessageActionsBottomSheet
1717
import chat.rocket.android.chatrooms.adapter.model.RoomUiModel
18+
import chat.rocket.android.util.extensions.ifNotNullNorEmpty
1819
import chat.rocket.android.util.extensions.inflate
1920
import chat.rocket.android.util.extensions.toList
2021
import chat.rocket.core.model.isSystemMessage
@@ -50,10 +51,13 @@ abstract class ViewHolder<T : ItemHolder<*>>(
5051
vm.data.let {
5152
val menuItems = view.context.inflate(R.menu.chatrooms_action).toList()
5253
menuItems.find { it.itemId == R.id.action_favorite_room }?.apply {
53-
setTitle(if ((it as RoomUiModel).favorite == true) R.string.title_unfavorite_chat else R.string.title_favorite_chat)
54+
setTitle(if ((it as RoomUiModel).favorite == true) R.string.action_unfavorite else R.string.action_favorite)
5455
setIcon(if (it.favorite == true) R.drawable.ic_star_black_24dp else R.drawable.ic_star_border_black_24dp)
5556
isChecked = (it.favorite==true)
5657
}
58+
menuItems.find { it.itemId == R.id.action_read }?.apply {
59+
setTitle(if ((it as RoomUiModel).unread.isNullOrEmpty()) R.string.action_mark_unread else R.string.action_mark_read)
60+
}
5761
view.context?.let {
5862
if (it is ContextThemeWrapper && it is AppCompatActivity) {
5963
with(it) {

app/src/main/java/chat/rocket/android/chatrooms/presentation/ChatRoomsPresenter.kt

Lines changed: 57 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
11
package chat.rocket.android.chatrooms.presentation
22

3+
import android.util.Log
34
import chat.rocket.android.R
45
import chat.rocket.android.chatrooms.adapter.model.RoomUiModel
56
import chat.rocket.android.chatrooms.domain.FetchChatRoomsInteractor
67
import chat.rocket.android.core.lifecycle.CancelStrategy
78
import chat.rocket.android.db.DatabaseManager
89
import chat.rocket.android.db.model.ChatRoomEntity
10+
import chat.rocket.android.db.model.FullMessage
911
import chat.rocket.android.helper.UserHelper
1012
import chat.rocket.android.infrastructure.LocalRepository
1113
import chat.rocket.android.main.presentation.MainNavigator
1214
import chat.rocket.android.server.domain.SettingsRepository
1315
import chat.rocket.android.server.domain.useRealName
1416
import chat.rocket.android.server.domain.useSpecialCharsOnRoom
1517
import chat.rocket.android.server.infraestructure.ConnectionManager
18+
import chat.rocket.android.server.infraestructure.DatabaseMessageMapper
19+
import chat.rocket.android.server.infraestructure.DatabaseMessagesRepository
1620
import chat.rocket.android.util.extension.launchUI
1721
import chat.rocket.android.util.retryDB
1822
import chat.rocket.android.util.retryIO
@@ -22,10 +26,7 @@ import chat.rocket.common.model.User
2226
import chat.rocket.common.model.roomTypeOf
2327
import chat.rocket.common.util.ifNull
2428
import chat.rocket.core.internal.realtime.createDirectMessage
25-
import chat.rocket.core.internal.rest.favorite
26-
import chat.rocket.core.internal.rest.markAsRead
27-
import chat.rocket.core.internal.rest.me
28-
import chat.rocket.core.internal.rest.show
29+
import chat.rocket.core.internal.rest.*
2930
import kotlinx.coroutines.withTimeout
3031
import timber.log.Timber
3132
import javax.inject.Inject
@@ -153,8 +154,13 @@ class ChatRoomsPresenter @Inject constructor(
153154
// Note that if it is favorite then the user wants to unfavorite - and vice versa.
154155
retryIO("favorite($roomId, $isFavorite)") {
155156
client.favorite(roomId, !isFavorite)
157+
val rooms = retryIO("fetch chatRooms", times = 10,
158+
initialDelay = 200, maxDelay = 2000) {
159+
client.chatRooms().update
160+
}
161+
Timber.d("Refreshing rooms: $rooms")
162+
dbManager.processRooms(rooms)
156163
}
157-
// view.showFavoriteIcon(!isFavorite)
158164
} catch (e: RocketChatException) {
159165
Timber.e(e, "Error while trying to favorite/unfavorite chat room.")
160166
e.message?.let {
@@ -166,10 +172,54 @@ class ChatRoomsPresenter @Inject constructor(
166172
}
167173
}
168174

169-
fun markRoomAsRead(roomId: String) {
175+
fun toggleMarkRead(roomId: String, unread: String?) {
170176
launchUI(strategy) {
171177
try {
172-
retryIO(description = "markAsRead($roomId)") { client.markAsRead(roomId) }
178+
if(unread.isNullOrEmpty()) {
179+
retryIO(description = "markAsUnread($roomId)") { client.markAsUnread(roomId) }
180+
val rooms = retryIO("fetch chatRooms", times = 10,
181+
initialDelay = 200, maxDelay = 2000) {
182+
client.chatRooms().update
183+
}
184+
Timber.d("Refreshing rooms: $rooms")
185+
dbManager.processRooms(rooms)
186+
}
187+
else
188+
retryIO(description = "markAsRead($roomId)") { client.markAsRead(roomId) }
189+
} catch (ex: RocketChatException) {
190+
view.showMessage(ex.message!!) // TODO Remove.
191+
Timber.e(ex) // FIXME: Right now we are only catching the exception with Timber.
192+
}
193+
}
194+
}
195+
196+
fun leaveChatRoom(roomId: String, roomType: RoomType) {
197+
launchUI(strategy) {
198+
try {
199+
retryIO(description = "leaveChat($roomId, $roomType)") { client.leaveChat(roomId, roomType) }
200+
val rooms = retryIO("fetch chatRooms", times = 10,
201+
initialDelay = 200, maxDelay = 2000) {
202+
client.chatRooms().update
203+
}
204+
Timber.d("Refreshing rooms: $rooms")
205+
dbManager.processRooms(rooms)
206+
} catch (ex: RocketChatException) {
207+
view.showMessage(ex.message!!) // TODO Remove.
208+
Timber.e(ex) // FIXME: Right now we are only catching the exception with Timber.
209+
}
210+
}
211+
}
212+
213+
fun hideRoom(roomId: String, roomType: RoomType) {
214+
launchUI(strategy) {
215+
try {
216+
retryIO(description = "hide($roomId, $roomType, ${true})") { client.hide(roomId, roomType, hideRoom = true) }
217+
val rooms = retryIO("fetch chatRooms", times = 10,
218+
initialDelay = 200, maxDelay = 2000) {
219+
client.chatRooms().update
220+
}
221+
Timber.d("Refreshing rooms: $rooms")
222+
dbManager.processRooms(rooms)
173223
} catch (ex: RocketChatException) {
174224
view.showMessage(ex.message!!) // TODO Remove.
175225
Timber.e(ex) // FIXME: Right now we are only catching the exception with Timber.

app/src/main/java/chat/rocket/android/chatrooms/presentation/ChatRoomsView.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,4 @@ interface ChatRoomsView : LoadingView, MessageView {
88

99
fun hideLoadingRoom()
1010

11-
// fun showFavoriteIcon(isFavorite:Boolean)
12-
1311
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="24.0"
5+
android:viewportHeight="24.0">
6+
<path
7+
android:fillColor="#FF000000"
8+
android:pathData="M10.09,15.59L11.5,17l5,-5 -5,-5 -1.41,1.41L12.67,11H3v2h9.67l-2.58,2.59zM19,3H5c-1.11,0 -2,0.9 -2,2v4h2V5h14v14H5v-4H3v4c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2V5c0,-1.1 -0.9,-2 -2,-2z"/>
9+
</vector>

app/src/main/res/menu/chatrooms_action.xml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,21 @@
55
<item
66
android:id="@+id/action_hide_room"
77
android:icon="@drawable/ic_visibility_off_black_24dp"
8-
android:title="Hide Room" />
8+
android:title="@string/action_hide_room" />
99

1010
<item
1111
android:id="@+id/action_read"
1212
android:icon="@drawable/ic_flag_black_24dp"
13-
android:title="Mark as Read" />
13+
android:title="@string/action_mark_read" />
1414

1515
<item
1616
android:id="@+id/action_favorite_room"
1717
android:icon="@drawable/ic_star_border_black_24dp"
18-
android:title="Favorite" />
18+
android:title="@string/action_favorite" />
1919

2020
<item
2121
android:id="@+id/action_leave_room"
22-
android:icon="@drawable/ic_star_border_black_24dp"
23-
android:title="Leave Room" />
22+
android:icon="@drawable/ic_leave_room_black_24dp"
23+
android:title="@string/action_leave_room" />
2424

2525
</menu>

app/src/main/res/values-de/strings.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@
4444
<string name="action_create">Erstelle</string>
4545
<string name="action_logout">Abmelden</string>
4646
<string name="action_attach_a_files">Eine Datei anhängen</string>
47+
<string name="action_mark_unread">Mark As Unread</string><!-- TODO Add translation -->
48+
<string name="action_mark_read">Mark As Read</string><!-- TODO Add translation -->
49+
<string name="action_hide_room">Hide Room</string><!-- TODO Add translation -->
50+
<string name="action_leave_room">Leave Room</string><!-- TODO Add translation -->
51+
<string name="action_favorite">Favorite</string><!-- TODO Add translation -->
52+
<string name="action_unfavorite">Unfavorite</string><!-- TODO Add translation -->
4753
<string name="action_confirm_password">Bestätige Passwort Änderung</string>
4854
<string name="action_join_chat">Trete Chat bei</string>
4955
<string name="action_add_account">Erstelle Account</string>

app/src/main/res/values-es/strings.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@
4040
<string name="action_create_channel">Crear canal</string>
4141
<string name="action_create">Create</string>
4242
<string name="action_logout">Cerrar sesión</string>
43+
<string name="action_mark_unread">Mark As Unread</string><!-- TODO Add translation -->
44+
<string name="action_mark_read">Mark As Read</string><!-- TODO Add translation -->
45+
<string name="action_hide_room">Hide Room</string><!-- TODO Add translation -->
46+
<string name="action_leave_room">Leave Room</string><!-- TODO Add translation -->
47+
<string name="action_favorite">Favorite</string><!-- TODO Add translation -->
48+
<string name="action_unfavorite">Unfavorite</string><!-- TODO Add translation -->
4349
<string name="action_attach_a_files">Attach a file</string> <!-- TODO Add translation -->
4450
<string name="action_confirm_password">Confirmar cambio de contraseña</string>
4551
<string name="action_join_chat">Unirse al chat</string>

app/src/main/res/values-fr/strings.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,15 @@
2525
<string name="title_licence">les permis</string>
2626
<string name="title_are_you_sure">Êtes-vous sûr?</string>
2727
<string name="title_channel_details">Détails de la chaîne</string>
28+
<string name="action_mark_unread">Mark As Unread</string><!-- TODO Add translation -->
29+
<string name="action_mark_read">Mark As Read</string><!-- TODO Add translation -->
30+
<string name="action_hide_room">Hide Room</string><!-- TODO Add translation -->
31+
<string name="action_leave_room">Leave Room</string><!-- TODO Add translation -->
32+
<string name="action_favorite">Favorite</string><!-- TODO Add translation -->
33+
<string name="action_unfavorite">Unfavorite</string><!-- TODO Add translation -->
34+
<string name="title_licence">Licence</string> <!-- TODO Add translation -->
35+
<string name="title_are_you_sure">Are you sure?</string> <!-- TODO Add translation -->
36+
<string name="title_channel_details">Channel Details</string> <!-- TODO add translation -->
2837
<string name="title_topic">Sujet</string>
2938
<string name="title_announcement">Annonce</string>
3039
<string name="title_description">La description</string>

0 commit comments

Comments
 (0)