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
46321a35
Commit
46321a35
authored
Feb 21, 2017
by
Tiago Cunha
Committed by
GitHub
Feb 21, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' into fix/firebase-crashes-20170221
parents
68ef444a
1ac67ddc
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
444 additions
and
320 deletions
+444
-320
SidebarMainContract.java
.../rocket/android/fragment/sidebar/SidebarMainContract.java
+3
-1
SidebarMainFragment.java
.../rocket/android/fragment/sidebar/SidebarMainFragment.java
+39
-29
RoomListManager.java
...rocket/android/layouthelper/chatroom/RoomListManager.java
+0
-183
ChannelRoomListHeader.java
...layouthelper/chatroom/roomlist/ChannelRoomListHeader.java
+37
-0
DirectMessageRoomListHeader.java
...helper/chatroom/roomlist/DirectMessageRoomListHeader.java
+37
-0
RoomListAdapter.java
...droid/layouthelper/chatroom/roomlist/RoomListAdapter.java
+146
-0
RoomListHeader.java
...ndroid/layouthelper/chatroom/roomlist/RoomListHeader.java
+21
-0
RoomListHeaderViewHolder.java
...outhelper/chatroom/roomlist/RoomListHeaderViewHolder.java
+32
-0
RoomListItemViewHolder.java
...ayouthelper/chatroom/roomlist/RoomListItemViewHolder.java
+29
-0
UnreadRoomListHeader.java
.../layouthelper/chatroom/roomlist/UnreadRoomListHeader.java
+41
-0
fragment_sidebar_main.xml
app/src/main/res/layout/fragment_sidebar_main.xml
+6
-101
room_list_header.xml
app/src/main/res/layout/room_list_header.xml
+29
-0
RoomListItemView.java
...chat/rocket/android/widget/internal/RoomListItemView.java
+4
-2
room_list_item.xml
...at-android-widgets/src/main/res/layout/room_list_item.xml
+8
-4
Room.java
...chat-core/src/main/java/chat/rocket/core/models/Room.java
+12
-0
No files found.
app/src/main/java/chat/rocket/android/fragment/sidebar/SidebarMainContract.java
View file @
46321a35
package
chat
.
rocket
.
android
.
fragment
.
sidebar
;
package
chat
.
rocket
.
android
.
fragment
.
sidebar
;
import
android.support.annotation.NonNull
;
import
java.util.List
;
import
java.util.List
;
import
chat.rocket.android.shared.BaseContract
;
import
chat.rocket.android.shared.BaseContract
;
import
chat.rocket.core.models.Room
;
import
chat.rocket.core.models.Room
;
...
@@ -13,7 +15,7 @@ public interface SidebarMainContract {
...
@@ -13,7 +15,7 @@ public interface SidebarMainContract {
void
showEmptyScreen
();
void
showEmptyScreen
();
void
showRoomList
(
List
<
Room
>
roomList
);
void
showRoomList
(
@NonNull
List
<
Room
>
roomList
);
void
showUser
(
User
user
);
void
showUser
(
User
user
);
}
}
...
...
app/src/main/java/chat/rocket/android/fragment/sidebar/SidebarMainFragment.java
View file @
46321a35
package
chat
.
rocket
.
android
.
fragment
.
sidebar
;
package
chat
.
rocket
.
android
.
fragment
.
sidebar
;
import
android.os.Bundle
;
import
android.os.Bundle
;
import
android.support.annotation.NonNull
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.Nullable
;
import
android.support.v4.app.DialogFragment
;
import
android.support.v4.app.DialogFragment
;
import
android.support.v7.widget.LinearLayoutManager
;
import
android.support.v7.widget.RecyclerView
;
import
android.view.View
;
import
android.view.View
;
import
android.widget.CompoundButton
;
import
android.widget.CompoundButton
;
import
android.widget.ImageView
;
import
android.widget.ImageView
;
import
android.widget.LinearLayout
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
com.jakewharton.rxbinding.widget.RxCompoundButton
;
import
com.jakewharton.rxbinding.widget.RxCompoundButton
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.List
;
import
chat.rocket.android.BuildConfig
;
import
chat.rocket.android.BuildConfig
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
...
@@ -20,7 +23,11 @@ import chat.rocket.android.fragment.sidebar.dialog.AbstractAddRoomDialogFragment
...
@@ -20,7 +23,11 @@ import chat.rocket.android.fragment.sidebar.dialog.AbstractAddRoomDialogFragment
import
chat.rocket.android.fragment.sidebar.dialog.AddChannelDialogFragment
;
import
chat.rocket.android.fragment.sidebar.dialog.AddChannelDialogFragment
;
import
chat.rocket.android.fragment.sidebar.dialog.AddDirectMessageDialogFragment
;
import
chat.rocket.android.fragment.sidebar.dialog.AddDirectMessageDialogFragment
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.layouthelper.chatroom.RoomListManager
;
import
chat.rocket.android.layouthelper.chatroom.roomlist.ChannelRoomListHeader
;
import
chat.rocket.android.layouthelper.chatroom.roomlist.DirectMessageRoomListHeader
;
import
chat.rocket.android.layouthelper.chatroom.roomlist.RoomListAdapter
;
import
chat.rocket.android.layouthelper.chatroom.roomlist.RoomListHeader
;
import
chat.rocket.android.layouthelper.chatroom.roomlist.UnreadRoomListHeader
;
import
chat.rocket.core.interactors.RoomInteractor
;
import
chat.rocket.core.interactors.RoomInteractor
;
import
chat.rocket.core.models.Room
;
import
chat.rocket.core.models.Room
;
import
chat.rocket.core.models.User
;
import
chat.rocket.core.models.User
;
...
@@ -36,7 +43,7 @@ public class SidebarMainFragment extends AbstractFragment implements SidebarMain
...
@@ -36,7 +43,7 @@ public class SidebarMainFragment extends AbstractFragment implements SidebarMain
private
SidebarMainContract
.
Presenter
presenter
;
private
SidebarMainContract
.
Presenter
presenter
;
private
RoomList
Manager
roomListManag
er
;
private
RoomList
Adapter
adapt
er
;
private
String
hostname
;
private
String
hostname
;
...
@@ -93,19 +100,17 @@ public class SidebarMainFragment extends AbstractFragment implements SidebarMain
...
@@ -93,19 +100,17 @@ public class SidebarMainFragment extends AbstractFragment implements SidebarMain
setupUserActionToggle
();
setupUserActionToggle
();
setupUserStatusButtons
();
setupUserStatusButtons
();
setupLogoutButton
();
setupLogoutButton
();
setupAddChannelButton
();
setupVersionInfo
();
setupVersionInfo
();
roomListManager
=
new
RoomListManager
(
adapter
=
new
RoomListAdapter
();
rootView
.
findViewById
(
R
.
id
.
unread_title
),
adapter
.
setOnItemClickListener
(
room
->
RocketChatCache
.
get
(
getContext
()).
edit
()
(
LinearLayout
)
rootView
.
findViewById
(
R
.
id
.
unread_container
),
.
putString
(
RocketChatCache
.
KEY_SELECTED_ROOM_ID
,
room
.
getRoomId
())
(
LinearLayout
)
rootView
.
findViewById
(
R
.
id
.
channels_container
),
.
apply
());
(
LinearLayout
)
rootView
.
findViewById
(
R
.
id
.
direct_messages_container
));
roomListManager
.
setOnItemClickListener
(
view
->
{
RecyclerView
recyclerView
=
(
RecyclerView
)
rootView
.
findViewById
(
R
.
id
.
room_list_container
);
RocketChatCache
.
get
(
view
.
getContext
()).
edit
()
recyclerView
.
setLayoutManager
(
.
putString
(
RocketChatCache
.
KEY_SELECTED_ROOM_ID
,
view
.
getRoomId
())
new
LinearLayoutManager
(
getContext
(),
LinearLayoutManager
.
VERTICAL
,
false
));
.
apply
();
recyclerView
.
setAdapter
(
adapter
);
});
}
}
private
void
setupUserActionToggle
()
{
private
void
setupUserActionToggle
()
{
...
@@ -152,10 +157,25 @@ public class SidebarMainFragment extends AbstractFragment implements SidebarMain
...
@@ -152,10 +157,25 @@ public class SidebarMainFragment extends AbstractFragment implements SidebarMain
}
}
private
void
updateRoomListMode
(
User
user
)
{
private
void
updateRoomListMode
(
User
user
)
{
if
(
user
==
null
||
user
.
getSettings
()
==
null
||
user
.
getSettings
().
getPreferences
()
==
null
)
{
final
List
<
RoomListHeader
>
roomListHeaders
=
new
ArrayList
<>();
return
;
if
(
user
!=
null
&&
user
.
getSettings
()
!=
null
&&
user
.
getSettings
().
getPreferences
()
!=
null
&&
user
.
getSettings
().
getPreferences
().
isUnreadRoomsMode
())
{
roomListHeaders
.
add
(
new
UnreadRoomListHeader
(
getString
(
R
.
string
.
fragment_sidebar_main_unread_rooms_title
)
));
}
}
roomListManager
.
setUnreadRoomMode
(
user
.
getSettings
().
getPreferences
().
isUnreadRoomsMode
());
roomListHeaders
.
add
(
new
ChannelRoomListHeader
(
getString
(
R
.
string
.
fragment_sidebar_main_channels_title
),
()
->
showAddRoomDialog
(
AddChannelDialogFragment
.
create
(
hostname
))
));
roomListHeaders
.
add
(
new
DirectMessageRoomListHeader
(
getString
(
R
.
string
.
fragment_sidebar_main_direct_messages_title
),
()
->
showAddRoomDialog
(
AddDirectMessageDialogFragment
.
create
(
hostname
))
));
adapter
.
setRoomListHeaders
(
roomListHeaders
);
}
}
private
void
setupLogoutButton
()
{
private
void
setupLogoutButton
()
{
...
@@ -173,16 +193,6 @@ public class SidebarMainFragment extends AbstractFragment implements SidebarMain
...
@@ -173,16 +193,6 @@ public class SidebarMainFragment extends AbstractFragment implements SidebarMain
}
}
}
}
private
void
setupAddChannelButton
()
{
rootView
.
findViewById
(
R
.
id
.
btn_add_channel
).
setOnClickListener
(
view
->
{
showAddRoomDialog
(
AddChannelDialogFragment
.
create
(
hostname
));
});
rootView
.
findViewById
(
R
.
id
.
btn_add_direct_message
).
setOnClickListener
(
view
->
{
showAddRoomDialog
(
AddDirectMessageDialogFragment
.
create
(
hostname
));
});
}
private
void
setupVersionInfo
()
{
private
void
setupVersionInfo
()
{
TextView
versionInfoView
=
(
TextView
)
rootView
.
findViewById
(
R
.
id
.
version_info
);
TextView
versionInfoView
=
(
TextView
)
rootView
.
findViewById
(
R
.
id
.
version_info
);
versionInfoView
.
setText
(
getString
(
R
.
string
.
version_info_text
,
BuildConfig
.
VERSION_NAME
));
versionInfoView
.
setText
(
getString
(
R
.
string
.
version_info_text
,
BuildConfig
.
VERSION_NAME
));
...
@@ -203,8 +213,8 @@ public class SidebarMainFragment extends AbstractFragment implements SidebarMain
...
@@ -203,8 +213,8 @@ public class SidebarMainFragment extends AbstractFragment implements SidebarMain
}
}
@Override
@Override
public
void
showRoomList
(
List
<
Room
>
roomList
)
{
public
void
showRoomList
(
@NonNull
List
<
Room
>
roomList
)
{
roomListManag
er
.
setRooms
(
roomList
);
adapt
er
.
setRooms
(
roomList
);
}
}
@Override
@Override
...
...
app/src/main/java/chat/rocket/android/layouthelper/chatroom/RoomListManager.java
deleted
100644 → 0
View file @
68ef444a
package
chat
.
rocket
.
android
.
layouthelper
.
chatroom
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.core.models.Room
;
import
chat.rocket.android.widget.internal.RoomListItemView
;
import
java.util.List
;
/**
* Utility class for mapping Room list into channel list ViewGroup.
*/
public
class
RoomListManager
{
private
View
unreadTitle
;
private
ViewGroup
unreadRoomsContainer
;
private
ViewGroup
channelsContainer
;
private
ViewGroup
dmContainer
;
private
boolean
unreadRoomMode
=
false
;
private
List
<
Room
>
roomList
;
/**
* Callback interface for List item clicked.
*/
public
interface
OnItemClickListener
{
void
onItemClick
(
RoomListItemView
roomListItemView
);
}
private
OnItemClickListener
listener
;
/**
* constructor with three ViewGroups.
*/
public
RoomListManager
(
View
unreadTitle
,
ViewGroup
unreadRoomsContainer
,
ViewGroup
channelsContainer
,
ViewGroup
dmContainer
)
{
this
(
unreadTitle
,
unreadRoomsContainer
,
channelsContainer
,
dmContainer
,
false
);
}
/**
* constructor with two ViewGroups.
*/
public
RoomListManager
(
View
unreadTitle
,
ViewGroup
unreadRoomsContainer
,
ViewGroup
channelsContainer
,
ViewGroup
dmContainer
,
boolean
unreadRoomMode
)
{
this
.
unreadTitle
=
unreadTitle
;
this
.
unreadRoomsContainer
=
unreadRoomsContainer
;
this
.
channelsContainer
=
channelsContainer
;
this
.
dmContainer
=
dmContainer
;
this
.
unreadRoomMode
=
unreadRoomMode
;
}
/**
* update ViewGroups with room list.
*/
public
void
setRooms
(
List
<
Room
>
roomList
)
{
this
.
roomList
=
roomList
;
updateRoomsList
();
}
/**
* set callback on List item clicked.
*/
public
void
setOnItemClickListener
(
OnItemClickListener
listener
)
{
this
.
listener
=
listener
;
}
private
void
removeDeletedItem
(
ViewGroup
parent
,
List
<
Room
>
roomList
)
{
for
(
int
index
=
parent
.
getChildCount
()
-
1
;
index
>=
0
;
index
--)
{
RoomListItemView
roomListItemView
=
(
RoomListItemView
)
parent
.
getChildAt
(
index
);
final
String
targetRoomName
=
roomListItemView
.
getRoomName
();
if
(!
TextUtils
.
isEmpty
(
targetRoomName
))
{
boolean
found
=
false
;
for
(
Room
room
:
roomList
)
{
if
(
targetRoomName
.
equals
(
room
.
getName
()))
{
found
=
true
;
break
;
}
}
if
(!
found
)
{
parent
.
removeViewAt
(
index
);
}
}
}
}
public
void
setUnreadRoomMode
(
boolean
unreadRoomMode
)
{
this
.
unreadRoomMode
=
unreadRoomMode
;
updateRoomsList
();
}
private
void
insertOrUpdateItem
(
ViewGroup
parent
,
Room
room
)
{
final
String
roomName
=
room
.
getName
();
int
index
;
for
(
index
=
0
;
index
<
parent
.
getChildCount
();
index
++)
{
RoomListItemView
roomListItemView
=
(
RoomListItemView
)
parent
.
getChildAt
(
index
);
final
String
targetRoomName
=
roomListItemView
.
getRoomName
();
if
(
roomName
.
equals
(
targetRoomName
))
{
updateRoomItemView
(
roomListItemView
,
room
);
return
;
}
if
(
roomName
.
compareToIgnoreCase
(
targetRoomName
)
<
0
)
{
break
;
}
}
RoomListItemView
roomListItemView
=
new
RoomListItemView
(
parent
.
getContext
());
updateRoomItemView
(
roomListItemView
,
room
);
if
(
index
==
parent
.
getChildCount
())
{
parent
.
addView
(
roomListItemView
);
}
else
{
parent
.
addView
(
roomListItemView
,
index
);
}
}
private
void
updateRoomItemView
(
RoomListItemView
roomListItemView
,
Room
room
)
{
roomListItemView
.
setRoomId
(
room
.
getRoomId
())
.
setRoomName
(
room
.
getName
())
.
setRoomType
(
room
.
getType
())
.
setAlert
(
room
.
isAlert
())
.
setUnreadCount
(
room
.
getUnread
());
roomListItemView
.
setOnClickListener
(
this
::
onItemClick
);
}
private
void
onItemClick
(
View
view
)
{
if
(
view
instanceof
RoomListItemView
&&
listener
!=
null
)
{
listener
.
onItemClick
((
RoomListItemView
)
view
);
}
}
private
void
updateRoomsList
()
{
if
(
roomList
==
null
)
{
return
;
}
removeDeletedItem
(
unreadRoomsContainer
,
roomList
);
removeDeletedItem
(
channelsContainer
,
roomList
);
removeDeletedItem
(
dmContainer
,
roomList
);
for
(
Room
room
:
roomList
)
{
String
name
=
room
.
getName
();
if
(
TextUtils
.
isEmpty
(
name
))
{
continue
;
}
String
type
=
room
.
getType
();
if
(
unreadRoomMode
&&
room
.
isAlert
())
{
insertOrUpdateItem
(
unreadRoomsContainer
,
room
);
removeItemIfExists
(
channelsContainer
,
name
);
removeItemIfExists
(
dmContainer
,
name
);
}
else
if
(
Room
.
TYPE_CHANNEL
.
equals
(
type
)
||
Room
.
TYPE_PRIVATE
.
equals
(
type
))
{
removeItemIfExists
(
unreadRoomsContainer
,
name
);
insertOrUpdateItem
(
channelsContainer
,
room
);
removeItemIfExists
(
dmContainer
,
name
);
}
else
if
(
Room
.
TYPE_DIRECT_MESSAGE
.
equals
(
type
))
{
removeItemIfExists
(
unreadRoomsContainer
,
name
);
removeItemIfExists
(
channelsContainer
,
name
);
insertOrUpdateItem
(
dmContainer
,
room
);
}
}
boolean
showUnread
=
unreadRoomMode
&&
unreadRoomsContainer
.
getChildCount
()
!=
0
;
unreadTitle
.
setVisibility
(
showUnread
?
View
.
VISIBLE
:
View
.
GONE
);
unreadRoomsContainer
.
setVisibility
(
showUnread
?
View
.
VISIBLE
:
View
.
GONE
);
}
private
static
void
removeItemIfExists
(
ViewGroup
parent
,
String
roomName
)
{
for
(
int
i
=
0
;
i
<
parent
.
getChildCount
();
i
++)
{
RoomListItemView
roomListItemView
=
(
RoomListItemView
)
parent
.
getChildAt
(
i
);
if
(
roomName
.
equals
(
roomListItemView
.
getRoomName
()))
{
parent
.
removeViewAt
(
i
);
break
;
}
}
}
}
app/src/main/java/chat/rocket/android/layouthelper/chatroom/roomlist/ChannelRoomListHeader.java
0 → 100644
View file @
46321a35
package
chat
.
rocket
.
android
.
layouthelper
.
chatroom
.
roomlist
;
import
android.support.annotation.NonNull
;
import
java.util.List
;
import
chat.rocket.core.models.Room
;
public
class
ChannelRoomListHeader
implements
RoomListHeader
{
private
final
String
title
;
private
final
ClickListener
clickListener
;
public
ChannelRoomListHeader
(
String
title
,
ClickListener
clickListener
)
{
this
.
title
=
title
;
this
.
clickListener
=
clickListener
;
}
@Override
public
String
getTitle
()
{
return
title
;
}
@Override
public
boolean
owns
(
Room
room
)
{
return
room
.
isChannel
()
||
room
.
isPrivate
();
}
@Override
public
boolean
shouldShow
(
@NonNull
List
<
Room
>
roomList
)
{
return
true
;
}
@Override
public
ClickListener
getClickListener
()
{
return
clickListener
;
}
}
app/src/main/java/chat/rocket/android/layouthelper/chatroom/roomlist/DirectMessageRoomListHeader.java
0 → 100644
View file @
46321a35
package
chat
.
rocket
.
android
.
layouthelper
.
chatroom
.
roomlist
;
import
android.support.annotation.NonNull
;
import
java.util.List
;
import
chat.rocket.core.models.Room
;
public
class
DirectMessageRoomListHeader
implements
RoomListHeader
{
private
final
String
title
;
private
final
ClickListener
clickListener
;
public
DirectMessageRoomListHeader
(
String
title
,
ClickListener
clickListener
)
{
this
.
title
=
title
;
this
.
clickListener
=
clickListener
;
}
@Override
public
String
getTitle
()
{
return
title
;
}
@Override
public
boolean
owns
(
Room
room
)
{
return
room
.
isDirectMessage
();
}
@Override
public
boolean
shouldShow
(
@NonNull
List
<
Room
>
roomList
)
{
return
true
;
}
@Override
public
ClickListener
getClickListener
()
{
return
clickListener
;
}
}
app/src/main/java/chat/rocket/android/layouthelper/chatroom/roomlist/RoomListAdapter.java
0 → 100644
View file @
46321a35
package
chat
.
rocket
.
android
.
layouthelper
.
chatroom
.
roomlist
;
import
android.support.annotation.NonNull
;
import
android.support.v7.widget.RecyclerView
;
import
android.view.LayoutInflater
;
import
android.view.ViewGroup
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
chat.rocket.android.R
;
import
chat.rocket.android.widget.internal.RoomListItemView
;
import
chat.rocket.core.models.Room
;
public
class
RoomListAdapter
extends
RecyclerView
.
Adapter
<
RecyclerView
.
ViewHolder
>
{
private
static
final
int
VIEW_TYPE_HEADER
=
0
;
private
static
final
int
VIEW_TYPE_ROOM
=
1
;
private
List
<
Room
>
roomList
=
Collections
.
emptyList
();
private
List
<
RoomListHeader
>
roomListHeaders
=
Collections
.
emptyList
();
private
Map
<
Integer
,
RoomListHeader
>
headersPosition
=
new
HashMap
<>();
private
OnItemClickListener
externalListener
;
private
OnItemClickListener
listener
=
room
->
{
if
(
externalListener
!=
null
)
{
externalListener
.
onItemClick
(
room
);
}
};
public
void
setRoomListHeaders
(
@NonNull
List
<
RoomListHeader
>
roomListHeaders
)
{
this
.
roomListHeaders
=
roomListHeaders
;
updateRoomList
();
}
public
void
setRooms
(
@NonNull
List
<
Room
>
roomList
)
{
this
.
roomList
=
roomList
;
updateRoomList
();
}
public
void
setOnItemClickListener
(
OnItemClickListener
onItemClickListener
)
{
externalListener
=
onItemClickListener
;
}
@Override
public
RecyclerView
.
ViewHolder
onCreateViewHolder
(
ViewGroup
parent
,
int
viewType
)
{
if
(
viewType
==
VIEW_TYPE_HEADER
)
{
return
new
RoomListHeaderViewHolder
(
LayoutInflater
.
from
(
parent
.
getContext
())
.
inflate
(
R
.
layout
.
room_list_header
,
parent
,
false
)
);
}
return
new
RoomListItemViewHolder
(
new
RoomListItemView
(
parent
.
getContext
()),
listener
);
}
@Override
public
void
onBindViewHolder
(
RecyclerView
.
ViewHolder
holder
,
int
position
)
{
if
(
getItemViewType
(
position
)
==
VIEW_TYPE_HEADER
)
{
((
RoomListHeaderViewHolder
)
holder
)
.
bind
(
headersPosition
.
get
(
position
));
return
;
}
((
RoomListItemViewHolder
)
holder
)
.
bind
(
roomList
.
get
(
position
-
getTotalHeadersBeforePosition
(
position
)));
}
@Override
public
int
getItemCount
()
{
return
roomList
.
size
()
+
headersPosition
.
size
();
}
@Override
public
int
getItemViewType
(
int
position
)
{
if
(
headersPosition
.
containsKey
(
position
))
{
return
VIEW_TYPE_HEADER
;
}
return
VIEW_TYPE_ROOM
;
}
private
void
updateRoomList
()
{
sortRoomList
();
calculateHeadersPosition
();
notifyDataSetChanged
();
}
private
void
sortRoomList
()
{
int
totalHeaders
=
roomListHeaders
.
size
();
Collections
.
sort
(
roomList
,
(
room
,
anotherRoom
)
->
{
for
(
int
i
=
0
;
i
<
totalHeaders
;
i
++)
{
final
RoomListHeader
header
=
roomListHeaders
.
get
(
i
);
if
(
header
.
owns
(
room
)
&&
!
header
.
owns
(
anotherRoom
))
{
return
-
1
;
}
else
if
(!
header
.
owns
(
room
)
&&
header
.
owns
(
anotherRoom
))
{
return
1
;
}
}
return
room
.
getName
().
compareTo
(
anotherRoom
.
getName
());
});
}
private
void
calculateHeadersPosition
()
{
headersPosition
.
clear
();
int
roomIdx
=
0
;
int
totalRooms
=
roomList
.
size
();
int
totalHeaders
=
roomListHeaders
.
size
();
for
(
int
i
=
0
;
i
<
totalHeaders
;
i
++)
{
final
RoomListHeader
header
=
roomListHeaders
.
get
(
i
);
if
(!
header
.
shouldShow
(
roomList
))
{
continue
;
}
headersPosition
.
put
(
roomIdx
+
headersPosition
.
size
(),
header
);
for
(;
roomIdx
<
totalRooms
;
roomIdx
++)
{
final
Room
room
=
roomList
.
get
(
roomIdx
);
if
(!
header
.
owns
(
room
))
{
break
;
}
}
}
}
private
int
getTotalHeadersBeforePosition
(
int
position
)
{
int
totalHeaders
=
headersPosition
.
size
();
Integer
[]
keySet
=
headersPosition
.
keySet
().
toArray
(
new
Integer
[
totalHeaders
]);
int
totalBefore
=
0
;
for
(
int
i
=
0
;
i
<
totalHeaders
;
i
++)
{
if
(
keySet
[
i
]
<=
position
)
{
totalBefore
++;
}
}
return
totalBefore
;
}
public
interface
OnItemClickListener
{
void
onItemClick
(
Room
room
);
}
}
app/src/main/java/chat/rocket/android/layouthelper/chatroom/roomlist/RoomListHeader.java
0 → 100644
View file @
46321a35
package
chat
.
rocket
.
android
.
layouthelper
.
chatroom
.
roomlist
;
import
android.support.annotation.NonNull
;
import
java.util.List
;
import
chat.rocket.core.models.Room
;
public
interface
RoomListHeader
{
String
getTitle
();
boolean
owns
(
Room
room
);
boolean
shouldShow
(
@NonNull
List
<
Room
>
roomList
);
ClickListener
getClickListener
();
interface
ClickListener
{
void
onClick
();
}
}
app/src/main/java/chat/rocket/android/layouthelper/chatroom/roomlist/RoomListHeaderViewHolder.java
0 → 100644
View file @
46321a35
package
chat
.
rocket
.
android
.
layouthelper
.
chatroom
.
roomlist
;
import
android.support.v7.widget.RecyclerView
;
import
android.view.View
;
import
android.widget.Button
;
import
android.widget.TextView
;
import
chat.rocket.android.R
;
public
class
RoomListHeaderViewHolder
extends
RecyclerView
.
ViewHolder
{
private
TextView
title
;
private
Button
button
;
public
RoomListHeaderViewHolder
(
View
itemView
)
{
super
(
itemView
);
title
=
(
TextView
)
itemView
.
findViewById
(
R
.
id
.
title
);
button
=
(
Button
)
itemView
.
findViewById
(
R
.
id
.
btn_add
);
}
public
void
bind
(
RoomListHeader
roomListHeader
)
{
final
RoomListHeader
.
ClickListener
clickListener
=
roomListHeader
.
getClickListener
();
if
(
clickListener
==
null
)
{
button
.
setVisibility
(
View
.
GONE
);
}
else
{
button
.
setVisibility
(
View
.
VISIBLE
);
button
.
setOnClickListener
(
view
->
clickListener
.
onClick
());
}
title
.
setText
(
roomListHeader
.
getTitle
());
}
}
app/src/main/java/chat/rocket/android/layouthelper/chatroom/roomlist/RoomListItemViewHolder.java
0 → 100644
View file @
46321a35
package
chat
.
rocket
.
android
.
layouthelper
.
chatroom
.
roomlist
;
import
android.support.v7.widget.RecyclerView
;
import
chat.rocket.android.widget.internal.RoomListItemView
;
import
chat.rocket.core.models.Room
;
public
class
RoomListItemViewHolder
extends
RecyclerView
.
ViewHolder
{
public
RoomListItemViewHolder
(
RoomListItemView
itemView
,
RoomListAdapter
.
OnItemClickListener
listener
)
{
super
(
itemView
);
itemView
.
setOnClickListener
(
view
->
{
if
(
listener
!=
null
)
{
listener
.
onItemClick
((
Room
)
view
.
getTag
());
}
});
}
public
void
bind
(
Room
room
)
{
((
RoomListItemView
)
itemView
)
.
setRoomId
(
room
.
getRoomId
())
.
setRoomName
(
room
.
getName
())
.
setRoomType
(
room
.
getType
())
.
setAlert
(
room
.
isAlert
())
.
setUnreadCount
(
room
.
getUnread
())
.
setTag
(
room
);
}
}
app/src/main/java/chat/rocket/android/layouthelper/chatroom/roomlist/UnreadRoomListHeader.java
0 → 100644
View file @
46321a35
package
chat
.
rocket
.
android
.
layouthelper
.
chatroom
.
roomlist
;
import
android.support.annotation.NonNull
;
import
java.util.List
;
import
chat.rocket.core.models.Room
;
public
class
UnreadRoomListHeader
implements
RoomListHeader
{
private
final
String
title
;
public
UnreadRoomListHeader
(
String
title
)
{
this
.
title
=
title
;
}
@Override
public
String
getTitle
()
{
return
title
;
}
@Override
public
boolean
owns
(
Room
room
)
{
return
room
.
isAlert
();
}
@Override
public
boolean
shouldShow
(
@NonNull
List
<
Room
>
roomList
)
{
for
(
int
i
=
0
,
size
=
roomList
.
size
();
i
<
size
;
i
++)
{
if
(
roomList
.
get
(
i
).
isAlert
())
{
return
true
;
}
}
return
false
;
}
@Override
public
ClickListener
getClickListener
()
{
return
null
;
}
}
app/src/main/res/layout/fragment_sidebar_main.xml
View file @
46321a35
...
@@ -55,108 +55,13 @@
...
@@ -55,108 +55,13 @@
</LinearLayout>
</LinearLayout>
<android.support.v4.widget.NestedScrollView
<android.support.v7.widget.RecyclerView
android:id=
"@+id/room_list_container"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"match_parent"
android:layout_alignParentBottom=
"true"
android:layout_below=
"@+id/user_info_container"
android:layout_below=
"@+id/user_info_container"
android:background=
"?attr/colorPrimary"
>
android:layout_alignParentBottom=
"true"
android:background=
"?attr/colorPrimary"
/>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
android:paddingStart=
"?attr/listPreferredItemPaddingLeft"
android:paddingLeft=
"?attr/listPreferredItemPaddingLeft"
>
<TextView
android:id=
"@+id/unread_title"
android:layout_marginTop=
"@dimen/margin_8"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:gravity=
"center_vertical"
android:minHeight=
"48dp"
android:alpha=
"0.62"
android:text=
"@string/fragment_sidebar_main_unread_rooms_title"
android:textAppearance=
"@style/TextAppearance.AppCompat.Body2"
android:textStyle=
"bold"
/>
<LinearLayout
android:id=
"@+id/unread_container"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginEnd=
"?attr/listPreferredItemPaddingRight"
android:orientation=
"vertical"
android:layout_marginRight=
"?attr/listPreferredItemPaddingRight"
/>
<FrameLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/margin_8"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"start|center_vertical"
android:alpha=
"0.62"
android:text=
"@string/fragment_sidebar_main_channels_title"
android:textAppearance=
"@style/TextAppearance.AppCompat.Body2"
android:textStyle=
"bold"
/>
<io.github.yusukeiwaki.android.widget.FontAwesomeButton
android:id=
"@+id/btn_add_channel"
style=
"@style/Widget.AppCompat.Button.Borderless"
android:layout_width=
"48dp"
android:layout_height=
"48dp"
android:layout_gravity=
"end|center_vertical"
android:text=
"@string/fa_plus"
android:textSize=
"12dp"
/>
</FrameLayout>
<LinearLayout
android:id=
"@+id/channels_container"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginEnd=
"?attr/listPreferredItemPaddingRight"
android:orientation=
"vertical"
android:layout_marginRight=
"?attr/listPreferredItemPaddingRight"
/>
<FrameLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/margin_8"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"start|center_vertical"
android:alpha=
"0.62"
android:text=
"@string/fragment_sidebar_main_direct_messages_title"
android:textAppearance=
"@style/TextAppearance.AppCompat.Body2"
android:textStyle=
"bold"
/>
<io.github.yusukeiwaki.android.widget.FontAwesomeButton
android:id=
"@+id/btn_add_direct_message"
style=
"@style/Widget.AppCompat.Button.Borderless"
android:layout_width=
"48dp"
android:layout_height=
"48dp"
android:layout_gravity=
"end|center_vertical"
android:text=
"@string/fa_plus"
android:textSize=
"12dp"
/>
</FrameLayout>
<LinearLayout
android:id=
"@+id/direct_messages_container"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginEnd=
"?attr/listPreferredItemPaddingRight"
android:orientation=
"vertical"
android:layout_marginRight=
"?attr/listPreferredItemPaddingRight"
/>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
<android.support.v4.widget.NestedScrollView
<android.support.v4.widget.NestedScrollView
android:id=
"@+id/user_action_outer_container"
android:id=
"@+id/user_action_outer_container"
...
@@ -167,7 +72,7 @@
...
@@ -167,7 +72,7 @@
android:background=
"?attr/colorPrimaryDark"
android:background=
"?attr/colorPrimaryDark"
android:elevation=
"2dp"
android:elevation=
"2dp"
android:visibility=
"gone"
android:visibility=
"gone"
tools:visibility=
"
visibl
e"
>
tools:visibility=
"
gon
e"
>
<LinearLayout
<LinearLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
...
...
app/src/main/res/layout/room_list_header.xml
0 → 100644
View file @
46321a35
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:minHeight=
"48dp"
android:layout_marginTop=
"@dimen/margin_8"
android:paddingStart=
"?attr/listPreferredItemPaddingLeft"
android:paddingLeft=
"?attr/listPreferredItemPaddingLeft"
>
<TextView
android:id=
"@+id/title"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"start|center_vertical"
android:alpha=
"0.62"
android:text=
"@string/fragment_sidebar_main_channels_title"
android:textAppearance=
"@style/TextAppearance.AppCompat.Body2"
android:textStyle=
"bold"
/>
<io.github.yusukeiwaki.android.widget.FontAwesomeButton
android:id=
"@+id/btn_add"
style=
"@style/Widget.AppCompat.Button.Borderless"
android:layout_width=
"48dp"
android:layout_height=
"48dp"
android:layout_gravity=
"end|center_vertical"
android:text=
"@string/fa_plus"
android:textSize=
"12dp"
/>
</FrameLayout>
\ No newline at end of file
rocket-chat-android-widgets/src/main/java/chat/rocket/android/widget/internal/RoomListItemView.java
View file @
46321a35
...
@@ -6,6 +6,7 @@ import android.content.res.TypedArray;
...
@@ -6,6 +6,7 @@ import android.content.res.TypedArray;
import
android.os.Build
;
import
android.os.Build
;
import
android.util.AttributeSet
;
import
android.util.AttributeSet
;
import
android.view.View
;
import
android.view.View
;
import
android.widget.FrameLayout
;
import
android.widget.LinearLayout
;
import
android.widget.LinearLayout
;
import
android.widget.TextView
;
import
android.widget.TextView
;
...
@@ -15,7 +16,7 @@ import chat.rocket.android.widget.R;
...
@@ -15,7 +16,7 @@ import chat.rocket.android.widget.R;
/**
/**
* Room list-item view used in sidebar.
* Room list-item view used in sidebar.
*/
*/
public
class
RoomListItemView
extends
Linear
Layout
{
public
class
RoomListItemView
extends
Frame
Layout
{
private
static
HashMap
<
String
,
Integer
>
ICON_TABLE
=
new
HashMap
<
String
,
Integer
>()
{
private
static
HashMap
<
String
,
Integer
>
ICON_TABLE
=
new
HashMap
<
String
,
Integer
>()
{
{
{
put
(
"c"
,
R
.
string
.
fa_hashtag
);
put
(
"c"
,
R
.
string
.
fa_hashtag
);
...
@@ -48,7 +49,8 @@ public class RoomListItemView extends LinearLayout {
...
@@ -48,7 +49,8 @@ public class RoomListItemView extends LinearLayout {
}
}
private
void
initialize
(
Context
context
)
{
private
void
initialize
(
Context
context
)
{
setOrientation
(
HORIZONTAL
);
setLayoutParams
(
new
LinearLayout
.
LayoutParams
(
LayoutParams
.
MATCH_PARENT
,
LayoutParams
.
WRAP_CONTENT
));
TypedArray
array2
=
context
.
getTheme
().
obtainStyledAttributes
(
new
int
[]{
TypedArray
array2
=
context
.
getTheme
().
obtainStyledAttributes
(
new
int
[]{
R
.
attr
.
selectableItemBackground
R
.
attr
.
selectableItemBackground
...
...
rocket-chat-android-widgets/src/main/res/layout/room_list_item.xml
View file @
46321a35
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<
merge
xmlns:android=
"http://schemas.android.com/apk/res/android"
<
LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
>
android:layout_height=
"wrap_content"
android:paddingStart=
"?attr/listPreferredItemPaddingLeft"
android:paddingLeft=
"?attr/listPreferredItemPaddingLeft"
android:paddingRight=
"?attr/listPreferredItemPaddingRight"
android:paddingEnd=
"?attr/listPreferredItemPaddingRight"
>
<FrameLayout
<FrameLayout
android:layout_width=
"32dp"
android:layout_width=
"32dp"
...
@@ -19,7 +23,7 @@
...
@@ -19,7 +23,7 @@
<TextView
<TextView
android:id=
"@+id/text"
android:id=
"@+id/text"
android:layout_width=
"
wrap_content
"
android:layout_width=
"
0dp
"
android:layout_height=
"?attr/listPreferredItemHeightSmall"
android:layout_height=
"?attr/listPreferredItemHeightSmall"
android:layout_weight=
"1"
android:layout_weight=
"1"
android:gravity=
"center_vertical"
android:gravity=
"center_vertical"
...
@@ -44,4 +48,4 @@
...
@@ -44,4 +48,4 @@
android:layout_gravity=
"center"
android:layout_gravity=
"center"
android:textAppearance=
"@style/TextAppearance.AppCompat.Body1"
/>
android:textAppearance=
"@style/TextAppearance.AppCompat.Body1"
/>
</FrameLayout>
</FrameLayout>
</merge>
</LinearLayout>
\ No newline at end of file
\ No newline at end of file
rocket-chat-core/src/main/java/chat/rocket/core/models/Room.java
View file @
46321a35
...
@@ -27,6 +27,18 @@ public abstract class Room {
...
@@ -27,6 +27,18 @@ public abstract class Room {
public
abstract
long
getLastSeen
();
public
abstract
long
getLastSeen
();
public
boolean
isChannel
()
{
return
TYPE_CHANNEL
.
equals
(
getType
());
}
public
boolean
isPrivate
()
{
return
TYPE_PRIVATE
.
equals
(
getType
());
}
public
boolean
isDirectMessage
()
{
return
TYPE_DIRECT_MESSAGE
.
equals
(
getType
());
}
public
static
Builder
builder
()
{
public
static
Builder
builder
()
{
return
new
AutoValue_Room
.
Builder
();
return
new
AutoValue_Room
.
Builder
();
}
}
...
...
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