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
ccc8b9af
Unverified
Commit
ccc8b9af
authored
Dec 26, 2017
by
Leonardo Aramaki
Committed by
GitHub
Dec 26, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' into animation
parents
b772b13c
e4f43ab8
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
177 additions
and
52 deletions
+177
-52
RocketChatCache.kt
app/src/main/java/chat/rocket/android/RocketChatCache.kt
+19
-0
RestApiHelper.kt
...c/main/java/chat/rocket/android/api/rest/RestApiHelper.kt
+53
-0
GcmPushHelper.kt
...c/main/java/chat/rocket/android/push/gcm/GcmPushHelper.kt
+38
-0
RocketChatWebSocketThread.java
...hat/rocket/android/service/RocketChatWebSocketThread.java
+2
-2
CurrentUserObserver.java
.../rocket/android/service/observer/CurrentUserObserver.java
+5
-0
GcmPushRegistrationObserver.java
...android/service/observer/GcmPushRegistrationObserver.java
+60
-50
No files found.
app/src/main/java/chat/rocket/android/RocketChatCache.kt
View file @
ccc8b9af
...
@@ -25,6 +25,9 @@ object RocketChatCache {
...
@@ -25,6 +25,9 @@ object RocketChatCache {
private
val
KEY_HOSTNAME_LIST
=
"KEY_HOSTNAME_LIST"
private
val
KEY_HOSTNAME_LIST
=
"KEY_HOSTNAME_LIST"
private
val
KEY_OPENED_ROOMS
=
"KEY_OPENED_ROOMS"
private
val
KEY_OPENED_ROOMS
=
"KEY_OPENED_ROOMS"
private
val
KEY_SESSION_TOKEN
=
"KEY_SESSION_TOKEN"
private
val
KEY_SESSION_TOKEN
=
"KEY_SESSION_TOKEN"
private
val
KEY_USER_ID
=
"KEY_USER_ID"
private
val
KEY_USER_NAME
=
"KEY_USER_NAME"
private
val
KEY_USER_USERNAME
=
"KEY_USER_USERNAME"
private
lateinit
var
sharedPreferences
:
SharedPreferences
private
lateinit
var
sharedPreferences
:
SharedPreferences
...
@@ -404,4 +407,20 @@ object RocketChatCache {
...
@@ -404,4 +407,20 @@ object RocketChatCache {
sharedPreferences
.
registerOnSharedPreferenceChangeListener
(
listener
)
sharedPreferences
.
registerOnSharedPreferenceChangeListener
(
listener
)
},
BackpressureStrategy
.
LATEST
)
},
BackpressureStrategy
.
LATEST
)
}
}
fun
setUserId
(
userId
:
String
)
=
setString
(
KEY_USER_ID
,
userId
)
fun
getUserId
():
String
?
=
getString
(
KEY_USER_ID
,
null
)
fun
setUserName
(
name
:
String
?)
{
name
?.
let
{
setString
(
KEY_USER_NAME
,
name
)
}
}
fun
getUserName
():
String
?
=
getString
(
KEY_USER_NAME
,
null
)
fun
setUserUsername
(
username
:
String
)
=
setString
(
KEY_USER_USERNAME
,
username
)
fun
getUserUsername
():
String
?
=
getString
(
KEY_USER_USERNAME
,
null
)
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/api/rest/RestApiHelper.kt
View file @
ccc8b9af
package
chat.rocket.android.api.rest
package
chat.rocket.android.api.rest
import
chat.rocket.android.R
import
chat.rocket.android.RocketChatApplication
import
chat.rocket.android.helper.UrlHelper
import
chat.rocket.android.helper.UrlHelper
import
chat.rocket.android.push.gcm.GcmPushHelper
import
chat.rocket.core.models.Room
import
chat.rocket.core.models.Room
import
com.google.android.gms.gcm.GoogleCloudMessaging
import
com.google.android.gms.iid.InstanceID
import
okhttp3.HttpUrl
import
okhttp3.HttpUrl
import
okhttp3.MediaType
import
okhttp3.Request
import
okhttp3.Request
import
okhttp3.RequestBody
import
org.json.JSONObject
import
java.io.IOException
/**
/**
* Helper class for dealing with Rest API calls.
* Helper class for dealing with Rest API calls.
...
@@ -139,6 +148,30 @@ object RestApiHelper {
...
@@ -139,6 +148,30 @@ object RestApiHelper {
.
build
()
.
build
()
}
}
fun
getRequestForPushTokenRegistration
(
hostname
:
String
,
token
:
String
,
userId
:
String
):
Request
{
val
parsedHttpUrl
=
HttpUrl
.
parse
(
getEndpointUrlForPushToken
(
hostname
))
?.
newBuilder
()
?.
build
()
val
json
=
JSONObject
()
.
put
(
"type"
,
"gcm"
)
.
put
(
"appName"
,
"main"
)
.
put
(
"value"
,
GcmPushHelper
.
getGcmToken
())
val
requestBody
=
RequestBody
.
create
(
MediaType
.
parse
(
"application/json; charset=utf-8"
),
json
.
toString
())
return
Request
.
Builder
()
.
url
(
parsedHttpUrl
)
.
post
(
requestBody
)
.
addHeader
(
"X-Auth-Token"
,
token
)
.
addHeader
(
"X-User-Id"
,
userId
)
.
addHeader
(
"Content-Type"
,
"application/json"
)
.
build
()
}
/**
/**
* Returns a Rest API endpoint URL for favorite or pinned messages accordingly with the room type and the server hostname.
* Returns a Rest API endpoint URL for favorite or pinned messages accordingly with the room type and the server hostname.
*
*
...
@@ -169,6 +202,9 @@ object RestApiHelper {
...
@@ -169,6 +202,9 @@ object RestApiHelper {
fun
getEndpointUrlForMemberList
(
roomType
:
String
,
hostname
:
String
):
String
=
fun
getEndpointUrlForMemberList
(
roomType
:
String
,
hostname
:
String
):
String
=
UrlHelper
.
getSafeHostname
(
hostname
)
+
getRestApiUrlForMemberList
(
roomType
)
UrlHelper
.
getSafeHostname
(
hostname
)
+
getRestApiUrlForMemberList
(
roomType
)
fun
getEndpointUrlForPushToken
(
hostname
:
String
):
String
=
UrlHelper
.
getSafeHostname
(
hostname
)
+
getRestApiUrlForPushToken
()
/**
/**
* Returns the correspondent Rest API URL accordingly with the room type to get its favorite or pinned messages.
* Returns the correspondent Rest API URL accordingly with the room type to get its favorite or pinned messages.
*
*
...
@@ -216,4 +252,21 @@ object RestApiHelper {
...
@@ -216,4 +252,21 @@ object RestApiHelper {
}
}
return
restApiUrl
return
restApiUrl
}
}
/**
* Returns the correspondent Rest API URL for registration/deletion of Gcm Registration token.
*/
fun
getRestApiUrlForPushToken
():
String
{
return
"/api/v1/push.token"
}
@Throws
(
IOException
::
class
)
private
fun
getGcmToken
(
senderId
:
String
):
String
{
return
InstanceID
.
getInstance
(
RocketChatApplication
.
getInstance
())
.
getToken
(
senderId
,
GoogleCloudMessaging
.
INSTANCE_ID_SCOPE
,
null
)
}
private
fun
getSenderId
():
String
{
return
RocketChatApplication
.
getInstance
().
getString
(
R
.
string
.
gcm_sender_id
)
}
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/push/gcm/GcmPushHelper.kt
0 → 100644
View file @
ccc8b9af
package
chat.rocket.android.push.gcm
import
bolts.Task
import
chat.rocket.android.R
import
chat.rocket.android.RocketChatApplication
import
chat.rocket.android.RocketChatCache
import
chat.rocket.android.api.RaixPushHelper
import
chat.rocket.persistence.realm.RealmHelper
import
chat.rocket.persistence.realm.models.ddp.RealmUser
import
com.google.android.gms.gcm.GoogleCloudMessaging
import
com.google.android.gms.iid.InstanceID
import
java.io.IOException
object
GcmPushHelper
{
fun
getGcmToken
():
String
?
=
getGcmToken
(
getSenderId
())
@Throws
(
IOException
::
class
)
private
fun
registerGcmTokenForServer
(
realmHelper
:
RealmHelper
):
Task
<
Void
>
{
val
gcmToken
=
getGcmToken
(
getSenderId
())
val
currentUser
=
realmHelper
.
executeTransactionForRead
({
realm
->
RealmUser
.
queryCurrentUser
(
realm
).
findFirst
()
})
val
userId
=
if
(
currentUser
!=
null
)
currentUser
.
getId
()
else
null
val
pushId
=
RocketChatCache
.
getOrCreatePushId
()
return
RaixPushHelper
(
realmHelper
)
.
pushUpdate
(
pushId
!!
,
gcmToken
,
userId
)
}
@Throws
(
IOException
::
class
)
private
fun
getGcmToken
(
senderId
:
String
):
String
{
return
InstanceID
.
getInstance
(
RocketChatApplication
.
getInstance
())
.
getToken
(
senderId
,
GoogleCloudMessaging
.
INSTANCE_ID_SCOPE
,
null
)
}
private
fun
getSenderId
():
String
{
return
RocketChatApplication
.
getInstance
().
getString
(
R
.
string
.
gcm_sender_id
)
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/service/RocketChatWebSocketThread.java
View file @
ccc8b9af
...
@@ -70,10 +70,10 @@ public class RocketChatWebSocketThread extends HandlerThread {
...
@@ -70,10 +70,10 @@ public class RocketChatWebSocketThread extends HandlerThread {
private
final
String
hostname
;
private
final
String
hostname
;
private
final
RealmHelper
realmHelper
;
private
final
RealmHelper
realmHelper
;
private
final
ConnectivityManagerInternal
connectivityManager
;
private
final
ConnectivityManagerInternal
connectivityManager
;
private
final
ArrayList
<
Registrable
>
listeners
=
new
ArrayList
<>();
private
volatile
ArrayList
<
Registrable
>
listeners
=
new
ArrayList
<>();
private
final
CompositeDisposable
heartbeatDisposable
=
new
CompositeDisposable
();
private
final
CompositeDisposable
heartbeatDisposable
=
new
CompositeDisposable
();
private
final
CompositeDisposable
reconnectDisposable
=
new
CompositeDisposable
();
private
final
CompositeDisposable
reconnectDisposable
=
new
CompositeDisposable
();
private
boolean
listenersRegistered
;
private
volatile
boolean
listenersRegistered
;
private
RocketChatWebSocketThread
(
Context
appContext
,
String
hostname
)
{
private
RocketChatWebSocketThread
(
Context
appContext
,
String
hostname
)
{
super
(
"RC_thread_"
+
hostname
);
super
(
"RC_thread_"
+
hostname
);
...
...
app/src/main/java/chat/rocket/android/service/observer/CurrentUserObserver.java
View file @
ccc8b9af
...
@@ -5,6 +5,7 @@ import android.content.Context;
...
@@ -5,6 +5,7 @@ import android.content.Context;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.List
;
import
chat.rocket.android.RocketChatCache
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.helper.LogIfError
;
import
chat.rocket.android.helper.LogIfError
;
import
chat.rocket.android.service.Registrable
;
import
chat.rocket.android.service.Registrable
;
...
@@ -56,6 +57,10 @@ public class CurrentUserObserver extends AbstractModelObserver<RealmUser> {
...
@@ -56,6 +57,10 @@ public class CurrentUserObserver extends AbstractModelObserver<RealmUser> {
}
}
listeners
=
new
ArrayList
<>();
listeners
=
new
ArrayList
<>();
RocketChatCache
.
INSTANCE
.
setUserId
(
user
.
getId
());
RocketChatCache
.
INSTANCE
.
setUserUsername
(
user
.
getUsername
());
RocketChatCache
.
INSTANCE
.
setUserName
(
user
.
getName
());
final
String
userId
=
user
.
getId
();
final
String
userId
=
user
.
getId
();
// get and observe Room subscriptions.
// get and observe Room subscriptions.
...
...
app/src/main/java/chat/rocket/android/service/observer/GcmPushRegistrationObserver.java
View file @
ccc8b9af
...
@@ -13,6 +13,7 @@ import chat.rocket.android.R;
...
@@ -13,6 +13,7 @@ import chat.rocket.android.R;
import
chat.rocket.android.RocketChatCache
;
import
chat.rocket.android.RocketChatCache
;
import
chat.rocket.android.api.RaixPushHelper
;
import
chat.rocket.android.api.RaixPushHelper
;
import
chat.rocket.android.helper.LogIfError
;
import
chat.rocket.android.helper.LogIfError
;
import
chat.rocket.android.push.gcm.GcmPushHelper
;
import
chat.rocket.core.SyncState
;
import
chat.rocket.core.SyncState
;
import
chat.rocket.persistence.realm.RealmHelper
;
import
chat.rocket.persistence.realm.RealmHelper
;
import
chat.rocket.persistence.realm.models.ddp.RealmUser
;
import
chat.rocket.persistence.realm.models.ddp.RealmUser
;
...
@@ -24,6 +25,7 @@ import io.realm.RealmResults;
...
@@ -24,6 +25,7 @@ import io.realm.RealmResults;
* call raix:push-update if needed.
* call raix:push-update if needed.
*/
*/
public
class
GcmPushRegistrationObserver
extends
AbstractModelObserver
<
GcmPushRegistration
>
{
public
class
GcmPushRegistrationObserver
extends
AbstractModelObserver
<
GcmPushRegistration
>
{
public
GcmPushRegistrationObserver
(
Context
context
,
String
hostname
,
public
GcmPushRegistrationObserver
(
Context
context
,
String
hostname
,
RealmHelper
realmHelper
)
{
RealmHelper
realmHelper
)
{
super
(
context
,
hostname
,
realmHelper
);
super
(
context
,
hostname
,
realmHelper
);
...
@@ -39,11 +41,19 @@ public class GcmPushRegistrationObserver extends AbstractModelObserver<GcmPushRe
...
@@ -39,11 +41,19 @@ public class GcmPushRegistrationObserver extends AbstractModelObserver<GcmPushRe
@Override
@Override
public
void
onUpdateResults
(
List
<
GcmPushRegistration
>
results
)
{
public
void
onUpdateResults
(
List
<
GcmPushRegistration
>
results
)
{
if
(
results
.
isEmpty
())
{
String
gcmToken
=
GcmPushHelper
.
INSTANCE
.
getGcmToken
();
return
;
if
(
gcmToken
!=
null
&&
!
gcmToken
.
isEmpty
())
{
// We already have gcm token, so try to register it.
try
{
tryToRegisterToken
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
}
realmHelper
.
executeTransaction
(
realm
->
{
private
Task
<
Void
>
tryToRegisterToken
()
{
return
realmHelper
.
executeTransaction
(
realm
->
{
GcmPushRegistration
.
queryDefault
(
realm
).
findFirst
().
setSyncState
(
SyncState
.
SYNCING
);
GcmPushRegistration
.
queryDefault
(
realm
).
findFirst
().
setSyncState
(
SyncState
.
SYNCING
);
return
null
;
return
null
;
}).
onSuccessTask
(
_task
->
registerGcmTokenForServer
()
}).
onSuccessTask
(
_task
->
registerGcmTokenForServer
()
...
...
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