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
1860afc3
Commit
1860afc3
authored
Sep 27, 2017
by
Rafael Kellermann Streit
Committed by
GitHub
Sep 27, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' into iss424
parents
0441af0c
16052e46
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
109 additions
and
31 deletions
+109
-31
PushNotificationHandler.java
...ava/chat/rocket/android/push/PushNotificationHandler.java
+44
-10
rocket_chat_notification.xml
...main/res/drawable-anydpi-v21/rocket_chat_notification.xml
+8
-17
AvatarHelper.kt
...in/java/chat/rocket/android/widget/helper/AvatarHelper.kt
+22
-4
DrawableHelper.kt
.../java/chat/rocket/android/widget/helper/DrawableHelper.kt
+32
-0
AvatarHelperTest.kt
...lin/chat/rocket/android/widget/helper/AvatarHelperTest.kt
+3
-0
No files found.
app/src/main/java/chat/rocket/android/push/PushNotificationHandler.java
View file @
1860afc3
...
...
@@ -39,6 +39,7 @@ import java.util.Random;
import
chat.rocket.android.activity.MainActivity
;
import
chat.rocket.android.helper.ServerPolicyHelper
;
import
chat.rocket.android.service.ConnectivityManager
;
import
chat.rocket.android.widget.helper.AvatarHelper
;
import
chat.rocket.core.models.ServerInfo
;
public
class
PushNotificationHandler
implements
PushConstants
{
...
...
@@ -497,7 +498,7 @@ public class PushNotificationHandler implements PushConstants {
setNotification
(
notId
,
""
);
NotificationCompat
.
BigPictureStyle
bigPicture
=
new
NotificationCompat
.
BigPictureStyle
();
bigPicture
.
bigPicture
(
getBitmapFromURL
(
extras
.
getString
(
PICTURE
)));
bigPicture
.
bigPicture
(
getBitmapFromURL
(
extras
.
getString
(
PICTURE
)
,
null
,
null
));
bigPicture
.
setBigContentTitle
(
fromHtml
(
extras
.
getString
(
TITLE
)));
bigPicture
.
setSummaryText
(
fromHtml
(
extras
.
getString
(
SUMMARY_TEXT
)));
...
...
@@ -566,7 +567,7 @@ public class PushNotificationHandler implements PushConstants {
setNotification
(
notId
,
""
);
Notification
.
BigPictureStyle
bigPicture
=
new
Notification
.
BigPictureStyle
();
bigPicture
.
bigPicture
(
getBitmapFromURL
(
extras
.
getString
(
PICTURE
)));
bigPicture
.
bigPicture
(
getBitmapFromURL
(
extras
.
getString
(
PICTURE
)
,
null
,
null
));
bigPicture
.
setBigContentTitle
(
fromHtml
(
extras
.
getString
(
TITLE
)));
bigPicture
.
setSummaryText
(
fromHtml
(
extras
.
getString
(
SUMMARY_TEXT
)));
...
...
@@ -726,13 +727,22 @@ public class PushNotificationHandler implements PushConstants {
private
void
setNotificationLargeIcon
(
Context
context
,
Bundle
extras
,
String
packageName
,
Resources
resources
,
NotificationCompat
.
Builder
builder
)
{
String
gcmLargeIcon
=
extras
.
getString
(
IMAGE
);
// from gcm
String
hostname
=
getHostname
(
extras
);
String
username
=
getSenderUsername
(
extras
);
String
gcmLargeIcon
;
if
(
username
!=
null
&&
!
username
.
isEmpty
())
{
gcmLargeIcon
=
"https://"
+
hostname
+
"/avatar/"
+
username
;
}
else
{
gcmLargeIcon
=
extras
.
getString
(
IMAGE
);
// from gcm
}
if
(
gcmLargeIcon
==
null
||
""
.
equals
(
gcmLargeIcon
))
{
return
;
}
if
(
gcmLargeIcon
.
startsWith
(
"http://"
)
||
gcmLargeIcon
.
startsWith
(
"https://"
))
{
builder
.
setLargeIcon
(
getBitmapFromURL
(
gcmLargeIcon
));
builder
.
setLargeIcon
(
getBitmapFromURL
(
gcmLargeIcon
,
username
,
context
));
Log
.
d
(
LOG_TAG
,
"using remote large-icon from gcm"
);
}
else
{
AssetManager
assetManager
=
context
.
getAssets
();
...
...
@@ -757,13 +767,22 @@ public class PushNotificationHandler implements PushConstants {
private
void
setNotificationLargeIcon
(
Context
context
,
Bundle
extras
,
String
packageName
,
Resources
resources
,
Notification
.
Builder
builder
)
{
String
gcmLargeIcon
=
extras
.
getString
(
IMAGE
);
// from gcm
String
hostname
=
getHostname
(
extras
);
String
username
=
getSenderUsername
(
extras
);
String
gcmLargeIcon
;
if
(
username
!=
null
&&
!
username
.
isEmpty
())
{
gcmLargeIcon
=
"https://"
+
hostname
+
"/avatar/"
+
username
;
}
else
{
gcmLargeIcon
=
extras
.
getString
(
IMAGE
);
// from gcm
}
if
(
gcmLargeIcon
==
null
||
""
.
equals
(
gcmLargeIcon
))
{
return
;
}
if
(
gcmLargeIcon
.
startsWith
(
"http://"
)
||
gcmLargeIcon
.
startsWith
(
"https://"
))
{
builder
.
setLargeIcon
(
getBitmapFromURL
(
gcmLargeIcon
));
builder
.
setLargeIcon
(
getBitmapFromURL
(
gcmLargeIcon
,
username
,
context
));
Log
.
d
(
LOG_TAG
,
"using remote large-icon from gcm"
);
}
else
{
AssetManager
assetManager
=
context
.
getAssets
();
...
...
@@ -854,17 +873,23 @@ public class PushNotificationHandler implements PushConstants {
intent
.
putExtra
(
NOT_ID
,
notId
);
}
public
Bitmap
getBitmapFromURL
(
String
strURL
)
{
public
Bitmap
getBitmapFromURL
(
String
strURL
,
String
username
,
Context
context
)
{
try
{
URL
url
=
new
URL
(
strURL
);
HttpURLConnection
connection
=
(
HttpURLConnection
)
url
.
openConnection
();
connection
.
setDoInput
(
true
);
connection
.
connect
();
InputStream
input
=
connection
.
getInputStream
();
return
BitmapFactory
.
decodeStream
(
input
);
Bitmap
bitmap
=
BitmapFactory
.
decodeStream
(
input
);
if
(
bitmap
==
null
&&
username
!=
null
&&
context
!=
null
)
{
return
AvatarHelper
.
INSTANCE
.
getTextBitmap
(
username
,
context
);
}
return
bitmap
;
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
return
null
;
e
.
printStackTrace
();
return
null
;
}
}
...
...
@@ -937,6 +962,15 @@ public class PushNotificationHandler implements PushConstants {
}
}
private
String
getSenderUsername
(
Bundle
extras
)
{
try
{
JSONObject
jsonObject
=
new
JSONObject
(
extras
.
getString
(
"ejson"
,
"[]"
));
return
jsonObject
.
getJSONObject
(
"sender"
).
optString
(
"username"
);
}
catch
(
JSONException
e
)
{
return
null
;
}
}
private
boolean
isValidHostname
(
Context
context
,
String
hostname
)
{
final
List
<
ServerInfo
>
serverInfoList
=
ConnectivityManager
.
getInstance
(
context
.
getApplicationContext
()).
getServerList
();
...
...
app/src/main/res/drawable-anydpi-v21/rocket_chat_notification.xml
View file @
1860afc3
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:height
=
"24dp"
android:viewportHeight=
"48.0
"
android:viewportWidth
=
"48.0"
android:width=
"24dp
"
>
android:width
=
"24dp"
android:height=
"24dp
"
android:viewportHeight
=
"48.0"
android:viewportWidth=
"48.0
"
>
<path
android:fillColor=
"#A3000000"
android:pathData=
"M44.99,23.47C44.99,21.42 44.38,19.45 43.16,17.62C42.07,15.97 40.54,14.52 38.62,13.29C34.91,10.92 30.03,9.62 24.88,9.62C23.16,9.62 21.47,9.77 19.82,10.05C18.8,9.1 17.61,8.24 16.35,7.57C9.6,4.3 4,7.49 4,7.49C4,7.49 9.21,11.76 8.36,15.49C6.03,17.8 4.77,20.58 4.77,23.47C4.77,23.48 4.77,23.49 4.77,23.5C4.77,23.51 4.77,23.51 4.77,23.52C4.77,26.42 6.03,29.2 8.36,31.5C9.21,35.24 4,39.5 4,39.5C4,39.5 9.6,42.69 16.35,39.43C17.61,38.75 18.8,37.89 19.82,36.94C21.47,37.23 23.16,37.37 24.88,37.37C30.03,37.37 34.91,36.07 38.62,33.7C40.54,32.48 42.07,31.02 43.16,29.38C44.38,27.55 44.99,25.58 44.99,23.53C44.99,23.52 44.99,23.51 44.99,23.5L44.99,23.47ZM24.88,12.53C34.41,12.53 42.14,17.45 42.14,23.52C42.14,29.6 34.41,34.52 24.88,34.52C22.76,34.52 20.73,34.28 18.85,33.83C16.94,36.12 12.74,39.31 8.67,38.28C9.99,36.86 11.96,34.45 11.54,30.5C9.09,28.6 7.63,26.17 7.63,23.52C7.63,17.45 15.35,12.53 24.88,12.53Z"
android:strokeColor=
"#00000000"
android:strokeWidth=
"1"
/>
android:fillColor=
"#FFFFFFFF"
android:pathData=
"M44.99,23.47C44.99,21.42 44.38,19.45 43.16,17.62C42.07,15.97 40.54,14.52 38.62,13.29C34.91,10.92 30.03,9.62 24.88,9.62C23.16,9.62 21.47,9.77 19.82,10.05C18.8,9.1 17.61,8.24 16.35,7.57C9.6,4.3 4,7.49 4,7.49C4,7.49 9.21,11.76 8.36,15.49C6.03,17.8 4.77,20.58 4.77,23.47C4.77,23.48 4.77,23.49 4.77,23.5C4.77,23.51 4.77,23.51 4.77,23.52C4.77,26.42 6.03,29.2 8.36,31.5C9.21,35.24 4,39.5 4,39.5C4,39.5 9.6,42.69 16.35,39.43C17.61,38.75 18.8,37.89 19.82,36.94C21.47,37.23 23.16,37.37 24.88,37.37C30.03,37.37 34.91,36.07 38.62,33.7C40.54,32.48 42.07,31.02 43.16,29.38C44.38,27.55 44.99,25.58 44.99,23.53C44.99,23.52 44.99,23.51 44.99,23.5L44.99,23.47ZM24.88,12.53C34.41,12.53 42.14,17.45 42.14,23.52C42.14,29.6 34.41,34.52 24.88,34.52C22.76,34.52 20.73,34.28 18.85,33.83C16.94,36.12 12.74,39.31 8.67,38.28C9.99,36.86 11.96,34.45 11.54,30.5C9.09,28.6 7.63,26.17 7.63,23.52C7.63,17.45 15.35,12.53 24.88,12.53Z"
/>
<path
android:fillColor=
"#A3000000"
android:pathData=
"M24.88,26.17C26.15,26.17 27.17,25.14 27.17,23.88C27.17,22.61 26.15,21.59 24.88,21.59C23.62,21.59 22.59,22.61 22.59,23.88C22.59,25.14 23.62,26.17 24.88,26.17ZM32.85,26.17C34.12,26.17 35.14,25.14 35.14,23.88C35.14,22.61 34.12,21.59 32.85,21.59C31.59,21.59 30.56,22.61 30.56,23.88C30.56,25.14 31.59,26.17 32.85,26.17ZM16.91,26.17C18.18,26.17 19.2,25.14 19.2,23.88C19.2,22.62 18.18,21.59 16.91,21.59C15.65,21.59 14.62,22.62 14.62,23.88C14.62,25.14 15.65,26.17 16.91,26.17L16.91,26.17Z"
android:strokeColor=
"#00000000"
android:strokeWidth=
"1"
/>
<path
android:fillColor=
"#33000000"
android:pathData=
"M24.88,33.08C22.76,33.08 20.73,32.86 18.85,32.48C17.17,34.23 13.69,36.59 10.1,36.5C9.62,37.22 9.11,37.8 8.67,38.28C12.74,39.31 16.94,36.12 18.85,33.83C20.73,34.28 22.76,34.52 24.88,34.52C34.34,34.52 42.01,29.68 42.13,23.67C42.01,28.88 34.34,33.08 24.88,33.08L24.88,33.08Z"
android:strokeColor=
"#00000000"
android:strokeWidth=
"1"
/>
android:fillColor=
"#FFFFFFFF"
android:pathData=
"M24.88,26.17C26.15,26.17 27.17,25.14 27.17,23.88C27.17,22.61 26.15,21.59 24.88,21.59C23.62,21.59 22.59,22.61 22.59,23.88C22.59,25.14 23.62,26.17 24.88,26.17ZM32.85,26.17C34.12,26.17 35.14,25.14 35.14,23.88C35.14,22.61 34.12,21.59 32.85,21.59C31.59,21.59 30.56,22.61 30.56,23.88C30.56,25.14 31.59,26.17 32.85,26.17ZM16.91,26.17C18.18,26.17 19.2,25.14 19.2,23.88C19.2,22.62 18.18,21.59 16.91,21.59C15.65,21.59 14.62,22.62 14.62,23.88C14.62,25.14 15.65,26.17 16.91,26.17L16.91,26.17Z"
/>
</vector>
rocket-chat-android-widgets/src/main/java/chat/rocket/android/widget/helper/AvatarHelper.kt
View file @
1860afc3
package
chat.rocket.android.widget.helper
import
android.content.Context
import
android.graphics.Bitmap
import
android.graphics.Typeface
import
android.graphics.drawable.Drawable
import
chat.rocket.android.widget.AbsoluteUrl
import
com.amulyakhare.textdrawable.TextDrawable
import
java.net.URLEncoder
/**
* Created by Filipe de Lima Brito (filipedelimabrito@gmail.com) on 8/02/17.
*/
object
AvatarHelper
{
/**
...
...
@@ -45,6 +49,7 @@ object AvatarHelper {
* @param username The username.
* @param context The context.
* @return A drawable with username initials.
* @see getTextBitmap
* @see getUsernameInitials
*/
fun
getTextDrawable
(
username
:
String
,
context
:
Context
):
Drawable
{
...
...
@@ -57,6 +62,19 @@ object AvatarHelper {
.
buildRoundRect
(
getUsernameInitials
(
username
),
getUserAvatarBackgroundColor
(
username
),
round
)
}
/**
* Returns a bitmap with username initials.
*
* @param username The username.
* @param context The context.
* @return A bitmap with username initials.
* @see getTextDrawable
*/
fun
getTextBitmap
(
username
:
String
,
context
:
Context
):
Bitmap
{
val
textDrawable
=
getTextDrawable
(
username
,
context
)
return
DrawableHelper
.
getBitmapFromDrawable
(
textDrawable
,
96
,
96
)
}
/**
* Returns a string with the username initials. For example: username John.Doe returns JD initials.
*
...
...
@@ -70,15 +88,15 @@ object AvatarHelper {
val
splitUsername
=
username
.
split
(
"."
)
val
splitCount
=
splitUsername
.
size
if
(
splitCount
>
1
&&
splitUsername
[
0
].
isNotEmpty
()
&&
splitUsername
[
splitCount
-
1
].
isNotEmpty
())
{
return
if
(
splitCount
>
1
&&
splitUsername
[
0
].
isNotEmpty
()
&&
splitUsername
[
splitCount
-
1
].
isNotEmpty
())
{
val
firstInitial
=
splitUsername
[
0
].
substring
(
0
,
1
)
val
secondInitial
=
splitUsername
[
splitCount
-
1
].
substring
(
0
,
1
)
return
(
firstInitial
+
secondInitial
).
toUpperCase
()
(
firstInitial
+
secondInitial
).
toUpperCase
()
}
else
{
if
(
username
.
length
>
1
)
{
return
username
.
substring
(
0
,
2
).
toUpperCase
()
username
.
substring
(
0
,
2
).
toUpperCase
()
}
else
{
return
username
.
substring
(
0
,
1
).
toUpperCase
()
username
.
substring
(
0
,
1
).
toUpperCase
()
}
}
}
...
...
rocket-chat-android-widgets/src/main/java/chat/rocket/android/widget/helper/DrawableHelper.kt
View file @
1860afc3
package
chat.rocket.android.widget.helper
import
android.content.Context
import
android.graphics.Bitmap
import
android.graphics.Canvas
import
android.graphics.drawable.BitmapDrawable
import
android.graphics.drawable.Drawable
import
android.support.v4.content.ContextCompat
import
android.support.v4.graphics.drawable.DrawableCompat
/**
* Created by Filipe de Lima Brito (filipedelimabrito@gmail.com) on 8/29/17.
*/
object
DrawableHelper
{
/**
* Returns a bitmap from drawable.
*
* @param drawable The drawable to get the bitmap.
* @return A bitmap.
*/
fun
getBitmapFromDrawable
(
drawable
:
Drawable
,
intrinsicWidth
:
Int
=
1
,
intrinsicHeight
:
Int
=
1
):
Bitmap
{
if
(
drawable
is
BitmapDrawable
)
{
return
drawable
.
bitmap
}
val
textDrawableIntrinsicWidth
=
drawable
.
intrinsicWidth
var
textDrawableIntrinsicHeight
=
drawable
.
intrinsicHeight
val
width
=
if
(
textDrawableIntrinsicWidth
>
0
)
textDrawableIntrinsicWidth
else
intrinsicWidth
val
height
=
if
(
textDrawableIntrinsicHeight
>
0
)
textDrawableIntrinsicHeight
else
intrinsicHeight
val
bitmap
=
Bitmap
.
createBitmap
(
width
,
height
,
Bitmap
.
Config
.
ARGB_8888
)
val
canvas
=
Canvas
(
bitmap
)
drawable
.
setBounds
(
0
,
0
,
canvas
.
width
,
canvas
.
height
)
drawable
.
draw
(
canvas
)
return
bitmap
}
/**
* Wraps a drawable to be used for example for tinting.
*
...
...
rocket-chat-android-widgets/src/test/kotlin/chat/rocket/android/widget/helper/AvatarHelperTest.kt
View file @
1860afc3
...
...
@@ -2,6 +2,9 @@ import chat.rocket.android.widget.helper.AvatarHelper
import
org.junit.Test
import
kotlin.test.assertEquals
/**
* Created by Filipe de Lima Brito (filipedelimabrito@gmail.com) on 8/2/17.
*/
class
AvatarHelperTest
{
@Test
...
...
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