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
c0390e64
Commit
c0390e64
authored
Apr 30, 2018
by
Divyanshu Bhargava
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
same ui interaction for pined messages
parent
fdb5fa10
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
80 additions
and
142 deletions
+80
-142
ChatRoomNavigator.kt
...rocket/android/chatroom/presentation/ChatRoomNavigator.kt
+6
-0
ChatRoomPresenter.kt
...rocket/android/chatroom/presentation/ChatRoomPresenter.kt
+2
-0
ChatRoomFragment.kt
.../java/chat/rocket/android/chatroom/ui/ChatRoomFragment.kt
+1
-7
PinnedMessagesActivity.kt
...chat/rocket/android/chatroom/ui/PinnedMessagesActivity.kt
+0
-66
ActivityBuilder.kt
...java/chat/rocket/android/dagger/module/ActivityBuilder.kt
+2
-6
PinnedMessagesFragmentModule.kt
...android/pinnedmessages/di/PinnedMessagesFragmentModule.kt
+2
-2
PinnedMessagesFragmentProvider.kt
...droid/pinnedmessages/di/PinnedMessagesFragmentProvider.kt
+1
-1
PinnedMessagesPresenter.kt
...id/pinnedmessages/presentation/PinnedMessagesPresenter.kt
+1
-1
PinnedMessagesView.kt
...android/pinnedmessages/presentation/PinnedMessagesView.kt
+1
-1
PinnedMessagesFragment.kt
...ocket/android/pinnedmessages/ui/PinnedMessagesFragment.kt
+51
-48
fragment_pinned_messages.xml
app/src/main/res/layout/fragment_pinned_messages.xml
+12
-9
dependencies.gradle
dependencies.gradle
+1
-1
No files found.
app/src/main/java/chat/rocket/android/chatroom/presentation/ChatRoomNavigator.kt
View file @
c0390e64
...
...
@@ -14,6 +14,12 @@ class ChatRoomNavigator(internal val activity: ChatRoomActivity) {
}
}
fun
toPinnedMessageList
(
chatRoomId
:
String
,
chatRoomType
:
String
)
{
activity
.
addFragmentBackStack
(
"PinnedMessages"
,
R
.
id
.
fragment_container
){
chat
.
rocket
.
android
.
pinnedmessages
.
ui
.
newInstance
(
chatRoomId
,
chatRoomType
)
}
}
fun
toNewServer
()
{
activity
.
startActivity
(
activity
.
changeServerIntent
())
activity
.
finish
()
...
...
app/src/main/java/chat/rocket/android/chatroom/presentation/ChatRoomPresenter.kt
View file @
c0390e64
...
...
@@ -502,6 +502,8 @@ class ChatRoomPresenter @Inject constructor(
fun
toMembersList
(
chatRoomId
:
String
,
chatRoomType
:
String
)
=
navigator
.
toMembersList
(
chatRoomId
,
chatRoomType
)
fun
toPinnedMessageList
(
chatRoomId
:
String
,
chatRoomType
:
String
)
=
navigator
.
toPinnedMessageList
(
chatRoomId
,
chatRoomType
)
fun
loadChatRooms
()
{
launchUI
(
strategy
)
{
try
{
...
...
app/src/main/java/chat/rocket/android/chatroom/ui/ChatRoomFragment.kt
View file @
c0390e64
...
...
@@ -35,7 +35,6 @@ import kotlinx.android.synthetic.main.fragment_chat_room.*
import
kotlinx.android.synthetic.main.message_attachment_options.*
import
kotlinx.android.synthetic.main.message_composer.*
import
kotlinx.android.synthetic.main.message_list.*
import
timber.log.Timber
import
java.util.concurrent.atomic.AtomicInteger
import
javax.inject.Inject
...
...
@@ -177,12 +176,7 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
presenter
.
toMembersList
(
chatRoomId
,
chatRoomType
)
}
R
.
id
.
action_pinned_messages
->
{
val
intent
=
Intent
(
activity
,
PinnedMessagesActivity
::
class
.
java
).
apply
{
putExtra
(
BUNDLE_CHAT_ROOM_ID
,
chatRoomId
)
putExtra
(
BUNDLE_CHAT_ROOM_TYPE
,
chatRoomType
)
putExtra
(
BUNDLE_CHAT_ROOM_NAME
,
chatRoomName
)
}
startActivity
(
intent
)
presenter
.
toPinnedMessageList
(
chatRoomId
,
chatRoomType
)
}
}
return
true
...
...
app/src/main/java/chat/rocket/android/chatroom/ui/PinnedMessagesActivity.kt
deleted
100644 → 0
View file @
fdb5fa10
package
chat.rocket.android.chatroom.ui
import
android.os.Bundle
import
android.support.v4.app.Fragment
import
android.support.v7.app.AppCompatActivity
import
chat.rocket.android.R
import
chat.rocket.android.util.extensions.addFragment
import
chat.rocket.android.util.extensions.textContent
import
dagger.android.AndroidInjection
import
dagger.android.AndroidInjector
import
dagger.android.DispatchingAndroidInjector
import
dagger.android.support.HasSupportFragmentInjector
import
kotlinx.android.synthetic.main.app_bar_chat_room.*
import
javax.inject.Inject
private
const
val
INTENT_CHAT_ROOM_ID
=
"chat_room_id"
private
const
val
INTENT_CHAT_ROOM_NAME
=
"chat_room_name"
private
const
val
INTENT_CHAT_ROOM_TYPE
=
"chat_room_type"
class
PinnedMessagesActivity
:
AppCompatActivity
(),
HasSupportFragmentInjector
{
@Inject
lateinit
var
fragmentDispatchingAndroidInjector
:
DispatchingAndroidInjector
<
Fragment
>
private
lateinit
var
chatRoomId
:
String
private
lateinit
var
chatRoomName
:
String
private
lateinit
var
chatRoomType
:
String
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
AndroidInjection
.
inject
(
this
)
super
.
onCreate
(
savedInstanceState
)
setContentView
(
R
.
layout
.
activity_pinned_messages
)
chatRoomId
=
intent
.
getStringExtra
(
INTENT_CHAT_ROOM_ID
)
requireNotNull
(
chatRoomId
)
{
"no chat_room_id provided in Intent extras"
}
chatRoomName
=
intent
.
getStringExtra
(
INTENT_CHAT_ROOM_NAME
)
requireNotNull
(
chatRoomName
)
{
"no chat_room_name provided in Intent extras"
}
chatRoomType
=
intent
.
getStringExtra
(
INTENT_CHAT_ROOM_TYPE
)
requireNotNull
(
chatRoomType
)
{
"no chat_room_type provided in Intent extras"
}
setupToolbar
()
addFragment
(
"PinnedMessagesFragment"
,
R
.
id
.
fragment_container
)
{
newPinnedMessagesFragment
(
chatRoomId
,
chatRoomName
,
chatRoomType
)
}
}
override
fun
onBackPressed
()
=
finishActivity
()
override
fun
supportFragmentInjector
():
AndroidInjector
<
Fragment
>
{
return
fragmentDispatchingAndroidInjector
}
private
fun
setupToolbar
()
{
setSupportActionBar
(
toolbar
)
supportActionBar
?.
setDisplayShowTitleEnabled
(
false
)
text_room_name
.
textContent
=
getString
(
R
.
string
.
title_pinned_messages
)
toolbar
.
setNavigationOnClickListener
{
finishActivity
()
}
}
private
fun
finishActivity
()
{
super
.
onBackPressed
()
overridePendingTransition
(
R
.
anim
.
close_enter
,
R
.
anim
.
close_exit
)
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/dagger/module/ActivityBuilder.kt
View file @
c0390e64
...
...
@@ -12,7 +12,6 @@ import chat.rocket.android.chatroom.di.ChatRoomFragmentProvider
import
chat.rocket.android.chatroom.di.ChatRoomModule
import
chat.rocket.android.chatroom.di.PinnedMessagesFragmentProvider
import
chat.rocket.android.chatroom.ui.ChatRoomActivity
import
chat.rocket.android.chatroom.ui.PinnedMessagesActivity
import
chat.rocket.android.chatrooms.di.ChatRoomsFragmentProvider
import
chat.rocket.android.dagger.scope.PerActivity
import
chat.rocket.android.main.di.MainModule
...
...
@@ -50,13 +49,10 @@ abstract class ActivityBuilder {
@PerActivity
@ContributesAndroidInjector
(
modules
=
[
ChatRoomModule
::
class
,
ChatRoomFragmentProvider
::
class
,
MembersFragmentProvider
::
class
])
MembersFragmentProvider
::
class
,
PinnedMessagesFragmentProvider
::
class
])
abstract
fun
bindChatRoomActivity
():
ChatRoomActivity
@PerActivity
@ContributesAndroidInjector
(
modules
=
[
PinnedMessagesFragmentProvider
::
class
])
abstract
fun
bindPinnedMessagesActivity
():
PinnedMessagesActivity
@PerActivity
@ContributesAndroidInjector
(
modules
=
[
PasswordFragmentProvider
::
class
])
abstract
fun
bindPasswordActivity
():
PasswordActivity
...
...
app/src/main/java/chat/rocket/android/
chatroom
/di/PinnedMessagesFragmentModule.kt
→
app/src/main/java/chat/rocket/android/
pinnedmessages
/di/PinnedMessagesFragmentModule.kt
View file @
c0390e64
package
chat.rocket.android.chatroom.di
import
android.arch.lifecycle.LifecycleOwner
import
chat.rocket.android.chatroom.presentation.PinnedMessagesView
import
chat.rocket.android.chatroom.ui.PinnedMessagesFragment
import
chat.rocket.android.core.lifecycle.CancelStrategy
import
chat.rocket.android.dagger.scope.PerFragment
import
chat.rocket.android.pinnedmessages.presentation.PinnedMessagesView
import
chat.rocket.android.pinnedmessages.ui.PinnedMessagesFragment
import
dagger.Module
import
dagger.Provides
import
kotlinx.coroutines.experimental.Job
...
...
app/src/main/java/chat/rocket/android/
chatroom
/di/PinnedMessagesFragmentProvider.kt
→
app/src/main/java/chat/rocket/android/
pinnedmessages
/di/PinnedMessagesFragmentProvider.kt
View file @
c0390e64
package
chat.rocket.android.chatroom.di
import
chat.rocket.android.
chatroom
.ui.PinnedMessagesFragment
import
chat.rocket.android.
pinnedmessages
.ui.PinnedMessagesFragment
import
dagger.Module
import
dagger.android.ContributesAndroidInjector
...
...
app/src/main/java/chat/rocket/android/
chatroom
/presentation/PinnedMessagesPresenter.kt
→
app/src/main/java/chat/rocket/android/
pinnedmessages
/presentation/PinnedMessagesPresenter.kt
View file @
c0390e64
package
chat.rocket.android.
chatroom
.presentation
package
chat.rocket.android.
pinnedmessages
.presentation
import
chat.rocket.android.chatroom.viewmodel.ViewModelMapper
import
chat.rocket.android.core.lifecycle.CancelStrategy
...
...
app/src/main/java/chat/rocket/android/
chatroom
/presentation/PinnedMessagesView.kt
→
app/src/main/java/chat/rocket/android/
pinnedmessages
/presentation/PinnedMessagesView.kt
View file @
c0390e64
package
chat.rocket.android.
chatroom
.presentation
package
chat.rocket.android.
pinnedmessages
.presentation
import
chat.rocket.android.chatroom.viewmodel.BaseViewModel
import
chat.rocket.android.core.behaviours.LoadingView
...
...
app/src/main/java/chat/rocket/android/
chatroom
/ui/PinnedMessagesFragment.kt
→
app/src/main/java/chat/rocket/android/
pinnedmessages
/ui/PinnedMessagesFragment.kt
View file @
c0390e64
package
chat.rocket.android.
chatroom
.ui
package
chat.rocket.android.
pinnedmessages
.ui
import
android.os.Bundle
import
android.support.v4.app.Fragment
import
android.support.v7.app.AppCompatActivity
import
android.support.v7.widget.DefaultItemAnimator
import
android.support.v7.widget.LinearLayoutManager
import
android.support.v7.widget.RecyclerView
...
...
@@ -10,10 +11,12 @@ import android.view.View
import
android.view.ViewGroup
import
chat.rocket.android.R
import
chat.rocket.android.chatroom.adapter.ChatRoomAdapter
import
chat.rocket.android.chatroom.presentation.PinnedMessagesPresenter
import
chat.rocket.android.chatroom.presentation.PinnedMessagesView
import
chat.rocket.android.chatroom.ui.ChatRoomActivity
import
chat.rocket.android.chatroom.viewmodel.BaseViewModel
import
chat.rocket.android.helper.EndlessRecyclerViewScrollListener
import
chat.rocket.android.pinnedmessages.presentation.PinnedMessagesPresenter
import
chat.rocket.android.pinnedmessages.presentation.PinnedMessagesView
import
chat.rocket.android.util.extensions.inflate
import
chat.rocket.android.util.extensions.setVisible
import
chat.rocket.android.util.extensions.showToast
import
chat.rocket.android.util.extensions.ui
...
...
@@ -21,54 +24,69 @@ import dagger.android.support.AndroidSupportInjection
import
kotlinx.android.synthetic.main.fragment_pinned_messages.*
import
javax.inject.Inject
private
const
val
BUNDLE_CHAT_ROOM_ID
=
"chat_room_id"
private
const
val
BUNDLE_CHAT_ROOM_NAME
=
"chat_room_name"
private
const
val
BUNDLE_CHAT_ROOM_TYPE
=
"chat_room_type"
fun
newPinnedMessagesFragment
(
chatRoomId
:
String
,
chatRoomType
:
String
,
chatRoomName
:
String
):
Fragment
{
fun
newInstance
(
chatRoomId
:
String
,
chatRoomType
:
String
)
:
Fragment
{
return
PinnedMessagesFragment
().
apply
{
arguments
=
Bundle
(
3
).
apply
{
arguments
=
Bundle
(
1
).
apply
{
putString
(
BUNDLE_CHAT_ROOM_ID
,
chatRoomId
)
putString
(
BUNDLE_CHAT_ROOM_NAME
,
chatRoomName
)
putString
(
BUNDLE_CHAT_ROOM_TYPE
,
chatRoomType
)
}
}
}
private
const
val
BUNDLE_CHAT_ROOM_ID
=
"chat_room_id"
private
const
val
BUNDLE_CHAT_ROOM_TYPE
=
"chat_room_type"
class
PinnedMessagesFragment
:
Fragment
(),
PinnedMessagesView
{
@Inject
lateinit
var
presenter
:
PinnedMessagesPresenter
private
lateinit
var
chatRoomId
:
String
private
lateinit
var
chatRoomName
:
String
private
lateinit
var
chatRoomType
:
String
private
lateinit
var
adapter
:
ChatRoomAdapter
@Inject
lateinit
var
presenter
:
PinnedMessagesPresenter
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
AndroidSupportInjection
.
inject
(
this
)
val
bundle
=
arguments
if
(
bundle
!=
null
)
{
if
(
bundle
!=
null
){
chatRoomId
=
bundle
.
getString
(
BUNDLE_CHAT_ROOM_ID
)
chatRoomName
=
bundle
.
getString
(
BUNDLE_CHAT_ROOM_NAME
)
chatRoomType
=
bundle
.
getString
(
BUNDLE_CHAT_ROOM_TYPE
)
}
else
{
requireNotNull
(
bundle
)
{
"no arguments supplied when the fragment was instantiated"
}
}
}
override
fun
onCreateView
(
inflater
:
LayoutInflater
,
container
:
ViewGroup
?,
savedInstanceState
:
Bundle
?)
=
inflater
.
inflate
(
R
.
layout
.
fragment_pinned_messages
,
container
,
false
)
override
fun
onCreateView
(
inflater
:
LayoutInflater
,
container
:
ViewGroup
?,
savedInstanceState
:
Bundle
?):
View
?
=
container
?.
inflate
(
R
.
layout
.
fragment_pinned_messages
)
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
super
.
onViewCreated
(
view
,
savedInstanceState
)
setupToolbar
()
presenter
.
loadPinnedMessages
(
chatRoomId
)
}
override
fun
showLoading
()
{
ui
{
view_loading
.
setVisible
(
true
)
}
}
override
fun
showPinnedMessages
(
pinnedMessages
:
List
<
BaseViewModel
<*
>>)
{
ui
{
if
(
recycler_view_pinned
.
adapter
==
null
){
adapter
=
ChatRoomAdapter
(
chatRoomType
,
""
,
null
,
false
)
recycler_view_pinned
.
adapter
=
adapter
val
linearLayoutManager
=
LinearLayoutManager
(
context
,
LinearLayoutManager
.
VERTICAL
,
false
)
recycler_view_pinned
.
layoutManager
=
linearLayoutManager
recycler_view_pinned
.
itemAnimator
=
DefaultItemAnimator
()
if
(
pinnedMessages
.
size
>
10
){
recycler_view_pinned
.
addOnScrollListener
(
object
:
EndlessRecyclerViewScrollListener
(
linearLayoutManager
){
override
fun
onLoadMore
(
page
:
Int
,
totalItemsCount
:
Int
,
recyclerView
:
RecyclerView
?)
{
presenter
.
loadPinnedMessages
(
chatRoomId
)
}
override
fun
hideLoading
()
{
ui
{
view_loading
.
setVisible
(
false
)
}
})
}
togglePinView
(
pinnedMessages
.
size
)
}
adapter
.
appendData
(
pinnedMessages
)
}
}
override
fun
showMessage
(
resId
:
Int
)
{
...
...
@@ -85,38 +103,23 @@ class PinnedMessagesFragment : Fragment(), PinnedMessagesView {
override
fun
showGenericErrorMessage
()
=
showMessage
(
getString
(
R
.
string
.
msg_generic_error
))
override
fun
showPinnedMessages
(
pinnedMessages
:
List
<
BaseViewModel
<*
>>)
{
ui
{
if
(
recycler_view_pinned
.
adapter
==
null
)
{
// TODO - add a better constructor for this case...
adapter
=
ChatRoomAdapter
(
chatRoomType
,
chatRoomName
,
null
,
false
)
recycler_view_pinned
.
adapter
=
adapter
val
linearLayoutManager
=
LinearLayoutManager
(
context
,
LinearLayoutManager
.
VERTICAL
,
false
)
recycler_view_pinned
.
layoutManager
=
linearLayoutManager
recycler_view_pinned
.
itemAnimator
=
DefaultItemAnimator
()
if
(
pinnedMessages
.
size
>
10
)
{
recycler_view_pinned
.
addOnScrollListener
(
object
:
EndlessRecyclerViewScrollListener
(
linearLayoutManager
)
{
override
fun
onLoadMore
(
page
:
Int
,
totalItemsCount
:
Int
,
recyclerView
:
RecyclerView
?)
{
presenter
.
loadPinnedMessages
(
chatRoomId
)
}
})
}
togglePinView
(
pinnedMessages
.
size
)
}
override
fun
showLoading
()
{
ui
{
view_loading
.
setVisible
(
true
)
}
}
adapter
.
appendData
(
pinnedMessages
)
}
override
fun
hideLoading
()
{
ui
{
view_loading
.
setVisible
(
false
)
}
}
private
fun
setupToolbar
()
{
(
activity
as
ChatRoomActivity
?)
?.
setupToolbarTitle
(
getString
(
R
.
string
.
title_pinned_messages
))
}
private
fun
togglePinView
(
size
:
Int
)
{
private
fun
togglePinView
(
size
:
Int
)
{
if
(
size
==
0
){
iv_pin_icon
.
setVisible
(
true
)
tv_pin_title
.
setVisible
(
true
)
tv_pin_description
.
setVisible
(
true
)
pin_view
.
setVisible
(
true
)
}
else
{
iv_pin_icon
.
setVisible
(
false
)
tv_pin_title
.
setVisible
(
false
)
tv_pin_description
.
setVisible
(
false
)
pin_view
.
setVisible
(
false
)
}
}
}
\ No newline at end of file
app/src/main/res/layout/fragment_pinned_messages.xml
View file @
c0390e64
...
...
@@ -37,14 +37,12 @@
android:layout_width=
"100dp"
android:layout_height=
"100dp"
android:src=
"@drawable/ic_pin_black_24dp"
android:tint=
"
#AFADAF
"
android:tint=
"
@color/icon_grey
"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
app:layout_constraintBottom_toTopOf=
"@id/tv_pin_title"
app:layout_constraintVertical_chainStyle=
"packed"
android:visibility=
"gone"
tools:visibility=
"visible"
/>
app:layout_constraintVertical_chainStyle=
"packed"
/>
<TextView
android:id=
"@+id/tv_pin_title"
...
...
@@ -58,9 +56,7 @@
android:textSize=
"20sp"
android:layout_marginTop=
"24dp"
android:textStyle=
"bold"
android:textColor=
"#8B8B8B"
android:visibility=
"gone"
tools:visibility=
"visible"
/>
android:textColor=
"@color/colorSecondaryText"
/>
<TextView
android:id=
"@+id/tv_pin_description"
...
...
@@ -74,8 +70,15 @@
android:layout_marginTop=
"16dp"
android:textAlignment=
"center"
android:textSize=
"16sp"
android:textColor=
"#c1c1c1"
android:textColor=
"@color/colorSecondaryTextLight"
/>
<android.support.constraint.Group
android:id=
"@+id/pin_view"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
app:constraint_referenced_ids=
"tv_pin_description,iv_pin_icon,tv_pin_title"
android:visibility=
"gone"
tools:visibility=
"visible"
/>
tools:visibility=
"visible"
/>
</android.support.constraint.ConstraintLayout>
\ No newline at end of file
dependencies.gradle
View file @
c0390e64
...
...
@@ -10,7 +10,7 @@ ext {
// Main dependencies
support
:
'27.1.0'
,
constraintLayout
:
'1.
0.2
'
,
constraintLayout
:
'1.
1.0
'
,
androidKtx
:
'0.3'
,
dagger
:
'2.14.1'
,
exoPlayer
:
'2.6.0'
,
...
...
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