Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
AloqaIM-Android
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
AloqaIM-Android
Commits
d34e779d
Unverified
Commit
d34e779d
authored
May 14, 2019
by
Filipe Brito
Committed by
GitHub
May 14, 2019
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2212 from Adizbek/swipe-to-reply
[NEW] Swipe to reply message
parents
723d155d
7f4982bd
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
66 additions
and
19 deletions
+66
-19
ChatRoomFragment.kt
.../java/chat/rocket/android/chatroom/ui/ChatRoomFragment.kt
+66
-19
No files found.
app/src/main/java/chat/rocket/android/chatroom/ui/ChatRoomFragment.kt
View file @
d34e779d
...
@@ -29,14 +29,17 @@ import androidx.core.view.isVisible
...
@@ -29,14 +29,17 @@ import androidx.core.view.isVisible
import
androidx.fragment.app.Fragment
import
androidx.fragment.app.Fragment
import
androidx.fragment.app.FragmentManager
import
androidx.fragment.app.FragmentManager
import
androidx.recyclerview.widget.DefaultItemAnimator
import
androidx.recyclerview.widget.DefaultItemAnimator
import
androidx.recyclerview.widget.ItemTouchHelper
import
androidx.recyclerview.widget.LinearLayoutManager
import
androidx.recyclerview.widget.LinearLayoutManager
import
androidx.recyclerview.widget.RecyclerView
import
androidx.recyclerview.widget.RecyclerView
import
chat.rocket.android.R
import
chat.rocket.android.R
import
chat.rocket.android.analytics.AnalyticsManager
import
chat.rocket.android.analytics.AnalyticsManager
import
chat.rocket.android.analytics.event.ScreenViewEvent
import
chat.rocket.android.analytics.event.ScreenViewEvent
import
chat.rocket.android.chatroom.adapter.AttachmentViewHolder
import
chat.rocket.android.chatroom.adapter.ChatRoomAdapter
import
chat.rocket.android.chatroom.adapter.ChatRoomAdapter
import
chat.rocket.android.chatroom.adapter.CommandSuggestionsAdapter
import
chat.rocket.android.chatroom.adapter.CommandSuggestionsAdapter
import
chat.rocket.android.chatroom.adapter.EmojiSuggestionsAdapter
import
chat.rocket.android.chatroom.adapter.EmojiSuggestionsAdapter
import
chat.rocket.android.chatroom.adapter.MessageViewHolder
import
chat.rocket.android.chatroom.adapter.PEOPLE
import
chat.rocket.android.chatroom.adapter.PEOPLE
import
chat.rocket.android.chatroom.adapter.PeopleSuggestionsAdapter
import
chat.rocket.android.chatroom.adapter.PeopleSuggestionsAdapter
import
chat.rocket.android.chatroom.adapter.RoomSuggestionsAdapter
import
chat.rocket.android.chatroom.adapter.RoomSuggestionsAdapter
...
@@ -156,7 +159,7 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
...
@@ -156,7 +159,7 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
lateinit
var
analyticsManager
:
AnalyticsManager
lateinit
var
analyticsManager
:
AnalyticsManager
@Inject
@Inject
lateinit
var
navigator
:
ChatRoomNavigator
lateinit
var
navigator
:
ChatRoomNavigator
private
lateinit
var
a
dapter
:
ChatRoomAdapter
private
lateinit
var
chatRoomA
dapter
:
ChatRoomAdapter
internal
lateinit
var
chatRoomId
:
String
internal
lateinit
var
chatRoomId
:
String
private
lateinit
var
chatRoomName
:
String
private
lateinit
var
chatRoomName
:
String
internal
lateinit
var
chatRoomType
:
String
internal
lateinit
var
chatRoomType
:
String
...
@@ -289,7 +292,7 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
...
@@ -289,7 +292,7 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
}
}
?:
requireNotNull
(
arguments
)
{
"no arguments supplied when the fragment was instantiated"
}
?:
requireNotNull
(
arguments
)
{
"no arguments supplied when the fragment was instantiated"
}
a
dapter
=
ChatRoomAdapter
(
chatRoomA
dapter
=
ChatRoomAdapter
(
roomId
=
chatRoomId
,
roomId
=
chatRoomId
,
roomType
=
chatRoomType
,
roomType
=
chatRoomType
,
roomName
=
chatRoomName
,
roomName
=
chatRoomName
,
...
@@ -388,7 +391,7 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
...
@@ -388,7 +391,7 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
override
fun
showMessages
(
dataSet
:
List
<
BaseUiModel
<*
>>,
clearDataSet
:
Boolean
)
{
override
fun
showMessages
(
dataSet
:
List
<
BaseUiModel
<*
>>,
clearDataSet
:
Boolean
)
{
ui
{
ui
{
if
(
clearDataSet
)
{
if
(
clearDataSet
)
{
a
dapter
.
clearData
()
chatRoomA
dapter
.
clearData
()
}
}
if
(
dataSet
.
isNotEmpty
())
{
if
(
dataSet
.
isNotEmpty
())
{
...
@@ -429,22 +432,22 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
...
@@ -429,22 +432,22 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
}
}
}
}
val
oldMessagesCount
=
a
dapter
.
itemCount
val
oldMessagesCount
=
chatRoomA
dapter
.
itemCount
a
dapter
.
appendData
(
dataSet
)
chatRoomA
dapter
.
appendData
(
dataSet
)
if
(
oldMessagesCount
==
0
&&
dataSet
.
isNotEmpty
())
{
if
(
oldMessagesCount
==
0
&&
dataSet
.
isNotEmpty
())
{
recycler_view
.
scrollToPosition
(
0
)
recycler_view
.
scrollToPosition
(
0
)
verticalScrollOffset
.
set
(
0
)
verticalScrollOffset
.
set
(
0
)
}
}
empty_chat_view
.
isVisible
=
a
dapter
.
itemCount
==
0
empty_chat_view
.
isVisible
=
chatRoomA
dapter
.
itemCount
==
0
dismissEmojiKeyboard
()
dismissEmojiKeyboard
()
}
}
}
}
override
fun
showSearchedMessages
(
dataSet
:
List
<
BaseUiModel
<*
>>)
{
override
fun
showSearchedMessages
(
dataSet
:
List
<
BaseUiModel
<*
>>)
{
recycler_view
.
removeOnScrollListener
(
endlessRecyclerViewScrollListener
)
recycler_view
.
removeOnScrollListener
(
endlessRecyclerViewScrollListener
)
a
dapter
.
clearData
()
chatRoomA
dapter
.
clearData
()
a
dapter
.
prependData
(
dataSet
)
chatRoomA
dapter
.
prependData
(
dataSet
)
empty_chat_view
.
isVisible
=
a
dapter
.
itemCount
==
0
empty_chat_view
.
isVisible
=
chatRoomA
dapter
.
itemCount
==
0
dismissEmojiKeyboard
()
dismissEmojiKeyboard
()
}
}
...
@@ -527,7 +530,7 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
...
@@ -527,7 +530,7 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
override
fun
showNewMessage
(
message
:
List
<
BaseUiModel
<*
>>,
isMessageReceived
:
Boolean
)
{
override
fun
showNewMessage
(
message
:
List
<
BaseUiModel
<*
>>,
isMessageReceived
:
Boolean
)
{
ui
{
ui
{
a
dapter
.
prependData
(
message
)
chatRoomA
dapter
.
prependData
(
message
)
if
(
isMessageReceived
&&
button_fab
.
isVisible
)
{
if
(
isMessageReceived
&&
button_fab
.
isVisible
)
{
newMessageCount
++
newMessageCount
++
if
(
newMessageCount
<=
99
)
{
if
(
newMessageCount
<=
99
)
{
...
@@ -540,7 +543,7 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
...
@@ -540,7 +543,7 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
recycler_view
.
scrollToPosition
(
0
)
recycler_view
.
scrollToPosition
(
0
)
}
}
verticalScrollOffset
.
set
(
0
)
verticalScrollOffset
.
set
(
0
)
empty_chat_view
.
isVisible
=
a
dapter
.
itemCount
==
0
empty_chat_view
.
isVisible
=
chatRoomA
dapter
.
itemCount
==
0
dismissEmojiKeyboard
()
dismissEmojiKeyboard
()
}
}
}
}
...
@@ -550,9 +553,9 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
...
@@ -550,9 +553,9 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
// TODO - investigate WHY we get a empty list here
// TODO - investigate WHY we get a empty list here
if
(
message
.
isEmpty
())
return
@ui
if
(
message
.
isEmpty
())
return
@ui
if
(
a
dapter
.
updateItem
(
message
.
last
()))
{
if
(
chatRoomA
dapter
.
updateItem
(
message
.
last
()))
{
if
(
message
.
size
>
1
)
{
if
(
message
.
size
>
1
)
{
a
dapter
.
prependData
(
listOf
(
message
.
first
()))
chatRoomA
dapter
.
prependData
(
listOf
(
message
.
first
()))
}
}
}
else
{
}
else
{
showNewMessage
(
message
,
true
)
showNewMessage
(
message
,
true
)
...
@@ -563,7 +566,7 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
...
@@ -563,7 +566,7 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
override
fun
dispatchDeleteMessage
(
msgId
:
String
)
{
override
fun
dispatchDeleteMessage
(
msgId
:
String
)
{
ui
{
ui
{
a
dapter
.
removeItem
(
msgId
)
chatRoomA
dapter
.
removeItem
(
msgId
)
}
}
}
}
...
@@ -793,11 +796,55 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
...
@@ -793,11 +796,55 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
}
}
}
}
recycler_view
.
adapter
=
adapter
with
(
recycler_view
)
{
recycler_view
.
addOnScrollListener
(
fabScrollListener
)
adapter
=
chatRoomAdapter
recycler_view
.
addOnScrollListener
(
endlessRecyclerViewScrollListener
)
addOnScrollListener
(
endlessRecyclerViewScrollListener
)
recycler_view
.
addOnLayoutChangeListener
(
layoutChangeListener
)
addOnLayoutChangeListener
(
layoutChangeListener
)
recycler_view
.
addOnScrollListener
(
onScrollListener
)
addOnScrollListener
(
onScrollListener
)
addOnScrollListener
(
fabScrollListener
)
}
if
(!
isReadOnly
)
{
val
touchCallback
:
ItemTouchHelper
.
SimpleCallback
=
object
:
ItemTouchHelper
.
SimpleCallback
(
0
,
ItemTouchHelper
.
LEFT
)
{
override
fun
onMove
(
recyclerView
:
RecyclerView
,
viewHolder
:
RecyclerView
.
ViewHolder
,
target
:
RecyclerView
.
ViewHolder
):
Boolean
{
return
true
}
override
fun
onSwiped
(
viewHolder
:
RecyclerView
.
ViewHolder
,
direction
:
Int
)
{
var
replyId
:
String
?
=
null
when
(
viewHolder
)
{
is
MessageViewHolder
->
replyId
=
viewHolder
.
data
?.
messageId
is
AttachmentViewHolder
->
replyId
=
viewHolder
.
data
?.
messageId
}
replyId
?.
let
{
citeMessage
(
chatRoomName
,
chatRoomType
,
it
,
true
)
}
chatRoomAdapter
.
notifyItemChanged
(
viewHolder
.
adapterPosition
)
}
override
fun
getSwipeDirs
(
recyclerView
:
RecyclerView
,
viewHolder
:
RecyclerView
.
ViewHolder
):
Int
{
// Currently enable swipes for text and attachment messages only
if
(
viewHolder
is
MessageViewHolder
||
viewHolder
is
AttachmentViewHolder
)
{
return
super
.
getSwipeDirs
(
recyclerView
,
viewHolder
)
}
return
0
}
}
ItemTouchHelper
(
touchCallback
).
attachToRecyclerView
(
recycler_view
)
}
}
}
private
fun
setupFab
()
{
private
fun
setupFab
()
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment