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
8d2dfc0f
Commit
8d2dfc0f
authored
Jul 27, 2017
by
Rafael Kellermann Streit
Committed by
GitHub
Jul 27, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #361 from filipedelimabrito/avatar
Improvements on getting the user avatar.
parents
1505793f
8161903f
Changes
22
Hide whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
265 additions
and
325 deletions
+265
-325
RoomFragment.java
...a/chat/rocket/android/fragment/chatroom/RoomFragment.java
+2
-2
UsersOfRoomDialogFragment.java
...d/fragment/chatroom/dialog/UsersOfRoomDialogFragment.java
+1
-1
SidebarMainFragment.java
.../rocket/android/fragment/sidebar/SidebarMainFragment.java
+4
-4
AddDirectMessageDialogFragment.java
...agment/sidebar/dialog/AddDirectMessageDialogFragment.java
+1
-1
Avatar.kt
app/src/main/java/chat/rocket/android/helper/Avatar.kt
+0
-27
RocketChatUserAvatar.kt
...n/java/chat/rocket/android/helper/RocketChatUserAvatar.kt
+17
-0
AbstractMessageViewHolder.java
...roid/layouthelper/chatroom/AbstractMessageViewHolder.java
+5
-1
MessageListAdapter.java
...ket/android/layouthelper/chatroom/MessageListAdapter.java
+6
-4
MessageNormalViewHolder.java
...ndroid/layouthelper/chatroom/MessageNormalViewHolder.java
+9
-9
MessageSystemViewHolder.java
...ndroid/layouthelper/chatroom/MessageSystemViewHolder.java
+6
-7
RoomUserAdapter.java
...android/layouthelper/chatroom/dialog/RoomUserAdapter.java
+11
-8
SuggestUserAdapter.java
...droid/layouthelper/sidebar/dialog/SuggestUserAdapter.java
+6
-4
MessageRenderer.java
...in/java/chat/rocket/android/renderer/MessageRenderer.java
+0
-154
MessageRenderer.kt
...main/java/chat/rocket/android/renderer/MessageRenderer.kt
+101
-0
RocketChatUserStatusProvider.java
...rocket/android/renderer/RocketChatUserStatusProvider.java
+0
-40
RocketChatUserStatusProvider.kt
...t/rocket/android/renderer/RocketChatUserStatusProvider.kt
+24
-0
UserRenderer.java
.../main/java/chat/rocket/android/renderer/UserRenderer.java
+0
-62
UserRenderer.kt
...rc/main/java/chat/rocket/android/renderer/UserRenderer.kt
+43
-0
ic_user_not_found_avatar_black_24dp.xml
...main/res/drawable/ic_user_not_found_avatar_black_24dp.xml
+9
-0
list_item_normal_message.xml
app/src/main/res/layout/list_item_normal_message.xml
+10
-1
list_item_system_message.xml
app/src/main/res/layout/list_item_system_message.xml
+8
-0
strings.xml
app/src/main/res/values/strings.xml
+2
-0
No files found.
app/src/main/java/chat/rocket/android/fragment/chatroom/RoomFragment.java
View file @
8d2dfc0f
...
...
@@ -191,7 +191,7 @@ public class RoomFragment extends AbstractChatRoomFragment implements
protected
void
onSetupView
()
{
messageRecyclerView
=
rootView
.
findViewById
(
R
.
id
.
messageRecyclerView
);
messageListAdapter
=
new
MessageListAdapter
(
getContext
());
messageListAdapter
=
new
MessageListAdapter
(
getContext
()
,
hostname
);
messageRecyclerView
.
setAdapter
(
messageListAdapter
);
messageListAdapter
.
setOnItemClickListener
(
this
);
messageListAdapter
.
setOnItemLongClickListener
(
this
);
...
...
@@ -372,7 +372,7 @@ public class RoomFragment extends AbstractChatRoomFragment implements
new
DefaultTempSpotlightUserCaller
(
methodCallHelper
)
),
pair
.
first
.
get
(),
RocketChatUserStatusProvider
.
getInstance
()
,
RocketChatUserStatusProvider
.
INSTANCE
,
AndroidSchedulers
.
from
(
BackgroundLooper
.
get
()),
AndroidSchedulers
.
mainThread
()
)
...
...
app/src/main/java/chat/rocket/android/fragment/chatroom/dialog/UsersOfRoomDialogFragment.java
View file @
8d2dfc0f
...
...
@@ -117,7 +117,7 @@ public class UsersOfRoomDialogFragment extends AbstractChatRoomDialogFragment {
RecyclerView
recyclerView
=
(
RecyclerView
)
getDialog
().
findViewById
(
R
.
id
.
recyclerview
);
recyclerView
.
setLayoutManager
(
new
GridLayoutManager
(
getContext
(),
2
));
recyclerView
.
setAdapter
(
new
RoomUserAdapter
(
getContext
(),
realmHelper
,
rocketChatAbsoluteUrlOptional
.
get
()));
new
RoomUserAdapter
(
getContext
(),
realmHelper
,
rocketChatAbsoluteUrlOptional
.
get
()
,
hostname
));
}
private
void
requestGetUsersOfRoom
()
{
...
...
app/src/main/java/chat/rocket/android/fragment/sidebar/SidebarMainFragment.java
View file @
8d2dfc0f
...
...
@@ -224,10 +224,10 @@ public class SidebarMainFragment extends AbstractFragment implements SidebarMain
private
void
onRenderCurrentUser
(
User
user
,
RocketChatAbsoluteUrl
absoluteUrl
)
{
if
(
user
!=
null
&&
absoluteUrl
!=
null
)
{
new
UserRenderer
(
getContext
(),
user
)
.
avatarInto
(
rootView
.
findViewById
(
R
.
id
.
current_user_avatar
),
absoluteUrl
)
.
usernameInto
(
rootView
.
findViewById
(
R
.
id
.
current_user_name
))
.
statusColorInto
(
rootView
.
findViewById
(
R
.
id
.
current_user_status
));
UserRenderer
userRenderer
=
new
UserRenderer
(
user
);
userRenderer
.
showAvatar
(
rootView
.
findViewById
(
R
.
id
.
current_user_avatar
),
hostname
);
userRenderer
.
showUsername
(
rootView
.
findViewById
(
R
.
id
.
current_user_name
));
userRenderer
.
showStatusColor
(
rootView
.
findViewById
(
R
.
id
.
current_user_status
));
}
}
...
...
app/src/main/java/chat/rocket/android/fragment/sidebar/dialog/AddDirectMessageDialogFragment.java
View file @
8d2dfc0f
...
...
@@ -97,7 +97,7 @@ public class AddDirectMessageDialogFragment extends AbstractAddRoomDialogFragmen
(
realm
,
text
)
->
realm
.
where
(
RealmUser
.
class
)
.
contains
(
RealmUser
.
USERNAME
,
text
,
Case
.
INSENSITIVE
)
.
findAllSorted
(
RealmUser
.
USERNAME
),
context
->
new
SuggestUserAdapter
(
context
,
rocketChatAbsoluteUrlOptional
.
get
()));
context
->
new
SuggestUserAdapter
(
context
,
rocketChatAbsoluteUrlOptional
.
get
()
,
hostname
));
autoCompleteTextView
.
setAdapter
(
adapter
);
}
...
...
app/src/main/java/chat/rocket/android/helper/Avatar.kt
deleted
100644 → 0
View file @
1505793f
package
chat.rocket.android.helper
import
chat.rocket.android.widget.AbsoluteUrl
import
chat.rocket.android.widget.RocketChatAvatar
import
java.net.URLEncoder
class
Avatar
(
val
absoluteUrl
:
AbsoluteUrl
?,
val
username
:
String
)
{
val
imageUrl
:
String
/** REMARK
* This is often a SVG image (see Rocket.Chat:server/startup/avatar.js)
*/
get
()
{
val
avatarUrl
=
"/avatar/"
+
URLEncoder
.
encode
(
username
,
"UTF-8"
)
if
(
absoluteUrl
==
null
)
{
return
avatarUrl
}
return
absoluteUrl
.
from
(
"/avatar/"
+
URLEncoder
.
encode
(
username
,
"UTF-8"
))
}
/**
* render avatar into RocketChatAvatar.
*/
fun
into
(
rocketChatAvatar
:
RocketChatAvatar
)
{
rocketChatAvatar
.
loadImage
(
imageUrl
)
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/helper/RocketChatUserAvatar.kt
0 → 100644
View file @
8d2dfc0f
package
chat.rocket.android.helper
import
java.net.URLEncoder
class
RocketChatUserAvatar
(
val
hostname
:
String
,
val
username
:
String
)
{
val
imageUri
:
String
/** REMARK
* This is often a SVG image (see Rocket.Chat:server/startup/avatar.js).
*/
get
()
{
return
"https://"
+
hostname
.
replace
(
"http://"
,
""
).
replace
(
"https://"
,
""
)
+
"/avatar/"
+
URLEncoder
.
encode
(
username
,
"UTF-8"
)
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/layouthelper/chatroom/AbstractMessageViewHolder.java
View file @
8d2dfc0f
...
...
@@ -13,21 +13,24 @@ import chat.rocket.core.SyncState;
public
abstract
class
AbstractMessageViewHolder
extends
ModelViewHolder
<
PairedMessage
>
{
protected
final
RocketChatAvatar
avatar
;
protected
final
ImageView
userNotFoundAvatarImageView
;
protected
final
ImageView
errorImageView
;
protected
final
TextView
username
;
protected
final
TextView
subUsername
;
protected
final
TextView
timestamp
;
protected
final
View
userAndTimeContainer
;
protected
final
AbsoluteUrl
absoluteUrl
;
protected
final
String
hostname
;
protected
final
View
newDayContainer
;
protected
final
TextView
newDayText
;
/**
* constructor WITH hostname.
*/
public
AbstractMessageViewHolder
(
View
itemView
,
AbsoluteUrl
absoluteUrl
)
{
public
AbstractMessageViewHolder
(
View
itemView
,
AbsoluteUrl
absoluteUrl
,
String
hostname
)
{
super
(
itemView
);
avatar
=
itemView
.
findViewById
(
R
.
id
.
user_avatar
);
userNotFoundAvatarImageView
=
itemView
.
findViewById
(
R
.
id
.
userNotFoundAvatarImageView
);
errorImageView
=
itemView
.
findViewById
(
R
.
id
.
errorImageView
);
username
=
itemView
.
findViewById
(
R
.
id
.
username
);
subUsername
=
itemView
.
findViewById
(
R
.
id
.
sub_username
);
...
...
@@ -36,6 +39,7 @@ public abstract class AbstractMessageViewHolder extends ModelViewHolder<PairedMe
newDayContainer
=
itemView
.
findViewById
(
R
.
id
.
newday_container
);
newDayText
=
itemView
.
findViewById
(
R
.
id
.
newday_text
);
this
.
absoluteUrl
=
absoluteUrl
;
this
.
hostname
=
hostname
;
}
/**
...
...
app/src/main/java/chat/rocket/android/layouthelper/chatroom/MessageListAdapter.java
View file @
8d2dfc0f
...
...
@@ -22,14 +22,16 @@ public class MessageListAdapter extends ExtModelListAdapter<Message, PairedMessa
private
static
final
int
VIEW_TYPE_NORMAL_MESSAGE
=
1
;
private
static
final
int
VIEW_TYPE_SYSTEM_MESSAGE
=
2
;
private
String
hostname
;
private
AbsoluteUrl
absoluteUrl
;
private
boolean
autoloadImages
=
false
;
private
boolean
hasNext
;
private
boolean
isLoaded
;
public
MessageListAdapter
(
Context
context
)
{
public
MessageListAdapter
(
Context
context
,
String
hostname
)
{
super
(
context
);
this
.
hostname
=
hostname
;
}
public
void
setAbsoluteUrl
(
AbsoluteUrl
absoluteUrl
)
{
...
...
@@ -92,11 +94,11 @@ public class MessageListAdapter extends ExtModelListAdapter<Message, PairedMessa
protected
AbstractMessageViewHolder
onCreateRealmModelViewHolder
(
int
viewType
,
View
itemView
)
{
switch
(
viewType
)
{
case
VIEW_TYPE_NORMAL_MESSAGE:
return
new
MessageNormalViewHolder
(
itemView
,
absoluteUrl
);
return
new
MessageNormalViewHolder
(
itemView
,
absoluteUrl
,
hostname
);
case
VIEW_TYPE_SYSTEM_MESSAGE:
return
new
MessageSystemViewHolder
(
itemView
,
absoluteUrl
);
return
new
MessageSystemViewHolder
(
itemView
,
absoluteUrl
,
hostname
);
default
:
return
new
AbstractMessageViewHolder
(
itemView
,
absoluteUrl
)
{
return
new
AbstractMessageViewHolder
(
itemView
,
absoluteUrl
,
hostname
)
{
@Override
protected
void
bindMessage
(
PairedMessage
pairedMessage
,
boolean
autoloadImages
)
{}
};
...
...
app/src/main/java/chat/rocket/android/layouthelper/chatroom/MessageNormalViewHolder.java
View file @
8d2dfc0f
...
...
@@ -19,8 +19,8 @@ public class MessageNormalViewHolder extends AbstractMessageViewHolder {
/**
* constructor WITH hostname.
*/
public
MessageNormalViewHolder
(
View
itemView
,
AbsoluteUrl
absoluteUrl
)
{
super
(
itemView
,
absoluteUrl
);
public
MessageNormalViewHolder
(
View
itemView
,
AbsoluteUrl
absoluteUrl
,
String
hostname
)
{
super
(
itemView
,
absoluteUrl
,
hostname
);
body
=
itemView
.
findViewById
(
R
.
id
.
message_body
);
urls
=
itemView
.
findViewById
(
R
.
id
.
message_urls
);
attachments
=
itemView
.
findViewById
(
R
.
id
.
message_attachments
);
...
...
@@ -28,12 +28,12 @@ public class MessageNormalViewHolder extends AbstractMessageViewHolder {
@Override
protected
void
bindMessage
(
PairedMessage
pairedMessage
,
boolean
autoloadImages
)
{
new
MessageRenderer
(
itemView
.
getContext
(),
pairedMessage
.
target
,
autoloadImages
)
.
avatarInto
(
avatar
,
absoluteUrl
)
.
usernameInto
(
username
,
subUsername
)
.
timestampInto
(
timestamp
)
.
bodyInto
(
body
)
.
urlsInto
(
urls
)
.
attachmentsInto
(
attachments
,
absoluteUrl
);
MessageRenderer
messageRenderer
=
new
MessageRenderer
(
pairedMessage
.
target
,
autoloadImages
);
messageRenderer
.
showAvatar
(
avatar
,
hostname
,
userNotFoundAvatarImageView
);
messageRenderer
.
showUsername
(
username
,
subUsername
);
messageRenderer
.
showTimestampOrMessageState
(
timestamp
);
messageRenderer
.
showBody
(
body
);
messageRenderer
.
showUrl
(
urls
);
messageRenderer
.
showAttachment
(
attachments
,
absoluteUrl
);
}
}
app/src/main/java/chat/rocket/android/layouthelper/chatroom/MessageSystemViewHolder.java
View file @
8d2dfc0f
...
...
@@ -16,18 +16,17 @@ public class MessageSystemViewHolder extends AbstractMessageViewHolder {
/**
* constructor WITH hostname.
*/
public
MessageSystemViewHolder
(
View
itemView
,
AbsoluteUrl
absoluteUrl
)
{
super
(
itemView
,
absoluteUrl
);
public
MessageSystemViewHolder
(
View
itemView
,
AbsoluteUrl
absoluteUrl
,
String
hostname
)
{
super
(
itemView
,
absoluteUrl
,
hostname
);
body
=
itemView
.
findViewById
(
R
.
id
.
message_body
);
}
@Override
protected
void
bindMessage
(
PairedMessage
pairedMessage
,
boolean
autoloadImages
)
{
new
MessageRenderer
(
itemView
.
getContext
(),
pairedMessage
.
target
,
autoloadImages
)
.
avatarInto
(
avatar
,
absoluteUrl
)
.
usernameInto
(
username
,
subUsername
)
.
timestampInto
(
timestamp
);
MessageRenderer
messageRenderer
=
new
MessageRenderer
(
pairedMessage
.
target
,
autoloadImages
);
messageRenderer
.
showAvatar
(
avatar
,
hostname
,
userNotFoundAvatarImageView
);
messageRenderer
.
showUsername
(
username
,
subUsername
);
messageRenderer
.
showTimestampOrMessageState
(
timestamp
);
if
(
pairedMessage
.
target
!=
null
)
{
body
.
setText
(
MessageType
.
parse
(
pairedMessage
.
target
.
getType
())
.
getString
(
body
.
getContext
(),
pairedMessage
.
target
));
...
...
app/src/main/java/chat/rocket/android/layouthelper/chatroom/dialog/RoomUserAdapter.java
View file @
8d2dfc0f
...
...
@@ -24,16 +24,18 @@ public class RoomUserAdapter extends RecyclerView.Adapter<RoomUserViewHolder> {
private
final
LayoutInflater
inflater
;
private
final
RealmHelper
realmHelper
;
private
final
AbsoluteUrl
absoluteUrl
;
private
final
String
hostname
;
private
List
<
String
>
usernames
;
/**
* Constructor with required parameters.
*/
public
RoomUserAdapter
(
Context
context
,
RealmHelper
realmHelper
,
AbsoluteUrl
absoluteUrl
)
{
public
RoomUserAdapter
(
Context
context
,
RealmHelper
realmHelper
,
AbsoluteUrl
absoluteUrl
,
String
hostname
)
{
this
.
context
=
context
;
this
.
inflater
=
LayoutInflater
.
from
(
context
);
this
.
realmHelper
=
realmHelper
;
this
.
absoluteUrl
=
absoluteUrl
;
this
.
hostname
=
hostname
;
}
@Override
...
...
@@ -57,14 +59,15 @@ public class RoomUserAdapter extends RecyclerView.Adapter<RoomUserViewHolder> {
.
setUsername
(
username
)
.
setUtcOffset
(
0
)
.
build
();
new
UserRenderer
(
context
,
user
)
.
avatarInto
(
holder
.
avatar
,
absoluteUrl
)
.
usernameInto
(
holder
.
username
);
UserRenderer
userRenderer
=
new
UserRenderer
(
user
);
userRenderer
.
showAvatar
(
holder
.
avatar
,
hostname
);
userRenderer
.
showUsername
(
holder
.
username
);
}
else
{
new
UserRenderer
(
context
,
realmUser
.
asUser
())
.
statusColorInto
(
holder
.
status
)
.
avatarInto
(
holder
.
avatar
,
absoluteUrl
)
.
usernameInto
(
holder
.
username
);
UserRenderer
userRenderer
=
new
UserRenderer
(
realmUser
.
asUser
());
userRenderer
.
showAvatar
(
holder
.
avatar
,
hostname
);
userRenderer
.
showUsername
(
holder
.
username
);
userRenderer
.
showStatusColor
(
holder
.
status
);
}
}
...
...
app/src/main/java/chat/rocket/android/layouthelper/sidebar/dialog/SuggestUserAdapter.java
View file @
8d2dfc0f
...
...
@@ -16,17 +16,19 @@ import chat.rocket.android.renderer.UserRenderer;
*/
public
class
SuggestUserAdapter
extends
RealmAutoCompleteAdapter
<
RealmUser
>
{
private
final
AbsoluteUrl
absoluteUrl
;
private
final
String
hostname
;
public
SuggestUserAdapter
(
Context
context
,
AbsoluteUrl
absoluteUrl
)
{
public
SuggestUserAdapter
(
Context
context
,
AbsoluteUrl
absoluteUrl
,
String
hostname
)
{
super
(
context
,
R
.
layout
.
listitem_room_user
,
R
.
id
.
room_user_name
);
this
.
absoluteUrl
=
absoluteUrl
;
this
.
hostname
=
hostname
;
}
@Override
protected
void
onBindItemView
(
View
itemView
,
RealmUser
user
)
{
new
UserRenderer
(
itemView
.
getContext
(),
user
.
asUser
())
.
statusColorInto
(
itemView
.
findViewById
(
R
.
id
.
room_user_status
))
.
avatarInto
(
itemView
.
findViewById
(
R
.
id
.
room_user_avatar
),
absoluteUrl
);
UserRenderer
userRenderer
=
new
UserRenderer
(
user
.
asUser
());
userRenderer
.
showStatusColor
(
itemView
.
findViewById
(
R
.
id
.
room_user_status
));
userRenderer
.
showAvatar
(
itemView
.
findViewById
(
R
.
id
.
room_user_avatar
),
hostname
);
}
@Override
...
...
app/src/main/java/chat/rocket/android/renderer/MessageRenderer.java
deleted
100644 → 0
View file @
1505793f
package
chat
.
rocket
.
android
.
renderer
;
import
android.content.Context
;
import
android.view.View
;
import
android.widget.TextView
;
import
chat.rocket.android.R
;
import
chat.rocket.android.helper.DateTime
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.widget.AbsoluteUrl
;
import
chat.rocket.android.widget.RocketChatAvatar
;
import
chat.rocket.android.widget.message.RocketChatMessageAttachmentsLayout
;
import
chat.rocket.android.widget.message.RocketChatMessageLayout
;
import
chat.rocket.android.widget.message.RocketChatMessageUrlsLayout
;
import
chat.rocket.core.SyncState
;
import
chat.rocket.core.models.Attachment
;
import
chat.rocket.core.models.Message
;
import
chat.rocket.core.models.WebContent
;
import
java.util.List
;
/**
* Renderer for RealmMessage model.
*/
public
class
MessageRenderer
extends
AbstractRenderer
<
Message
>
{
private
final
UserRenderer
userRenderer
;
private
final
boolean
autoloadImages
;
public
MessageRenderer
(
Context
context
,
Message
message
,
boolean
autoloadImages
)
{
super
(
context
,
message
);
userRenderer
=
new
UserRenderer
(
context
,
message
.
getUser
());
this
.
autoloadImages
=
autoloadImages
;
}
/**
* show Avatar image.
*/
public
MessageRenderer
avatarInto
(
RocketChatAvatar
rocketChatAvatar
,
AbsoluteUrl
absoluteUrl
)
{
if
(!
shouldHandle
(
rocketChatAvatar
))
{
return
this
;
}
if
(
TextUtils
.
isEmpty
(
object
.
getAvatar
()))
{
userRenderer
.
avatarInto
(
rocketChatAvatar
,
absoluteUrl
);
// Avatar from oauth providers
}
else
{
rocketChatAvatar
.
loadImage
(
object
.
getAvatar
());
}
return
this
;
}
/**
* show Username in textView.
*/
public
MessageRenderer
usernameInto
(
TextView
usernameTextView
,
TextView
subUsernameTextView
)
{
if
(
TextUtils
.
isEmpty
(
object
.
getAlias
()))
{
userRenderer
.
usernameInto
(
usernameTextView
);
if
(
subUsernameTextView
!=
null
)
{
subUsernameTextView
.
setVisibility
(
View
.
GONE
);
}
}
else
{
aliasAndUsernameInto
(
usernameTextView
,
subUsernameTextView
);
}
return
this
;
}
/**
* show timestamp in textView.
*/
public
MessageRenderer
timestampInto
(
TextView
textView
)
{
if
(!
shouldHandle
(
textView
))
{
return
this
;
}
switch
(
object
.
getSyncState
())
{
case
SyncState
.
SYNCING
:
textView
.
setText
(
R
.
string
.
sending
);
break
;
case
SyncState
.
NOT_SYNCED
:
textView
.
setText
(
R
.
string
.
not_synced
);
break
;
case
SyncState
.
FAILED
:
textView
.
setText
(
R
.
string
.
failed_to_sync
);
break
;
default
:
textView
.
setText
(
DateTime
.
fromEpocMs
(
object
.
getTimestamp
(),
DateTime
.
Format
.
TIME
));
break
;
}
return
this
;
}
/**
* show body in RocketChatMessageLayout.
*/
public
MessageRenderer
bodyInto
(
RocketChatMessageLayout
rocketChatMessageLayout
)
{
if
(!
shouldHandle
(
rocketChatMessageLayout
))
{
return
this
;
}
rocketChatMessageLayout
.
setText
(
object
.
getMessage
());
return
this
;
}
/**
* show urls in RocketChatMessageUrlsLayout.
*/
public
MessageRenderer
urlsInto
(
RocketChatMessageUrlsLayout
urlsLayout
)
{
if
(!
shouldHandle
(
urlsLayout
))
{
return
this
;
}
List
<
WebContent
>
webContents
=
object
.
getWebContents
();
if
(
webContents
==
null
||
webContents
.
size
()
==
0
)
{
urlsLayout
.
setVisibility
(
View
.
GONE
);
}
else
{
urlsLayout
.
setVisibility
(
View
.
VISIBLE
);
urlsLayout
.
setUrls
(
webContents
,
autoloadImages
);
}
return
this
;
}
/**
* show urls in RocketChatMessageUrlsLayout.
*/
public
MessageRenderer
attachmentsInto
(
RocketChatMessageAttachmentsLayout
attachmentsLayout
,
AbsoluteUrl
absoluteUrl
)
{
if
(!
shouldHandle
(
attachmentsLayout
))
{
return
this
;
}
List
<
Attachment
>
attachments
=
object
.
getAttachments
();
if
(
attachments
==
null
||
attachments
.
size
()
==
0
)
{
attachmentsLayout
.
setVisibility
(
View
.
GONE
);
}
else
{
attachmentsLayout
.
setVisibility
(
View
.
VISIBLE
);
attachmentsLayout
.
setAbsoluteUrl
(
absoluteUrl
);
attachmentsLayout
.
setAttachments
(
attachments
,
autoloadImages
);
}
return
this
;
}
private
void
aliasAndUsernameInto
(
TextView
aliasTextView
,
TextView
usernameTextView
)
{
if
(
shouldHandle
(
aliasTextView
))
{
aliasTextView
.
setText
(
object
.
getAlias
());
}
if
(
shouldHandle
(
usernameTextView
))
{
if
(
object
.
getUser
()
!=
null
)
{
usernameTextView
.
setText
(
"@"
+
object
.
getUser
().
getUsername
());
usernameTextView
.
setVisibility
(
View
.
VISIBLE
);
}
else
{
usernameTextView
.
setVisibility
(
View
.
GONE
);
}
}
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/renderer/MessageRenderer.kt
0 → 100644
View file @
8d2dfc0f
package
chat.rocket.android.renderer
import
android.view.View
import
android.widget.ImageView
import
android.widget.TextView
import
chat.rocket.android.R
import
chat.rocket.android.helper.DateTime
import
chat.rocket.android.helper.RocketChatUserAvatar
import
chat.rocket.android.widget.AbsoluteUrl
import
chat.rocket.android.widget.RocketChatAvatar
import
chat.rocket.android.widget.message.RocketChatMessageAttachmentsLayout
import
chat.rocket.android.widget.message.RocketChatMessageLayout
import
chat.rocket.android.widget.message.RocketChatMessageUrlsLayout
import
chat.rocket.core.SyncState
import
chat.rocket.core.models.Message
class
MessageRenderer
(
val
message
:
Message
,
val
autoLoadImage
:
Boolean
)
{
/**
* Show user's avatar image in RocketChatAvatar widget.
*/
fun
showAvatar
(
rocketChatAvatarWidget
:
RocketChatAvatar
,
hostname
:
String
,
userNotFoundAvatarImageView
:
ImageView
)
{
if
(
message
.
avatar
!=
null
)
{
// Load user's avatar image from Oauth provider URI.
rocketChatAvatarWidget
.
loadImage
(
message
.
avatar
)
}
else
{
val
username
:
String
?
=
message
.
user
?.
username
if
(
username
!=
null
)
{
// Load user's avatar image from Rocket.Chat URI.
rocketChatAvatarWidget
.
loadImage
(
RocketChatUserAvatar
(
hostname
,
username
).
imageUri
)
userNotFoundAvatarImageView
.
visibility
=
View
.
GONE
rocketChatAvatarWidget
.
visibility
=
View
.
VISIBLE
}
else
{
rocketChatAvatarWidget
.
visibility
=
View
.
GONE
userNotFoundAvatarImageView
.
visibility
=
View
.
VISIBLE
}
}
}
/**
* Show username in textView.
*/
fun
showUsername
(
usernameTextView
:
TextView
,
subUsernameTextView
:
TextView
?)
{
if
(
message
.
alias
==
null
)
{
usernameTextView
.
text
=
message
.
user
?.
username
?:
usernameTextView
.
context
.
getText
(
R
.
string
.
user_not_found
)
}
else
{
usernameTextView
.
text
=
message
.
alias
val
username
:
String
?
=
message
.
user
?.
username
if
(
username
!=
null
&&
subUsernameTextView
!=
null
)
{
subUsernameTextView
.
text
=
subUsernameTextView
.
context
.
getString
(
R
.
string
.
sub_username
,
username
)
subUsernameTextView
.
visibility
=
View
.
VISIBLE
}
}
}
/**
* Show timestamp or message state in textView.
*/
fun
showTimestampOrMessageState
(
textView
:
TextView
)
{
when
(
message
.
syncState
)
{
SyncState
.
SYNCING
->
textView
.
text
=
textView
.
context
.
getText
(
R
.
string
.
sending
)
SyncState
.
NOT_SYNCED
->
textView
.
text
=
textView
.
context
.
getText
(
R
.
string
.
not_synced
)
SyncState
.
FAILED
->
textView
.
text
=
textView
.
context
.
getText
(
R
.
string
.
failed_to_sync
)
else
->
textView
.
text
=
DateTime
.
fromEpocMs
(
message
.
timestamp
,
DateTime
.
Format
.
TIME
)
}
}
/**
* Show body in RocketChatMessageLayout widget.
*/
fun
showBody
(
rocketChatMessageLayout
:
RocketChatMessageLayout
)
{
rocketChatMessageLayout
.
setText
(
message
.
message
)
}
/**
* Show urls in RocketChatMessageUrlsLayout widget.
*/
fun
showUrl
(
rocketChatMessageUrlsLayout
:
RocketChatMessageUrlsLayout
)
{
val
webContents
=
message
.
webContents
if
(
webContents
==
null
||
webContents
.
isEmpty
())
{
rocketChatMessageUrlsLayout
.
visibility
=
View
.
GONE
}
else
{
rocketChatMessageUrlsLayout
.
setUrls
(
webContents
,
autoLoadImage
)
rocketChatMessageUrlsLayout
.
visibility
=
View
.
VISIBLE
}
}
/**
* show attachments in RocketChatMessageAttachmentsLayout widget.
*/
fun
showAttachment
(
rocketChatMessageAttachmentsLayout
:
RocketChatMessageAttachmentsLayout
,
absoluteUrl
:
AbsoluteUrl
?)
{
val
attachments
=
message
.
attachments
if
(
attachments
==
null
||
attachments
.
isEmpty
())
{
rocketChatMessageAttachmentsLayout
.
visibility
=
View
.
GONE
}
else
{
rocketChatMessageAttachmentsLayout
.
setAbsoluteUrl
(
absoluteUrl
)
rocketChatMessageAttachmentsLayout
.
setAttachments
(
attachments
,
autoLoadImage
)
rocketChatMessageAttachmentsLayout
.
visibility
=
View
.
VISIBLE
}
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/renderer/RocketChatUserStatusProvider.java
deleted
100644 → 0
View file @
1505793f
package
chat
.
rocket
.
android
.
renderer
;
import
android.support.annotation.DrawableRes
;
import
chat.rocket.android.R
;
import
chat.rocket.android.widget.helper.UserStatusProvider
;
import
chat.rocket.core.models.User
;
public
class
RocketChatUserStatusProvider
implements
UserStatusProvider
{
private
static
RocketChatUserStatusProvider
instance
;
private
RocketChatUserStatusProvider
()
{
}
public
static
RocketChatUserStatusProvider
getInstance
()
{
if
(
instance
==
null
)
{
instance
=
new
RocketChatUserStatusProvider
();
}
return
instance
;
}
@Override
@DrawableRes
public
int
getStatusResId
(
String
status
)
{
if
(
User
.
STATUS_ONLINE
.
equals
(
status
))
{
return
R
.
drawable
.
userstatus_online
;
}
else
if
(
User
.
STATUS_AWAY
.
equals
(
status
))
{
return
R
.
drawable
.
userstatus_away
;
}
else
if
(
User
.
STATUS_BUSY
.
equals
(
status
))
{
return
R
.
drawable
.
userstatus_busy
;
}
else
if
(
User
.
STATUS_OFFLINE
.
equals
(
status
))
{
return
R
.
drawable
.
userstatus_offline
;
}
// unknown status is rendered as "offline" status.
return
R
.
drawable
.
userstatus_offline
;
}
}
app/src/main/java/chat/rocket/android/renderer/RocketChatUserStatusProvider.kt
0 → 100644
View file @
8d2dfc0f
package
chat.rocket.android.renderer
import
chat.rocket.android.R
import
chat.rocket.android.widget.helper.UserStatusProvider
import
chat.rocket.core.models.User
object
RocketChatUserStatusProvider
:
UserStatusProvider
{
override
fun
getStatusResId
(
status
:
String
?):
Int
{
var
userStatusDrawableId
=
R
.
drawable
.
userstatus_offline
when
(
status
)
{
User
.
STATUS_ONLINE
->
{
userStatusDrawableId
=
R
.
drawable
.
userstatus_online
}
User
.
STATUS_AWAY
->
{
userStatusDrawableId
=
R
.
drawable
.
userstatus_away
}
User
.
STATUS_BUSY
->
{
userStatusDrawableId
=
R
.
drawable
.
userstatus_busy
}
}
return
userStatusDrawableId
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/renderer/UserRenderer.java
deleted
100644 → 0
View file @
1505793f
package
chat
.
rocket
.
android
.
renderer
;
import
android.content.Context
;
import
android.widget.ImageView
;
import
android.widget.TextView
;
import
chat.rocket.android.helper.Avatar
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.widget.AbsoluteUrl
;
import
chat.rocket.android.widget.RocketChatAvatar
;
import
chat.rocket.core.models.User
;
/**
* Renderer for RealmUser model.
*/
public
class
UserRenderer
extends
AbstractRenderer
<
User
>
{
public
UserRenderer
(
Context
context
,
User
user
)
{
super
(
context
,
user
);
}
/**
* show Avatar image
*/
public
UserRenderer
avatarInto
(
RocketChatAvatar
rocketChatAvatar
,
AbsoluteUrl
absoluteUrl
)
{
if
(!
shouldHandle
(
rocketChatAvatar
))
{
return
this
;
}
if
(!
TextUtils
.
isEmpty
(
object
.
getUsername
()))
{
new
Avatar
(
absoluteUrl
,
object
.
getUsername
())
.
into
(
rocketChatAvatar
);
}
return
this
;
}
/**
* show Username in textView
*/
public
UserRenderer
usernameInto
(
TextView
textView
)
{
if
(!
shouldHandle
(
textView
))
{
return
this
;
}
textView
.
setText
(
object
.
getUsername
());
return
this
;
}
/**
* show user's status color into imageView.
*/
public
UserRenderer
statusColorInto
(
ImageView
imageView
)
{
if
(!
shouldHandle
(
imageView
))
{
return
this
;
}
String
status
=
object
.
getStatus
();
imageView
.
setImageResource
(
RocketChatUserStatusProvider
.
getInstance
().
getStatusResId
(
status
));
return
this
;
}
}
app/src/main/java/chat/rocket/android/renderer/UserRenderer.kt
0 → 100644
View file @
8d2dfc0f
package
chat.rocket.android.renderer
import
android.view.View
import
android.widget.ImageView
import
android.widget.TextView
import
chat.rocket.android.R
import
chat.rocket.android.helper.RocketChatUserAvatar
import
chat.rocket.android.widget.RocketChatAvatar
import
chat.rocket.core.models.User
class
UserRenderer
(
val
user
:
User
)
{
/**
* Show user's avatar image in RocketChatAvatar widget.
*/
fun
showAvatar
(
rocketChatAvatarWidget
:
RocketChatAvatar
,
hostname
:
String
)
{
val
username
:
String
?
=
user
.
username
if
(
username
!=
null
)
{
rocketChatAvatarWidget
.
loadImage
(
RocketChatUserAvatar
(
hostname
,
username
).
imageUri
)
}
else
{
rocketChatAvatarWidget
.
visibility
=
View
.
GONE
}
}
/**
* Show username in textView.
*/
fun
showUsername
(
textView
:
TextView
)
{
textView
.
text
=
user
.
username
?:
textView
.
context
.
getText
(
R
.
string
.
user_not_found
)
}
/**
* Show user's status color in imageView.
*/
fun
showStatusColor
(
imageView
:
ImageView
)
{
val
userStatus
:
String
?
=
user
.
status
if
(
userStatus
!=
null
)
{
imageView
.
setImageResource
(
RocketChatUserStatusProvider
.
getStatusResId
(
userStatus
))
}
else
{
imageView
.
visibility
=
View
.
GONE
}
}
}
\ No newline at end of file
app/src/main/res/drawable/ic_user_not_found_avatar_black_24dp.xml
0 → 100644
View file @
8d2dfc0f
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"24dp"
android:height=
"24dp"
android:viewportWidth=
"24.0"
android:viewportHeight=
"24.0"
>
<path
android:pathData=
"M-0,0L24,0L24,24L-0,24L-0,0ZM11.963,17.661L12.036,17.661L17.162,17.661C17.162,13.975 13.979,13.915 13.178,12.982L13.082,12.474C14.095,11.946 14.807,10.699 14.807,9.245C14.807,7.313 13.55,5.746 12,5.746C10.45,5.746 9.193,7.313 9.193,9.245C9.193,10.712 9.917,11.966 10.944,12.486L10.86,12.933C10.129,13.913 6.837,13.912 6.837,17.661L11.963,17.661Z"
android:fillColor=
"#FF000000"
/>
</vector>
\ No newline at end of file
app/src/main/res/layout/list_item_normal_message.xml
View file @
8d2dfc0f
...
...
@@ -20,6 +20,14 @@
android:layout_height=
"32dp"
android:layout_margin=
"8dp"
/>
<ImageView
android:id=
"@+id/userNotFoundAvatarImageView"
android:layout_width=
"32dp"
android:layout_height=
"32dp"
android:layout_margin=
"8dp"
app:srcCompat=
"@drawable/ic_user_not_found_avatar_black_24dp"
android:visibility=
"gone"
/>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
...
...
@@ -51,7 +59,8 @@
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:textAppearance=
"@style/TextAppearance.RocketChat.Message.SubUsername"
tools:text=
"\@John Doe"
/>
tools:text=
"\@John Doe"
android:visibility=
"gone"
/>
<Space
android:layout_width=
"@dimen/margin_8"
...
...
app/src/main/res/layout/list_item_system_message.xml
View file @
8d2dfc0f
...
...
@@ -19,6 +19,14 @@
android:layout_height=
"32dp"
android:layout_margin=
"8dp"
/>
<ImageView
android:id=
"@+id/userNotFoundAvatarImageView"
android:layout_width=
"32dp"
android:layout_height=
"32dp"
android:layout_margin=
"8dp"
app:srcCompat=
"@drawable/ic_user_not_found_avatar_black_24dp"
android:visibility=
"gone"
/>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
...
...
app/src/main/res/values/strings.xml
View file @
8d2dfc0f
...
...
@@ -34,6 +34,8 @@
<string
name=
"dialog_user_registration_email"
>
Email
</string>
<string
name=
"dialog_user_registration_username"
>
Username
</string>
<string
name=
"sub_username"
>
\@%s
</string>
<string
name=
"user_not_found"
>
User not found
</string>
<string
name=
"dialog_user_registration_password"
>
Password
</string>
<string
name=
"fragment_home_welcome_message"
>
Welcome to Rocket.Chat.Android\nSelect a channel from the drawer.
</string>
<string
name=
"fragment_input_hostname_hostname"
>
Hostname
</string>
...
...
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