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
2a281fa3
Unverified
Commit
2a281fa3
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 patch-4
parents
124340a7
fcc9a2a5
Changes
12
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
376 additions
and
162 deletions
+376
-162
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
UserRegistrationDialogFragment.java
...ragment/server_config/UserRegistrationDialogFragment.java
+165
-110
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
RocketChatMessageAttachmentsLayout.java
...id/widget/message/RocketChatMessageAttachmentsLayout.java
+2
-0
slide_in_left.xml
...-chat-android-widgets/src/main/res/anim/slide_in_left.xml
+8
-0
slide_in_right.xml
...chat-android-widgets/src/main/res/anim/slide_in_right.xml
+8
-0
slide_out_left.xml
...chat-android-widgets/src/main/res/anim/slide_out_left.xml
+8
-0
slide_out_right.xml
...hat-android-widgets/src/main/res/anim/slide_out_right.xml
+8
-0
No files found.
app/src/main/java/chat/rocket/android/RocketChatCache.kt
View file @
2a281fa3
...
...
@@ -25,6 +25,9 @@ object RocketChatCache {
private
val
KEY_HOSTNAME_LIST
=
"KEY_HOSTNAME_LIST"
private
val
KEY_OPENED_ROOMS
=
"KEY_OPENED_ROOMS"
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
...
...
@@ -404,4 +407,20 @@ object RocketChatCache {
sharedPreferences
.
registerOnSharedPreferenceChangeListener
(
listener
)
},
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 @
2a281fa3
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.push.gcm.GcmPushHelper
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.MediaType
import
okhttp3.Request
import
okhttp3.RequestBody
import
org.json.JSONObject
import
java.io.IOException
/**
* Helper class for dealing with Rest API calls.
...
...
@@ -139,6 +148,30 @@ object RestApiHelper {
.
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.
*
...
...
@@ -169,6 +202,9 @@ object RestApiHelper {
fun
getEndpointUrlForMemberList
(
roomType
:
String
,
hostname
:
String
):
String
=
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.
*
...
...
@@ -216,4 +252,21 @@ object RestApiHelper {
}
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/fragment/server_config/UserRegistrationDialogFragment.java
View file @
2a281fa3
This diff is collapsed.
Click to expand it.
app/src/main/java/chat/rocket/android/push/gcm/GcmPushHelper.kt
0 → 100644
View file @
2a281fa3
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 @
2a281fa3
...
...
@@ -70,10 +70,10 @@ public class RocketChatWebSocketThread extends HandlerThread {
private
final
String
hostname
;
private
final
RealmHelper
realmHelper
;
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
reconnectDisposable
=
new
CompositeDisposable
();
private
boolean
listenersRegistered
;
private
volatile
boolean
listenersRegistered
;
private
RocketChatWebSocketThread
(
Context
appContext
,
String
hostname
)
{
super
(
"RC_thread_"
+
hostname
);
...
...
app/src/main/java/chat/rocket/android/service/observer/CurrentUserObserver.java
View file @
2a281fa3
...
...
@@ -5,6 +5,7 @@ import android.content.Context;
import
java.util.ArrayList
;
import
java.util.List
;
import
chat.rocket.android.RocketChatCache
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.helper.LogIfError
;
import
chat.rocket.android.service.Registrable
;
...
...
@@ -56,6 +57,10 @@ public class CurrentUserObserver extends AbstractModelObserver<RealmUser> {
}
listeners
=
new
ArrayList
<>();
RocketChatCache
.
INSTANCE
.
setUserId
(
user
.
getId
());
RocketChatCache
.
INSTANCE
.
setUserUsername
(
user
.
getUsername
());
RocketChatCache
.
INSTANCE
.
setUserName
(
user
.
getName
());
final
String
userId
=
user
.
getId
();
// get and observe Room subscriptions.
...
...
app/src/main/java/chat/rocket/android/service/observer/GcmPushRegistrationObserver.java
View file @
2a281fa3
...
...
@@ -13,6 +13,7 @@ import chat.rocket.android.R;
import
chat.rocket.android.RocketChatCache
;
import
chat.rocket.android.api.RaixPushHelper
;
import
chat.rocket.android.helper.LogIfError
;
import
chat.rocket.android.push.gcm.GcmPushHelper
;
import
chat.rocket.core.SyncState
;
import
chat.rocket.persistence.realm.RealmHelper
;
import
chat.rocket.persistence.realm.models.ddp.RealmUser
;
...
...
@@ -24,63 +25,72 @@ import io.realm.RealmResults;
* call raix:push-update if needed.
*/
public
class
GcmPushRegistrationObserver
extends
AbstractModelObserver
<
GcmPushRegistration
>
{
public
GcmPushRegistrationObserver
(
Context
context
,
String
hostname
,
RealmHelper
realmHelper
)
{
super
(
context
,
hostname
,
realmHelper
);
}
@Override
public
RealmResults
<
GcmPushRegistration
>
queryItems
(
Realm
realm
)
{
return
GcmPushRegistration
.
queryDefault
(
realm
)
.
equalTo
(
GcmPushRegistration
.
SYNC_STATE
,
SyncState
.
NOT_SYNCED
)
.
equalTo
(
GcmPushRegistration
.
GCM_PUSH_ENABLED
,
true
)
.
findAll
();
}
public
GcmPushRegistrationObserver
(
Context
context
,
String
hostname
,
RealmHelper
realmHelper
)
{
super
(
context
,
hostname
,
realmHelper
);
}
@Override
public
void
onUpdateResults
(
List
<
GcmPushRegistration
>
results
)
{
if
(
results
.
isEmpty
())
{
return
;
@Override
public
RealmResults
<
GcmPushRegistration
>
queryItems
(
Realm
realm
)
{
return
GcmPushRegistration
.
queryDefault
(
realm
)
.
equalTo
(
GcmPushRegistration
.
SYNC_STATE
,
SyncState
.
NOT_SYNCED
)
.
equalTo
(
GcmPushRegistration
.
GCM_PUSH_ENABLED
,
true
)
.
findAll
();
}
realmHelper
.
executeTransaction
(
realm
->
{
GcmPushRegistration
.
queryDefault
(
realm
).
findFirst
().
setSyncState
(
SyncState
.
SYNCING
);
return
null
;
}).
onSuccessTask
(
_task
->
registerGcmTokenForServer
()
).
onSuccessTask
(
_task
->
realmHelper
.
executeTransaction
(
realm
->
{
GcmPushRegistration
.
queryDefault
(
realm
).
findFirst
().
setSyncState
(
SyncState
.
SYNCED
);
return
null
;
})
).
continueWith
(
task
->
{
if
(
task
.
isFaulted
())
{
realmHelper
.
executeTransaction
(
realm
->
{
GcmPushRegistration
.
queryDefault
(
realm
).
findFirst
().
setSyncState
(
SyncState
.
FAILED
);
return
null
;
}).
continueWith
(
new
LogIfError
());
}
return
null
;
});
}
@Override
public
void
onUpdateResults
(
List
<
GcmPushRegistration
>
results
)
{
String
gcmToken
=
GcmPushHelper
.
INSTANCE
.
getGcmToken
();
if
(
gcmToken
!=
null
&&
!
gcmToken
.
isEmpty
())
{
// We already have gcm token, so try to register it.
try
{
tryToRegisterToken
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
private
Task
<
Void
>
registerGcmTokenForServer
()
throws
IOException
{
final
String
gcmToken
=
getGcmToken
(
getSenderId
());
final
RealmUser
currentUser
=
realmHelper
.
executeTransactionForRead
(
realm
->
RealmUser
.
queryCurrentUser
(
realm
).
findFirst
());
final
String
userId
=
currentUser
!=
null
?
currentUser
.
getId
()
:
null
;
final
String
pushId
=
RocketChatCache
.
INSTANCE
.
getOrCreatePushId
();
private
Task
<
Void
>
tryToRegisterToken
()
{
return
realmHelper
.
executeTransaction
(
realm
->
{
GcmPushRegistration
.
queryDefault
(
realm
).
findFirst
().
setSyncState
(
SyncState
.
SYNCING
);
return
null
;
}).
onSuccessTask
(
_task
->
registerGcmTokenForServer
()
).
onSuccessTask
(
_task
->
realmHelper
.
executeTransaction
(
realm
->
{
GcmPushRegistration
.
queryDefault
(
realm
).
findFirst
().
setSyncState
(
SyncState
.
SYNCED
);
return
null
;
})
).
continueWith
(
task
->
{
if
(
task
.
isFaulted
())
{
realmHelper
.
executeTransaction
(
realm
->
{
GcmPushRegistration
.
queryDefault
(
realm
).
findFirst
().
setSyncState
(
SyncState
.
FAILED
);
return
null
;
}).
continueWith
(
new
LogIfError
());
}
return
null
;
});
}
return
new
RaixPushHelper
(
realmHelper
)
.
pushUpdate
(
pushId
,
gcmToken
,
userId
);
}
private
Task
<
Void
>
registerGcmTokenForServer
()
throws
IOException
{
final
String
gcmToken
=
getGcmToken
(
getSenderId
());
final
RealmUser
currentUser
=
realmHelper
.
executeTransactionForRead
(
realm
->
RealmUser
.
queryCurrentUser
(
realm
).
findFirst
());
final
String
userId
=
currentUser
!=
null
?
currentUser
.
getId
()
:
null
;
final
String
pushId
=
RocketChatCache
.
INSTANCE
.
getOrCreatePushId
();
private
String
getGcmToken
(
String
senderId
)
throws
IOException
{
return
InstanceID
.
getInstance
(
context
)
.
getToken
(
senderId
,
GoogleCloudMessaging
.
INSTANCE_ID_SCOPE
,
null
);
}
return
new
RaixPushHelper
(
realmHelper
)
.
pushUpdate
(
pushId
,
gcmToken
,
userId
);
}
private
String
getSenderId
()
{
return
context
.
getString
(
R
.
string
.
gcm_sender_id
);
}
private
String
getGcmToken
(
String
senderId
)
throws
IOException
{
return
InstanceID
.
getInstance
(
context
)
.
getToken
(
senderId
,
GoogleCloudMessaging
.
INSTANCE_ID_SCOPE
,
null
);
}
private
String
getSenderId
()
{
return
context
.
getString
(
R
.
string
.
gcm_sender_id
);
}
}
rocket-chat-android-widgets/src/main/java/chat/rocket/android/widget/message/RocketChatMessageAttachmentsLayout.java
View file @
2a281fa3
...
...
@@ -173,6 +173,8 @@ public class RocketChatMessageAttachmentsLayout extends LinearLayout {
public
void
onClick
(
View
view
)
{
new
CustomTabsIntent
.
Builder
()
.
setToolbarColor
(
ContextCompat
.
getColor
(
getContext
(),
R
.
color
.
colorPrimary
))
.
setStartAnimations
(
getContext
(),
R
.
anim
.
slide_in_right
,
R
.
anim
.
slide_out_left
)
.
setExitAnimations
(
getContext
(),
R
.
anim
.
slide_in_left
,
R
.
anim
.
slide_out_right
)
.
build
()
.
launchUrl
(
getContext
(),
Uri
.
parse
(
link
));
}
...
...
rocket-chat-android-widgets/src/main/res/anim/slide_in_left.xml
0 → 100644
View file @
2a281fa3
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<translate
android:fromXDelta=
"-100%p"
android:toXDelta=
"0"
android:duration=
"@android:integer/config_mediumAnimTime"
/>
</set>
\ No newline at end of file
rocket-chat-android-widgets/src/main/res/anim/slide_in_right.xml
0 → 100644
View file @
2a281fa3
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<translate
android:fromXDelta=
"100%p"
android:toXDelta=
"0"
android:duration=
"@android:integer/config_mediumAnimTime"
/>
</set>
\ No newline at end of file
rocket-chat-android-widgets/src/main/res/anim/slide_out_left.xml
0 → 100644
View file @
2a281fa3
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<translate
android:fromXDelta=
"0"
android:toXDelta=
"-100%p"
android:duration=
"@android:integer/config_mediumAnimTime"
/>
</set>
\ No newline at end of file
rocket-chat-android-widgets/src/main/res/anim/slide_out_right.xml
0 → 100644
View file @
2a281fa3
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<translate
android:fromXDelta=
"0"
android:toXDelta=
"100%p"
android:duration=
"@android:integer/config_mediumAnimTime"
/>
</set>
\ No newline at end of file
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