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
7eaa9971
Commit
7eaa9971
authored
Apr 26, 2018
by
Leonardo Aramaki
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove Markwon image dependency and ensure @ is being sent along with the username
parent
4780e4eb
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
44 additions
and
37 deletions
+44
-37
build.gradle
app/build.gradle
+0
-1
ChatRoomPresenter.kt
...rocket/android/chatroom/presentation/ChatRoomPresenter.kt
+3
-4
AppModule.kt
.../main/java/chat/rocket/android/dagger/module/AppModule.kt
+3
-9
MessageParser.kt
...src/main/java/chat/rocket/android/helper/MessageParser.kt
+38
-22
dependencies.gradle
dependencies.gradle
+0
-1
No files found.
app/build.gradle
View file @
7eaa9971
...
...
@@ -104,7 +104,6 @@ dependencies {
implementation
libraries
.
frescoImageViewer
implementation
libraries
.
markwon
implementation
libraries
.
markwonImageLoader
implementation
libraries
.
sheetMenu
...
...
app/src/main/java/chat/rocket/android/chatroom/presentation/ChatRoomPresenter.kt
View file @
7eaa9971
...
...
@@ -31,7 +31,6 @@ import chat.rocket.core.internal.rest.*
import
chat.rocket.core.model.Command
import
chat.rocket.core.model.Message
import
chat.rocket.core.model.Myself
import
chat.rocket.core.model.Value
import
kotlinx.coroutines.experimental.CommonPool
import
kotlinx.coroutines.experimental.android.UI
import
kotlinx.coroutines.experimental.async
...
...
@@ -59,10 +58,11 @@ class ChatRoomPresenter @Inject constructor(
private
val
mapper
:
ViewModelMapper
,
private
val
jobSchedulerInteractor
:
JobSchedulerInteractor
)
{
private
val
currentServer
=
serverInteractor
.
get
()
!!
private
val
manager
=
factory
.
create
(
currentServer
)
private
val
client
=
manager
.
client
private
var
settings
:
Map
<
String
,
Value
<
Any
>>
=
getSettingsInteractor
.
get
(
serverInteractor
.
get
()
!!
)
private
var
settings
:
PublicSettings
=
getSettingsInteractor
.
get
(
serverInteractor
.
get
()
!!
)
private
val
messagesChannel
=
Channel
<
Message
>()
private
var
chatRoomId
:
String
?
=
null
...
...
@@ -279,7 +279,6 @@ class ChatRoomPresenter @Inject constructor(
// TODO - we need to better treat connection problems here, but no let gaps
// on the messages list
Timber
.
d
(
ex
,
"Error fetching channel history"
)
ex
.
printStackTrace
()
}
}
}
...
...
@@ -341,7 +340,7 @@ class ChatRoomPresenter @Inject constructor(
message
?.
let
{
msg
->
val
id
=
msg
.
id
val
username
=
msg
.
sender
?.
username
?:
""
val
mention
=
if
(
mentionAuthor
&&
me
?.
username
!=
username
)
username
else
""
val
mention
=
if
(
mentionAuthor
&&
me
?.
username
!=
username
)
"@$username"
else
""
val
room
=
if
(
roomTypeOf
(
roomType
)
is
RoomType
.
DirectMessage
)
username
else
roomType
view
.
showReplyingAction
(
username
=
getDisplayName
(
msg
.
sender
),
...
...
app/src/main/java/chat/rocket/android/dagger/module/AppModule.kt
View file @
7eaa9971
...
...
@@ -48,10 +48,8 @@ import okhttp3.Interceptor
import
okhttp3.OkHttpClient
import
okhttp3.logging.HttpLoggingInterceptor
import
ru.noties.markwon.SpannableConfiguration
import
ru.noties.markwon.il.AsyncDrawableLoader
import
ru.noties.markwon.spans.SpannableTheme
import
timber.log.Timber
import
java.util.concurrent.Executors
import
java.util.concurrent.TimeUnit
import
javax.inject.Singleton
...
...
@@ -264,11 +262,6 @@ class AppModule {
fun
provideConfiguration
(
context
:
Application
,
client
:
OkHttpClient
):
SpannableConfiguration
{
val
res
=
context
.
resources
return
SpannableConfiguration
.
builder
(
context
)
.
asyncDrawableLoader
(
AsyncDrawableLoader
.
builder
()
.
client
(
client
)
.
executorService
(
Executors
.
newCachedThreadPool
())
.
resources
(
res
)
.
build
())
.
theme
(
SpannableTheme
.
builder
()
.
linkColor
(
res
.
getColor
(
R
.
color
.
colorAccent
))
.
build
())
...
...
@@ -277,8 +270,9 @@ class AppModule {
@Provides
@Singleton
fun
provideMessageParser
(
context
:
Application
,
configuration
:
SpannableConfiguration
):
MessageParser
{
return
MessageParser
(
context
,
configuration
)
fun
provideMessageParser
(
context
:
Application
,
configuration
:
SpannableConfiguration
,
serverInteractor
:
GetCurrentServerInteractor
,
settingsInteractor
:
GetSettingsInteractor
):
MessageParser
{
val
url
=
serverInteractor
.
get
()
!!
return
MessageParser
(
context
,
configuration
,
settingsInteractor
.
get
(
url
))
}
@Provides
...
...
app/src/main/java/chat/rocket/android/helper/MessageParser.kt
View file @
7eaa9971
package
chat.rocket.android.helper
import
android.app.Application
import
android.content.ActivityNotFoundException
import
android.content.Context
import
android.content.Intent
import
android.graphics.Canvas
import
android.graphics.Paint
import
android.graphics.RectF
import
android.net.Uri
import
android.support.customtabs.CustomTabsIntent
import
android.provider.Browser
import
android.support.v4.content.res.ResourcesCompat
import
android.text.Spanned
import
android.text.style.ClickableSpan
...
...
@@ -17,6 +14,8 @@ import android.text.style.ReplacementSpan
import
android.util.Patterns
import
android.view.View
import
chat.rocket.android.R
import
chat.rocket.android.server.domain.PublicSettings
import
chat.rocket.android.server.domain.useRealName
import
chat.rocket.android.widget.emoji.EmojiParser
import
chat.rocket.android.widget.emoji.EmojiRepository
import
chat.rocket.android.widget.emoji.EmojiTypefaceSpan
...
...
@@ -29,10 +28,13 @@ import ru.noties.markwon.Markwon
import
ru.noties.markwon.SpannableBuilder
import
ru.noties.markwon.SpannableConfiguration
import
ru.noties.markwon.renderer.SpannableMarkdownVisitor
import
timber.log.Timber
import
javax.inject.Inject
class
MessageParser
@Inject
constructor
(
val
context
:
Application
,
private
val
configuration
:
SpannableConfiguration
)
{
class
MessageParser
@Inject
constructor
(
private
val
context
:
Application
,
private
val
configuration
:
SpannableConfiguration
,
private
val
settings
:
PublicSettings
)
{
private
val
parser
=
Markwon
.
createParser
()
...
...
@@ -53,7 +55,7 @@ class MessageParser @Inject constructor(val context: Application, private val co
parentNode
.
accept
(
LinkVisitor
(
builder
))
parentNode
.
accept
(
EmojiVisitor
(
configuration
,
builder
))
message
.
mentions
?.
let
{
parentNode
.
accept
(
MentionVisitor
(
context
,
builder
,
it
,
selfUsername
))
parentNode
.
accept
(
MentionVisitor
(
context
,
builder
,
it
,
selfUsername
,
settings
))
}
return
builder
.
text
()
...
...
@@ -62,23 +64,31 @@ class MessageParser @Inject constructor(val context: Application, private val co
// Convert to a lenient markdown consistent with Rocket.Chat web markdown instead of the official specs.
private
fun
toLenientMarkdown
(
text
:
String
):
String
{
return
text
.
trim
().
replace
(
"\\*(.+)\\*"
.
toRegex
())
{
"**${it.groupValues[1].trim()}**"
}
.
replace
(
"\\~(.+)\\~"
.
toRegex
())
{
"~~${it.groupValues[1].trim()}~~"
}
.
replace
(
"\\_(.+)\\_"
.
toRegex
())
{
"_${it.groupValues[1].trim()}_"
}
.
replace
(
"\\~(.+)\\~"
.
toRegex
())
{
"~~${it.groupValues[1].trim()}~~"
}
.
replace
(
"\\_(.+)\\_"
.
toRegex
())
{
"_${it.groupValues[1].trim()}_"
}
}
class
MentionVisitor
(
context
:
Context
,
private
val
builder
:
SpannableBuilder
,
private
val
mentions
:
List
<
SimpleUser
>,
private
val
currentUser
:
String
?)
:
AbstractVisitor
()
{
class
MentionVisitor
(
context
:
Context
,
private
val
builder
:
SpannableBuilder
,
private
val
mentions
:
List
<
SimpleUser
>,
private
val
currentUser
:
String
?,
private
val
settings
:
PublicSettings
)
:
AbstractVisitor
()
{
private
val
othersTextColor
=
ResourcesCompat
.
getColor
(
context
.
resources
,
R
.
color
.
colorAccent
,
context
.
theme
)
private
val
othersBackgroundColor
=
ResourcesCompat
.
getColor
(
context
.
resources
,
android
.
R
.
color
.
transparent
,
context
.
theme
)
private
val
myselfTextColor
=
ResourcesCompat
.
getColor
(
context
.
resources
,
R
.
color
.
white
,
context
.
theme
)
private
val
myselfBackgroundColor
=
ResourcesCompat
.
getColor
(
context
.
resources
,
R
.
color
.
colorAccent
,
context
.
theme
)
private
val
mentionPadding
=
context
.
resources
.
getDimensionPixelSize
(
R
.
dimen
.
padding_mention
).
toFloat
()
private
val
mentionRadius
=
context
.
resources
.
getDimensionPixelSize
(
R
.
dimen
.
radius_mention
).
toFloat
()
override
fun
visit
(
t
:
Text
)
{
val
text
=
t
.
literal
val
mentionsList
=
mentions
.
map
{
it
.
username
}.
toMutableList
()
val
mentionsList
=
mentions
.
map
{
if
(
settings
.
useRealName
())
it
.
name
else
it
.
username
?:
""
}.
toMutableList
()
mentionsList
.
add
(
"all"
)
mentionsList
.
add
(
"here"
)
...
...
@@ -90,7 +100,7 @@ class MessageParser @Inject constructor(val context: Application, private val co
val
textColor
=
if
(
mentionMe
)
myselfTextColor
else
othersTextColor
val
backgroundColor
=
if
(
mentionMe
)
myselfBackgroundColor
else
othersBackgroundColor
val
usernameSpan
=
MentionSpan
(
backgroundColor
,
textColor
,
mentionRadius
,
mentionPadding
,
mentionMe
)
mentionMe
)
// Add 1 to end offset to include the @.
val
end
=
offset
+
it
.
length
+
1
builder
.
setSpan
(
usernameSpan
,
offset
,
end
,
0
)
...
...
@@ -101,8 +111,11 @@ class MessageParser @Inject constructor(val context: Application, private val co
}
}
class
EmojiVisitor
(
configuration
:
SpannableConfiguration
,
private
val
builder
:
SpannableBuilder
)
:
SpannableMarkdownVisitor
(
configuration
,
builder
)
{
class
EmojiVisitor
(
configuration
:
SpannableConfiguration
,
private
val
builder
:
SpannableBuilder
)
:
SpannableMarkdownVisitor
(
configuration
,
builder
)
{
override
fun
visit
(
document
:
Document
)
{
val
spannable
=
EmojiParser
.
parse
(
builder
.
text
())
if
(
spannable
is
Spanned
)
{
...
...
@@ -127,7 +140,7 @@ class MessageParser @Inject constructor(val context: Application, private val co
if
(!
link
.
startsWith
(
"@"
)
&&
link
!
in
consumed
)
{
builder
.
setSpan
(
object
:
ClickableSpan
()
{
override
fun
onClick
(
view
:
View
)
{
with
(
view
)
{
with
(
view
)
{
val
tabsbuilder
=
CustomTabsIntent
.
Builder
()
tabsbuilder
.
setToolbarColor
(
ResourcesCompat
.
getColor
(
context
.
resources
,
R
.
color
.
colorPrimary
,
context
.
theme
))
val
customTabsIntent
=
tabsbuilder
.
build
()
...
...
@@ -150,11 +163,14 @@ class MessageParser @Inject constructor(val context: Application, private val co
}
}
class
MentionSpan
(
private
val
backgroundColor
:
Int
,
private
val
textColor
:
Int
,
private
val
radius
:
Float
,
padding
:
Float
,
referSelf
:
Boolean
)
:
ReplacementSpan
()
{
class
MentionSpan
(
private
val
backgroundColor
:
Int
,
private
val
textColor
:
Int
,
private
val
radius
:
Float
,
padding
:
Float
,
referSelf
:
Boolean
)
:
ReplacementSpan
()
{
private
val
padding
:
Float
=
if
(
referSelf
)
padding
else
0F
override
fun
getSize
(
paint
:
Paint
,
...
...
dependencies.gradle
View file @
7eaa9971
...
...
@@ -91,7 +91,6 @@ ext {
frescoImageViewer
:
"com.github.luciofm:FrescoImageViewer:${versions.frescoImageViewer}"
,
markwon
:
"ru.noties:markwon:${versions.markwon}"
,
markwonImageLoader
:
"ru.noties:markwon-image-loader:${versions.markwon}"
,
sheetMenu
:
"com.github.whalemare:sheetmenu:${versions.sheetMenu}"
,
...
...
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