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
9c34af88
Commit
9c34af88
authored
Dec 17, 2016
by
Yusuke Iwaki
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix coding style
parent
b62277c9
Changes
202
Show whitespace changes
Inline
Side-by-side
Showing
202 changed files
with
5387 additions
and
4798 deletions
+5387
-4798
build.gradle
android-ddp/build.gradle
+34
-34
lint.xml
android-ddp/lint.xml
+3
-3
AndroidManifest.xml
android-ddp/src/main/AndroidManifest.xml
+6
-6
DDPClient.java
...-ddp/src/main/java/chat/rocket/android_ddp/DDPClient.java
+3
-2
DDPClientImpl.java
.../src/main/java/chat/rocket/android_ddp/DDPClientImpl.java
+20
-14
DDPSubscription.java
...rc/main/java/chat/rocket/android_ddp/DDPSubscription.java
+8
-5
RxWebSocket.java
...src/main/java/chat/rocket/android_ddp/rx/RxWebSocket.java
+13
-7
RxWebSocketCallback.java
.../java/chat/rocket/android_ddp/rx/RxWebSocketCallback.java
+11
-7
strings.xml
android-ddp/src/main/res/values/strings.xml
+1
-1
build.gradle
app/build.gradle
+99
-99
lint.xml
app/lint.xml
+6
-6
AndroidManifest.xml
app/src/main/AndroidManifest.xml
+35
-35
LaunchUtil.java
app/src/main/java/chat/rocket/android/LaunchUtil.java
+1
-0
RocketChatApplication.java
.../main/java/chat/rocket/android/RocketChatApplication.java
+5
-3
AbstractAuthedActivity.java
.../chat/rocket/android/activity/AbstractAuthedActivity.java
+22
-17
AbstractFragmentActivity.java
...hat/rocket/android/activity/AbstractFragmentActivity.java
+1
-3
AddServerActivity.java
.../java/chat/rocket/android/activity/AddServerActivity.java
+18
-9
MainActivity.java
.../main/java/chat/rocket/android/activity/MainActivity.java
+15
-7
ServerConfigActivity.java
...va/chat/rocket/android/activity/ServerConfigActivity.java
+17
-8
DDPClientWraper.java
...rc/main/java/chat/rocket/android/api/DDPClientWraper.java
+5
-4
FileUploadingHelper.java
...ain/java/chat/rocket/android/api/FileUploadingHelper.java
+5
-4
MethodCallHelper.java
...c/main/java/chat/rocket/android/api/MethodCallHelper.java
+18
-19
AbstractFragment.java
...n/java/chat/rocket/android/fragment/AbstractFragment.java
+4
-2
AbstractWebViewFragment.java
...chat/rocket/android/fragment/AbstractWebViewFragment.java
+13
-6
AbstractChatRoomFragment.java
...t/android/fragment/chatroom/AbstractChatRoomFragment.java
+2
-1
HomeFragment.java
...a/chat/rocket/android/fragment/chatroom/HomeFragment.java
+6
-3
RoomFragment.java
...a/chat/rocket/android/fragment/chatroom/RoomFragment.java
+30
-19
AbstractChatroomDialogFragment.java
...gment/chatroom/dialog/AbstractChatroomDialogFragment.java
+8
-3
FileUploadProgressDialogFragment.java
...ent/chatroom/dialog/FileUploadProgressDialogFragment.java
+18
-9
UsersOfRoomDialogFragment.java
...d/fragment/chatroom/dialog/UsersOfRoomDialogFragment.java
+21
-13
AbstractOAuthFragment.java
.../rocket/android/fragment/oauth/AbstractOAuthFragment.java
+22
-18
FacebookOAuthFragment.java
.../rocket/android/fragment/oauth/FacebookOAuthFragment.java
+4
-2
GitHubOAuthFragment.java
...at/rocket/android/fragment/oauth/GitHubOAuthFragment.java
+4
-2
GoogleOAuthFragment.java
...at/rocket/android/fragment/oauth/GoogleOAuthFragment.java
+4
-2
TwitterOAuthFragment.java
...t/rocket/android/fragment/oauth/TwitterOAuthFragment.java
+4
-2
AbstractServerConfigFragment.java
.../fragment/server_config/AbstractServerConfigFragment.java
+3
-1
InputHostnameFragment.java
...android/fragment/server_config/InputHostnameFragment.java
+10
-5
LoginFragment.java
.../rocket/android/fragment/server_config/LoginFragment.java
+16
-10
RetryLoginFragment.java
...et/android/fragment/server_config/RetryLoginFragment.java
+13
-7
UserRegistrationDialogFragment.java
...ragment/server_config/UserRegistrationDialogFragment.java
+12
-8
WaitingFragment.java
...ocket/android/fragment/server_config/WaitingFragment.java
+8
-4
SidebarMainFragment.java
.../rocket/android/fragment/sidebar/SidebarMainFragment.java
+16
-9
AbstractAddRoomDialogFragment.java
...ragment/sidebar/dialog/AbstractAddRoomDialogFragment.java
+9
-4
AddChannelDialogFragment.java
...oid/fragment/sidebar/dialog/AddChannelDialogFragment.java
+11
-6
AddDirectMessageDialogFragment.java
...agment/sidebar/dialog/AddDirectMessageDialogFragment.java
+12
-7
Avatar.java
app/src/main/java/chat/rocket/android/helper/Avatar.java
+27
-24
DateTime.java
app/src/main/java/chat/rocket/android/helper/DateTime.java
+1
-1
FileUploadHelper.java
...ain/java/chat/rocket/android/helper/FileUploadHelper.java
+9
-6
LoadMoreScrollListener.java
...va/chat/rocket/android/helper/LoadMoreScrollListener.java
+2
-1
LogcatIfError.java
...c/main/java/chat/rocket/android/helper/LogcatIfError.java
+2
-1
OkHttpHelper.java
...rc/main/java/chat/rocket/android/helper/OkHttpHelper.java
+1
-0
OnBackPressListener.java
.../java/chat/rocket/android/helper/OnBackPressListener.java
+0
-1
TextUtils.java
app/src/main/java/chat/rocket/android/helper/TextUtils.java
+1
-2
ExtRealmModelListAdapter.java
...rocket/android/layouthelper/ExtRealmModelListAdapter.java
+19
-8
MessageComposerManager.java
...android/layouthelper/chatroom/MessageComposerManager.java
+13
-10
MessageListAdapter.java
...ket/android/layouthelper/chatroom/MessageListAdapter.java
+16
-9
MessageViewHolder.java
...cket/android/layouthelper/chatroom/MessageViewHolder.java
+2
-1
RoomListManager.java
...rocket/android/layouthelper/chatroom/RoomListManager.java
+18
-18
RoomUserAdapter.java
...android/layouthelper/chatroom/dialog/RoomUserAdapter.java
+8
-4
RoomUserViewHolder.java
...roid/layouthelper/chatroom/dialog/RoomUserViewHolder.java
+1
-0
OAuthProviderInfo.java
.../rocket/android/layouthelper/oauth/OAuthProviderInfo.java
+16
-18
SuggestUserAdapter.java
...droid/layouthelper/sidebar/dialog/SuggestUserAdapter.java
+9
-5
ServerConfig.java
...src/main/java/chat/rocket/android/model/ServerConfig.java
+33
-31
Message.java
app/src/main/java/chat/rocket/android/model/ddp/Message.java
+14
-13
PublicSetting.java
...ain/java/chat/rocket/android/model/ddp/PublicSetting.java
+41
-34
RoomSubscription.java
.../java/chat/rocket/android/model/ddp/RoomSubscription.java
+16
-16
User.java
app/src/main/java/chat/rocket/android/model/ddp/User.java
+4
-4
MethodCall.java
...n/java/chat/rocket/android/model/internal/MethodCall.java
+73
-72
Session.java
...main/java/chat/rocket/android/model/internal/Session.java
+30
-28
AbstractRenderer.java
...n/java/chat/rocket/android/renderer/AbstractRenderer.java
+2
-1
FileUploadingRenderer.java
...a/chat/rocket/android/renderer/FileUploadingRenderer.java
+5
-4
MessageRenderer.java
...in/java/chat/rocket/android/renderer/MessageRenderer.java
+2
-1
UserRenderer.java
.../main/java/chat/rocket/android/renderer/UserRenderer.java
+1
-0
ViewVisibilityOptional.java
...ket/android/renderer/optional/ViewVisibilityOptional.java
+5
-2
RocketChatService.java
...n/java/chat/rocket/android/service/RocketChatService.java
+19
-14
RocketChatWebSocketThread.java
...hat/rocket/android/service/RocketChatWebSocketThread.java
+30
-21
AbstractDDPDocEventSubscriber.java
...et/android/service/ddp/AbstractDDPDocEventSubscriber.java
+16
-11
AbstractBaseSubscriber.java
...cket/android/service/ddp/base/AbstractBaseSubscriber.java
+9
-5
ActiveUsersSubscriber.java
...ocket/android/service/ddp/base/ActiveUsersSubscriber.java
+10
-6
LoginServiceConfigurationSubscriber.java
...service/ddp/base/LoginServiceConfigurationSubscriber.java
+10
-6
UserDataSubscriber.java
...t/rocket/android/service/ddp/base/UserDataSubscriber.java
+9
-5
AbstractStreamNotifyEventSubscriber.java
...rvice/ddp/stream/AbstractStreamNotifyEventSubscriber.java
+18
-10
AbstractStreamNotifyUserEventSubscriber.java
...e/ddp/stream/AbstractStreamNotifyUserEventSubscriber.java
+8
-3
StreamNotifyUserSubscriptionsChanged.java
...vice/ddp/stream/StreamNotifyUserSubscriptionsChanged.java
+14
-8
StreamRoomMessage.java
.../rocket/android/service/ddp/stream/StreamRoomMessage.java
+15
-9
AbstractRocketChatCacheObserver.java
...oid/service/internal/AbstractRocketChatCacheObserver.java
+11
-9
StreamRoomMessageManager.java
...et/android/service/internal/StreamRoomMessageManager.java
+9
-6
NotificationDismissalCallbackService.java
...ce/notification/NotificationDismissalCallbackService.java
+3
-1
AbstractModelObserver.java
...ocket/android/service/observer/AbstractModelObserver.java
+8
-5
CurrentUserObserver.java
.../rocket/android/service/observer/CurrentUserObserver.java
+11
-10
FileUploadingToS3Observer.java
...t/android/service/observer/FileUploadingToS3Observer.java
+20
-13
FileUploadingWithUfsObserver.java
...ndroid/service/observer/FileUploadingWithUfsObserver.java
+11
-8
GetUsersOfRoomsProcedureObserver.java
...id/service/observer/GetUsersOfRoomsProcedureObserver.java
+10
-7
LoadMessageProcedureObserver.java
...ndroid/service/observer/LoadMessageProcedureObserver.java
+11
-8
MethodCallObserver.java
...t/rocket/android/service/observer/MethodCallObserver.java
+11
-8
NewMessageObserver.java
...t/rocket/android/service/observer/NewMessageObserver.java
+10
-7
NotificationItemObserver.java
...et/android/service/observer/NotificationItemObserver.java
+11
-7
ReactiveNotificationManager.java
...android/service/observer/ReactiveNotificationManager.java
+12
-9
SessionObserver.java
...chat/rocket/android/service/observer/SessionObserver.java
+14
-10
TokenLoginObserver.java
...t/rocket/android/service/observer/TokenLoginObserver.java
+10
-7
ic_arrow_forward_white_24dp.xml
app/src/main/res/drawable/ic_arrow_forward_white_24dp.xml
+7
-7
ic_at_white_24dp.xml
app/src/main/res/drawable/ic_at_white_24dp.xml
+8
-3
ic_compose_white_24dp.xml
app/src/main/res/drawable/ic_compose_white_24dp.xml
+2
-2
ic_error_outline_black_24dp.xml
app/src/main/res/drawable/ic_error_outline_black_24dp.xml
+9
-4
ic_hashtag_white_24dp.xml
app/src/main/res/drawable/ic_hashtag_white_24dp.xml
+8
-3
ic_insert_photo_white_24dp.xml
app/src/main/res/drawable/ic_insert_photo_white_24dp.xml
+2
-2
ic_lock_white_24dp.xml
app/src/main/res/drawable/ic_lock_white_24dp.xml
+8
-3
ic_user_registration_blue_24dp.xml
app/src/main/res/drawable/ic_user_registration_blue_24dp.xml
+2
-2
progress_bar.xml
app/src/main/res/drawable/progress_bar.xml
+22
-22
rocket_chat_notification_24dp.xml
app/src/main/res/drawable/rocket_chat_notification_24dp.xml
+20
-11
selector_text_color_link.xml
app/src/main/res/drawable/selector_text_color_link.xml
+2
-2
userstatus_away.xml
app/src/main/res/drawable/userstatus_away.xml
+6
-6
userstatus_busy.xml
app/src/main/res/drawable/userstatus_busy.xml
+6
-6
userstatus_offline.xml
app/src/main/res/drawable/userstatus_offline.xml
+6
-6
userstatus_online.xml
app/src/main/res/drawable/userstatus_online.xml
+6
-6
activity_main.xml
app/src/main/res/layout-w720dp/activity_main.xml
+23
-18
fragment_room.xml
app/src/main/res/layout-w720dp/fragment_room.xml
+6
-5
activity_main.xml
app/src/main/res/layout/activity_main.xml
+26
-21
dialog_add_channel.xml
app/src/main/res/layout/dialog_add_channel.xml
+64
-62
dialog_add_direct_message.xml
app/src/main/res/layout/dialog_add_direct_message.xml
+41
-39
dialog_file_uploading.xml
app/src/main/res/layout/dialog_file_uploading.xml
+48
-46
dialog_user_registration.xml
app/src/main/res/layout/dialog_user_registration.xml
+68
-56
dialog_users_of_room.xml
app/src/main/res/layout/dialog_users_of_room.xml
+35
-28
dialog_waiting.xml
app/src/main/res/layout/dialog_waiting.xml
+22
-18
fragment_home.xml
app/src/main/res/layout/fragment_home.xml
+18
-15
fragment_input_hostname.xml
app/src/main/res/layout/fragment_input_hostname.xml
+42
-35
fragment_login.xml
app/src/main/res/layout/fragment_login.xml
+97
-81
fragment_retry_login.xml
app/src/main/res/layout/fragment_retry_login.xml
+52
-44
fragment_room.xml
app/src/main/res/layout/fragment_room.xml
+12
-10
fragment_room_main.xml
app/src/main/res/layout/fragment_room_main.xml
+35
-34
fragment_sidebar_main.xml
app/src/main/res/layout/fragment_sidebar_main.xml
+172
-144
fragment_waiting.xml
app/src/main/res/layout/fragment_waiting.xml
+20
-16
list_item_message.xml
app/src/main/res/layout/list_item_message.xml
+55
-44
list_item_message_header.xml
app/src/main/res/layout/list_item_message_header.xml
+4
-3
list_item_message_loading.xml
app/src/main/res/layout/list_item_message_loading.xml
+10
-8
list_item_message_newday.xml
app/src/main/res/layout/list_item_message_newday.xml
+28
-24
list_item_message_start_of_conversation.xml
...in/res/layout/list_item_message_start_of_conversation.xml
+12
-10
listitem_room_user.xml
app/src/main/res/layout/listitem_room_user.xml
+23
-19
room_side_menu.xml
app/src/main/res/layout/room_side_menu.xml
+24
-20
sidebar.xml
app/src/main/res/layout/sidebar.xml
+31
-25
simple_screen.xml
app/src/main/res/layout/simple_screen.xml
+4
-3
webview.xml
app/src/main/res/layout/webview.xml
+4
-3
api_key_strings.xml
app/src/main/res/values/api_key_strings.xml
+1
-1
colors.xml
app/src/main/res/values/colors.xml
+8
-8
dimens.xml
app/src/main/res/values/dimens.xml
+1
-1
fa_strings.xml
app/src/main/res/values/fa_strings.xml
+10
-10
margin_dimens.xml
app/src/main/res/values/margin_dimens.xml
+4
-4
message_styles.xml
app/src/main/res/values/message_styles.xml
+1
-1
sidebar_styles.xml
app/src/main/res/values/sidebar_styles.xml
+9
-8
styles.xml
app/src/main/res/values/styles.xml
+43
-43
user_status_colors.xml
app/src/main/res/values/user_status_colors.xml
+8
-8
build.gradle
build.gradle
+4
-4
checkstyle-config.xml
config/quality/checkstyle/checkstyle-config.xml
+201
-200
checkstyle-suppressions.xml
config/quality/checkstyle/checkstyle-suppressions.xml
+6
-6
android-exclude-filter.xml
config/quality/findbugs/android-exclude-filter.xml
+13
-13
pmd-ruleset.xml
config/quality/pmd/pmd-ruleset.xml
+22
-22
quality.gradle
config/quality/quality.gradle
+52
-52
intellij-google-style.xml
config/quality/style-guide/intellij-google-style.xml
+363
-363
dependencies.gradle
dependencies.gradle
+33
-33
build.gradle
log-wrapper/build.gradle
+20
-20
build.gradle
realm-helpers/build.gradle
+36
-36
AbstractRealmResultsObserver.java
...et/android/realm_helper/AbstractRealmResultsObserver.java
+5
-7
RealmAutoCompleteAdapter.java
...rocket/android/realm_helper/RealmAutoCompleteAdapter.java
+52
-46
RealmHelper.java
...in/java/chat/rocket/android/realm_helper/RealmHelper.java
+10
-9
RealmListObserver.java
...a/chat/rocket/android/realm_helper/RealmListObserver.java
+14
-11
RealmModelListAdapter.java
...at/rocket/android/realm_helper/RealmModelListAdapter.java
+25
-17
RealmObjectObserver.java
...chat/rocket/android/realm_helper/RealmObjectObserver.java
+19
-19
RealmStore.java
...ain/java/chat/rocket/android/realm_helper/RealmStore.java
+1
-0
build.gradle
rocket-chat-android-widgets/build.gradle
+32
-32
DividerView.java
...src/main/java/chat/rocket/android/widget/DividerView.java
+3
-4
FontAwesomeButton.java
...in/java/chat/rocket/android/widget/FontAwesomeButton.java
+2
-1
FontAwesomeTextView.java
.../java/chat/rocket/android/widget/FontAwesomeTextView.java
+2
-1
FontelloTextView.java
...ain/java/chat/rocket/android/widget/FontelloTextView.java
+2
-1
TypefaceHelper.java
.../main/java/chat/rocket/android/widget/TypefaceHelper.java
+1
-0
WaitingView.java
...src/main/java/chat/rocket/android/widget/WaitingView.java
+10
-5
InlineHightlighter.java
...chat/rocket/android/widget/helper/InlineHightlighter.java
+2
-1
LinkMovementMethodCompat.java
...ocket/android/widget/helper/LinkMovementMethodCompat.java
+4
-2
Linkify.java
.../main/java/chat/rocket/android/widget/helper/Linkify.java
+4
-2
RoomListItemView.java
...chat/rocket/android/widget/internal/RoomListItemView.java
+5
-5
MessageComposer.java
...a/chat/rocket/android/widget/message/MessageComposer.java
+3
-1
RocketChatMessageAttachmentsLayout.java
...id/widget/message/RocketChatMessageAttachmentsLayout.java
+11
-10
RocketChatMessageLayout.java
...ocket/android/widget/message/RocketChatMessageLayout.java
+3
-2
RocketChatMessageUrlsLayout.java
...t/android/widget/message/RocketChatMessageUrlsLayout.java
+4
-5
Emojione.java
...-android-widgets/src/main/java/com/emojione/Emojione.java
+1678
-1651
down_up_toggle.xml
...-android-widgets/src/main/res/drawable/down_up_toggle.xml
+3
-3
highlight_background_with_border.xml
...rc/main/res/drawable/highlight_background_with_border.xml
+6
-4
ic_send_black_24dp.xml
...roid-widgets/src/main/res/drawable/ic_send_black_24dp.xml
+9
-4
image_dummy.xml
...hat-android-widgets/src/main/res/drawable/image_dummy.xml
+8
-8
image_error.xml
...hat-android-widgets/src/main/res/drawable/image_error.xml
+8
-8
inline_attachment_background.xml
...ts/src/main/res/drawable/inline_attachment_background.xml
+6
-4
normal_circle.xml
...t-android-widgets/src/main/res/drawable/normal_circle.xml
+2
-2
unread_count_background.xml
...widgets/src/main/res/drawable/unread_count_background.xml
+3
-3
message_body.xml
...chat-android-widgets/src/main/res/layout/message_body.xml
+5
-5
message_body_highlight.xml
...id-widgets/src/main/res/layout/message_body_highlight.xml
+12
-12
message_composer.xml
...-android-widgets/src/main/res/layout/message_composer.xml
+30
-30
message_inline_attachment.xml
...widgets/src/main/res/layout/message_inline_attachment.xml
+38
-33
message_inline_embed_url.xml
...-widgets/src/main/res/layout/message_inline_embed_url.xml
+54
-47
message_inline_image.xml
...roid-widgets/src/main/res/layout/message_inline_image.xml
+14
-12
room_list_item.xml
...at-android-widgets/src/main/res/layout/room_list_item.xml
+42
-41
divider_view_attrs.xml
...ndroid-widgets/src/main/res/values/divider_view_attrs.xml
+4
-4
fa_strings.xml
...t-chat-android-widgets/src/main/res/values/fa_strings.xml
+3
-3
message_styles.xml
...at-android-widgets/src/main/res/values/message_styles.xml
+36
-30
No files found.
android-ddp/build.gradle
View file @
9c34af88
android-ddp/lint.xml
View file @
9c34af88
android-ddp/src/main/AndroidManifest.xml
View file @
9c34af88
android-ddp/src/main/java/chat/rocket/android_ddp/DDPClient.java
View file @
9c34af88
package
chat
.
rocket
.
android_ddp
;
package
chat
.
rocket
.
android_ddp
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.Nullable
;
import
org.json.JSONArray
;
import
bolts.Task
;
import
bolts.Task
;
import
bolts.TaskCompletionSource
;
import
bolts.TaskCompletionSource
;
import
chat.rocket.android_ddp.rx.RxWebSocketCallback
;
import
chat.rocket.android_ddp.rx.RxWebSocketCallback
;
import
okhttp3.OkHttpClient
;
import
okhttp3.OkHttpClient
;
import
org.json.JSONArray
;
import
rx.Observable
;
import
rx.Observable
;
public
class
DDPClient
{
public
class
DDPClient
{
...
...
android-ddp/src/main/java/chat/rocket/android_ddp/DDPClientImpl.java
View file @
9c34af88
...
@@ -3,17 +3,18 @@ package chat.rocket.android_ddp;
...
@@ -3,17 +3,18 @@ package chat.rocket.android_ddp;
import
android.support.annotation.NonNull
;
import
android.support.annotation.NonNull
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.Nullable
;
import
android.text.TextUtils
;
import
android.text.TextUtils
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
java.util.concurrent.TimeUnit
;
import
java.util.concurrent.TimeoutException
;
import
bolts.Task
;
import
bolts.Task
;
import
bolts.TaskCompletionSource
;
import
bolts.TaskCompletionSource
;
import
chat.rocket.android.log.RCLog
;
import
chat.rocket.android.log.RCLog
;
import
chat.rocket.android_ddp.rx.RxWebSocket
;
import
chat.rocket.android_ddp.rx.RxWebSocket
;
import
chat.rocket.android_ddp.rx.RxWebSocketCallback
;
import
chat.rocket.android_ddp.rx.RxWebSocketCallback
;
import
java.util.concurrent.TimeUnit
;
import
java.util.concurrent.TimeoutException
;
import
okhttp3.OkHttpClient
;
import
okhttp3.OkHttpClient
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
rx.Observable
;
import
rx.Observable
;
import
rx.functions.Func1
;
import
rx.functions.Func1
;
import
rx.subscriptions.CompositeSubscription
;
import
rx.subscriptions.CompositeSubscription
;
...
@@ -30,7 +31,9 @@ public class DDPClientImpl {
...
@@ -30,7 +31,9 @@ public class DDPClientImpl {
}
}
private
static
JSONObject
toJson
(
String
s
)
{
private
static
JSONObject
toJson
(
String
s
)
{
if
(
TextUtils
.
isEmpty
(
s
))
return
null
;
if
(
TextUtils
.
isEmpty
(
s
))
{
return
null
;
}
try
{
try
{
return
new
JSONObject
(
s
);
return
new
JSONObject
(
s
);
}
catch
(
JSONException
e
)
{
}
catch
(
JSONException
e
)
{
...
@@ -252,14 +255,16 @@ public class DDPClientImpl {
...
@@ -252,14 +255,16 @@ public class DDPClientImpl {
}
}
public
Observable
<
DDPSubscription
.
Event
>
getDDPSubscription
()
{
public
Observable
<
DDPSubscription
.
Event
>
getDDPSubscription
()
{
String
[]
targetMsgs
=
{
"added"
,
"changed"
,
"removed"
,
"addedBefore"
,
"movedBefore"
};
String
[]
targetMsgs
=
{
"added"
,
"changed"
,
"removed"
,
"addedBefore"
,
"movedBefore"
};
return
observable
.
filter
(
callback
->
callback
instanceof
RxWebSocketCallback
.
Message
)
return
observable
.
filter
(
callback
->
callback
instanceof
RxWebSocketCallback
.
Message
)
.
map
(
callback
->
((
RxWebSocketCallback
.
Message
)
callback
).
responseBodyString
)
.
map
(
callback
->
((
RxWebSocketCallback
.
Message
)
callback
).
responseBodyString
)
.
map
(
DDPClientImpl:
:
toJson
)
.
map
(
DDPClientImpl:
:
toJson
)
.
filter
(
response
->
{
.
filter
(
response
->
{
String
msg
=
extractMsg
(
response
);
String
msg
=
extractMsg
(
response
);
for
(
String
m
:
targetMsgs
)
{
for
(
String
m
:
targetMsgs
)
{
if
(
m
.
equals
(
msg
))
return
true
;
if
(
m
.
equals
(
msg
))
{
return
true
;
}
}
}
return
false
;
return
false
;
})
})
...
@@ -345,6 +350,7 @@ public class DDPClientImpl {
...
@@ -345,6 +350,7 @@ public class DDPClientImpl {
}
}
private
interface
JSONBuilder
{
private
interface
JSONBuilder
{
@NonNull
JSONObject
create
(
JSONObject
root
)
throws
JSONException
;
@NonNull
JSONObject
create
(
JSONObject
root
)
throws
JSONException
;
}
}
}
}
android-ddp/src/main/java/chat/rocket/android_ddp/DDPSubscription.java
View file @
9c34af88
...
@@ -29,7 +29,8 @@ public class DDPSubscription {
...
@@ -29,7 +29,8 @@ public class DDPSubscription {
this
.
id
=
id
;
this
.
id
=
id
;
}
}
@Override
public
String
toString
()
{
@Override
public
String
toString
()
{
return
"NoSub[id="
+
id
+
"]"
;
return
"NoSub[id="
+
id
+
"]"
;
}
}
...
@@ -53,7 +54,8 @@ public class DDPSubscription {
...
@@ -53,7 +54,8 @@ public class DDPSubscription {
this
.
id
=
id
;
this
.
id
=
id
;
}
}
@Override
public
String
toString
()
{
@Override
public
String
toString
()
{
return
"Ready[id="
+
id
+
"]"
;
return
"Ready[id="
+
id
+
"]"
;
}
}
}
}
...
@@ -68,7 +70,8 @@ public class DDPSubscription {
...
@@ -68,7 +70,8 @@ public class DDPSubscription {
this
.
docID
=
docID
;
this
.
docID
=
docID
;
}
}
@Override
public
String
toString
()
{
@Override
public
String
toString
()
{
return
"DocEvent[id="
+
docID
+
", collection="
+
collection
+
"]"
;
return
"DocEvent[id="
+
docID
+
", collection="
+
collection
+
"]"
;
}
}
}
}
...
...
android-ddp/src/main/java/chat/rocket/android_ddp/rx/RxWebSocket.java
View file @
9c34af88
package
chat
.
rocket
.
android_ddp
.
rx
;
package
chat
.
rocket
.
android_ddp
.
rx
;
import
chat.rocket.android.log.RCLog
;
import
java.io.IOException
;
import
java.io.IOException
;
import
chat.rocket.android.log.RCLog
;
import
okhttp3.OkHttpClient
;
import
okhttp3.OkHttpClient
;
import
okhttp3.Request
;
import
okhttp3.Request
;
import
okhttp3.RequestBody
;
import
okhttp3.RequestBody
;
...
@@ -31,15 +31,18 @@ public class RxWebSocket {
...
@@ -31,15 +31,18 @@ public class RxWebSocket {
WebSocketCall
call
=
WebSocketCall
.
create
(
httpClient
,
request
);
WebSocketCall
call
=
WebSocketCall
.
create
(
httpClient
,
request
);
return
Observable
.
create
(
new
Observable
.
OnSubscribe
<
RxWebSocketCallback
.
Base
>()
{
return
Observable
.
create
(
new
Observable
.
OnSubscribe
<
RxWebSocketCallback
.
Base
>()
{
@Override
public
void
call
(
Subscriber
<?
super
RxWebSocketCallback
.
Base
>
subscriber
)
{
@Override
public
void
call
(
Subscriber
<?
super
RxWebSocketCallback
.
Base
>
subscriber
)
{
call
.
enqueue
(
new
WebSocketListener
()
{
call
.
enqueue
(
new
WebSocketListener
()
{
@Override
public
void
onOpen
(
WebSocket
webSocket
,
Response
response
)
{
@Override
public
void
onOpen
(
WebSocket
webSocket
,
Response
response
)
{
isConnected
=
true
;
isConnected
=
true
;
RxWebSocket
.
this
.
webSocket
=
webSocket
;
RxWebSocket
.
this
.
webSocket
=
webSocket
;
subscriber
.
onNext
(
new
RxWebSocketCallback
.
Open
(
RxWebSocket
.
this
.
webSocket
,
response
));
subscriber
.
onNext
(
new
RxWebSocketCallback
.
Open
(
RxWebSocket
.
this
.
webSocket
,
response
));
}
}
@Override
public
void
onFailure
(
IOException
e
,
Response
response
)
{
@Override
public
void
onFailure
(
IOException
e
,
Response
response
)
{
try
{
try
{
isConnected
=
false
;
isConnected
=
false
;
subscriber
.
onError
(
new
RxWebSocketCallback
.
Failure
(
webSocket
,
e
,
response
));
subscriber
.
onError
(
new
RxWebSocketCallback
.
Failure
(
webSocket
,
e
,
response
));
...
@@ -48,17 +51,20 @@ public class RxWebSocket {
...
@@ -48,17 +51,20 @@ public class RxWebSocket {
}
}
}
}
@Override
public
void
onMessage
(
ResponseBody
responseBody
)
throws
IOException
{
@Override
public
void
onMessage
(
ResponseBody
responseBody
)
throws
IOException
{
isConnected
=
true
;
isConnected
=
true
;
subscriber
.
onNext
(
new
RxWebSocketCallback
.
Message
(
webSocket
,
responseBody
));
subscriber
.
onNext
(
new
RxWebSocketCallback
.
Message
(
webSocket
,
responseBody
));
}
}
@Override
public
void
onPong
(
Buffer
payload
)
{
@Override
public
void
onPong
(
Buffer
payload
)
{
isConnected
=
true
;
isConnected
=
true
;
subscriber
.
onNext
(
new
RxWebSocketCallback
.
Pong
(
webSocket
,
payload
));
subscriber
.
onNext
(
new
RxWebSocketCallback
.
Pong
(
webSocket
,
payload
));
}
}
@Override
public
void
onClose
(
int
code
,
String
reason
)
{
@Override
public
void
onClose
(
int
code
,
String
reason
)
{
isConnected
=
false
;
isConnected
=
false
;
subscriber
.
onNext
(
new
RxWebSocketCallback
.
Close
(
webSocket
,
code
,
reason
));
subscriber
.
onNext
(
new
RxWebSocketCallback
.
Close
(
webSocket
,
code
,
reason
));
subscriber
.
onCompleted
();
subscriber
.
onCompleted
();
...
...
android-ddp/src/main/java/chat/rocket/android_ddp/rx/RxWebSocketCallback.java
View file @
9c34af88
package
chat
.
rocket
.
android_ddp
.
rx
;
package
chat
.
rocket
.
android_ddp
.
rx
;
import
chat.rocket.android.log.RCLog
;
import
static
android
.
R
.
attr
.
type
;
import
java.io.IOException
;
import
java.io.IOException
;
import
chat.rocket.android.log.RCLog
;
import
okhttp3.Response
;
import
okhttp3.Response
;
import
okhttp3.ResponseBody
;
import
okhttp3.ResponseBody
;
import
okhttp3.ws.WebSocket
;
import
okhttp3.ws.WebSocket
;
import
okio.Buffer
;
import
okio.Buffer
;
import
static
android
.
R
.
attr
.
type
;
public
class
RxWebSocketCallback
{
public
class
RxWebSocketCallback
{
public
static
abstract
class
Base
{
public
static
abstract
class
Base
{
public
String
type
;
public
String
type
;
...
@@ -19,7 +19,8 @@ public class RxWebSocketCallback {
...
@@ -19,7 +19,8 @@ public class RxWebSocketCallback {
this
.
ws
=
ws
;
this
.
ws
=
ws
;
}
}
@Override
public
String
toString
()
{
@Override
public
String
toString
()
{
return
"["
+
type
+
"]"
;
return
"["
+
type
+
"]"
;
}
}
}
}
...
@@ -43,7 +44,8 @@ public class RxWebSocketCallback {
...
@@ -43,7 +44,8 @@ public class RxWebSocketCallback {
this
.
response
=
response
;
this
.
response
=
response
;
}
}
@Override
public
String
toString
()
{
@Override
public
String
toString
()
{
if
(
response
!=
null
)
{
if
(
response
!=
null
)
{
return
"["
+
type
+
"] "
+
response
.
message
();
return
"["
+
type
+
"] "
+
response
.
message
();
}
else
{
}
else
{
...
@@ -64,7 +66,8 @@ public class RxWebSocketCallback {
...
@@ -64,7 +66,8 @@ public class RxWebSocketCallback {
}
}
}
}
@Override
public
String
toString
()
{
@Override
public
String
toString
()
{
return
"["
+
type
+
"] "
+
responseBodyString
;
return
"["
+
type
+
"] "
+
responseBodyString
;
}
}
}
}
...
@@ -88,7 +91,8 @@ public class RxWebSocketCallback {
...
@@ -88,7 +91,8 @@ public class RxWebSocketCallback {
this
.
reason
=
reason
;
this
.
reason
=
reason
;
}
}
@Override
public
String
toString
()
{
@Override
public
String
toString
()
{
return
"["
+
type
+
"] code="
+
code
+
", reason="
+
reason
;
return
"["
+
type
+
"] code="
+
code
+
", reason="
+
reason
;
}
}
}
}
...
...
android-ddp/src/main/res/values/strings.xml
View file @
9c34af88
app/build.gradle
View file @
9c34af88
app/lint.xml
View file @
9c34af88
app/src/main/AndroidManifest.xml
View file @
9c34af88
app/src/main/java/chat/rocket/android/LaunchUtil.java
View file @
9c34af88
...
@@ -2,6 +2,7 @@ package chat.rocket.android;
...
@@ -2,6 +2,7 @@ package chat.rocket.android;
import
android.content.Context
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.content.Intent
;
import
chat.rocket.android.activity.AddServerActivity
;
import
chat.rocket.android.activity.AddServerActivity
;
import
chat.rocket.android.activity.ServerConfigActivity
;
import
chat.rocket.android.activity.ServerConfigActivity
;
...
...
app/src/main/java/chat/rocket/android/RocketChatApplication.java
View file @
9c34af88
package
chat
.
rocket
.
android
;
package
chat
.
rocket
.
android
;
import
android.support.multidex.MultiDexApplication
;
import
android.support.multidex.MultiDexApplication
;
import
chat.rocket.android.model.ServerConfig
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
com.facebook.stetho.Stetho
;
import
com.facebook.stetho.Stetho
;
import
com.uphyca.stetho_realm.RealmInspectorModulesProvider
;
import
com.uphyca.stetho_realm.RealmInspectorModulesProvider
;
import
io.realm.Realm
;
import
io.realm.Realm
;
import
io.realm.RealmConfiguration
;
import
io.realm.RealmConfiguration
;
import
java.util.List
;
import
java.util.List
;
import
chat.rocket.android.model.ServerConfig
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
chat.rocket.android.wrappers.InstabugWrapper
;
import
chat.rocket.android.wrappers.InstabugWrapper
;
/**
/**
* Customized Application-class for Rocket.Chat
* Customized Application-class for Rocket.Chat
*/
*/
public
class
RocketChatApplication
extends
MultiDexApplication
{
public
class
RocketChatApplication
extends
MultiDexApplication
{
@Override
public
void
onCreate
()
{
@Override
public
void
onCreate
()
{
super
.
onCreate
();
super
.
onCreate
();
Realm
.
init
(
this
);
Realm
.
init
(
this
);
...
...
app/src/main/java/chat/rocket/android/activity/AbstractAuthedActivity.java
View file @
9c34af88
...
@@ -4,6 +4,7 @@ import android.content.Intent;
...
@@ -4,6 +4,7 @@ import android.content.Intent;
import
android.content.SharedPreferences
;
import
android.content.SharedPreferences
;
import
android.os.Bundle
;
import
android.os.Bundle
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.Nullable
;
import
chat.rocket.android.LaunchUtil
;
import
chat.rocket.android.LaunchUtil
;
import
chat.rocket.android.RocketChatCache
;
import
chat.rocket.android.RocketChatCache
;
import
chat.rocket.android.model.ServerConfig
;
import
chat.rocket.android.model.ServerConfig
;
...
@@ -14,19 +15,8 @@ import chat.rocket.android.service.RocketChatService;
...
@@ -14,19 +15,8 @@ import chat.rocket.android.service.RocketChatService;
import
icepick.State
;
import
icepick.State
;
abstract
class
AbstractAuthedActivity
extends
AbstractFragmentActivity
{
abstract
class
AbstractAuthedActivity
extends
AbstractFragmentActivity
{
private
RealmListObserver
<
ServerConfig
>
unconfiguredServersObserver
=
RealmStore
.
getDefault
()
.
createListObserver
(
realm
->
realm
.
where
(
ServerConfig
.
class
).
isNotNull
(
"session"
).
findAll
())
.
setOnUpdateListener
(
results
->
{
if
(
results
.
isEmpty
())
{
LaunchUtil
.
showAddServerActivity
(
this
);
}
});
@State
protected
String
serverConfigId
;
@State
protected
String
serverConfigId
;
@State
protected
String
roomId
;
@State
protected
String
roomId
;
SharedPreferences
.
OnSharedPreferenceChangeListener
preferenceChangeListener
=
SharedPreferences
.
OnSharedPreferenceChangeListener
preferenceChangeListener
=
(
sharedPreferences
,
key
)
->
{
(
sharedPreferences
,
key
)
->
{
if
(
RocketChatCache
.
KEY_SELECTED_SERVER_CONFIG_ID
.
equals
(
key
))
{
if
(
RocketChatCache
.
KEY_SELECTED_SERVER_CONFIG_ID
.
equals
(
key
))
{
...
@@ -35,8 +25,18 @@ abstract class AbstractAuthedActivity extends AbstractFragmentActivity {
...
@@ -35,8 +25,18 @@ abstract class AbstractAuthedActivity extends AbstractFragmentActivity {
updateRoomIdIfNeeded
(
sharedPreferences
);
updateRoomIdIfNeeded
(
sharedPreferences
);
}
}
};
};
private
RealmListObserver
<
ServerConfig
>
unconfiguredServersObserver
=
RealmStore
.
getDefault
()
.
createListObserver
(
realm
->
realm
.
where
(
ServerConfig
.
class
).
isNotNull
(
"session"
).
findAll
())
.
setOnUpdateListener
(
results
->
{
if
(
results
.
isEmpty
())
{
LaunchUtil
.
showAddServerActivity
(
this
);
}
});
@Override
protected
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
@Override
protected
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
if
(
savedInstanceState
==
null
)
{
if
(
savedInstanceState
==
null
)
{
Intent
intent
=
getIntent
();
Intent
intent
=
getIntent
();
...
@@ -119,11 +119,14 @@ abstract class AbstractAuthedActivity extends AbstractFragmentActivity {
...
@@ -119,11 +119,14 @@ abstract class AbstractAuthedActivity extends AbstractFragmentActivity {
onRoomIdUpdated
();
onRoomIdUpdated
();
}
}
protected
void
onServerConfigIdUpdated
()
{}
protected
void
onServerConfigIdUpdated
()
{
}
protected
void
onRoomIdUpdated
()
{}
protected
void
onRoomIdUpdated
()
{
}
@Override
protected
void
onResume
()
{
@Override
protected
void
onResume
()
{
super
.
onResume
();
super
.
onResume
();
RocketChatService
.
keepalive
(
this
);
RocketChatService
.
keepalive
(
this
);
unconfiguredServersObserver
.
sub
();
unconfiguredServersObserver
.
sub
();
...
@@ -134,7 +137,8 @@ abstract class AbstractAuthedActivity extends AbstractFragmentActivity {
...
@@ -134,7 +137,8 @@ abstract class AbstractAuthedActivity extends AbstractFragmentActivity {
prefs
.
registerOnSharedPreferenceChangeListener
(
preferenceChangeListener
);
prefs
.
registerOnSharedPreferenceChangeListener
(
preferenceChangeListener
);
}
}
@Override
protected
void
onPause
()
{
@Override
protected
void
onPause
()
{
SharedPreferences
prefs
=
RocketChatCache
.
get
(
this
);
SharedPreferences
prefs
=
RocketChatCache
.
get
(
this
);
prefs
.
unregisterOnSharedPreferenceChangeListener
(
preferenceChangeListener
);
prefs
.
unregisterOnSharedPreferenceChangeListener
(
preferenceChangeListener
);
...
@@ -142,7 +146,8 @@ abstract class AbstractAuthedActivity extends AbstractFragmentActivity {
...
@@ -142,7 +146,8 @@ abstract class AbstractAuthedActivity extends AbstractFragmentActivity {
super
.
onPause
();
super
.
onPause
();
}
}
@Override
protected
void
onSaveInstanceState
(
Bundle
outState
)
{
@Override
protected
void
onSaveInstanceState
(
Bundle
outState
)
{
super
.
onSaveInstanceState
(
outState
);
super
.
onSaveInstanceState
(
outState
);
}
}
}
}
app/src/main/java/chat/rocket/android/activity/AbstractFragmentActivity.java
View file @
9c34af88
...
@@ -6,12 +6,10 @@ import android.support.annotation.Nullable;
...
@@ -6,12 +6,10 @@ import android.support.annotation.Nullable;
import
android.support.v4.app.Fragment
;
import
android.support.v4.app.Fragment
;
import
android.support.v4.app.FragmentManager
;
import
android.support.v4.app.FragmentManager
;
import
android.view.MotionEvent
;
import
android.view.MotionEvent
;
import
com.trello.rxlifecycle.components.support.RxAppCompatActivity
;
import
chat.rocket.android.helper.OnBackPressListener
;
import
chat.rocket.android.helper.OnBackPressListener
;
import
chat.rocket.android.log.RCLog
;
import
chat.rocket.android.log.RCLog
;
import
com.trello.rxlifecycle.components.support.RxAppCompatActivity
;
import
chat.rocket.android.wrappers.InstabugWrapper
;
import
chat.rocket.android.wrappers.InstabugWrapper
;
import
icepick.Icepick
;
import
icepick.Icepick
;
...
...
app/src/main/java/chat/rocket/android/activity/AddServerActivity.java
View file @
9c34af88
...
@@ -3,6 +3,8 @@ package chat.rocket.android.activity;
...
@@ -3,6 +3,8 @@ package chat.rocket.android.activity;
import
android.os.Bundle
;
import
android.os.Bundle
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.Nullable
;
import
android.support.v4.app.Fragment
;
import
android.support.v4.app.Fragment
;
import
java.util.UUID
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.RocketChatCache
;
import
chat.rocket.android.RocketChatCache
;
import
chat.rocket.android.fragment.server_config.InputHostnameFragment
;
import
chat.rocket.android.fragment.server_config.InputHostnameFragment
;
...
@@ -11,7 +13,6 @@ import chat.rocket.android.model.ServerConfig;
...
@@ -11,7 +13,6 @@ import chat.rocket.android.model.ServerConfig;
import
chat.rocket.android.realm_helper.RealmListObserver
;
import
chat.rocket.android.realm_helper.RealmListObserver
;
import
chat.rocket.android.realm_helper.RealmObjectObserver
;
import
chat.rocket.android.realm_helper.RealmObjectObserver
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
java.util.UUID
;
public
class
AddServerActivity
extends
AbstractFragmentActivity
{
public
class
AddServerActivity
extends
AbstractFragmentActivity
{
...
@@ -36,11 +37,13 @@ public class AddServerActivity extends AbstractFragmentActivity {
...
@@ -36,11 +37,13 @@ public class AddServerActivity extends AbstractFragmentActivity {
if
(
config
==
null
||
config
.
getState
()
==
ServerConfig
.
STATE_CONNECTION_ERROR
)
{
if
(
config
==
null
||
config
.
getState
()
==
ServerConfig
.
STATE_CONNECTION_ERROR
)
{
showFragment
(
new
InputHostnameFragment
());
showFragment
(
new
InputHostnameFragment
());
}
else
{
}
else
{
showFragment
(
WaitingFragment
.
create
(
getString
(
R
.
string
.
add_server_activity_waiting_server
)));
showFragment
(
WaitingFragment
.
create
(
getString
(
R
.
string
.
add_server_activity_waiting_server
)));
}
}
});
});
@Override
protected
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
@Override
protected
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
simple_screen
);
setContentView
(
R
.
layout
.
simple_screen
);
...
@@ -66,28 +69,33 @@ public class AddServerActivity extends AbstractFragmentActivity {
...
@@ -66,28 +69,33 @@ public class AddServerActivity extends AbstractFragmentActivity {
serverConfigId
=
UUID
.
randomUUID
().
toString
();
serverConfigId
=
UUID
.
randomUUID
().
toString
();
}
}
@Override
protected
int
getLayoutContainerForFragment
()
{
@Override
protected
int
getLayoutContainerForFragment
()
{
return
R
.
id
.
content
;
return
R
.
id
.
content
;
}
}
@Override
protected
void
onResume
()
{
@Override
protected
void
onResume
()
{
super
.
onResume
();
super
.
onResume
();
configuredServersObserver
.
sub
();
configuredServersObserver
.
sub
();
targetServerConfigObserver
.
sub
();
targetServerConfigObserver
.
sub
();
}
}
@Override
protected
void
onPause
()
{
@Override
protected
void
onPause
()
{
configuredServersObserver
.
unsub
();
configuredServersObserver
.
unsub
();
targetServerConfigObserver
.
unsub
();
targetServerConfigObserver
.
unsub
();
super
.
onPause
();
super
.
onPause
();
}
}
@Override
protected
void
showFragment
(
Fragment
fragment
)
{
@Override
protected
void
showFragment
(
Fragment
fragment
)
{
injectServerConfigIdArgTo
(
fragment
);
injectServerConfigIdArgTo
(
fragment
);
super
.
showFragment
(
fragment
);
super
.
showFragment
(
fragment
);
}
}
@Override
protected
void
showFragmentWithBackStack
(
Fragment
fragment
)
{
@Override
protected
void
showFragmentWithBackStack
(
Fragment
fragment
)
{
injectServerConfigIdArgTo
(
fragment
);
injectServerConfigIdArgTo
(
fragment
);
super
.
showFragmentWithBackStack
(
fragment
);
super
.
showFragmentWithBackStack
(
fragment
);
}
}
...
@@ -101,7 +109,8 @@ public class AddServerActivity extends AbstractFragmentActivity {
...
@@ -101,7 +109,8 @@ public class AddServerActivity extends AbstractFragmentActivity {
fragment
.
setArguments
(
args
);
fragment
.
setArguments
(
args
);
}
}
@Override
protected
void
onBackPressedNotHandled
()
{
@Override
protected
void
onBackPressedNotHandled
()
{
moveTaskToBack
(
true
);
moveTaskToBack
(
true
);
}
}
}
}
app/src/main/java/chat/rocket/android/activity/MainActivity.java
View file @
9c34af88
...
@@ -5,6 +5,7 @@ import android.support.annotation.Nullable;
...
@@ -5,6 +5,7 @@ import android.support.annotation.Nullable;
import
android.support.v4.widget.SlidingPaneLayout
;
import
android.support.v4.widget.SlidingPaneLayout
;
import
android.support.v7.widget.Toolbar
;
import
android.support.v7.widget.Toolbar
;
import
android.view.View
;
import
android.view.View
;
import
chat.rocket.android.LaunchUtil
;
import
chat.rocket.android.LaunchUtil
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.api.MethodCallHelper
;
...
@@ -26,11 +27,13 @@ public class MainActivity extends AbstractAuthedActivity {
...
@@ -26,11 +27,13 @@ public class MainActivity extends AbstractAuthedActivity {
private
RealmObjectObserver
<
Session
>
sessionObserver
;
private
RealmObjectObserver
<
Session
>
sessionObserver
;
@Override
protected
int
getLayoutContainerForFragment
()
{
@Override
protected
int
getLayoutContainerForFragment
()
{
return
R
.
id
.
activity_main_container
;
return
R
.
id
.
activity_main_container
;
}
}
@Override
protected
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
@Override
protected
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_main
);
setContentView
(
R
.
layout
.
activity_main
);
...
@@ -73,7 +76,8 @@ public class MainActivity extends AbstractAuthedActivity {
...
@@ -73,7 +76,8 @@ public class MainActivity extends AbstractAuthedActivity {
if
(
pane
!=
null
)
{
if
(
pane
!=
null
)
{
final
SlidingPaneLayout
subPane
=
(
SlidingPaneLayout
)
findViewById
(
R
.
id
.
sub_sliding_pane
);
final
SlidingPaneLayout
subPane
=
(
SlidingPaneLayout
)
findViewById
(
R
.
id
.
sub_sliding_pane
);
pane
.
setPanelSlideListener
(
new
SlidingPaneLayout
.
SimplePanelSlideListener
()
{
pane
.
setPanelSlideListener
(
new
SlidingPaneLayout
.
SimplePanelSlideListener
()
{
@Override
public
void
onPanelClosed
(
View
panel
)
{
@Override
public
void
onPanelClosed
(
View
panel
)
{
super
.
onPanelClosed
(
panel
);
super
.
onPanelClosed
(
panel
);
if
(
subPane
!=
null
)
{
if
(
subPane
!=
null
)
{
subPane
.
closePane
();
subPane
.
closePane
();
...
@@ -101,7 +105,8 @@ public class MainActivity extends AbstractAuthedActivity {
...
@@ -101,7 +105,8 @@ public class MainActivity extends AbstractAuthedActivity {
}
}
@DebugLog
@DebugLog
@Override
protected
void
onServerConfigIdUpdated
()
{
@Override
protected
void
onServerConfigIdUpdated
()
{
super
.
onServerConfigIdUpdated
();
super
.
onServerConfigIdUpdated
();
updateSessionObserver
();
updateSessionObserver
();
updateSidebarMainFragment
();
updateSidebarMainFragment
();
...
@@ -142,7 +147,8 @@ public class MainActivity extends AbstractAuthedActivity {
...
@@ -142,7 +147,8 @@ public class MainActivity extends AbstractAuthedActivity {
.
commit
();
.
commit
();
}
}
@Override
protected
void
onRoomIdUpdated
()
{
@Override
protected
void
onRoomIdUpdated
()
{
super
.
onRoomIdUpdated
();
super
.
onRoomIdUpdated
();
if
(
roomId
!=
null
)
{
if
(
roomId
!=
null
)
{
...
@@ -153,7 +159,8 @@ public class MainActivity extends AbstractAuthedActivity {
...
@@ -153,7 +159,8 @@ public class MainActivity extends AbstractAuthedActivity {
}
}
}
}
@Override
protected
void
onDestroy
()
{
@Override
protected
void
onDestroy
()
{
if
(
sessionObserver
!=
null
)
{
if
(
sessionObserver
!=
null
)
{
sessionObserver
.
unsub
();
sessionObserver
.
unsub
();
sessionObserver
=
null
;
sessionObserver
=
null
;
...
@@ -161,7 +168,8 @@ public class MainActivity extends AbstractAuthedActivity {
...
@@ -161,7 +168,8 @@ public class MainActivity extends AbstractAuthedActivity {
super
.
onDestroy
();
super
.
onDestroy
();
}
}
@Override
protected
boolean
onBackPress
()
{
@Override
protected
boolean
onBackPress
()
{
return
closeSidebarIfNeeded
()
||
super
.
onBackPress
();
return
closeSidebarIfNeeded
()
||
super
.
onBackPress
();
}
}
}
}
app/src/main/java/chat/rocket/android/activity/ServerConfigActivity.java
View file @
9c34af88
...
@@ -4,6 +4,7 @@ import android.content.Intent;
...
@@ -4,6 +4,7 @@ import android.content.Intent;
import
android.os.Bundle
;
import
android.os.Bundle
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.Nullable
;
import
android.support.v4.app.Fragment
;
import
android.support.v4.app.Fragment
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.fragment.server_config.LoginFragment
;
import
chat.rocket.android.fragment.server_config.LoginFragment
;
import
chat.rocket.android.fragment.server_config.RetryLoginFragment
;
import
chat.rocket.android.fragment.server_config.RetryLoginFragment
;
...
@@ -22,11 +23,13 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
...
@@ -22,11 +23,13 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
private
String
serverConfigId
;
private
String
serverConfigId
;
private
RealmObjectObserver
<
Session
>
sessionObserver
;
private
RealmObjectObserver
<
Session
>
sessionObserver
;
@Override
protected
int
getLayoutContainerForFragment
()
{
@Override
protected
int
getLayoutContainerForFragment
()
{
return
R
.
id
.
content
;
return
R
.
id
.
content
;
}
}
@Override
protected
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
@Override
protected
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
Intent
intent
=
getIntent
();
Intent
intent
=
getIntent
();
...
@@ -49,13 +52,15 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
...
@@ -49,13 +52,15 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
showFragment
(
new
WaitingFragment
());
showFragment
(
new
WaitingFragment
());
}
}
@Override
protected
void
onResume
()
{
@Override
protected
void
onResume
()
{
super
.
onResume
();
super
.
onResume
();
RocketChatService
.
keepalive
(
this
);
RocketChatService
.
keepalive
(
this
);
sessionObserver
.
sub
();
sessionObserver
.
sub
();
}
}
@Override
protected
void
onPause
()
{
@Override
protected
void
onPause
()
{
sessionObserver
.
unsub
();
sessionObserver
.
unsub
();
super
.
onPause
();
super
.
onPause
();
}
}
...
@@ -75,7 +80,8 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
...
@@ -75,7 +80,8 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
final
String
token
=
session
.
getToken
();
final
String
token
=
session
.
getToken
();
if
(!
TextUtils
.
isEmpty
(
token
))
{
if
(!
TextUtils
.
isEmpty
(
token
))
{
if
(
TextUtils
.
isEmpty
(
session
.
getError
()))
{
if
(
TextUtils
.
isEmpty
(
session
.
getError
()))
{
showFragment
(
WaitingFragment
.
create
(
getString
(
R
.
string
.
server_config_activity_authenticating
)));
showFragment
(
WaitingFragment
.
create
(
getString
(
R
.
string
.
server_config_activity_authenticating
)));
}
else
{
}
else
{
showFragment
(
new
RetryLoginFragment
());
showFragment
(
new
RetryLoginFragment
());
}
}
...
@@ -85,12 +91,14 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
...
@@ -85,12 +91,14 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
showFragment
(
new
LoginFragment
());
showFragment
(
new
LoginFragment
());
}
}
@Override
protected
void
showFragment
(
Fragment
fragment
)
{
@Override
protected
void
showFragment
(
Fragment
fragment
)
{
injectServerConfigIdArgTo
(
fragment
);
injectServerConfigIdArgTo
(
fragment
);
super
.
showFragment
(
fragment
);
super
.
showFragment
(
fragment
);
}
}
@Override
protected
void
showFragmentWithBackStack
(
Fragment
fragment
)
{
@Override
protected
void
showFragmentWithBackStack
(
Fragment
fragment
)
{
injectServerConfigIdArgTo
(
fragment
);
injectServerConfigIdArgTo
(
fragment
);
super
.
showFragmentWithBackStack
(
fragment
);
super
.
showFragmentWithBackStack
(
fragment
);
}
}
...
@@ -104,7 +112,8 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
...
@@ -104,7 +112,8 @@ public class ServerConfigActivity extends AbstractFragmentActivity {
fragment
.
setArguments
(
args
);
fragment
.
setArguments
(
args
);
}
}
@Override
protected
void
onBackPressedNotHandled
()
{
@Override
protected
void
onBackPressedNotHandled
()
{
moveTaskToBack
(
true
);
moveTaskToBack
(
true
);
}
}
}
}
app/src/main/java/chat/rocket/android/api/DDPClientWraper.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
api
;
package
chat
.
rocket
.
android
.
api
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.Nullable
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
java.util.UUID
;
import
bolts.Task
;
import
bolts.Task
;
import
chat.rocket.android.helper.OkHttpHelper
;
import
chat.rocket.android.helper.OkHttpHelper
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.TextUtils
;
...
@@ -8,9 +12,6 @@ import chat.rocket.android.log.RCLog;
...
@@ -8,9 +12,6 @@ import chat.rocket.android.log.RCLog;
import
chat.rocket.android_ddp.DDPClient
;
import
chat.rocket.android_ddp.DDPClient
;
import
chat.rocket.android_ddp.DDPClientCallback
;
import
chat.rocket.android_ddp.DDPClientCallback
;
import
chat.rocket.android_ddp.DDPSubscription
;
import
chat.rocket.android_ddp.DDPSubscription
;
import
java.util.UUID
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
rx.Observable
;
import
rx.Observable
;
/**
/**
...
...
app/src/main/java/chat/rocket/android/api/FileUploadingHelper.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
api
;
package
chat
.
rocket
.
android
.
api
;
import
android.content.Context
;
import
android.content.Context
;
import
org.json.JSONArray
;
import
org.json.JSONObject
;
import
bolts.Task
;
import
bolts.Task
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
org.json.JSONArray
;
import
org.json.JSONObject
;
/**
/**
* MethodCall for uploading file.
* MethodCall for uploading file.
...
...
app/src/main/java/chat/rocket/android/api/MethodCallHelper.java
View file @
9c34af88
...
@@ -2,6 +2,11 @@ package chat.rocket.android.api;
...
@@ -2,6 +2,11 @@ package chat.rocket.android.api;
import
android.content.Context
;
import
android.content.Context
;
import
android.util.Patterns
;
import
android.util.Patterns
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
java.util.UUID
;
import
bolts.Continuation
;
import
bolts.Continuation
;
import
bolts.Task
;
import
bolts.Task
;
import
chat.rocket.android.helper.CheckSum
;
import
chat.rocket.android.helper.CheckSum
;
...
@@ -16,10 +21,6 @@ import chat.rocket.android.realm_helper.RealmHelper;
...
@@ -16,10 +21,6 @@ import chat.rocket.android.realm_helper.RealmHelper;
import
chat.rocket.android.realm_helper.RealmStore
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
chat.rocket.android_ddp.DDPClientCallback
;
import
chat.rocket.android_ddp.DDPClientCallback
;
import
hugo.weaving.DebugLog
;
import
hugo.weaving.DebugLog
;
import
java.util.UUID
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
/**
/**
* Utility class for creating/handling MethodCall or RPC.
* Utility class for creating/handling MethodCall or RPC.
...
@@ -27,10 +28,14 @@ import org.json.JSONObject;
...
@@ -27,10 +28,14 @@ import org.json.JSONObject;
*/
*/
public
class
MethodCallHelper
{
public
class
MethodCallHelper
{
protected
static
final
long
TIMEOUT_MS
=
4000
;
protected
static
final
Continuation
<
String
,
Task
<
JSONObject
>>
CONVERT_TO_JSON_OBJECT
=
task
->
Task
.
forResult
(
new
JSONObject
(
task
.
getResult
()));
protected
static
final
Continuation
<
String
,
Task
<
JSONArray
>>
CONVERT_TO_JSON_ARRAY
=
task
->
Task
.
forResult
(
new
JSONArray
(
task
.
getResult
()));
protected
final
Context
context
;
protected
final
Context
context
;
protected
final
RealmHelper
realmHelper
;
protected
final
RealmHelper
realmHelper
;
protected
final
DDPClientWraper
ddpClient
;
protected
final
DDPClientWraper
ddpClient
;
protected
static
final
long
TIMEOUT_MS
=
4000
;
@Deprecated
@Deprecated
/**
/**
...
@@ -93,10 +98,6 @@ public class MethodCallHelper {
...
@@ -93,10 +98,6 @@ public class MethodCallHelper {
});
});
}
}
protected
interface
ParamBuilder
{
JSONArray
buildParam
()
throws
JSONException
;
}
protected
final
Task
<
String
>
call
(
String
methodName
,
long
timeout
)
{
protected
final
Task
<
String
>
call
(
String
methodName
,
long
timeout
)
{
return
injectErrorHandler
(
executeMethodCall
(
methodName
,
null
,
timeout
));
return
injectErrorHandler
(
executeMethodCall
(
methodName
,
null
,
timeout
));
}
}
...
@@ -111,12 +112,6 @@ public class MethodCallHelper {
...
@@ -111,12 +112,6 @@ public class MethodCallHelper {
}
}
}
}
protected
static
final
Continuation
<
String
,
Task
<
JSONObject
>>
CONVERT_TO_JSON_OBJECT
=
task
->
Task
.
forResult
(
new
JSONObject
(
task
.
getResult
()));
protected
static
final
Continuation
<
String
,
Task
<
JSONArray
>>
CONVERT_TO_JSON_ARRAY
=
task
->
Task
.
forResult
(
new
JSONArray
(
task
.
getResult
()));
/**
/**
* Register User.
* Register User.
*/
*/
...
@@ -340,7 +335,6 @@ public class MethodCallHelper {
...
@@ -340,7 +335,6 @@ public class MethodCallHelper {
.
onSuccessTask
(
task
->
Task
.
forResult
(
null
));
.
onSuccessTask
(
task
->
Task
.
forResult
(
null
));
}
}
public
Task
<
Void
>
getPublicSettings
()
{
public
Task
<
Void
>
getPublicSettings
()
{
return
call
(
"public-settings/get"
,
TIMEOUT_MS
)
return
call
(
"public-settings/get"
,
TIMEOUT_MS
)
.
onSuccessTask
(
CONVERT_TO_JSON_ARRAY
)
.
onSuccessTask
(
CONVERT_TO_JSON_ARRAY
)
...
@@ -357,4 +351,9 @@ public class MethodCallHelper {
...
@@ -357,4 +351,9 @@ public class MethodCallHelper {
});
});
});
});
}
}
protected
interface
ParamBuilder
{
JSONArray
buildParam
()
throws
JSONException
;
}
}
}
app/src/main/java/chat/rocket/android/fragment/AbstractFragment.java
View file @
9c34af88
...
@@ -14,7 +14,9 @@ import com.trello.rxlifecycle.components.support.RxFragment;
...
@@ -14,7 +14,9 @@ import com.trello.rxlifecycle.components.support.RxFragment;
public
abstract
class
AbstractFragment
extends
RxFragment
{
public
abstract
class
AbstractFragment
extends
RxFragment
{
protected
View
rootView
;
protected
View
rootView
;
protected
abstract
@LayoutRes
int
getLayout
();
protected
abstract
@LayoutRes
int
getLayout
();
protected
abstract
void
onSetupView
();
protected
abstract
void
onSetupView
();
...
...
app/src/main/java/chat/rocket/android/fragment/AbstractWebViewFragment.java
View file @
9c34af88
...
@@ -9,6 +9,7 @@ import android.webkit.WebResourceRequest;
...
@@ -9,6 +9,7 @@ import android.webkit.WebResourceRequest;
import
android.webkit.WebSettings
;
import
android.webkit.WebSettings
;
import
android.webkit.WebView
;
import
android.webkit.WebView
;
import
android.webkit.WebViewClient
;
import
android.webkit.WebViewClient
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.helper.OnBackPressListener
;
import
chat.rocket.android.helper.OnBackPressListener
;
import
hugo.weaving.DebugLog
;
import
hugo.weaving.DebugLog
;
...
@@ -19,11 +20,13 @@ public abstract class AbstractWebViewFragment extends AbstractFragment
...
@@ -19,11 +20,13 @@ public abstract class AbstractWebViewFragment extends AbstractFragment
private
WebViewClient
webviewClient
=
new
WebViewClient
()
{
private
WebViewClient
webviewClient
=
new
WebViewClient
()
{
private
boolean
error
;
private
boolean
error
;
@Override
public
void
onPageStarted
(
WebView
webview
,
String
url
,
Bitmap
favicon
)
{
@Override
public
void
onPageStarted
(
WebView
webview
,
String
url
,
Bitmap
favicon
)
{
error
=
false
;
error
=
false
;
}
}
@Override
public
void
onPageFinished
(
WebView
webview
,
String
url
)
{
@Override
public
void
onPageFinished
(
WebView
webview
,
String
url
)
{
if
(!
error
)
{
if
(!
error
)
{
onPageLoaded
(
webview
,
url
);
onPageLoaded
(
webview
,
url
);
}
}
...
@@ -35,7 +38,8 @@ public abstract class AbstractWebViewFragment extends AbstractFragment
...
@@ -35,7 +38,8 @@ public abstract class AbstractWebViewFragment extends AbstractFragment
this
.
error
=
true
;
this
.
error
=
true
;
}
}
@Override
public
boolean
shouldOverrideUrlLoading
(
WebView
webview
,
String
url
)
{
@Override
public
boolean
shouldOverrideUrlLoading
(
WebView
webview
,
String
url
)
{
return
(
shouldOverride
(
webview
,
url
)
&&
onHandleCallback
(
webview
,
url
))
return
(
shouldOverride
(
webview
,
url
)
&&
onHandleCallback
(
webview
,
url
))
||
super
.
shouldOverrideUrlLoading
(
webview
,
url
);
||
super
.
shouldOverrideUrlLoading
(
webview
,
url
);
}
}
...
@@ -48,11 +52,13 @@ public abstract class AbstractWebViewFragment extends AbstractFragment
...
@@ -48,11 +52,13 @@ public abstract class AbstractWebViewFragment extends AbstractFragment
}
}
};
};
@Override
protected
int
getLayout
()
{
@Override
protected
int
getLayout
()
{
return
R
.
layout
.
webview
;
return
R
.
layout
.
webview
;
}
}
@Override
protected
void
onSetupView
()
{
@Override
protected
void
onSetupView
()
{
webview
=
(
WebView
)
rootView
.
findViewById
(
R
.
id
.
webview
);
webview
=
(
WebView
)
rootView
.
findViewById
(
R
.
id
.
webview
);
setupWebView
();
setupWebView
();
...
@@ -76,7 +82,8 @@ public abstract class AbstractWebViewFragment extends AbstractFragment
...
@@ -76,7 +82,8 @@ public abstract class AbstractWebViewFragment extends AbstractFragment
}
}
}
}
@Override
public
boolean
onBackPressed
()
{
@Override
public
boolean
onBackPressed
()
{
if
(
webview
.
canGoBack
())
{
if
(
webview
.
canGoBack
())
{
webview
.
goBack
();
webview
.
goBack
();
return
true
;
return
true
;
...
...
app/src/main/java/chat/rocket/android/fragment/chatroom/AbstractChatRoomFragment.java
View file @
9c34af88
...
@@ -6,6 +6,7 @@ import android.support.v7.widget.Toolbar;
...
@@ -6,6 +6,7 @@ import android.support.v7.widget.Toolbar;
import
android.view.LayoutInflater
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.view.ViewGroup
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.fragment.AbstractFragment
;
import
chat.rocket.android.fragment.AbstractFragment
;
...
...
app/src/main/java/chat/rocket/android/fragment/chatroom/HomeFragment.java
View file @
9c34af88
...
@@ -6,15 +6,18 @@ public class HomeFragment extends AbstractChatRoomFragment {
...
@@ -6,15 +6,18 @@ public class HomeFragment extends AbstractChatRoomFragment {
public
HomeFragment
()
{
public
HomeFragment
()
{
}
}
@Override
protected
int
getLayout
()
{
@Override
protected
int
getLayout
()
{
return
R
.
layout
.
fragment_home
;
return
R
.
layout
.
fragment_home
;
}
}
@Override
protected
void
onSetupView
()
{
@Override
protected
void
onSetupView
()
{
activityToolbar
.
setTitle
(
R
.
string
.
home_fragment_title
);
activityToolbar
.
setTitle
(
R
.
string
.
home_fragment_title
);
}
}
@Override
public
void
onResume
()
{
@Override
public
void
onResume
()
{
super
.
onResume
();
super
.
onResume
();
activityToolbar
.
setNavigationIcon
(
null
);
activityToolbar
.
setNavigationIcon
(
null
);
activityToolbar
.
setTitle
(
R
.
string
.
home_fragment_title
);
activityToolbar
.
setTitle
(
R
.
string
.
home_fragment_title
);
...
...
app/src/main/java/chat/rocket/android/fragment/chatroom/RoomFragment.java
View file @
9c34af88
...
@@ -12,15 +12,21 @@ import android.support.v7.app.AlertDialog;
...
@@ -12,15 +12,21 @@ import android.support.v7.app.AlertDialog;
import
android.support.v7.widget.LinearLayoutManager
;
import
android.support.v7.widget.LinearLayoutManager
;
import
android.support.v7.widget.RecyclerView
;
import
android.support.v7.widget.RecyclerView
;
import
android.view.View
;
import
android.view.View
;
import
com.jakewharton.rxbinding.support.v4.widget.RxDrawerLayout
;
import
io.realm.Sort
;
import
org.json.JSONObject
;
import
java.lang.reflect.Field
;
import
java.util.UUID
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.fragment.chatroom.dialog.FileUploadProgressDialogFragment
;
import
chat.rocket.android.fragment.chatroom.dialog.FileUploadProgressDialogFragment
;
import
chat.rocket.android.fragment.chatroom.dialog.UsersOfRoomDialogFragment
;
import
chat.rocket.android.fragment.chatroom.dialog.UsersOfRoomDialogFragment
;
import
chat.rocket.android.helper.FileUploadHelper
;
import
chat.rocket.android.helper.LoadMoreScrollListener
;
import
chat.rocket.android.helper.LoadMoreScrollListener
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.OnBackPressListener
;
import
chat.rocket.android.helper.OnBackPressListener
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.FileUploadHelper
;
import
chat.rocket.android.layouthelper.chatroom.MessageComposerManager
;
import
chat.rocket.android.layouthelper.chatroom.MessageComposerManager
;
import
chat.rocket.android.layouthelper.chatroom.MessageListAdapter
;
import
chat.rocket.android.layouthelper.chatroom.MessageListAdapter
;
import
chat.rocket.android.layouthelper.chatroom.PairedMessage
;
import
chat.rocket.android.layouthelper.chatroom.PairedMessage
;
...
@@ -38,11 +44,6 @@ import chat.rocket.android.realm_helper.RealmObjectObserver;
...
@@ -38,11 +44,6 @@ import chat.rocket.android.realm_helper.RealmObjectObserver;
import
chat.rocket.android.realm_helper.RealmStore
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
chat.rocket.android.service.RocketChatService
;
import
chat.rocket.android.service.RocketChatService
;
import
chat.rocket.android.widget.message.MessageComposer
;
import
chat.rocket.android.widget.message.MessageComposer
;
import
com.jakewharton.rxbinding.support.v4.widget.RxDrawerLayout
;
import
io.realm.Sort
;
import
java.lang.reflect.Field
;
import
java.util.UUID
;
import
org.json.JSONObject
;
/**
/**
* Chat room screen.
* Chat room screen.
...
@@ -63,6 +64,9 @@ public class RoomFragment extends AbstractChatRoomFragment
...
@@ -63,6 +64,9 @@ public class RoomFragment extends AbstractChatRoomFragment
private
RealmObjectObserver
<
LoadMessageProcedure
>
procedureObserver
;
private
RealmObjectObserver
<
LoadMessageProcedure
>
procedureObserver
;
private
MessageComposerManager
messageComposerManager
;
private
MessageComposerManager
messageComposerManager
;
public
RoomFragment
()
{
}
/**
/**
* create fragment with roomId.
* create fragment with roomId.
*/
*/
...
@@ -75,10 +79,8 @@ public class RoomFragment extends AbstractChatRoomFragment
...
@@ -75,10 +79,8 @@ public class RoomFragment extends AbstractChatRoomFragment
return
fragment
;
return
fragment
;
}
}
public
RoomFragment
()
{
@Override
}
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
Bundle
args
=
getArguments
();
Bundle
args
=
getArguments
();
...
@@ -107,11 +109,13 @@ public class RoomFragment extends AbstractChatRoomFragment
...
@@ -107,11 +109,13 @@ public class RoomFragment extends AbstractChatRoomFragment
}
}
}
}
@Override
protected
int
getLayout
()
{
@Override
protected
int
getLayout
()
{
return
R
.
layout
.
fragment_room
;
return
R
.
layout
.
fragment_room
;
}
}
@Override
protected
void
onSetupView
()
{
@Override
protected
void
onSetupView
()
{
RecyclerView
listView
=
(
RecyclerView
)
rootView
.
findViewById
(
R
.
id
.
recyclerview
);
RecyclerView
listView
=
(
RecyclerView
)
rootView
.
findViewById
(
R
.
id
.
recyclerview
);
MessageListAdapter
adapter
=
(
MessageListAdapter
)
realmHelper
.
createListAdapter
(
getContext
(),
MessageListAdapter
adapter
=
(
MessageListAdapter
)
realmHelper
.
createListAdapter
(
getContext
(),
realm
->
realm
.
where
(
Message
.
class
)
realm
->
realm
.
where
(
Message
.
class
)
...
@@ -127,7 +131,8 @@ public class RoomFragment extends AbstractChatRoomFragment
...
@@ -127,7 +131,8 @@ public class RoomFragment extends AbstractChatRoomFragment
listView
.
setLayoutManager
(
layoutManager
);
listView
.
setLayoutManager
(
layoutManager
);
scrollListener
=
new
LoadMoreScrollListener
(
layoutManager
,
40
)
{
scrollListener
=
new
LoadMoreScrollListener
(
layoutManager
,
40
)
{
@Override
public
void
requestMoreItem
()
{
@Override
public
void
requestMoreItem
()
{
loadMoreRequest
();
loadMoreRequest
();
}
}
};
};
...
@@ -138,7 +143,8 @@ public class RoomFragment extends AbstractChatRoomFragment
...
@@ -138,7 +143,8 @@ public class RoomFragment extends AbstractChatRoomFragment
setupFileUploader
();
setupFileUploader
();
}
}
@Override
public
void
onItemClick
(
PairedMessage
pairedMessage
)
{
@Override
public
void
onItemClick
(
PairedMessage
pairedMessage
)
{
if
(
pairedMessage
.
target
!=
null
)
{
if
(
pairedMessage
.
target
!=
null
)
{
final
int
syncstate
=
pairedMessage
.
target
.
getSyncstate
();
final
int
syncstate
=
pairedMessage
.
target
.
getSyncstate
();
if
(
syncstate
==
SyncState
.
FAILED
)
{
if
(
syncstate
==
SyncState
.
FAILED
)
{
...
@@ -156,7 +162,8 @@ public class RoomFragment extends AbstractChatRoomFragment
...
@@ -156,7 +162,8 @@ public class RoomFragment extends AbstractChatRoomFragment
realmHelper
.
executeTransaction
(
realm
->
realmHelper
.
executeTransaction
(
realm
->
realm
.
where
(
Message
.
class
)
realm
.
where
(
Message
.
class
)
.
equalTo
(
"_id"
,
messageId
).
findAll
().
deleteAllFromRealm
()
.
equalTo
(
"_id"
,
messageId
).
findAll
().
deleteAllFromRealm
()
).
continueWith
(
new
LogcatIfError
());;
).
continueWith
(
new
LogcatIfError
());
;
})
})
.
show
();
.
show
();
}
}
...
@@ -231,7 +238,8 @@ public class RoomFragment extends AbstractChatRoomFragment
...
@@ -231,7 +238,8 @@ public class RoomFragment extends AbstractChatRoomFragment
});
});
}
}
@Override
public
void
onActivityResult
(
int
requestCode
,
int
resultCode
,
Intent
data
)
{
@Override
public
void
onActivityResult
(
int
requestCode
,
int
resultCode
,
Intent
data
)
{
super
.
onActivityResult
(
requestCode
,
resultCode
,
data
);
super
.
onActivityResult
(
requestCode
,
resultCode
,
data
);
if
(
requestCode
!=
RC_UPL
||
resultCode
!=
Activity
.
RESULT_OK
)
{
if
(
requestCode
!=
RC_UPL
||
resultCode
!=
Activity
.
RESULT_OK
)
{
return
;
return
;
...
@@ -332,7 +340,8 @@ public class RoomFragment extends AbstractChatRoomFragment
...
@@ -332,7 +340,8 @@ public class RoomFragment extends AbstractChatRoomFragment
}
}
}
}
@Override
public
void
onResume
()
{
@Override
public
void
onResume
()
{
super
.
onResume
();
super
.
onResume
();
roomObserver
.
sub
();
roomObserver
.
sub
();
procedureObserver
.
sub
();
procedureObserver
.
sub
();
...
@@ -340,13 +349,15 @@ public class RoomFragment extends AbstractChatRoomFragment
...
@@ -340,13 +349,15 @@ public class RoomFragment extends AbstractChatRoomFragment
markAsReadIfNeeded
();
markAsReadIfNeeded
();
}
}
@Override
public
void
onPause
()
{
@Override
public
void
onPause
()
{
procedureObserver
.
unsub
();
procedureObserver
.
unsub
();
roomObserver
.
unsub
();
roomObserver
.
unsub
();
super
.
onPause
();
super
.
onPause
();
}
}
@Override
public
boolean
onBackPressed
()
{
@Override
public
boolean
onBackPressed
()
{
return
closeSideMenuIfNeeded
()
||
messageComposerManager
.
hideMessageComposerIfNeeded
();
return
closeSideMenuIfNeeded
()
||
messageComposerManager
.
hideMessageComposerIfNeeded
();
}
}
}
}
app/src/main/java/chat/rocket/android/fragment/chatroom/dialog/AbstractChatroomDialogFragment.java
View file @
9c34af88
...
@@ -6,6 +6,7 @@ import android.support.annotation.LayoutRes;
...
@@ -6,6 +6,7 @@ import android.support.annotation.LayoutRes;
import
android.support.annotation.NonNull
;
import
android.support.annotation.NonNull
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.Nullable
;
import
android.support.design.widget.BottomSheetDialogFragment
;
import
android.support.design.widget.BottomSheetDialogFragment
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
chat.rocket.android.realm_helper.RealmStore
;
...
@@ -14,11 +15,14 @@ abstract class AbstractChatroomDialogFragment extends BottomSheetDialogFragment
...
@@ -14,11 +15,14 @@ abstract class AbstractChatroomDialogFragment extends BottomSheetDialogFragment
protected
RealmHelper
realmHelper
;
protected
RealmHelper
realmHelper
;
protected
String
roomId
;
protected
String
roomId
;
protected
@LayoutRes
abstract
int
getLayout
();
protected
@LayoutRes
abstract
int
getLayout
();
protected
abstract
void
onSetupDialog
();
protected
abstract
void
onSetupDialog
();
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
Bundle
args
=
getArguments
();
Bundle
args
=
getArguments
();
...
@@ -33,7 +37,8 @@ abstract class AbstractChatroomDialogFragment extends BottomSheetDialogFragment
...
@@ -33,7 +37,8 @@ abstract class AbstractChatroomDialogFragment extends BottomSheetDialogFragment
roomId
=
args
.
getString
(
"roomId"
);
roomId
=
args
.
getString
(
"roomId"
);
}
}
@Override
public
final
void
setupDialog
(
Dialog
dialog
,
int
style
)
{
@Override
public
final
void
setupDialog
(
Dialog
dialog
,
int
style
)
{
super
.
setupDialog
(
dialog
,
style
);
super
.
setupDialog
(
dialog
,
style
);
dialog
.
setContentView
(
getLayout
());
dialog
.
setContentView
(
getLayout
());
onSetupDialog
();
onSetupDialog
();
...
...
app/src/main/java/chat/rocket/android/fragment/chatroom/dialog/FileUploadProgressDialogFragment.java
View file @
9c34af88
...
@@ -7,6 +7,7 @@ import android.support.annotation.Nullable;
...
@@ -7,6 +7,7 @@ import android.support.annotation.Nullable;
import
android.widget.ProgressBar
;
import
android.widget.ProgressBar
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
android.widget.Toast
;
import
android.widget.Toast
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.model.SyncState
;
import
chat.rocket.android.model.SyncState
;
import
chat.rocket.android.model.internal.FileUploading
;
import
chat.rocket.android.model.internal.FileUploading
;
...
@@ -21,7 +22,8 @@ public class FileUploadProgressDialogFragment extends AbstractChatroomDialogFrag
...
@@ -21,7 +22,8 @@ public class FileUploadProgressDialogFragment extends AbstractChatroomDialogFrag
private
String
uplId
;
private
String
uplId
;
private
RealmObjectObserver
<
FileUploading
>
fileUploadingObserver
;
private
RealmObjectObserver
<
FileUploading
>
fileUploadingObserver
;
public
FileUploadProgressDialogFragment
()
{}
public
FileUploadProgressDialogFragment
()
{
}
public
static
FileUploadProgressDialogFragment
create
(
String
serverConfigId
,
public
static
FileUploadProgressDialogFragment
create
(
String
serverConfigId
,
String
roomId
,
String
uplId
)
{
String
roomId
,
String
uplId
)
{
...
@@ -36,12 +38,14 @@ public class FileUploadProgressDialogFragment extends AbstractChatroomDialogFrag
...
@@ -36,12 +38,14 @@ public class FileUploadProgressDialogFragment extends AbstractChatroomDialogFrag
return
fragment
;
return
fragment
;
}
}
@Override
protected
void
handleArgs
(
@NonNull
Bundle
args
)
{
@Override
protected
void
handleArgs
(
@NonNull
Bundle
args
)
{
super
.
handleArgs
(
args
);
super
.
handleArgs
(
args
);
uplId
=
args
.
getString
(
"uplId"
);
uplId
=
args
.
getString
(
"uplId"
);
}
}
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
fileUploadingObserver
=
realmHelper
fileUploadingObserver
=
realmHelper
...
@@ -49,11 +53,13 @@ public class FileUploadProgressDialogFragment extends AbstractChatroomDialogFrag
...
@@ -49,11 +53,13 @@ public class FileUploadProgressDialogFragment extends AbstractChatroomDialogFrag
.
setOnUpdateListener
(
this
::
onRenderFileUploadingState
);
.
setOnUpdateListener
(
this
::
onRenderFileUploadingState
);
}
}
@Override
protected
int
getLayout
()
{
@Override
protected
int
getLayout
()
{
return
R
.
layout
.
dialog_file_uploading
;
return
R
.
layout
.
dialog_file_uploading
;
}
}
@Override
protected
void
onSetupDialog
()
{
@Override
protected
void
onSetupDialog
()
{
}
}
...
@@ -78,17 +84,20 @@ public class FileUploadProgressDialogFragment extends AbstractChatroomDialogFrag
...
@@ -78,17 +84,20 @@ public class FileUploadProgressDialogFragment extends AbstractChatroomDialogFrag
}
}
}
}
@Override
public
void
onResume
()
{
@Override
public
void
onResume
()
{
super
.
onResume
();
super
.
onResume
();
fileUploadingObserver
.
sub
();
fileUploadingObserver
.
sub
();
}
}
@Override
public
void
onPause
()
{
@Override
public
void
onPause
()
{
fileUploadingObserver
.
unsub
();
fileUploadingObserver
.
unsub
();
super
.
onPause
();
super
.
onPause
();
}
}
@Override
public
void
onCancel
(
DialogInterface
dialog
)
{
@Override
public
void
onCancel
(
DialogInterface
dialog
)
{
//TODO: should cancel uploading? or continue with showing notification with progress?
//TODO: should cancel uploading? or continue with showing notification with progress?
}
}
}
}
app/src/main/java/chat/rocket/android/fragment/chatroom/dialog/UsersOfRoomDialogFragment.java
View file @
9c34af88
...
@@ -7,6 +7,12 @@ import android.support.v7.widget.GridLayoutManager;
...
@@ -7,6 +7,12 @@ import android.support.v7.widget.GridLayoutManager;
import
android.support.v7.widget.RecyclerView
;
import
android.support.v7.widget.RecyclerView
;
import
android.view.View
;
import
android.view.View
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
java.util.ArrayList
;
import
java.util.List
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.layouthelper.chatroom.dialog.RoomUserAdapter
;
import
chat.rocket.android.layouthelper.chatroom.dialog.RoomUserAdapter
;
...
@@ -15,11 +21,6 @@ import chat.rocket.android.model.SyncState;
...
@@ -15,11 +21,6 @@ import chat.rocket.android.model.SyncState;
import
chat.rocket.android.model.internal.GetUsersOfRoomsProcedure
;
import
chat.rocket.android.model.internal.GetUsersOfRoomsProcedure
;
import
chat.rocket.android.realm_helper.RealmObjectObserver
;
import
chat.rocket.android.realm_helper.RealmObjectObserver
;
import
chat.rocket.android.service.RocketChatService
;
import
chat.rocket.android.service.RocketChatService
;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
/**
/**
* Dialog to show members in a room.
* Dialog to show members in a room.
...
@@ -30,7 +31,8 @@ public class UsersOfRoomDialogFragment extends AbstractChatroomDialogFragment {
...
@@ -30,7 +31,8 @@ public class UsersOfRoomDialogFragment extends AbstractChatroomDialogFragment {
private
RealmObjectObserver
<
GetUsersOfRoomsProcedure
>
procedureObserver
;
private
RealmObjectObserver
<
GetUsersOfRoomsProcedure
>
procedureObserver
;
private
int
previousSyncState
;
private
int
previousSyncState
;
public
UsersOfRoomDialogFragment
()
{}
public
UsersOfRoomDialogFragment
()
{
}
/**
/**
* create UsersOfRoomDialogFragment with required parameters.
* create UsersOfRoomDialogFragment with required parameters.
...
@@ -48,7 +50,8 @@ public class UsersOfRoomDialogFragment extends AbstractChatroomDialogFragment {
...
@@ -48,7 +50,8 @@ public class UsersOfRoomDialogFragment extends AbstractChatroomDialogFragment {
return
fragment
;
return
fragment
;
}
}
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
procedureObserver
=
realmHelper
procedureObserver
=
realmHelper
...
@@ -62,16 +65,19 @@ public class UsersOfRoomDialogFragment extends AbstractChatroomDialogFragment {
...
@@ -62,16 +65,19 @@ public class UsersOfRoomDialogFragment extends AbstractChatroomDialogFragment {
}
}
}
}
@Override
protected
void
handleArgs
(
@NonNull
Bundle
args
)
{
@Override
protected
void
handleArgs
(
@NonNull
Bundle
args
)
{
super
.
handleArgs
(
args
);
super
.
handleArgs
(
args
);
hostname
=
args
.
getString
(
"hostname"
);
hostname
=
args
.
getString
(
"hostname"
);
}
}
@Override
protected
int
getLayout
()
{
@Override
protected
int
getLayout
()
{
return
R
.
layout
.
dialog_users_of_room
;
return
R
.
layout
.
dialog_users_of_room
;
}
}
@Override
protected
void
onSetupDialog
()
{
@Override
protected
void
onSetupDialog
()
{
RecyclerView
recyclerView
=
(
RecyclerView
)
getDialog
().
findViewById
(
R
.
id
.
recyclerview
);
RecyclerView
recyclerView
=
(
RecyclerView
)
getDialog
().
findViewById
(
R
.
id
.
recyclerview
);
recyclerView
.
setLayoutManager
(
new
GridLayoutManager
(
getContext
(),
2
));
recyclerView
.
setLayoutManager
(
new
GridLayoutManager
(
getContext
(),
2
));
recyclerView
.
setAdapter
(
new
RoomUserAdapter
(
getContext
(),
realmHelper
,
hostname
));
recyclerView
.
setAdapter
(
new
RoomUserAdapter
(
getContext
(),
realmHelper
,
hostname
));
...
@@ -90,12 +96,14 @@ public class UsersOfRoomDialogFragment extends AbstractChatroomDialogFragment {
...
@@ -90,12 +96,14 @@ public class UsersOfRoomDialogFragment extends AbstractChatroomDialogFragment {
}).
continueWith
(
new
LogcatIfError
());
}).
continueWith
(
new
LogcatIfError
());
}
}
@Override
public
void
onResume
()
{
@Override
public
void
onResume
()
{
super
.
onResume
();
super
.
onResume
();
procedureObserver
.
sub
();
procedureObserver
.
sub
();
}
}
@Override
public
void
onPause
()
{
@Override
public
void
onPause
()
{
procedureObserver
.
unsub
();
procedureObserver
.
unsub
();
super
.
onPause
();
super
.
onPause
();
}
}
...
...
app/src/main/java/chat/rocket/android/fragment/oauth/AbstractOAuthFragment.java
View file @
9c34af88
...
@@ -6,6 +6,10 @@ import android.text.TextUtils;
...
@@ -6,6 +6,10 @@ import android.text.TextUtils;
import
android.util.Base64
;
import
android.util.Base64
;
import
android.webkit.JavascriptInterface
;
import
android.webkit.JavascriptInterface
;
import
android.webkit.WebView
;
import
android.webkit.WebView
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
java.nio.charset.Charset
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.fragment.AbstractWebViewFragment
;
import
chat.rocket.android.fragment.AbstractWebViewFragment
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.LogcatIfError
;
...
@@ -13,9 +17,6 @@ import chat.rocket.android.log.RCLog;
...
@@ -13,9 +17,6 @@ import chat.rocket.android.log.RCLog;
import
chat.rocket.android.model.ServerConfig
;
import
chat.rocket.android.model.ServerConfig
;
import
chat.rocket.android.model.ddp.MeteorLoginServiceConfiguration
;
import
chat.rocket.android.model.ddp.MeteorLoginServiceConfiguration
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
java.nio.charset.Charset
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
public
abstract
class
AbstractOAuthFragment
extends
AbstractWebViewFragment
{
public
abstract
class
AbstractOAuthFragment
extends
AbstractWebViewFragment
{
...
@@ -45,7 +46,8 @@ public abstract class AbstractOAuthFragment extends AbstractWebViewFragment {
...
@@ -45,7 +46,8 @@ public abstract class AbstractOAuthFragment extends AbstractWebViewFragment {
}
}
}
}
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
Bundle
args
=
getArguments
();
Bundle
args
=
getArguments
();
if
(!
hasValidArgs
(
args
))
{
if
(!
hasValidArgs
(
args
))
{
...
@@ -69,7 +71,8 @@ public abstract class AbstractOAuthFragment extends AbstractWebViewFragment {
...
@@ -69,7 +71,8 @@ public abstract class AbstractOAuthFragment extends AbstractWebViewFragment {
url
=
generateURL
(
oauthConfig
);
url
=
generateURL
(
oauthConfig
);
}
}
@Override
protected
void
navigateToInitialPage
(
WebView
webview
)
{
@Override
protected
void
navigateToInitialPage
(
WebView
webview
)
{
if
(
TextUtils
.
isEmpty
(
url
))
{
if
(
TextUtils
.
isEmpty
(
url
))
{
finish
();
finish
();
return
;
return
;
...
@@ -99,10 +102,10 @@ public abstract class AbstractOAuthFragment extends AbstractWebViewFragment {
...
@@ -99,10 +102,10 @@ public abstract class AbstractOAuthFragment extends AbstractWebViewFragment {
}),
"_rocketchet_hook"
);
}),
"_rocketchet_hook"
);
}
}
@Override
protected
void
onPageLoaded
(
WebView
webview
,
String
url
)
{
@Override
protected
void
onPageLoaded
(
WebView
webview
,
String
url
)
{
super
.
onPageLoaded
(
webview
,
url
);
super
.
onPageLoaded
(
webview
,
url
);
if
(
url
.
contains
(
hostname
)
&&
url
.
contains
(
"_oauth/"
+
getOAuthServiceName
()
+
"?close"
))
{
if
(
url
.
contains
(
hostname
)
&&
url
.
contains
(
"_oauth/"
+
getOAuthServiceName
()
+
"?close"
))
{
final
String
jsHookUrl
=
"javascript:"
final
String
jsHookUrl
=
"javascript:"
+
"window._rocketchet_hook.handleConfig(document.getElementById('config').innerText);"
;
+
"window._rocketchet_hook.handleConfig(document.getElementById('config').innerText);"
;
...
@@ -110,6 +113,16 @@ public abstract class AbstractOAuthFragment extends AbstractWebViewFragment {
...
@@ -110,6 +113,16 @@ public abstract class AbstractOAuthFragment extends AbstractWebViewFragment {
}
}
}
}
private
void
handleOAuthCallback
(
final
String
credentialToken
,
final
String
credentialSecret
)
{
new
MethodCallHelper
(
getContext
(),
serverConfigId
)
.
loginWithOAuth
(
credentialToken
,
credentialSecret
)
.
continueWith
(
new
LogcatIfError
());
}
protected
void
onOAuthCompleted
()
{
}
private
interface
JSInterfaceCallback
{
private
interface
JSInterfaceCallback
{
void
hanldeResult
(
@Nullable
JSONObject
result
);
void
hanldeResult
(
@Nullable
JSONObject
result
);
}
}
...
@@ -121,7 +134,8 @@ public abstract class AbstractOAuthFragment extends AbstractWebViewFragment {
...
@@ -121,7 +134,8 @@ public abstract class AbstractOAuthFragment extends AbstractWebViewFragment {
jsInterfaceCallback
=
callback
;
jsInterfaceCallback
=
callback
;
}
}
@JavascriptInterface
public
void
handleConfig
(
String
config
)
{
@JavascriptInterface
public
void
handleConfig
(
String
config
)
{
try
{
try
{
jsInterfaceCallback
.
hanldeResult
(
new
JSONObject
(
config
));
jsInterfaceCallback
.
hanldeResult
(
new
JSONObject
(
config
));
}
catch
(
Exception
exception
)
{
}
catch
(
Exception
exception
)
{
...
@@ -129,14 +143,4 @@ public abstract class AbstractOAuthFragment extends AbstractWebViewFragment {
...
@@ -129,14 +143,4 @@ public abstract class AbstractOAuthFragment extends AbstractWebViewFragment {
}
}
}
}
}
}
private
void
handleOAuthCallback
(
final
String
credentialToken
,
final
String
credentialSecret
)
{
new
MethodCallHelper
(
getContext
(),
serverConfigId
)
.
loginWithOAuth
(
credentialToken
,
credentialSecret
)
.
continueWith
(
new
LogcatIfError
());
}
protected
void
onOAuthCompleted
()
{
}
}
}
app/src/main/java/chat/rocket/android/fragment/oauth/FacebookOAuthFragment.java
View file @
9c34af88
...
@@ -5,11 +5,13 @@ import okhttp3.HttpUrl;
...
@@ -5,11 +5,13 @@ import okhttp3.HttpUrl;
public
class
FacebookOAuthFragment
extends
AbstractOAuthFragment
{
public
class
FacebookOAuthFragment
extends
AbstractOAuthFragment
{
@Override
protected
String
getOAuthServiceName
()
{
@Override
protected
String
getOAuthServiceName
()
{
return
"facebook"
;
return
"facebook"
;
}
}
@Override
protected
String
generateURL
(
MeteorLoginServiceConfiguration
oauthConfig
)
{
@Override
protected
String
generateURL
(
MeteorLoginServiceConfiguration
oauthConfig
)
{
return
new
HttpUrl
.
Builder
().
scheme
(
"https"
)
return
new
HttpUrl
.
Builder
().
scheme
(
"https"
)
.
host
(
"www.facebook.com"
)
.
host
(
"www.facebook.com"
)
.
addPathSegment
(
"v2.2"
)
.
addPathSegment
(
"v2.2"
)
...
...
app/src/main/java/chat/rocket/android/fragment/oauth/GitHubOAuthFragment.java
View file @
9c34af88
...
@@ -5,11 +5,13 @@ import okhttp3.HttpUrl;
...
@@ -5,11 +5,13 @@ import okhttp3.HttpUrl;
public
class
GitHubOAuthFragment
extends
AbstractOAuthFragment
{
public
class
GitHubOAuthFragment
extends
AbstractOAuthFragment
{
@Override
protected
String
getOAuthServiceName
()
{
@Override
protected
String
getOAuthServiceName
()
{
return
"github"
;
return
"github"
;
}
}
@Override
protected
String
generateURL
(
MeteorLoginServiceConfiguration
oauthConfig
)
{
@Override
protected
String
generateURL
(
MeteorLoginServiceConfiguration
oauthConfig
)
{
return
new
HttpUrl
.
Builder
().
scheme
(
"https"
)
return
new
HttpUrl
.
Builder
().
scheme
(
"https"
)
.
host
(
"github.com"
)
.
host
(
"github.com"
)
.
addPathSegment
(
"login"
)
.
addPathSegment
(
"login"
)
...
...
app/src/main/java/chat/rocket/android/fragment/oauth/GoogleOAuthFragment.java
View file @
9c34af88
...
@@ -5,11 +5,13 @@ import okhttp3.HttpUrl;
...
@@ -5,11 +5,13 @@ import okhttp3.HttpUrl;
public
class
GoogleOAuthFragment
extends
AbstractOAuthFragment
{
public
class
GoogleOAuthFragment
extends
AbstractOAuthFragment
{
@Override
protected
String
getOAuthServiceName
()
{
@Override
protected
String
getOAuthServiceName
()
{
return
"google"
;
return
"google"
;
}
}
@Override
protected
String
generateURL
(
MeteorLoginServiceConfiguration
oauthConfig
)
{
@Override
protected
String
generateURL
(
MeteorLoginServiceConfiguration
oauthConfig
)
{
return
new
HttpUrl
.
Builder
().
scheme
(
"https"
)
return
new
HttpUrl
.
Builder
().
scheme
(
"https"
)
.
host
(
"accounts.google.com"
)
.
host
(
"accounts.google.com"
)
.
addPathSegment
(
"o"
)
.
addPathSegment
(
"o"
)
...
...
app/src/main/java/chat/rocket/android/fragment/oauth/TwitterOAuthFragment.java
View file @
9c34af88
...
@@ -4,11 +4,13 @@ import chat.rocket.android.model.ddp.MeteorLoginServiceConfiguration;
...
@@ -4,11 +4,13 @@ import chat.rocket.android.model.ddp.MeteorLoginServiceConfiguration;
public
class
TwitterOAuthFragment
extends
AbstractOAuthFragment
{
public
class
TwitterOAuthFragment
extends
AbstractOAuthFragment
{
@Override
protected
String
getOAuthServiceName
()
{
@Override
protected
String
getOAuthServiceName
()
{
return
"twitter"
;
return
"twitter"
;
}
}
@Override
protected
String
generateURL
(
MeteorLoginServiceConfiguration
oauthConfig
)
{
@Override
protected
String
generateURL
(
MeteorLoginServiceConfiguration
oauthConfig
)
{
return
"https://"
+
hostname
+
"/_oauth/twitter/"
return
"https://"
+
hostname
+
"/_oauth/twitter/"
+
"?requestTokenAndRedirect=true&state="
+
getStateString
();
+
"?requestTokenAndRedirect=true&state="
+
getStateString
();
}
}
...
...
app/src/main/java/chat/rocket/android/fragment/server_config/AbstractServerConfigFragment.java
View file @
9c34af88
...
@@ -3,6 +3,7 @@ package chat.rocket.android.fragment.server_config;
...
@@ -3,6 +3,7 @@ package chat.rocket.android.fragment.server_config;
import
android.os.Bundle
;
import
android.os.Bundle
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.Nullable
;
import
android.support.v4.app.Fragment
;
import
android.support.v4.app.Fragment
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.fragment.AbstractFragment
;
import
chat.rocket.android.fragment.AbstractFragment
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.TextUtils
;
...
@@ -10,7 +11,8 @@ import chat.rocket.android.helper.TextUtils;
...
@@ -10,7 +11,8 @@ import chat.rocket.android.helper.TextUtils;
abstract
class
AbstractServerConfigFragment
extends
AbstractFragment
{
abstract
class
AbstractServerConfigFragment
extends
AbstractFragment
{
protected
String
serverConfigId
;
protected
String
serverConfigId
;
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
Bundle
args
=
getArguments
();
Bundle
args
=
getArguments
();
...
...
app/src/main/java/chat/rocket/android/fragment/server_config/InputHostnameFragment.java
View file @
9c34af88
...
@@ -2,6 +2,8 @@ package chat.rocket.android.fragment.server_config;
...
@@ -2,6 +2,8 @@ package chat.rocket.android.fragment.server_config;
import
android.support.design.widget.Snackbar
;
import
android.support.design.widget.Snackbar
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
org.json.JSONObject
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.RocketChatCache
;
import
chat.rocket.android.RocketChatCache
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.LogcatIfError
;
...
@@ -9,7 +11,6 @@ import chat.rocket.android.helper.TextUtils;
...
@@ -9,7 +11,6 @@ import chat.rocket.android.helper.TextUtils;
import
chat.rocket.android.model.ServerConfig
;
import
chat.rocket.android.model.ServerConfig
;
import
chat.rocket.android.realm_helper.RealmObjectObserver
;
import
chat.rocket.android.realm_helper.RealmObjectObserver
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
org.json.JSONObject
;
/**
/**
* Input server host.
* Input server host.
...
@@ -23,11 +24,13 @@ public class InputHostnameFragment extends AbstractServerConfigFragment {
...
@@ -23,11 +24,13 @@ public class InputHostnameFragment extends AbstractServerConfigFragment {
public
InputHostnameFragment
()
{
public
InputHostnameFragment
()
{
}
}
@Override
protected
int
getLayout
()
{
@Override
protected
int
getLayout
()
{
return
R
.
layout
.
fragment_input_hostname
;
return
R
.
layout
.
fragment_input_hostname
;
}
}
@Override
protected
void
onSetupView
()
{
@Override
protected
void
onSetupView
()
{
rootView
.
findViewById
(
R
.
id
.
btn_connect
).
setOnClickListener
(
view
->
handleConnect
());
rootView
.
findViewById
(
R
.
id
.
btn_connect
).
setOnClickListener
(
view
->
handleConnect
());
serverConfigObserver
.
sub
();
serverConfigObserver
.
sub
();
...
@@ -52,11 +55,13 @@ public class InputHostnameFragment extends AbstractServerConfigFragment {
...
@@ -52,11 +55,13 @@ public class InputHostnameFragment extends AbstractServerConfigFragment {
.
put
(
"state"
,
ServerConfig
.
STATE_READY
))).
continueWith
(
new
LogcatIfError
());
.
put
(
"state"
,
ServerConfig
.
STATE_READY
))).
continueWith
(
new
LogcatIfError
());
}
}
@Override
public
void
onResume
()
{
@Override
public
void
onResume
()
{
super
.
onResume
();
super
.
onResume
();
}
}
@Override
public
void
onDestroyView
()
{
@Override
public
void
onDestroyView
()
{
serverConfigObserver
.
unsub
();
serverConfigObserver
.
unsub
();
super
.
onDestroyView
();
super
.
onDestroyView
();
}
}
...
...
app/src/main/java/chat/rocket/android/fragment/server_config/LoginFragment.java
View file @
9c34af88
...
@@ -6,6 +6,9 @@ import android.support.design.widget.Snackbar;
...
@@ -6,6 +6,9 @@ import android.support.design.widget.Snackbar;
import
android.support.v4.app.Fragment
;
import
android.support.v4.app.Fragment
;
import
android.view.View
;
import
android.view.View
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
java.util.HashMap
;
import
java.util.List
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.TextUtils
;
...
@@ -14,27 +17,28 @@ import chat.rocket.android.log.RCLog;
...
@@ -14,27 +17,28 @@ import chat.rocket.android.log.RCLog;
import
chat.rocket.android.model.ddp.MeteorLoginServiceConfiguration
;
import
chat.rocket.android.model.ddp.MeteorLoginServiceConfiguration
;
import
chat.rocket.android.realm_helper.RealmListObserver
;
import
chat.rocket.android.realm_helper.RealmListObserver
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
java.util.HashMap
;
import
java.util.List
;
/**
/**
* Login screen.
* Login screen.
*/
*/
public
class
LoginFragment
extends
AbstractServerConfigFragment
{
public
class
LoginFragment
extends
AbstractServerConfigFragment
{
@Override
protected
int
getLayout
()
{
private
RealmListObserver
<
MeteorLoginServiceConfiguration
>
authProvidersObserver
;
@Override
protected
int
getLayout
()
{
return
R
.
layout
.
fragment_login
;
return
R
.
layout
.
fragment_login
;
}
}
private
RealmListObserver
<
MeteorLoginServiceConfiguration
>
authProvidersObserver
;
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
authProvidersObserver
=
RealmStore
.
get
(
serverConfigId
)
authProvidersObserver
=
RealmStore
.
get
(
serverConfigId
)
.
createListObserver
(
realm
->
realm
.
where
(
MeteorLoginServiceConfiguration
.
class
).
findAll
())
.
createListObserver
(
realm
->
realm
.
where
(
MeteorLoginServiceConfiguration
.
class
).
findAll
())
.
setOnUpdateListener
(
this
::
onRenderAuthProviders
);
.
setOnUpdateListener
(
this
::
onRenderAuthProviders
);
}
}
@Override
protected
void
onSetupView
()
{
@Override
protected
void
onSetupView
()
{
final
View
btnEmail
=
rootView
.
findViewById
(
R
.
id
.
btn_login_with_email
);
final
View
btnEmail
=
rootView
.
findViewById
(
R
.
id
.
btn_login_with_email
);
final
TextView
txtUsername
=
(
TextView
)
rootView
.
findViewById
(
R
.
id
.
editor_username
);
final
TextView
txtUsername
=
(
TextView
)
rootView
.
findViewById
(
R
.
id
.
editor_username
);
final
TextView
txtPasswd
=
(
TextView
)
rootView
.
findViewById
(
R
.
id
.
editor_passwd
);
final
TextView
txtPasswd
=
(
TextView
)
rootView
.
findViewById
(
R
.
id
.
editor_passwd
);
...
@@ -108,12 +112,14 @@ public class LoginFragment extends AbstractServerConfigFragment {
...
@@ -108,12 +112,14 @@ public class LoginFragment extends AbstractServerConfigFragment {
}
}
}
}
@Override
public
void
onResume
()
{
@Override
public
void
onResume
()
{
super
.
onResume
();
super
.
onResume
();
authProvidersObserver
.
sub
();
authProvidersObserver
.
sub
();
}
}
@Override
public
void
onPause
()
{
@Override
public
void
onPause
()
{
authProvidersObserver
.
unsub
();
authProvidersObserver
.
unsub
();
super
.
onPause
();
super
.
onPause
();
}
}
...
...
app/src/main/java/chat/rocket/android/fragment/server_config/RetryLoginFragment.java
View file @
9c34af88
...
@@ -4,6 +4,7 @@ import android.os.Bundle;
...
@@ -4,6 +4,7 @@ import android.os.Bundle;
import
android.support.annotation.Nullable
;
import
android.support.annotation.Nullable
;
import
android.view.View
;
import
android.view.View
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.TextUtils
;
...
@@ -15,20 +16,23 @@ import chat.rocket.android.realm_helper.RealmStore;
...
@@ -15,20 +16,23 @@ import chat.rocket.android.realm_helper.RealmStore;
* Login screen.
* Login screen.
*/
*/
public
class
RetryLoginFragment
extends
AbstractServerConfigFragment
{
public
class
RetryLoginFragment
extends
AbstractServerConfigFragment
{
@Override
protected
int
getLayout
()
{
private
RealmObjectObserver
<
Session
>
sessionObserver
;
@Override
protected
int
getLayout
()
{
return
R
.
layout
.
fragment_retry_login
;
return
R
.
layout
.
fragment_retry_login
;
}
}
private
RealmObjectObserver
<
Session
>
sessionObserver
;
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
sessionObserver
=
RealmStore
.
get
(
serverConfigId
)
sessionObserver
=
RealmStore
.
get
(
serverConfigId
)
.
createObjectObserver
(
Session:
:
queryDefaultSession
)
.
createObjectObserver
(
Session:
:
queryDefaultSession
)
.
setOnUpdateListener
(
this
::
onRenderServerConfigSession
);
.
setOnUpdateListener
(
this
::
onRenderServerConfigSession
);
}
}
@Override
protected
void
onSetupView
()
{
@Override
protected
void
onSetupView
()
{
}
}
private
void
onRenderServerConfigSession
(
Session
session
)
{
private
void
onRenderServerConfigSession
(
Session
session
)
{
...
@@ -63,12 +67,14 @@ public class RetryLoginFragment extends AbstractServerConfigFragment {
...
@@ -63,12 +67,14 @@ public class RetryLoginFragment extends AbstractServerConfigFragment {
}
}
}
}
@Override
public
void
onResume
()
{
@Override
public
void
onResume
()
{
super
.
onResume
();
super
.
onResume
();
sessionObserver
.
sub
();
sessionObserver
.
sub
();
}
}
@Override
public
void
onPause
()
{
@Override
public
void
onPause
()
{
sessionObserver
.
unsub
();
sessionObserver
.
unsub
();
super
.
onPause
();
super
.
onPause
();
}
}
...
...
app/src/main/java/chat/rocket/android/fragment/server_config/UserRegistrationDialogFragment.java
View file @
9c34af88
...
@@ -11,6 +11,7 @@ import android.view.LayoutInflater;
...
@@ -11,6 +11,7 @@ import android.view.LayoutInflater;
import
android.view.View
;
import
android.view.View
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
android.widget.Toast
;
import
android.widget.Toast
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.TextUtils
;
...
@@ -24,6 +25,10 @@ public class UserRegistrationDialogFragment extends DialogFragment {
...
@@ -24,6 +25,10 @@ public class UserRegistrationDialogFragment extends DialogFragment {
private
String
email
;
private
String
email
;
private
String
password
;
private
String
password
;
public
UserRegistrationDialogFragment
()
{
super
();
}
/**
/**
* create UserRegistrationDialogFragment with auto-detect email/username.
* create UserRegistrationDialogFragment with auto-detect email/username.
*/
*/
...
@@ -40,7 +45,8 @@ public class UserRegistrationDialogFragment extends DialogFragment {
...
@@ -40,7 +45,8 @@ public class UserRegistrationDialogFragment extends DialogFragment {
* create UserRegistrationDialogFragment.
* create UserRegistrationDialogFragment.
*/
*/
public
static
UserRegistrationDialogFragment
create
(
String
serverConfigId
,
public
static
UserRegistrationDialogFragment
create
(
String
serverConfigId
,
String
username
,
String
email
,
String
password
)
{
String
username
,
String
email
,
String
password
)
{
Bundle
args
=
new
Bundle
();
Bundle
args
=
new
Bundle
();
args
.
putString
(
"serverConfigId"
,
serverConfigId
);
args
.
putString
(
"serverConfigId"
,
serverConfigId
);
if
(!
TextUtils
.
isEmpty
(
username
))
{
if
(!
TextUtils
.
isEmpty
(
username
))
{
...
@@ -57,11 +63,8 @@ public class UserRegistrationDialogFragment extends DialogFragment {
...
@@ -57,11 +63,8 @@ public class UserRegistrationDialogFragment extends DialogFragment {
return
dialog
;
return
dialog
;
}
}
public
UserRegistrationDialogFragment
()
{
@Override
super
();
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
}
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
Bundle
args
=
getArguments
();
Bundle
args
=
getArguments
();
...
@@ -74,7 +77,8 @@ public class UserRegistrationDialogFragment extends DialogFragment {
...
@@ -74,7 +77,8 @@ public class UserRegistrationDialogFragment extends DialogFragment {
}
}
@NonNull
@NonNull
@Override
public
Dialog
onCreateDialog
(
Bundle
savedInstanceState
)
{
@Override
public
Dialog
onCreateDialog
(
Bundle
savedInstanceState
)
{
return
new
AlertDialog
.
Builder
(
getContext
(),
R
.
style
.
AppTheme_Dialog
)
return
new
AlertDialog
.
Builder
(
getContext
(),
R
.
style
.
AppTheme_Dialog
)
.
setView
(
createDialogView
())
.
setView
(
createDialogView
())
.
create
();
.
create
();
...
...
app/src/main/java/chat/rocket/android/fragment/server_config/WaitingFragment.java
View file @
9c34af88
...
@@ -3,6 +3,7 @@ package chat.rocket.android.fragment.server_config;
...
@@ -3,6 +3,7 @@ package chat.rocket.android.fragment.server_config;
import
android.os.Bundle
;
import
android.os.Bundle
;
import
android.view.View
;
import
android.view.View
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.TextUtils
;
...
@@ -13,6 +14,9 @@ public class WaitingFragment extends AbstractServerConfigFragment {
...
@@ -13,6 +14,9 @@ public class WaitingFragment extends AbstractServerConfigFragment {
private
String
caption
;
private
String
caption
;
public
WaitingFragment
()
{
}
/**
/**
* create new "Waiting..." screen with caption.
* create new "Waiting..." screen with caption.
*/
*/
...
@@ -24,13 +28,13 @@ public class WaitingFragment extends AbstractServerConfigFragment {
...
@@ -24,13 +28,13 @@ public class WaitingFragment extends AbstractServerConfigFragment {
return
fragment
;
return
fragment
;
}
}
public
WaitingFragment
()
{}
@Override
protected
int
getLayout
()
{
@Override
protected
int
getLayout
()
{
return
R
.
layout
.
fragment_waiting
;
return
R
.
layout
.
fragment_waiting
;
}
}
@Override
protected
void
onSetupView
()
{
@Override
protected
void
onSetupView
()
{
Bundle
args
=
getArguments
();
Bundle
args
=
getArguments
();
if
(
args
!=
null
)
{
if
(
args
!=
null
)
{
caption
=
args
.
getString
(
"caption"
);
caption
=
args
.
getString
(
"caption"
);
...
...
app/src/main/java/chat/rocket/android/fragment/sidebar/SidebarMainFragment.java
View file @
9c34af88
...
@@ -7,13 +7,16 @@ import android.widget.CompoundButton;
...
@@ -7,13 +7,16 @@ import android.widget.CompoundButton;
import
android.widget.ImageView
;
import
android.widget.ImageView
;
import
android.widget.LinearLayout
;
import
android.widget.LinearLayout
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
com.jakewharton.rxbinding.view.RxView
;
import
com.jakewharton.rxbinding.widget.RxCompoundButton
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.RocketChatCache
;
import
chat.rocket.android.RocketChatCache
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.fragment.AbstractFragment
;
import
chat.rocket.android.fragment.AbstractFragment
;
import
chat.rocket.android.fragment.sidebar.dialog.AbstractAddRoomDialogFragment
;
import
chat.rocket.android.fragment.sidebar.dialog.AbstractAddRoomDialogFragment
;
import
chat.rocket.android.fragment.sidebar.dialog.AddDirectMessageDialogFragment
;
import
chat.rocket.android.fragment.sidebar.dialog.AddChannelDialogFragment
;
import
chat.rocket.android.fragment.sidebar.dialog.AddChannelDialogFragment
;
import
chat.rocket.android.fragment.sidebar.dialog.AddDirectMessageDialogFragment
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.layouthelper.chatroom.RoomListManager
;
import
chat.rocket.android.layouthelper.chatroom.RoomListManager
;
...
@@ -25,8 +28,6 @@ import chat.rocket.android.realm_helper.RealmListObserver;
...
@@ -25,8 +28,6 @@ import chat.rocket.android.realm_helper.RealmListObserver;
import
chat.rocket.android.realm_helper.RealmObjectObserver
;
import
chat.rocket.android.realm_helper.RealmObjectObserver
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
chat.rocket.android.renderer.UserRenderer
;
import
chat.rocket.android.renderer.UserRenderer
;
import
com.jakewharton.rxbinding.view.RxView
;
import
com.jakewharton.rxbinding.widget.RxCompoundButton
;
public
class
SidebarMainFragment
extends
AbstractFragment
{
public
class
SidebarMainFragment
extends
AbstractFragment
{
...
@@ -52,7 +53,8 @@ public class SidebarMainFragment extends AbstractFragment {
...
@@ -52,7 +53,8 @@ public class SidebarMainFragment extends AbstractFragment {
return
fragment
;
return
fragment
;
}
}
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
Bundle
args
=
getArguments
();
Bundle
args
=
getArguments
();
...
@@ -67,7 +69,8 @@ public class SidebarMainFragment extends AbstractFragment {
...
@@ -67,7 +69,8 @@ public class SidebarMainFragment extends AbstractFragment {
RealmHelper
realmHelper
=
RealmStore
.
get
(
serverConfigId
);
RealmHelper
realmHelper
=
RealmStore
.
get
(
serverConfigId
);
if
(
realmHelper
!=
null
)
{
if
(
realmHelper
!=
null
)
{
roomsObserver
=
realmHelper
roomsObserver
=
realmHelper
.
createListObserver
(
realm
->
realm
.
where
(
RoomSubscription
.
class
).
equalTo
(
"open"
,
true
).
findAll
())
.
createListObserver
(
realm
->
realm
.
where
(
RoomSubscription
.
class
).
equalTo
(
"open"
,
true
).
findAll
())
.
setOnUpdateListener
(
list
->
roomListManager
.
setRooms
(
list
));
.
setOnUpdateListener
(
list
->
roomListManager
.
setRooms
(
list
));
currentUserObserver
=
realmHelper
currentUserObserver
=
realmHelper
...
@@ -79,7 +82,8 @@ public class SidebarMainFragment extends AbstractFragment {
...
@@ -79,7 +82,8 @@ public class SidebarMainFragment extends AbstractFragment {
}
}
}
}
@Override
protected
int
getLayout
()
{
@Override
protected
int
getLayout
()
{
if
(
serverConfigId
==
null
)
{
if
(
serverConfigId
==
null
)
{
return
R
.
layout
.
simple_screen
;
return
R
.
layout
.
simple_screen
;
}
else
{
}
else
{
...
@@ -87,7 +91,8 @@ public class SidebarMainFragment extends AbstractFragment {
...
@@ -87,7 +91,8 @@ public class SidebarMainFragment extends AbstractFragment {
}
}
}
}
@Override
protected
void
onSetupView
()
{
@Override
protected
void
onSetupView
()
{
if
(
serverConfigId
==
null
)
{
if
(
serverConfigId
==
null
)
{
return
;
return
;
}
}
...
@@ -181,7 +186,8 @@ public class SidebarMainFragment extends AbstractFragment {
...
@@ -181,7 +186,8 @@ public class SidebarMainFragment extends AbstractFragment {
dialog
.
show
(
getFragmentManager
(),
AbstractAddRoomDialogFragment
.
class
.
getSimpleName
());
dialog
.
show
(
getFragmentManager
(),
AbstractAddRoomDialogFragment
.
class
.
getSimpleName
());
}
}
@Override
public
void
onResume
()
{
@Override
public
void
onResume
()
{
super
.
onResume
();
super
.
onResume
();
if
(
roomsObserver
!=
null
)
{
if
(
roomsObserver
!=
null
)
{
roomsObserver
.
sub
();
roomsObserver
.
sub
();
...
@@ -189,7 +195,8 @@ public class SidebarMainFragment extends AbstractFragment {
...
@@ -189,7 +195,8 @@ public class SidebarMainFragment extends AbstractFragment {
}
}
}
}
@Override
public
void
onPause
()
{
@Override
public
void
onPause
()
{
if
(
roomsObserver
!=
null
)
{
if
(
roomsObserver
!=
null
)
{
currentUserObserver
.
unsub
();
currentUserObserver
.
unsub
();
roomsObserver
.
unsub
();
roomsObserver
.
unsub
();
...
...
app/src/main/java/chat/rocket/android/fragment/sidebar/dialog/AbstractAddRoomDialogFragment.java
View file @
9c34af88
...
@@ -7,12 +7,13 @@ import android.support.annotation.NonNull;
...
@@ -7,12 +7,13 @@ import android.support.annotation.NonNull;
import
android.support.annotation.Nullable
;
import
android.support.annotation.Nullable
;
import
android.view.View
;
import
android.view.View
;
import
android.widget.Toast
;
import
android.widget.Toast
;
import
com.trello.rxlifecycle.components.support.RxAppCompatDialogFragment
;
import
bolts.Task
;
import
bolts.Task
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
com.trello.rxlifecycle.components.support.RxAppCompatDialogFragment
;
public
abstract
class
AbstractAddRoomDialogFragment
extends
RxAppCompatDialogFragment
{
public
abstract
class
AbstractAddRoomDialogFragment
extends
RxAppCompatDialogFragment
{
...
@@ -20,11 +21,14 @@ public abstract class AbstractAddRoomDialogFragment extends RxAppCompatDialogFra
...
@@ -20,11 +21,14 @@ public abstract class AbstractAddRoomDialogFragment extends RxAppCompatDialogFra
protected
MethodCallHelper
methodCall
;
protected
MethodCallHelper
methodCall
;
protected
String
hostname
;
protected
String
hostname
;
protected
@LayoutRes
abstract
int
getLayout
();
protected
@LayoutRes
abstract
int
getLayout
();
protected
abstract
void
onSetupDialog
();
protected
abstract
void
onSetupDialog
();
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
Bundle
args
=
getArguments
();
Bundle
args
=
getArguments
();
...
@@ -40,7 +44,8 @@ public abstract class AbstractAddRoomDialogFragment extends RxAppCompatDialogFra
...
@@ -40,7 +44,8 @@ public abstract class AbstractAddRoomDialogFragment extends RxAppCompatDialogFra
hostname
=
args
.
getString
(
"hostname"
);
hostname
=
args
.
getString
(
"hostname"
);
}
}
@Override
public
final
void
setupDialog
(
Dialog
dialog
,
int
style
)
{
@Override
public
final
void
setupDialog
(
Dialog
dialog
,
int
style
)
{
super
.
setupDialog
(
dialog
,
style
);
super
.
setupDialog
(
dialog
,
style
);
dialog
.
setContentView
(
getLayout
());
dialog
.
setContentView
(
getLayout
());
onSetupDialog
();
onSetupDialog
();
...
...
app/src/main/java/chat/rocket/android/fragment/sidebar/dialog/AddChannelDialogFragment.java
View file @
9c34af88
...
@@ -3,23 +3,27 @@ package chat.rocket.android.fragment.sidebar.dialog;
...
@@ -3,23 +3,27 @@ package chat.rocket.android.fragment.sidebar.dialog;
import
android.view.View
;
import
android.view.View
;
import
android.widget.CompoundButton
;
import
android.widget.CompoundButton
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
com.jakewharton.rxbinding.view.RxView
;
import
com.jakewharton.rxbinding.widget.RxTextView
;
import
bolts.Task
;
import
bolts.Task
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.TextUtils
;
import
com.jakewharton.rxbinding.view.RxView
;
import
com.jakewharton.rxbinding.widget.RxTextView
;
/**
/**
* add Channel, add Private-group.
* add Channel, add Private-group.
*/
*/
public
class
AddChannelDialogFragment
extends
AbstractAddRoomDialogFragment
{
public
class
AddChannelDialogFragment
extends
AbstractAddRoomDialogFragment
{
public
AddChannelDialogFragment
()
{}
public
AddChannelDialogFragment
()
{
}
@Override
protected
int
getLayout
()
{
@Override
protected
int
getLayout
()
{
return
R
.
layout
.
dialog_add_channel
;
return
R
.
layout
.
dialog_add_channel
;
}
}
@Override
protected
void
onSetupDialog
()
{
@Override
protected
void
onSetupDialog
()
{
View
buttonAddChannel
=
getDialog
().
findViewById
(
R
.
id
.
btn_add_channel
);
View
buttonAddChannel
=
getDialog
().
findViewById
(
R
.
id
.
btn_add_channel
);
RxTextView
.
textChanges
((
TextView
)
getDialog
().
findViewById
(
R
.
id
.
editor_channel_name
))
RxTextView
.
textChanges
((
TextView
)
getDialog
().
findViewById
(
R
.
id
.
editor_channel_name
))
...
@@ -35,7 +39,8 @@ public class AddChannelDialogFragment extends AbstractAddRoomDialogFragment {
...
@@ -35,7 +39,8 @@ public class AddChannelDialogFragment extends AbstractAddRoomDialogFragment {
return
check
.
isChecked
();
return
check
.
isChecked
();
}
}
@Override
protected
Task
<
Void
>
getMethodCallForSubmitAction
()
{
@Override
protected
Task
<
Void
>
getMethodCallForSubmitAction
()
{
TextView
channelNameText
=
(
TextView
)
getDialog
().
findViewById
(
R
.
id
.
editor_channel_name
);
TextView
channelNameText
=
(
TextView
)
getDialog
().
findViewById
(
R
.
id
.
editor_channel_name
);
String
channelName
=
channelNameText
.
getText
().
toString
();
String
channelName
=
channelNameText
.
getText
().
toString
();
boolean
isPrivate
=
isChecked
(
R
.
id
.
checkbox_private
);
boolean
isPrivate
=
isChecked
(
R
.
id
.
checkbox_private
);
...
...
app/src/main/java/chat/rocket/android/fragment/sidebar/dialog/AddDirectMessageDialogFragment.java
View file @
9c34af88
...
@@ -3,27 +3,31 @@ package chat.rocket.android.fragment.sidebar.dialog;
...
@@ -3,27 +3,31 @@ package chat.rocket.android.fragment.sidebar.dialog;
import
android.view.View
;
import
android.view.View
;
import
android.widget.AutoCompleteTextView
;
import
android.widget.AutoCompleteTextView
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
com.jakewharton.rxbinding.view.RxView
;
import
com.jakewharton.rxbinding.widget.RxTextView
;
import
io.realm.Case
;
import
bolts.Task
;
import
bolts.Task
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.layouthelper.sidebar.dialog.SuggestUserAdapter
;
import
chat.rocket.android.layouthelper.sidebar.dialog.SuggestUserAdapter
;
import
chat.rocket.android.model.ddp.User
;
import
chat.rocket.android.model.ddp.User
;
import
chat.rocket.android.realm_helper.RealmAutoCompleteAdapter
;
import
chat.rocket.android.realm_helper.RealmAutoCompleteAdapter
;
import
com.jakewharton.rxbinding.view.RxView
;
import
com.jakewharton.rxbinding.widget.RxTextView
;
import
io.realm.Case
;
/**
/**
* add Direct Message.
* add Direct Message.
*/
*/
public
class
AddDirectMessageDialogFragment
extends
AbstractAddRoomDialogFragment
{
public
class
AddDirectMessageDialogFragment
extends
AbstractAddRoomDialogFragment
{
public
AddDirectMessageDialogFragment
()
{}
public
AddDirectMessageDialogFragment
()
{
}
@Override
protected
int
getLayout
()
{
@Override
protected
int
getLayout
()
{
return
R
.
layout
.
dialog_add_direct_message
;
return
R
.
layout
.
dialog_add_direct_message
;
}
}
@Override
protected
void
onSetupDialog
()
{
@Override
protected
void
onSetupDialog
()
{
View
buttonAddDirectMessage
=
getDialog
().
findViewById
(
R
.
id
.
btn_add_direct_message
);
View
buttonAddDirectMessage
=
getDialog
().
findViewById
(
R
.
id
.
btn_add_direct_message
);
AutoCompleteTextView
autoCompleteTextView
=
AutoCompleteTextView
autoCompleteTextView
=
(
AutoCompleteTextView
)
getDialog
().
findViewById
(
R
.
id
.
editor_username
);
(
AutoCompleteTextView
)
getDialog
().
findViewById
(
R
.
id
.
editor_username
);
...
@@ -43,7 +47,8 @@ public class AddDirectMessageDialogFragment extends AbstractAddRoomDialogFragmen
...
@@ -43,7 +47,8 @@ public class AddDirectMessageDialogFragment extends AbstractAddRoomDialogFragmen
buttonAddDirectMessage
.
setOnClickListener
(
view
->
createRoom
());
buttonAddDirectMessage
.
setOnClickListener
(
view
->
createRoom
());
}
}
@Override
protected
Task
<
Void
>
getMethodCallForSubmitAction
()
{
@Override
protected
Task
<
Void
>
getMethodCallForSubmitAction
()
{
String
username
=
String
username
=
((
TextView
)
getDialog
().
findViewById
(
R
.
id
.
editor_username
)).
getText
().
toString
();
((
TextView
)
getDialog
().
findViewById
(
R
.
id
.
editor_username
)).
getText
().
toString
();
return
methodCall
.
createDirectMessage
(
username
);
return
methodCall
.
createDirectMessage
(
username
);
...
...
app/src/main/java/chat/rocket/android/helper/Avatar.java
View file @
9c34af88
...
@@ -9,27 +9,27 @@ import android.graphics.drawable.Drawable;
...
@@ -9,27 +9,27 @@ import android.graphics.drawable.Drawable;
import
android.os.Handler
;
import
android.os.Handler
;
import
android.os.Looper
;
import
android.os.Looper
;
import
android.widget.ImageView
;
import
android.widget.ImageView
;
import
bolts.Task
;
import
bolts.TaskCompletionSource
;
import
chat.rocket.android.log.RCLog
;
import
com.amulyakhare.textdrawable.TextDrawable
;
import
com.amulyakhare.textdrawable.TextDrawable
;
import
com.squareup.picasso.Picasso
;
import
com.squareup.picasso.Picasso
;
import
com.squareup.picasso.Target
;
import
com.squareup.picasso.Target
;
import
java.io.UnsupportedEncodingException
;
import
java.io.UnsupportedEncodingException
;
import
java.net.URLEncoder
;
import
java.net.URLEncoder
;
import
bolts.Task
;
import
bolts.TaskCompletionSource
;
import
chat.rocket.android.log.RCLog
;
/**
/**
* Helper for rendering user avatar image.
* Helper for rendering user avatar image.
*/
*/
public
class
Avatar
{
public
class
Avatar
{
private
final
String
hostname
;
private
final
String
username
;
private
static
final
int
[]
COLORS
=
new
int
[]{
private
static
final
int
[]
COLORS
=
new
int
[]{
0xFFF44336
,
0xFFE91E63
,
0xFF9C27B0
,
0xFF673AB7
,
0xFF3F51B5
,
0xFF2196F3
,
0xFFF44336
,
0xFFE91E63
,
0xFF9C27B0
,
0xFF673AB7
,
0xFF3F51B5
,
0xFF2196F3
,
0xFF03A9F4
,
0xFF00BCD4
,
0xFF009688
,
0xFF4CAF50
,
0xFF8BC34A
,
0xFFCDDC39
,
0xFF03A9F4
,
0xFF00BCD4
,
0xFF009688
,
0xFF4CAF50
,
0xFF8BC34A
,
0xFFCDDC39
,
0xFFFFC107
,
0xFFFF9800
,
0xFFFF5722
,
0xFF795548
,
0xFF9E9E9E
,
0xFF607D8B
0xFFFFC107
,
0xFFFF9800
,
0xFFFF5722
,
0xFF795548
,
0xFF9E9E9E
,
0xFF607D8B
};
};
private
final
String
hostname
;
private
final
String
username
;
public
Avatar
(
String
hostname
,
String
username
)
{
public
Avatar
(
String
hostname
,
String
username
)
{
this
.
hostname
=
hostname
;
this
.
hostname
=
hostname
;
...
@@ -58,6 +58,21 @@ public class Avatar {
...
@@ -58,6 +58,21 @@ public class Avatar {
return
TextUtils
.
isEmpty
(
str
)
?
""
:
str
.
substring
(
0
,
1
);
return
TextUtils
.
isEmpty
(
str
)
?
""
:
str
.
substring
(
0
,
1
);
}
}
private
static
Bitmap
drawableToBitmap
(
Drawable
drawable
,
int
size
)
{
if
(
drawable
instanceof
BitmapDrawable
)
{
BitmapDrawable
bitmapDrawable
=
(
BitmapDrawable
)
drawable
;
if
(
bitmapDrawable
.
getBitmap
()
!=
null
)
{
return
bitmapDrawable
.
getBitmap
();
}
}
Bitmap
bitmap
=
Bitmap
.
createBitmap
(
size
,
size
,
Bitmap
.
Config
.
ARGB_8888
);
Canvas
canvas
=
new
Canvas
(
bitmap
);
drawable
.
setBounds
(
0
,
0
,
canvas
.
getWidth
(),
canvas
.
getHeight
());
drawable
.
draw
(
canvas
);
return
bitmap
;
}
private
String
getImageUrl
()
{
private
String
getImageUrl
()
{
//from Rocket.Chat:packages/rocketchat-ui/lib/avatar.coffee
//from Rocket.Chat:packages/rocketchat-ui/lib/avatar.coffee
//REMARK! this is often SVG image! (see: Rocket.Chat:server/startup/avatar.coffee)
//REMARK! this is often SVG image! (see: Rocket.Chat:server/startup/avatar.coffee)
...
@@ -116,35 +131,23 @@ public class Avatar {
...
@@ -116,35 +131,23 @@ public class Avatar {
.
load
(
getImageUrl
())
.
load
(
getImageUrl
())
.
error
(
getTextDrawable
(
context
))
.
error
(
getTextDrawable
(
context
))
.
into
(
new
Target
()
{
.
into
(
new
Target
()
{
@Override
public
void
onBitmapLoaded
(
Bitmap
bitmap
,
Picasso
.
LoadedFrom
from
)
{
@Override
public
void
onBitmapLoaded
(
Bitmap
bitmap
,
Picasso
.
LoadedFrom
from
)
{
if
(
bitmap
!=
null
)
{
if
(
bitmap
!=
null
)
{
task
.
trySetResult
(
bitmap
);
task
.
trySetResult
(
bitmap
);
}
}
}
}
@Override
public
void
onBitmapFailed
(
Drawable
errorDrawable
)
{
@Override
public
void
onBitmapFailed
(
Drawable
errorDrawable
)
{
task
.
trySetResult
(
drawableToBitmap
(
errorDrawable
,
size
));
task
.
trySetResult
(
drawableToBitmap
(
errorDrawable
,
size
));
}
}
@Override
public
void
onPrepareLoad
(
Drawable
placeHolderDrawable
)
{
@Override
public
void
onPrepareLoad
(
Drawable
placeHolderDrawable
)
{
}
}
});
});
return
task
.
getTask
();
return
task
.
getTask
();
}
}
private
static
Bitmap
drawableToBitmap
(
Drawable
drawable
,
int
size
)
{
if
(
drawable
instanceof
BitmapDrawable
)
{
BitmapDrawable
bitmapDrawable
=
(
BitmapDrawable
)
drawable
;
if
(
bitmapDrawable
.
getBitmap
()
!=
null
)
{
return
bitmapDrawable
.
getBitmap
();
}
}
Bitmap
bitmap
=
Bitmap
.
createBitmap
(
size
,
size
,
Bitmap
.
Config
.
ARGB_8888
);
Canvas
canvas
=
new
Canvas
(
bitmap
);
drawable
.
setBounds
(
0
,
0
,
canvas
.
getWidth
(),
canvas
.
getHeight
());
drawable
.
draw
(
canvas
);
return
bitmap
;
}
}
}
app/src/main/java/chat/rocket/android/helper/DateTime.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
helper
;
package
chat
.
rocket
.
android
.
helper
;
import
chat.rocket.android.log.RCLog
;
import
java.text.ParseException
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.text.SimpleDateFormat
;
import
java.util.Calendar
;
import
java.util.Calendar
;
import
java.util.GregorianCalendar
;
import
java.util.GregorianCalendar
;
import
java.util.TimeZone
;
import
java.util.TimeZone
;
import
chat.rocket.android.log.RCLog
;
/**
/**
* Utility class for converting epoch ms and date-time string.
* Utility class for converting epoch ms and date-time string.
...
...
app/src/main/java/chat/rocket/android/helper/FileUploadHelper.java
View file @
9c34af88
...
@@ -8,15 +8,16 @@ import android.os.ParcelFileDescriptor;
...
@@ -8,15 +8,16 @@ import android.os.ParcelFileDescriptor;
import
android.provider.OpenableColumns
;
import
android.provider.OpenableColumns
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.Nullable
;
import
android.webkit.MimeTypeMap
;
import
android.webkit.MimeTypeMap
;
import
org.json.JSONObject
;
import
java.io.FileNotFoundException
;
import
java.io.IOException
;
import
java.util.UUID
;
import
chat.rocket.android.log.RCLog
;
import
chat.rocket.android.log.RCLog
;
import
chat.rocket.android.model.SyncState
;
import
chat.rocket.android.model.SyncState
;
import
chat.rocket.android.model.ddp.PublicSetting
;
import
chat.rocket.android.model.ddp.PublicSetting
;
import
chat.rocket.android.model.internal.FileUploading
;
import
chat.rocket.android.model.internal.FileUploading
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
java.io.FileNotFoundException
;
import
java.io.IOException
;
import
java.util.UUID
;
import
org.json.JSONObject
;
/**
/**
* utility class for uploading file.
* utility class for uploading file.
...
@@ -35,7 +36,9 @@ public class FileUploadHelper {
...
@@ -35,7 +36,9 @@ public class FileUploadHelper {
* requestUploading file.
* requestUploading file.
* returns id for observing progress.
* returns id for observing progress.
*/
*/
public
@Nullable
String
requestUploading
(
String
roomId
,
Uri
uri
)
{
public
@Nullable
String
requestUploading
(
String
roomId
,
Uri
uri
)
{
try
(
Cursor
cursor
=
context
.
getContentResolver
().
query
(
uri
,
null
,
null
,
null
,
null
))
{
try
(
Cursor
cursor
=
context
.
getContentResolver
().
query
(
uri
,
null
,
null
,
null
,
null
))
{
if
(
cursor
!=
null
&&
cursor
.
moveToFirst
())
{
if
(
cursor
!=
null
&&
cursor
.
moveToFirst
())
{
String
filename
=
cursor
.
getString
(
cursor
.
getColumnIndex
(
OpenableColumns
.
DISPLAY_NAME
));
String
filename
=
cursor
.
getString
(
cursor
.
getColumnIndex
(
OpenableColumns
.
DISPLAY_NAME
));
...
...
app/src/main/java/chat/rocket/android/helper/LoadMoreScrollListener.java
View file @
9c34af88
...
@@ -19,7 +19,8 @@ public abstract class LoadMoreScrollListener extends RecyclerView.OnScrollListen
...
@@ -19,7 +19,8 @@ public abstract class LoadMoreScrollListener extends RecyclerView.OnScrollListen
setLoadingDone
();
setLoadingDone
();
}
}
@Override
public
void
onScrolled
(
RecyclerView
recyclerView
,
int
deltaX
,
int
deltaY
)
{
@Override
public
void
onScrolled
(
RecyclerView
recyclerView
,
int
deltaX
,
int
deltaY
)
{
super
.
onScrolled
(
recyclerView
,
deltaX
,
deltaY
);
super
.
onScrolled
(
recyclerView
,
deltaX
,
deltaY
);
final
int
visibleItemCount
=
recyclerView
.
getChildCount
();
final
int
visibleItemCount
=
recyclerView
.
getChildCount
();
...
...
app/src/main/java/chat/rocket/android/helper/LogcatIfError.java
View file @
9c34af88
...
@@ -8,7 +8,8 @@ import chat.rocket.android.log.RCLog;
...
@@ -8,7 +8,8 @@ import chat.rocket.android.log.RCLog;
* Bolts-Task continuation for just logging if error occurred.
* Bolts-Task continuation for just logging if error occurred.
*/
*/
public
class
LogcatIfError
implements
Continuation
{
public
class
LogcatIfError
implements
Continuation
{
@Override
public
Object
then
(
Task
task
)
throws
Exception
{
@Override
public
Object
then
(
Task
task
)
throws
Exception
{
if
(
task
.
isFaulted
())
{
if
(
task
.
isFaulted
())
{
RCLog
.
w
(
task
.
getError
());
RCLog
.
w
(
task
.
getError
());
}
}
...
...
app/src/main/java/chat/rocket/android/helper/OkHttpHelper.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
helper
;
package
chat
.
rocket
.
android
.
helper
;
import
com.facebook.stetho.okhttp3.StethoInterceptor
;
import
com.facebook.stetho.okhttp3.StethoInterceptor
;
import
java.util.concurrent.TimeUnit
;
import
java.util.concurrent.TimeUnit
;
import
okhttp3.OkHttpClient
;
import
okhttp3.OkHttpClient
;
...
...
app/src/main/java/chat/rocket/android/helper/OnBackPressListener.java
View file @
9c34af88
...
@@ -7,7 +7,6 @@ public interface OnBackPressListener {
...
@@ -7,7 +7,6 @@ public interface OnBackPressListener {
/**
/**
* onBackPressed
* onBackPressed
*
* @return whether back is handled or not.
* @return whether back is handled or not.
*/
*/
boolean
onBackPressed
();
boolean
onBackPressed
();
...
...
app/src/main/java/chat/rocket/android/helper/TextUtils.java
View file @
9c34af88
...
@@ -7,7 +7,6 @@ public class TextUtils {
...
@@ -7,7 +7,6 @@ public class TextUtils {
/**
/**
* Returns true if the string is null or 0-length.
* Returns true if the string is null or 0-length.
*
* @param str the string to be examined
* @param str the string to be examined
* @return true if str is null or zero length
* @return true if str is null or zero length
*/
*/
...
...
app/src/main/java/chat/rocket/android/layouthelper/ExtRealmModelListAdapter.java
View file @
9c34af88
...
@@ -2,9 +2,10 @@ package chat.rocket.android.layouthelper;
...
@@ -2,9 +2,10 @@ package chat.rocket.android.layouthelper;
import
android.content.Context
;
import
android.content.Context
;
import
android.support.annotation.LayoutRes
;
import
android.support.annotation.LayoutRes
;
import
io.realm.RealmObject
;
import
chat.rocket.android.realm_helper.RealmModelListAdapter
;
import
chat.rocket.android.realm_helper.RealmModelListAdapter
;
import
chat.rocket.android.realm_helper.RealmModelViewHolder
;
import
chat.rocket.android.realm_helper.RealmModelViewHolder
;
import
io.realm.RealmObject
;
@SuppressWarnings
({
"PMD.AbstractNaming"
,
"PMD.GenericsNaming"
})
@SuppressWarnings
({
"PMD.AbstractNaming"
,
"PMD.GenericsNaming"
})
/**
/**
...
@@ -19,7 +20,8 @@ public abstract class ExtRealmModelListAdapter<T extends RealmObject, VM,
...
@@ -19,7 +20,8 @@ public abstract class ExtRealmModelListAdapter<T extends RealmObject, VM,
super
(
context
);
super
(
context
);
}
}
@Override
public
int
getItemCount
()
{
@Override
public
int
getItemCount
()
{
return
super
.
getItemCount
()
+
2
;
return
super
.
getItemCount
()
+
2
;
}
}
...
@@ -35,7 +37,8 @@ public abstract class ExtRealmModelListAdapter<T extends RealmObject, VM,
...
@@ -35,7 +37,8 @@ public abstract class ExtRealmModelListAdapter<T extends RealmObject, VM,
notifyItemChanged
(
position
+
1
);
notifyItemChanged
(
position
+
1
);
}
}
@Override
public
int
getItemViewType
(
int
position
)
{
@Override
public
int
getItemViewType
(
int
position
)
{
if
(
position
==
0
)
{
if
(
position
==
0
)
{
return
VIEW_TYPE_HEADER
;
return
VIEW_TYPE_HEADER
;
}
}
...
@@ -47,13 +50,20 @@ public abstract class ExtRealmModelListAdapter<T extends RealmObject, VM,
...
@@ -47,13 +50,20 @@ public abstract class ExtRealmModelListAdapter<T extends RealmObject, VM,
return
super
.
getItemViewType
(
position
-
1
);
return
super
.
getItemViewType
(
position
-
1
);
}
}
protected
abstract
@LayoutRes
int
getHeaderLayout
();
protected
abstract
@LayoutRes
int
getHeaderLayout
();
protected
abstract
@LayoutRes
int
getFooterLayout
();
protected
abstract
@LayoutRes
int
getFooterLayout
();
protected
abstract
@LayoutRes
int
getRealmModelLayout
(
int
viewType
);
protected
abstract
@LayoutRes
int
getRealmModelLayout
(
int
viewType
);
@Override
protected
final
int
getLayout
(
int
viewType
)
{
@Override
protected
final
int
getLayout
(
int
viewType
)
{
if
(
viewType
==
VIEW_TYPE_HEADER
)
{
if
(
viewType
==
VIEW_TYPE_HEADER
)
{
return
getHeaderLayout
();
return
getHeaderLayout
();
}
}
...
@@ -64,7 +74,8 @@ public abstract class ExtRealmModelListAdapter<T extends RealmObject, VM,
...
@@ -64,7 +74,8 @@ public abstract class ExtRealmModelListAdapter<T extends RealmObject, VM,
return
getRealmModelLayout
(
viewType
);
return
getRealmModelLayout
(
viewType
);
}
}
@Override
public
final
void
onBindViewHolder
(
VH
holder
,
int
position
)
{
@Override
public
final
void
onBindViewHolder
(
VH
holder
,
int
position
)
{
if
(
position
==
0
||
position
==
super
.
getItemCount
()
+
1
)
{
if
(
position
==
0
||
position
==
super
.
getItemCount
()
+
1
)
{
return
;
return
;
}
}
...
...
app/src/main/java/chat/rocket/android/layouthelper/chatroom/MessageComposerManager.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
layouthelper
.
chatroom
;
package
chat
.
rocket
.
android
.
layouthelper
.
chatroom
;
import
android.support.design.widget.FloatingActionButton
;
import
android.support.design.widget.FloatingActionButton
;
import
bolts.Task
;
import
bolts.Task
;
import
chat.rocket.android.widget.message.MessageComposer
;
import
chat.rocket.android.widget.message.MessageComposer
;
...
@@ -8,14 +9,6 @@ import chat.rocket.android.widget.message.MessageComposer;
...
@@ -8,14 +9,6 @@ import chat.rocket.android.widget.message.MessageComposer;
* handling visibility of FAB-compose and MessageComposer.
* handling visibility of FAB-compose and MessageComposer.
*/
*/
public
class
MessageComposerManager
{
public
class
MessageComposerManager
{
public
interface
SendMessageCallback
{
Task
<
Void
>
onSubmit
(
String
messageText
);
}
public
interface
VisibilityChangedListener
{
void
onVisibilityChanged
(
boolean
shown
);
}
private
final
FloatingActionButton
fabCompose
;
private
final
FloatingActionButton
fabCompose
;
private
final
MessageComposer
messageComposer
;
private
final
MessageComposer
messageComposer
;
private
SendMessageCallback
sendMessageCallback
;
private
SendMessageCallback
sendMessageCallback
;
...
@@ -33,7 +26,8 @@ public class MessageComposerManager {
...
@@ -33,7 +26,8 @@ public class MessageComposerManager {
});
});
messageComposer
.
setOnActionListener
(
new
MessageComposer
.
ActionListener
()
{
messageComposer
.
setOnActionListener
(
new
MessageComposer
.
ActionListener
()
{
@Override
public
void
onSubmit
(
String
message
)
{
@Override
public
void
onSubmit
(
String
message
)
{
if
(
sendMessageCallback
!=
null
)
{
if
(
sendMessageCallback
!=
null
)
{
messageComposer
.
setEnabled
(
false
);
messageComposer
.
setEnabled
(
false
);
sendMessageCallback
.
onSubmit
(
message
).
onSuccess
(
task
->
{
sendMessageCallback
.
onSubmit
(
message
).
onSuccess
(
task
->
{
...
@@ -46,7 +40,8 @@ public class MessageComposerManager {
...
@@ -46,7 +40,8 @@ public class MessageComposerManager {
}
}
}
}
@Override
public
void
onCancel
()
{
@Override
public
void
onCancel
()
{
setMessageComposerVisibility
(
false
);
setMessageComposerVisibility
(
false
);
}
}
});
});
...
@@ -91,4 +86,12 @@ public class MessageComposerManager {
...
@@ -91,4 +86,12 @@ public class MessageComposerManager {
}
}
return
false
;
return
false
;
}
}
public
interface
SendMessageCallback
{
Task
<
Void
>
onSubmit
(
String
messageText
);
}
public
interface
VisibilityChangedListener
{
void
onVisibilityChanged
(
boolean
shown
);
}
}
}
app/src/main/java/chat/rocket/android/layouthelper/chatroom/MessageListAdapter.java
View file @
9c34af88
...
@@ -2,12 +2,13 @@ package chat.rocket.android.layouthelper.chatroom;
...
@@ -2,12 +2,13 @@ package chat.rocket.android.layouthelper.chatroom;
import
android.content.Context
;
import
android.content.Context
;
import
android.view.View
;
import
android.view.View
;
import
chat.rocket.android.R
;
import
chat.rocket.android.layouthelper.ExtRealmModelListAdapter
;
import
chat.rocket.android.model.ddp.Message
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.List
;
import
chat.rocket.android.R
;
import
chat.rocket.android.layouthelper.ExtRealmModelListAdapter
;
import
chat.rocket.android.model.ddp.Message
;
/**
/**
* target list adapter for chat room.
* target list adapter for chat room.
...
@@ -36,11 +37,13 @@ public class MessageListAdapter
...
@@ -36,11 +37,13 @@ public class MessageListAdapter
notifyFooterChanged
();
notifyFooterChanged
();
}
}
@Override
protected
int
getHeaderLayout
()
{
@Override
protected
int
getHeaderLayout
()
{
return
R
.
layout
.
list_item_message_header
;
return
R
.
layout
.
list_item_message_header
;
}
}
@Override
protected
int
getFooterLayout
()
{
@Override
protected
int
getFooterLayout
()
{
if
(!
hasNext
||
isLoaded
)
{
if
(!
hasNext
||
isLoaded
)
{
return
R
.
layout
.
list_item_message_start_of_conversation
;
return
R
.
layout
.
list_item_message_start_of_conversation
;
}
else
{
}
else
{
...
@@ -48,19 +51,23 @@ public class MessageListAdapter
...
@@ -48,19 +51,23 @@ public class MessageListAdapter
}
}
}
}
@Override
protected
int
getRealmModelViewType
(
PairedMessage
model
)
{
@Override
protected
int
getRealmModelViewType
(
PairedMessage
model
)
{
return
0
;
return
0
;
}
}
@Override
protected
int
getRealmModelLayout
(
int
viewType
)
{
@Override
protected
int
getRealmModelLayout
(
int
viewType
)
{
return
R
.
layout
.
list_item_message
;
return
R
.
layout
.
list_item_message
;
}
}
@Override
protected
MessageViewHolder
onCreateRealmModelViewHolder
(
int
viewType
,
View
itemView
)
{
@Override
protected
MessageViewHolder
onCreateRealmModelViewHolder
(
int
viewType
,
View
itemView
)
{
return
new
MessageViewHolder
(
itemView
,
hostname
,
userId
,
token
);
return
new
MessageViewHolder
(
itemView
,
hostname
,
userId
,
token
);
}
}
@Override
protected
List
<
PairedMessage
>
mapResultsToViewModel
(
List
<
Message
>
results
)
{
@Override
protected
List
<
PairedMessage
>
mapResultsToViewModel
(
List
<
Message
>
results
)
{
if
(
results
.
isEmpty
())
{
if
(
results
.
isEmpty
())
{
return
Collections
.
emptyList
();
return
Collections
.
emptyList
();
}
}
...
...
app/src/main/java/chat/rocket/android/layouthelper/chatroom/MessageViewHolder.java
View file @
9c34af88
...
@@ -4,6 +4,7 @@ import android.support.annotation.Nullable;
...
@@ -4,6 +4,7 @@ import android.support.annotation.Nullable;
import
android.view.View
;
import
android.view.View
;
import
android.widget.ImageView
;
import
android.widget.ImageView
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.helper.DateTime
;
import
chat.rocket.android.helper.DateTime
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.TextUtils
;
...
@@ -90,7 +91,7 @@ public class MessageViewHolder extends RealmModelViewHolder<PairedMessage> {
...
@@ -90,7 +91,7 @@ public class MessageViewHolder extends RealmModelViewHolder<PairedMessage> {
}
}
}
}
private
void
setSequential
(
boolean
sequential
)
{
private
void
setSequential
(
boolean
sequential
)
{
if
(
sequential
)
{
if
(
sequential
)
{
avatar
.
setVisibility
(
View
.
INVISIBLE
);
avatar
.
setVisibility
(
View
.
INVISIBLE
);
userAndTimeContainer
.
setVisibility
(
View
.
GONE
);
userAndTimeContainer
.
setVisibility
(
View
.
GONE
);
...
...
app/src/main/java/chat/rocket/android/layouthelper/chatroom/RoomListManager.java
View file @
9c34af88
...
@@ -2,10 +2,11 @@ package chat.rocket.android.layouthelper.chatroom;
...
@@ -2,10 +2,11 @@ package chat.rocket.android.layouthelper.chatroom;
import
android.view.View
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.view.ViewGroup
;
import
java.util.List
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.model.ddp.RoomSubscription
;
import
chat.rocket.android.model.ddp.RoomSubscription
;
import
chat.rocket.android.widget.internal.RoomListItemView
;
import
chat.rocket.android.widget.internal.RoomListItemView
;
import
java.util.List
;
/**
/**
* Utility class for mapping Room list into channel list ViewGroup.
* Utility class for mapping Room list into channel list ViewGroup.
...
@@ -13,14 +14,6 @@ import java.util.List;
...
@@ -13,14 +14,6 @@ import java.util.List;
public
class
RoomListManager
{
public
class
RoomListManager
{
private
ViewGroup
channelsContainer
;
private
ViewGroup
channelsContainer
;
private
ViewGroup
dmContainer
;
private
ViewGroup
dmContainer
;
/**
* Callback interface for List item clicked.
*/
public
interface
OnItemClickListener
{
void
onItemClick
(
RoomListItemView
roomListItemView
);
}
private
OnItemClickListener
listener
;
private
OnItemClickListener
listener
;
/**
/**
...
@@ -31,6 +24,16 @@ public class RoomListManager {
...
@@ -31,6 +24,16 @@ public class RoomListManager {
this
.
dmContainer
=
dmContainer
;
this
.
dmContainer
=
dmContainer
;
}
}
private
static
void
removeItemIfExists
(
ViewGroup
parent
,
String
roomName
)
{
for
(
int
i
=
0
;
i
<
parent
.
getChildCount
();
i
++)
{
RoomListItemView
roomListItemView
=
(
RoomListItemView
)
parent
.
getChildAt
(
i
);
if
(
roomName
.
equals
(
roomListItemView
.
getRoomName
()))
{
parent
.
removeViewAt
(
i
);
break
;
}
}
}
/**
/**
* update ViewGroups with room list.
* update ViewGroups with room list.
*/
*/
...
@@ -126,13 +129,10 @@ public class RoomListManager {
...
@@ -126,13 +129,10 @@ public class RoomListManager {
}
}
}
}
private
static
void
removeItemIfExists
(
ViewGroup
parent
,
String
roomName
)
{
/**
for
(
int
i
=
0
;
i
<
parent
.
getChildCount
();
i
++)
{
* Callback interface for List item clicked.
RoomListItemView
roomListItemView
=
(
RoomListItemView
)
parent
.
getChildAt
(
i
);
*/
if
(
roomName
.
equals
(
roomListItemView
.
getRoomName
()))
{
public
interface
OnItemClickListener
{
parent
.
removeViewAt
(
i
);
void
onItemClick
(
RoomListItemView
roomListItemView
);
break
;
}
}
}
}
}
}
app/src/main/java/chat/rocket/android/layouthelper/chatroom/dialog/RoomUserAdapter.java
View file @
9c34af88
...
@@ -5,12 +5,13 @@ import android.support.v7.widget.RecyclerView;
...
@@ -5,12 +5,13 @@ import android.support.v7.widget.RecyclerView;
import
android.view.LayoutInflater
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.view.ViewGroup
;
import
java.util.List
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.model.ddp.User
;
import
chat.rocket.android.model.ddp.User
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.renderer.UserRenderer
;
import
chat.rocket.android.renderer.UserRenderer
;
import
java.util.List
;
/**
/**
* RecyclerView adapter for UsersOfRooms.
* RecyclerView adapter for UsersOfRooms.
...
@@ -33,12 +34,14 @@ public class RoomUserAdapter extends RecyclerView.Adapter<RoomUserViewHolder> {
...
@@ -33,12 +34,14 @@ public class RoomUserAdapter extends RecyclerView.Adapter<RoomUserViewHolder> {
this
.
hostname
=
hostname
;
this
.
hostname
=
hostname
;
}
}
@Override
public
RoomUserViewHolder
onCreateViewHolder
(
ViewGroup
parent
,
int
viewType
)
{
@Override
public
RoomUserViewHolder
onCreateViewHolder
(
ViewGroup
parent
,
int
viewType
)
{
View
itemView
=
inflater
.
inflate
(
R
.
layout
.
listitem_room_user
,
parent
,
false
);
View
itemView
=
inflater
.
inflate
(
R
.
layout
.
listitem_room_user
,
parent
,
false
);
return
new
RoomUserViewHolder
(
itemView
);
return
new
RoomUserViewHolder
(
itemView
);
}
}
@Override
public
void
onBindViewHolder
(
RoomUserViewHolder
holder
,
int
position
)
{
@Override
public
void
onBindViewHolder
(
RoomUserViewHolder
holder
,
int
position
)
{
String
username
=
usernames
.
get
(
position
);
String
username
=
usernames
.
get
(
position
);
if
(
TextUtils
.
isEmpty
(
username
))
{
if
(
TextUtils
.
isEmpty
(
username
))
{
return
;
return
;
...
@@ -60,7 +63,8 @@ public class RoomUserAdapter extends RecyclerView.Adapter<RoomUserViewHolder> {
...
@@ -60,7 +63,8 @@ public class RoomUserAdapter extends RecyclerView.Adapter<RoomUserViewHolder> {
}
}
}
}
@Override
public
int
getItemCount
()
{
@Override
public
int
getItemCount
()
{
return
usernames
!=
null
?
usernames
.
size
()
:
0
;
return
usernames
!=
null
?
usernames
.
size
()
:
0
;
}
}
...
...
app/src/main/java/chat/rocket/android/layouthelper/chatroom/dialog/RoomUserViewHolder.java
View file @
9c34af88
...
@@ -4,6 +4,7 @@ import android.support.v7.widget.RecyclerView;
...
@@ -4,6 +4,7 @@ import android.support.v7.widget.RecyclerView;
import
android.view.View
;
import
android.view.View
;
import
android.widget.ImageView
;
import
android.widget.ImageView
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
/**
/**
...
...
app/src/main/java/chat/rocket/android/layouthelper/oauth/OAuthProviderInfo.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
layouthelper
.
oauth
;
package
chat
.
rocket
.
android
.
layouthelper
.
oauth
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.fragment.oauth.AbstractOAuthFragment
;
import
chat.rocket.android.fragment.oauth.AbstractOAuthFragment
;
import
chat.rocket.android.fragment.oauth.FacebookOAuthFragment
;
import
chat.rocket.android.fragment.oauth.FacebookOAuthFragment
;
import
chat.rocket.android.fragment.oauth.GitHubOAuthFragment
;
import
chat.rocket.android.fragment.oauth.GitHubOAuthFragment
;
import
chat.rocket.android.fragment.oauth.GoogleOAuthFragment
;
import
chat.rocket.android.fragment.oauth.GoogleOAuthFragment
;
import
chat.rocket.android.fragment.oauth.TwitterOAuthFragment
;
import
chat.rocket.android.fragment.oauth.TwitterOAuthFragment
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
/**
/**
* View model for OAuth login button.
* View model for OAuth login button.
*/
*/
public
class
OAuthProviderInfo
{
public
class
OAuthProviderInfo
{
public
String
serviceName
;
public
int
buttonId
;
public
Class
<?
extends
AbstractOAuthFragment
>
fragmentClass
;
/**
* Constructor with required parameters.
*/
private
OAuthProviderInfo
(
String
serviceName
,
int
buttonId
,
Class
<?
extends
AbstractOAuthFragment
>
fragmentClass
)
{
this
.
serviceName
=
serviceName
;
this
.
buttonId
=
buttonId
;
this
.
fragmentClass
=
fragmentClass
;
}
private
static
final
ArrayList
<
OAuthProviderInfo
>
_LIST
=
new
ArrayList
<
OAuthProviderInfo
>()
{
private
static
final
ArrayList
<
OAuthProviderInfo
>
_LIST
=
new
ArrayList
<
OAuthProviderInfo
>()
{
{
{
add
(
new
OAuthProviderInfo
(
add
(
new
OAuthProviderInfo
(
...
@@ -40,6 +26,18 @@ public class OAuthProviderInfo {
...
@@ -40,6 +26,18 @@ public class OAuthProviderInfo {
"facebook"
,
R
.
id
.
btn_login_with_facebook
,
FacebookOAuthFragment
.
class
));
"facebook"
,
R
.
id
.
btn_login_with_facebook
,
FacebookOAuthFragment
.
class
));
}
}
};
};
public
static
final
List
<
OAuthProviderInfo
>
LIST
=
Collections
.
unmodifiableList
(
_LIST
);
public
static
final
List
<
OAuthProviderInfo
>
LIST
=
Collections
.
unmodifiableList
(
_LIST
);
public
String
serviceName
;
public
int
buttonId
;
public
Class
<?
extends
AbstractOAuthFragment
>
fragmentClass
;
/**
* Constructor with required parameters.
*/
private
OAuthProviderInfo
(
String
serviceName
,
int
buttonId
,
Class
<?
extends
AbstractOAuthFragment
>
fragmentClass
)
{
this
.
serviceName
=
serviceName
;
this
.
buttonId
=
buttonId
;
this
.
fragmentClass
=
fragmentClass
;
}
}
}
app/src/main/java/chat/rocket/android/layouthelper/sidebar/dialog/SuggestUserAdapter.java
View file @
9c34af88
...
@@ -3,12 +3,13 @@ package chat.rocket.android.layouthelper.sidebar.dialog;
...
@@ -3,12 +3,13 @@ package chat.rocket.android.layouthelper.sidebar.dialog;
import
android.content.Context
;
import
android.content.Context
;
import
android.view.View
;
import
android.view.View
;
import
android.widget.ImageView
;
import
android.widget.ImageView
;
import
java.util.Iterator
;
import
java.util.List
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.model.ddp.User
;
import
chat.rocket.android.model.ddp.User
;
import
chat.rocket.android.realm_helper.RealmAutoCompleteAdapter
;
import
chat.rocket.android.realm_helper.RealmAutoCompleteAdapter
;
import
chat.rocket.android.renderer.UserRenderer
;
import
chat.rocket.android.renderer.UserRenderer
;
import
java.util.Iterator
;
import
java.util.List
;
/**
/**
* adapter to suggest user names.
* adapter to suggest user names.
...
@@ -21,13 +22,15 @@ public class SuggestUserAdapter extends RealmAutoCompleteAdapter<User> {
...
@@ -21,13 +22,15 @@ public class SuggestUserAdapter extends RealmAutoCompleteAdapter<User> {
this
.
hostname
=
hostname
;
this
.
hostname
=
hostname
;
}
}
@Override
protected
void
onBindItemView
(
View
itemView
,
User
user
)
{
@Override
protected
void
onBindItemView
(
View
itemView
,
User
user
)
{
new
UserRenderer
(
itemView
.
getContext
(),
user
)
new
UserRenderer
(
itemView
.
getContext
(),
user
)
.
statusColorInto
((
ImageView
)
itemView
.
findViewById
(
R
.
id
.
room_user_status
))
.
statusColorInto
((
ImageView
)
itemView
.
findViewById
(
R
.
id
.
room_user_status
))
.
avatarInto
((
ImageView
)
itemView
.
findViewById
(
R
.
id
.
room_user_avatar
),
hostname
);
.
avatarInto
((
ImageView
)
itemView
.
findViewById
(
R
.
id
.
room_user_avatar
),
hostname
);
}
}
@Override
protected
void
filterList
(
List
<
User
>
users
,
String
text
)
{
@Override
protected
void
filterList
(
List
<
User
>
users
,
String
text
)
{
Iterator
<
User
>
itUsers
=
users
.
iterator
();
Iterator
<
User
>
itUsers
=
users
.
iterator
();
final
String
prefix
=
text
.
toLowerCase
();
final
String
prefix
=
text
.
toLowerCase
();
while
(
itUsers
.
hasNext
())
{
while
(
itUsers
.
hasNext
())
{
...
@@ -38,7 +41,8 @@ public class SuggestUserAdapter extends RealmAutoCompleteAdapter<User> {
...
@@ -38,7 +41,8 @@ public class SuggestUserAdapter extends RealmAutoCompleteAdapter<User> {
}
}
}
}
@Override
protected
String
getStringForSelectedItem
(
User
user
)
{
@Override
protected
String
getStringForSelectedItem
(
User
user
)
{
return
user
.
getUsername
();
return
user
.
getUsername
();
}
}
}
}
app/src/main/java/chat/rocket/android/model/ServerConfig.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
model
;
package
chat
.
rocket
.
android
.
model
;
import
io.realm.RealmObject
;
import
io.realm.annotations.PrimaryKey
;
import
org.json.JSONObject
;
import
bolts.Task
;
import
bolts.Task
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
hugo.weaving.DebugLog
;
import
hugo.weaving.DebugLog
;
import
io.realm.RealmObject
;
import
io.realm.annotations.PrimaryKey
;
import
org.json.JSONObject
;
/**
/**
* Server configuration.
* Server configuration.
...
@@ -23,6 +24,35 @@ public class ServerConfig extends RealmObject {
...
@@ -23,6 +24,35 @@ public class ServerConfig extends RealmObject {
private
String
session
;
private
String
session
;
private
String
error
;
private
String
error
;
/**
* Log the server connection is lost due to soem exception.
*/
@DebugLog
public
static
void
logConnectionError
(
String
serverConfigId
,
Exception
exception
)
{
RealmStore
.
getDefault
().
executeTransaction
(
realm
->
realm
.
createOrUpdateObjectFromJson
(
ServerConfig
.
class
,
new
JSONObject
()
.
put
(
"serverConfigId"
,
serverConfigId
)
.
put
(
"state"
,
STATE_CONNECTION_ERROR
)
.
put
(
"error"
,
exception
.
getMessage
())))
.
continueWith
(
new
LogcatIfError
());
}
/**
* Update the state of the ServerConfig with serverConfigId.
*/
public
static
Task
<
Void
>
updateState
(
final
String
serverConfigId
,
int
state
)
{
return
RealmStore
.
getDefault
().
executeTransaction
(
realm
->
{
ServerConfig
config
=
realm
.
where
(
ServerConfig
.
class
).
equalTo
(
"serverConfigId"
,
serverConfigId
).
findFirst
();
if
(
config
==
null
||
config
.
getState
()
!=
state
)
{
realm
.
createOrUpdateObjectFromJson
(
ServerConfig
.
class
,
new
JSONObject
()
.
put
(
"serverConfigId"
,
serverConfigId
)
.
put
(
"state"
,
state
));
}
return
null
;
});
}
public
String
getServerConfigId
()
{
public
String
getServerConfigId
()
{
return
serverConfigId
;
return
serverConfigId
;
}
}
...
@@ -62,32 +92,4 @@ public class ServerConfig extends RealmObject {
...
@@ -62,32 +92,4 @@ public class ServerConfig extends RealmObject {
public
void
setError
(
String
error
)
{
public
void
setError
(
String
error
)
{
this
.
error
=
error
;
this
.
error
=
error
;
}
}
/**
* Log the server connection is lost due to soem exception.
*/
@DebugLog
public
static
void
logConnectionError
(
String
serverConfigId
,
Exception
exception
)
{
RealmStore
.
getDefault
().
executeTransaction
(
realm
->
realm
.
createOrUpdateObjectFromJson
(
ServerConfig
.
class
,
new
JSONObject
()
.
put
(
"serverConfigId"
,
serverConfigId
)
.
put
(
"state"
,
STATE_CONNECTION_ERROR
)
.
put
(
"error"
,
exception
.
getMessage
())))
.
continueWith
(
new
LogcatIfError
());
}
/**
* Update the state of the ServerConfig with serverConfigId.
*/
public
static
Task
<
Void
>
updateState
(
final
String
serverConfigId
,
int
state
)
{
return
RealmStore
.
getDefault
().
executeTransaction
(
realm
->
{
ServerConfig
config
=
realm
.
where
(
ServerConfig
.
class
).
equalTo
(
"serverConfigId"
,
serverConfigId
).
findFirst
();
if
(
config
==
null
||
config
.
getState
()
!=
state
)
{
realm
.
createOrUpdateObjectFromJson
(
ServerConfig
.
class
,
new
JSONObject
()
.
put
(
"serverConfigId"
,
serverConfigId
)
.
put
(
"state"
,
state
));
}
return
null
;
});
}
}
}
app/src/main/java/chat/rocket/android/model/ddp/Message.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
model
.
ddp
;
package
chat
.
rocket
.
android
.
model
.
ddp
;
import
chat.rocket.android.model.SyncState
;
import
io.realm.RealmObject
;
import
io.realm.RealmObject
;
import
io.realm.annotations.PrimaryKey
;
import
io.realm.annotations.PrimaryKey
;
import
org.json.JSONException
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
org.json.JSONObject
;
import
chat.rocket.android.model.SyncState
;
/**
/**
* Message.
* Message.
*/
*/
...
@@ -25,6 +26,18 @@ public class Message extends RealmObject {
...
@@ -25,6 +26,18 @@ public class Message extends RealmObject {
private
String
attachments
;
//JSONArray.
private
String
attachments
;
//JSONArray.
private
String
urls
;
//JSONArray.
private
String
urls
;
//JSONArray.
public
static
JSONObject
customizeJson
(
JSONObject
messageJson
)
throws
JSONException
{
long
ts
=
messageJson
.
getJSONObject
(
"ts"
).
getLong
(
"$date"
);
messageJson
.
remove
(
"ts"
);
messageJson
.
put
(
"ts"
,
ts
).
put
(
"syncstate"
,
SyncState
.
SYNCED
);
if
(
messageJson
.
isNull
(
"groupable"
))
{
messageJson
.
put
(
"groupable"
,
true
);
}
return
messageJson
;
}
public
String
get_id
()
{
public
String
get_id
()
{
return
_id
;
return
_id
;
}
}
...
@@ -104,16 +117,4 @@ public class Message extends RealmObject {
...
@@ -104,16 +117,4 @@ public class Message extends RealmObject {
public
void
setUrls
(
String
urls
)
{
public
void
setUrls
(
String
urls
)
{
this
.
urls
=
urls
;
this
.
urls
=
urls
;
}
}
public
static
JSONObject
customizeJson
(
JSONObject
messageJson
)
throws
JSONException
{
long
ts
=
messageJson
.
getJSONObject
(
"ts"
).
getLong
(
"$date"
);
messageJson
.
remove
(
"ts"
);
messageJson
.
put
(
"ts"
,
ts
).
put
(
"syncstate"
,
SyncState
.
SYNCED
);
if
(
messageJson
.
isNull
(
"groupable"
))
{
messageJson
.
put
(
"groupable"
,
true
);
}
return
messageJson
;
}
}
}
app/src/main/java/chat/rocket/android/model/ddp/PublicSetting.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
model
.
ddp
;
package
chat
.
rocket
.
android
.
model
.
ddp
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.Nullable
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
io.realm.RealmObject
;
import
io.realm.RealmObject
;
import
io.realm.annotations.PrimaryKey
;
import
io.realm.annotations.PrimaryKey
;
import
org.json.JSONException
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
org.json.JSONObject
;
import
chat.rocket.android.realm_helper.RealmHelper
;
/**
/**
* public setting model.
* public setting model.
*/
*/
...
@@ -20,6 +21,45 @@ public class PublicSetting extends RealmObject {
...
@@ -20,6 +21,45 @@ public class PublicSetting extends RealmObject {
private
long
_updatedAt
;
private
long
_updatedAt
;
private
String
meta
;
//JSON
private
String
meta
;
//JSON
public
static
JSONObject
customizeJson
(
JSONObject
settingJson
)
throws
JSONException
{
if
(!
settingJson
.
isNull
(
"_updatedAt"
))
{
long
updatedAt
=
settingJson
.
getJSONObject
(
"_updatedAt"
).
getLong
(
"$date"
);
settingJson
.
remove
(
"_updatedAt"
);
settingJson
.
put
(
"_updatedAt"
,
updatedAt
);
}
return
settingJson
;
}
private
static
@Nullable
PublicSetting
get
(
RealmHelper
realmHelper
,
String
_id
)
{
return
realmHelper
.
executeTransactionForRead
(
realm
->
realm
.
where
(
PublicSetting
.
class
).
equalTo
(
"_id"
,
_id
).
findFirst
());
}
public
static
@Nullable
String
getString
(
RealmHelper
realmHelper
,
String
_id
,
String
defaultValue
)
{
PublicSetting
setting
=
get
(
realmHelper
,
_id
);
if
(
setting
!=
null
)
{
return
setting
.
getValue
();
}
return
defaultValue
;
}
public
static
@Nullable
boolean
getBoolean
(
RealmHelper
realmHelper
,
String
_id
,
boolean
defaultValue
)
{
PublicSetting
setting
=
get
(
realmHelper
,
_id
);
if
(
setting
!=
null
)
{
return
Boolean
.
parseBoolean
(
setting
.
getValue
());
}
return
defaultValue
;
}
public
String
get_id
()
{
public
String
get_id
()
{
return
_id
;
return
_id
;
}
}
...
@@ -67,37 +107,4 @@ public class PublicSetting extends RealmObject {
...
@@ -67,37 +107,4 @@ public class PublicSetting extends RealmObject {
public
void
setMeta
(
String
meta
)
{
public
void
setMeta
(
String
meta
)
{
this
.
meta
=
meta
;
this
.
meta
=
meta
;
}
}
public
static
JSONObject
customizeJson
(
JSONObject
settingJson
)
throws
JSONException
{
if
(!
settingJson
.
isNull
(
"_updatedAt"
))
{
long
updatedAt
=
settingJson
.
getJSONObject
(
"_updatedAt"
).
getLong
(
"$date"
);
settingJson
.
remove
(
"_updatedAt"
);
settingJson
.
put
(
"_updatedAt"
,
updatedAt
);
}
return
settingJson
;
}
private
static
@Nullable
PublicSetting
get
(
RealmHelper
realmHelper
,
String
_id
)
{
return
realmHelper
.
executeTransactionForRead
(
realm
->
realm
.
where
(
PublicSetting
.
class
).
equalTo
(
"_id"
,
_id
).
findFirst
());
}
public
static
@Nullable
String
getString
(
RealmHelper
realmHelper
,
String
_id
,
String
defaultValue
)
{
PublicSetting
setting
=
get
(
realmHelper
,
_id
);
if
(
setting
!=
null
)
{
return
setting
.
getValue
();
}
return
defaultValue
;
}
public
static
@Nullable
boolean
getBoolean
(
RealmHelper
realmHelper
,
String
_id
,
boolean
defaultValue
)
{
PublicSetting
setting
=
get
(
realmHelper
,
_id
);
if
(
setting
!=
null
)
{
return
Boolean
.
parseBoolean
(
setting
.
getValue
());
}
return
defaultValue
;
}
}
}
app/src/main/java/chat/rocket/android/model/ddp/RoomSubscription.java
View file @
9c34af88
...
@@ -26,6 +26,22 @@ public class RoomSubscription extends RealmObject {
...
@@ -26,6 +26,22 @@ public class RoomSubscription extends RealmObject {
private
long
_updatedAt
;
private
long
_updatedAt
;
private
long
ls
;
//last seen.
private
long
ls
;
//last seen.
public
static
JSONObject
customizeJson
(
JSONObject
roomSubscriptionJson
)
throws
JSONException
{
if
(!
roomSubscriptionJson
.
isNull
(
"ls"
))
{
long
ls
=
roomSubscriptionJson
.
getJSONObject
(
"ls"
).
getLong
(
"$date"
);
roomSubscriptionJson
.
remove
(
"ls"
);
roomSubscriptionJson
.
put
(
"ls"
,
ls
);
}
if
(!
roomSubscriptionJson
.
isNull
(
"_updatedAt"
))
{
long
updatedAt
=
roomSubscriptionJson
.
getJSONObject
(
"_updatedAt"
).
getLong
(
"$date"
);
roomSubscriptionJson
.
remove
(
"_updatedAt"
);
roomSubscriptionJson
.
put
(
"_updatedAt"
,
updatedAt
);
}
return
roomSubscriptionJson
;
}
public
String
get_id
()
{
public
String
get_id
()
{
return
_id
;
return
_id
;
}
}
...
@@ -97,20 +113,4 @@ public class RoomSubscription extends RealmObject {
...
@@ -97,20 +113,4 @@ public class RoomSubscription extends RealmObject {
public
void
setLs
(
long
ls
)
{
public
void
setLs
(
long
ls
)
{
this
.
ls
=
ls
;
this
.
ls
=
ls
;
}
}
public
static
JSONObject
customizeJson
(
JSONObject
roomSubscriptionJson
)
throws
JSONException
{
if
(!
roomSubscriptionJson
.
isNull
(
"ls"
))
{
long
ls
=
roomSubscriptionJson
.
getJSONObject
(
"ls"
).
getLong
(
"$date"
);
roomSubscriptionJson
.
remove
(
"ls"
);
roomSubscriptionJson
.
put
(
"ls"
,
ls
);
}
if
(!
roomSubscriptionJson
.
isNull
(
"_updatedAt"
))
{
long
updatedAt
=
roomSubscriptionJson
.
getJSONObject
(
"_updatedAt"
).
getLong
(
"$date"
);
roomSubscriptionJson
.
remove
(
"_updatedAt"
);
roomSubscriptionJson
.
put
(
"_updatedAt"
,
updatedAt
);
}
return
roomSubscriptionJson
;
}
}
}
app/src/main/java/chat/rocket/android/model/ddp/User.java
View file @
9c34af88
...
@@ -23,6 +23,10 @@ public class User extends RealmObject {
...
@@ -23,6 +23,10 @@ public class User extends RealmObject {
private
double
utcOffset
;
private
double
utcOffset
;
private
RealmList
<
Email
>
emails
;
private
RealmList
<
Email
>
emails
;
public
static
RealmQuery
<
User
>
queryCurrentUser
(
Realm
realm
)
{
return
realm
.
where
(
User
.
class
).
isNotEmpty
(
"emails"
);
}
public
String
get_id
()
{
public
String
get_id
()
{
return
_id
;
return
_id
;
}
}
...
@@ -62,8 +66,4 @@ public class User extends RealmObject {
...
@@ -62,8 +66,4 @@ public class User extends RealmObject {
public
void
setEmails
(
RealmList
<
Email
>
emails
)
{
public
void
setEmails
(
RealmList
<
Email
>
emails
)
{
this
.
emails
=
emails
;
this
.
emails
=
emails
;
}
}
public
static
RealmQuery
<
User
>
queryCurrentUser
(
Realm
realm
)
{
return
realm
.
where
(
User
.
class
).
isNotEmpty
(
"emails"
);
}
}
}
app/src/main/java/chat/rocket/android/model/internal/MethodCall.java
View file @
9c34af88
...
@@ -2,6 +2,12 @@ package chat.rocket.android.model.internal;
...
@@ -2,6 +2,12 @@ package chat.rocket.android.model.internal;
import
android.content.Context
;
import
android.content.Context
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.Nullable
;
import
io.realm.RealmObject
;
import
io.realm.annotations.PrimaryKey
;
import
org.json.JSONObject
;
import
java.util.HashMap
;
import
java.util.UUID
;
import
bolts.Task
;
import
bolts.Task
;
import
bolts.TaskCompletionSource
;
import
bolts.TaskCompletionSource
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.LogcatIfError
;
...
@@ -11,14 +17,10 @@ import chat.rocket.android.model.SyncState;
...
@@ -11,14 +17,10 @@ import chat.rocket.android.model.SyncState;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmObjectObserver
;
import
chat.rocket.android.realm_helper.RealmObjectObserver
;
import
chat.rocket.android.service.RocketChatService
;
import
chat.rocket.android.service.RocketChatService
;
import
io.realm.RealmObject
;
import
io.realm.annotations.PrimaryKey
;
import
java.util.HashMap
;
import
java.util.UUID
;
import
org.json.JSONObject
;
public
class
MethodCall
extends
RealmObject
{
public
class
MethodCall
extends
RealmObject
{
private
static
final
HashMap
<
String
,
RealmObjectObserver
<
MethodCall
>>
REF_MAP
=
new
HashMap
<>();
@PrimaryKey
private
String
methodCallId
;
@PrimaryKey
private
String
methodCallId
;
private
int
syncstate
;
private
int
syncstate
;
private
String
name
;
private
String
name
;
...
@@ -26,77 +28,12 @@ public class MethodCall extends RealmObject {
...
@@ -26,77 +28,12 @@ public class MethodCall extends RealmObject {
private
String
resultJson
;
private
String
resultJson
;
private
long
timeout
;
private
long
timeout
;
public
String
getMethodCallId
()
{
return
methodCallId
;
}
public
void
setMethodCallId
(
String
methodCallId
)
{
this
.
methodCallId
=
methodCallId
;
}
public
int
getSyncstate
()
{
return
syncstate
;
}
public
void
setSyncstate
(
int
syncstate
)
{
this
.
syncstate
=
syncstate
;
}
public
String
getName
()
{
return
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
String
getParamsJson
()
{
return
paramsJson
;
}
public
void
setParamsJson
(
String
paramsJson
)
{
this
.
paramsJson
=
paramsJson
;
}
public
String
getResultJson
()
{
return
resultJson
;
}
public
void
setResultJson
(
String
resultJson
)
{
this
.
resultJson
=
resultJson
;
}
public
long
getTimeout
()
{
return
timeout
;
}
public
void
setTimeout
(
long
timeout
)
{
this
.
timeout
=
timeout
;
}
public
static
class
Error
extends
Exception
{
public
Error
(
String
message
)
{
super
(
message
);
}
public
Error
(
Throwable
exception
)
{
super
(
exception
);
}
}
public
static
class
Timeout
extends
Exception
{
public
Timeout
()
{
super
(
"MethodCall.Timeout"
);
}
}
private
static
final
HashMap
<
String
,
RealmObjectObserver
<
MethodCall
>>
REF_MAP
=
new
HashMap
<>();
/**
/**
* insert a new record to request a method call.
* insert a new record to request a method call.
*/
*/
public
static
Task
<
String
>
execute
(
@Nullable
final
Context
context
,
public
static
Task
<
String
>
execute
(
@Nullable
final
Context
context
,
RealmHelper
realmHelper
,
String
name
,
String
paramsJson
,
long
timeout
)
{
RealmHelper
realmHelper
,
String
name
,
String
paramsJson
,
long
timeout
)
{
final
String
newId
=
UUID
.
randomUUID
().
toString
();
final
String
newId
=
UUID
.
randomUUID
().
toString
();
TaskCompletionSource
<
String
>
task
=
new
TaskCompletionSource
<>();
TaskCompletionSource
<
String
>
task
=
new
TaskCompletionSource
<>();
realmHelper
.
executeTransaction
(
realm
->
{
realmHelper
.
executeTransaction
(
realm
->
{
...
@@ -156,4 +93,68 @@ public class MethodCall extends RealmObject {
...
@@ -156,4 +93,68 @@ public class MethodCall extends RealmObject {
.
findAll
()
.
findAll
()
.
deleteAllFromRealm
());
.
deleteAllFromRealm
());
}
}
public
String
getMethodCallId
()
{
return
methodCallId
;
}
public
void
setMethodCallId
(
String
methodCallId
)
{
this
.
methodCallId
=
methodCallId
;
}
public
int
getSyncstate
()
{
return
syncstate
;
}
public
void
setSyncstate
(
int
syncstate
)
{
this
.
syncstate
=
syncstate
;
}
public
String
getName
()
{
return
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
String
getParamsJson
()
{
return
paramsJson
;
}
public
void
setParamsJson
(
String
paramsJson
)
{
this
.
paramsJson
=
paramsJson
;
}
public
String
getResultJson
()
{
return
resultJson
;
}
public
void
setResultJson
(
String
resultJson
)
{
this
.
resultJson
=
resultJson
;
}
public
long
getTimeout
()
{
return
timeout
;
}
public
void
setTimeout
(
long
timeout
)
{
this
.
timeout
=
timeout
;
}
public
static
class
Error
extends
Exception
{
public
Error
(
String
message
)
{
super
(
message
);
}
public
Error
(
Throwable
exception
)
{
super
(
exception
);
}
}
public
static
class
Timeout
extends
Exception
{
public
Timeout
()
{
super
(
"MethodCall.Timeout"
);
}
}
}
}
app/src/main/java/chat/rocket/android/model/internal/Session.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
model
.
internal
;
package
chat
.
rocket
.
android
.
model
.
internal
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
hugo.weaving.DebugLog
;
import
io.realm.Realm
;
import
io.realm.Realm
;
import
io.realm.RealmObject
;
import
io.realm.RealmObject
;
import
io.realm.RealmQuery
;
import
io.realm.RealmQuery
;
import
io.realm.annotations.PrimaryKey
;
import
io.realm.annotations.PrimaryKey
;
import
org.json.JSONObject
;
import
org.json.JSONObject
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
hugo.weaving.DebugLog
;
/**
/**
* Login session info.
* Login session info.
*/
*/
...
@@ -20,6 +21,31 @@ public class Session extends RealmObject {
...
@@ -20,6 +21,31 @@ public class Session extends RealmObject {
private
boolean
tokenVerified
;
private
boolean
tokenVerified
;
private
String
error
;
private
String
error
;
public
static
RealmQuery
<
Session
>
queryDefaultSession
(
Realm
realm
)
{
return
realm
.
where
(
Session
.
class
).
equalTo
(
"sessionId"
,
Session
.
DEFAULT_ID
);
}
/**
* Log the server connection is lost due to soem exception.
*/
@DebugLog
public
static
void
logError
(
RealmHelper
realmHelper
,
Exception
exception
)
{
String
errString
=
exception
.
getMessage
();
if
(!
TextUtils
.
isEmpty
(
errString
)
&&
errString
.
contains
(
"[403]"
))
{
realmHelper
.
executeTransaction
(
realm
->
{
realm
.
delete
(
Session
.
class
);
return
null
;
}).
continueWith
(
new
LogcatIfError
());
}
else
{
realmHelper
.
executeTransaction
(
realm
->
realm
.
createOrUpdateObjectFromJson
(
Session
.
class
,
new
JSONObject
()
.
put
(
"sessionId"
,
Session
.
DEFAULT_ID
)
.
put
(
"tokenVerified"
,
false
)
.
put
(
"error"
,
errString
)))
.
continueWith
(
new
LogcatIfError
());
}
}
public
int
getSessionId
()
{
public
int
getSessionId
()
{
return
sessionId
;
return
sessionId
;
}
}
...
@@ -51,28 +77,4 @@ public class Session extends RealmObject {
...
@@ -51,28 +77,4 @@ public class Session extends RealmObject {
public
void
setError
(
String
error
)
{
public
void
setError
(
String
error
)
{
this
.
error
=
error
;
this
.
error
=
error
;
}
}
public
static
RealmQuery
<
Session
>
queryDefaultSession
(
Realm
realm
)
{
return
realm
.
where
(
Session
.
class
).
equalTo
(
"sessionId"
,
Session
.
DEFAULT_ID
);
}
/**
* Log the server connection is lost due to soem exception.
*/
@DebugLog
public
static
void
logError
(
RealmHelper
realmHelper
,
Exception
exception
)
{
String
errString
=
exception
.
getMessage
();
if
(!
TextUtils
.
isEmpty
(
errString
)
&&
errString
.
contains
(
"[403]"
))
{
realmHelper
.
executeTransaction
(
realm
->
{
realm
.
delete
(
Session
.
class
);
return
null
;
}).
continueWith
(
new
LogcatIfError
());
}
else
{
realmHelper
.
executeTransaction
(
realm
->
realm
.
createOrUpdateObjectFromJson
(
Session
.
class
,
new
JSONObject
()
.
put
(
"sessionId"
,
Session
.
DEFAULT_ID
)
.
put
(
"tokenVerified"
,
false
)
.
put
(
"error"
,
errString
)))
.
continueWith
(
new
LogcatIfError
());
}
}
}
}
app/src/main/java/chat/rocket/android/renderer/AbstractRenderer.java
View file @
9c34af88
...
@@ -2,6 +2,7 @@ package chat.rocket.android.renderer;
...
@@ -2,6 +2,7 @@ package chat.rocket.android.renderer;
import
android.content.Context
;
import
android.content.Context
;
import
android.view.View
;
import
android.view.View
;
import
chat.rocket.android.renderer.optional.Condition
;
import
chat.rocket.android.renderer.optional.Condition
;
import
chat.rocket.android.renderer.optional.Optional
;
import
chat.rocket.android.renderer.optional.Optional
;
...
...
app/src/main/java/chat/rocket/android/renderer/FileUploadingRenderer.java
View file @
9c34af88
...
@@ -3,6 +3,7 @@ package chat.rocket.android.renderer;
...
@@ -3,6 +3,7 @@ package chat.rocket.android.renderer;
import
android.content.Context
;
import
android.content.Context
;
import
android.widget.ProgressBar
;
import
android.widget.ProgressBar
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
chat.rocket.android.model.internal.FileUploading
;
import
chat.rocket.android.model.internal.FileUploading
;
/**
/**
...
@@ -43,11 +44,11 @@ public class FileUploadingRenderer extends AbstractRenderer<FileUploading> {
...
@@ -43,11 +44,11 @@ public class FileUploadingRenderer extends AbstractRenderer<FileUploading> {
uploadedSizeText
.
setText
(
String
.
format
(
"%,d"
,
uploaded
));
uploadedSizeText
.
setText
(
String
.
format
(
"%,d"
,
uploaded
));
totalSizeText
.
setText
(
String
.
format
(
"%,d"
,
total
));
totalSizeText
.
setText
(
String
.
format
(
"%,d"
,
total
));
}
else
if
(
total
<
8
*
1048576
)
{
//<8MB
}
else
if
(
total
<
8
*
1048576
)
{
//<8MB
uploadedSizeText
.
setText
(
String
.
format
(
"%,d"
,
uploaded
/
1024
));
uploadedSizeText
.
setText
(
String
.
format
(
"%,d"
,
uploaded
/
1024
));
totalSizeText
.
setText
(
String
.
format
(
"%,d KB"
,
total
/
1024
));
totalSizeText
.
setText
(
String
.
format
(
"%,d KB"
,
total
/
1024
));
}
else
{
}
else
{
uploadedSizeText
.
setText
(
String
.
format
(
"%,d"
,
uploaded
/
1048576
));
uploadedSizeText
.
setText
(
String
.
format
(
"%,d"
,
uploaded
/
1048576
));
totalSizeText
.
setText
(
String
.
format
(
"%,d MB"
,
total
/
1048576
));
totalSizeText
.
setText
(
String
.
format
(
"%,d MB"
,
total
/
1048576
));
}
}
return
this
;
return
this
;
...
...
app/src/main/java/chat/rocket/android/renderer/MessageRenderer.java
View file @
9c34af88
...
@@ -4,6 +4,7 @@ import android.content.Context;
...
@@ -4,6 +4,7 @@ import android.content.Context;
import
android.view.View
;
import
android.view.View
;
import
android.widget.ImageView
;
import
android.widget.ImageView
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.helper.DateTime
;
import
chat.rocket.android.helper.DateTime
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.TextUtils
;
...
...
app/src/main/java/chat/rocket/android/renderer/UserRenderer.java
View file @
9c34af88
...
@@ -3,6 +3,7 @@ package chat.rocket.android.renderer;
...
@@ -3,6 +3,7 @@ package chat.rocket.android.renderer;
import
android.content.Context
;
import
android.content.Context
;
import
android.widget.ImageView
;
import
android.widget.ImageView
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.helper.Avatar
;
import
chat.rocket.android.helper.Avatar
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.TextUtils
;
...
...
app/src/main/java/chat/rocket/android/renderer/optional/ViewVisibilityOptional.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
renderer
.
optional
;
package
chat
.
rocket
.
android
.
renderer
.
optional
;
import
android.view.View
;
import
android.view.View
;
import
java.util.HashMap
;
import
java.util.HashMap
;
public
class
ViewVisibilityOptional
extends
HashMap
<
String
,
View
>
implements
Optional
{
public
class
ViewVisibilityOptional
extends
HashMap
<
String
,
View
>
implements
Optional
{
@Override
public
void
onDataExists
(
String
key
)
{
@Override
public
void
onDataExists
(
String
key
)
{
if
(
containsKey
(
key
))
{
if
(
containsKey
(
key
))
{
get
(
key
).
setVisibility
(
View
.
VISIBLE
);
get
(
key
).
setVisibility
(
View
.
VISIBLE
);
}
}
}
}
@Override
public
void
onNoData
(
String
key
)
{
@Override
public
void
onNoData
(
String
key
)
{
if
(
containsKey
(
key
))
{
if
(
containsKey
(
key
))
{
get
(
key
).
setVisibility
(
View
.
GONE
);
get
(
key
).
setVisibility
(
View
.
GONE
);
}
}
...
...
app/src/main/java/chat/rocket/android/service/RocketChatService.java
View file @
9c34af88
...
@@ -5,15 +5,16 @@ import android.content.Context;
...
@@ -5,15 +5,16 @@ import android.content.Context;
import
android.content.Intent
;
import
android.content.Intent
;
import
android.os.IBinder
;
import
android.os.IBinder
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.Nullable
;
import
io.realm.RealmResults
;
import
java.util.HashMap
;
import
java.util.List
;
import
bolts.Task
;
import
bolts.Task
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.model.ServerConfig
;
import
chat.rocket.android.model.ServerConfig
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmListObserver
;
import
chat.rocket.android.realm_helper.RealmListObserver
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
io.realm.RealmResults
;
import
java.util.HashMap
;
import
java.util.List
;
/**
/**
* Background service for Rocket.Chat.Application class.
* Background service for Rocket.Chat.Application class.
...
@@ -31,7 +32,8 @@ public class RocketChatService extends Service {
...
@@ -31,7 +32,8 @@ public class RocketChatService extends Service {
context
.
startService
(
new
Intent
(
context
,
RocketChatService
.
class
));
context
.
startService
(
new
Intent
(
context
,
RocketChatService
.
class
));
}
}
@Override
public
void
onCreate
()
{
@Override
public
void
onCreate
()
{
super
.
onCreate
();
super
.
onCreate
();
webSocketThreads
=
new
HashMap
<>();
webSocketThreads
=
new
HashMap
<>();
realmHelper
=
RealmStore
.
getDefault
();
realmHelper
=
RealmStore
.
getDefault
();
...
@@ -50,19 +52,21 @@ public class RocketChatService extends Service {
...
@@ -50,19 +52,21 @@ public class RocketChatService extends Service {
RealmResults
<
ServerConfig
>
configs
=
realm
.
where
(
ServerConfig
.
class
)
RealmResults
<
ServerConfig
>
configs
=
realm
.
where
(
ServerConfig
.
class
)
.
notEqualTo
(
"state"
,
ServerConfig
.
STATE_READY
)
.
notEqualTo
(
"state"
,
ServerConfig
.
STATE_READY
)
.
findAll
();
.
findAll
();
for
(
ServerConfig
config:
configs
)
{
for
(
ServerConfig
config
:
configs
)
{
config
.
setState
(
ServerConfig
.
STATE_READY
);
config
.
setState
(
ServerConfig
.
STATE_READY
);
}
}
return
null
;
return
null
;
}).
continueWith
(
new
LogcatIfError
());;
}).
continueWith
(
new
LogcatIfError
());
;
}
}
@Override
public
int
onStartCommand
(
Intent
intent
,
int
flags
,
int
startId
)
{
@Override
public
int
onStartCommand
(
Intent
intent
,
int
flags
,
int
startId
)
{
List
<
ServerConfig
>
configs
=
realmHelper
.
executeTransactionForReadResults
(
realm
->
List
<
ServerConfig
>
configs
=
realmHelper
.
executeTransactionForReadResults
(
realm
->
realm
.
where
(
ServerConfig
.
class
)
realm
.
where
(
ServerConfig
.
class
)
.
equalTo
(
"state"
,
ServerConfig
.
STATE_CONNECTED
)
.
equalTo
(
"state"
,
ServerConfig
.
STATE_CONNECTED
)
.
findAll
());
.
findAll
());
for
(
ServerConfig
config:
configs
)
{
for
(
ServerConfig
config
:
configs
)
{
String
serverConfigId
=
config
.
getServerConfigId
();
String
serverConfigId
=
config
.
getServerConfigId
();
if
(
webSocketThreads
.
containsKey
(
serverConfigId
))
{
if
(
webSocketThreads
.
containsKey
(
serverConfigId
))
{
RocketChatWebSocketThread
thread
=
webSocketThreads
.
get
(
serverConfigId
);
RocketChatWebSocketThread
thread
=
webSocketThreads
.
get
(
serverConfigId
);
...
@@ -122,7 +126,8 @@ public class RocketChatService extends Service {
...
@@ -122,7 +126,8 @@ public class RocketChatService extends Service {
});
});
}
}
@Override
public
void
onDestroy
()
{
@Override
public
void
onDestroy
()
{
if
(
connectionRequiredServerConfigObserver
!=
null
)
{
if
(
connectionRequiredServerConfigObserver
!=
null
)
{
connectionRequiredServerConfigObserver
.
unsub
();
connectionRequiredServerConfigObserver
.
unsub
();
}
}
...
...
app/src/main/java/chat/rocket/android/service/RocketChatWebSocketThread.java
View file @
9c34af88
...
@@ -3,6 +3,11 @@ package chat.rocket.android.service;
...
@@ -3,6 +3,11 @@ package chat.rocket.android.service;
import
android.content.Context
;
import
android.content.Context
;
import
android.os.Handler
;
import
android.os.Handler
;
import
android.os.HandlerThread
;
import
android.os.HandlerThread
;
import
org.json.JSONObject
;
import
java.lang.reflect.Constructor
;
import
java.util.ArrayList
;
import
java.util.Iterator
;
import
bolts.Continuation
;
import
bolts.Continuation
;
import
bolts.Task
;
import
bolts.Task
;
import
bolts.TaskCompletionSource
;
import
bolts.TaskCompletionSource
;
...
@@ -18,22 +23,18 @@ import chat.rocket.android.service.ddp.base.ActiveUsersSubscriber;
...
@@ -18,22 +23,18 @@ import chat.rocket.android.service.ddp.base.ActiveUsersSubscriber;
import
chat.rocket.android.service.ddp.base.LoginServiceConfigurationSubscriber
;
import
chat.rocket.android.service.ddp.base.LoginServiceConfigurationSubscriber
;
import
chat.rocket.android.service.ddp.base.UserDataSubscriber
;
import
chat.rocket.android.service.ddp.base.UserDataSubscriber
;
import
chat.rocket.android.service.observer.CurrentUserObserver
;
import
chat.rocket.android.service.observer.CurrentUserObserver
;
import
chat.rocket.android.service.observer.
GetUsersOfRoomsProcedure
Observer
;
import
chat.rocket.android.service.observer.
FileUploadingToS3
Observer
;
import
chat.rocket.android.service.observer.FileUploadingWithUfsObserver
;
import
chat.rocket.android.service.observer.FileUploadingWithUfsObserver
;
import
chat.rocket.android.service.observer.GetUsersOfRoomsProcedureObserver
;
import
chat.rocket.android.service.observer.LoadMessageProcedureObserver
;
import
chat.rocket.android.service.observer.LoadMessageProcedureObserver
;
import
chat.rocket.android.service.observer.MethodCallObserver
;
import
chat.rocket.android.service.observer.MethodCallObserver
;
import
chat.rocket.android.service.observer.NewMessageObserver
;
import
chat.rocket.android.service.observer.NewMessageObserver
;
import
chat.rocket.android.service.observer.NotificationItemObserver
;
import
chat.rocket.android.service.observer.NotificationItemObserver
;
import
chat.rocket.android.service.observer.ReactiveNotificationManager
;
import
chat.rocket.android.service.observer.ReactiveNotificationManager
;
import
chat.rocket.android.service.observer.FileUploadingToS3Observer
;
import
chat.rocket.android.service.observer.SessionObserver
;
import
chat.rocket.android.service.observer.SessionObserver
;
import
chat.rocket.android.service.observer.TokenLoginObserver
;
import
chat.rocket.android.service.observer.TokenLoginObserver
;
import
chat.rocket.android_ddp.DDPClientCallback
;
import
chat.rocket.android_ddp.DDPClientCallback
;
import
hugo.weaving.DebugLog
;
import
hugo.weaving.DebugLog
;
import
java.lang.reflect.Constructor
;
import
java.util.ArrayList
;
import
java.util.Iterator
;
import
org.json.JSONObject
;
/**
/**
* Thread for handling WebSocket connection.
* Thread for handling WebSocket connection.
...
@@ -74,11 +75,13 @@ public class RocketChatWebSocketThread extends HandlerThread {
...
@@ -74,11 +75,13 @@ public class RocketChatWebSocketThread extends HandlerThread {
/**
/**
* create new Thread.
* create new Thread.
*/
*/
@DebugLog
public
static
Task
<
RocketChatWebSocketThread
>
getStarted
(
Context
appContext
,
@DebugLog
public
static
Task
<
RocketChatWebSocketThread
>
getStarted
(
Context
appContext
,
ServerConfig
config
)
{
ServerConfig
config
)
{
TaskCompletionSource
<
RocketChatWebSocketThread
>
task
=
new
TaskCompletionSource
<>();
TaskCompletionSource
<
RocketChatWebSocketThread
>
task
=
new
TaskCompletionSource
<>();
new
RocketChatWebSocketThread
(
appContext
,
config
.
getServerConfigId
())
{
new
RocketChatWebSocketThread
(
appContext
,
config
.
getServerConfigId
())
{
@Override
protected
void
onLooperPrepared
()
{
@Override
protected
void
onLooperPrepared
()
{
try
{
try
{
super
.
onLooperPrepared
();
super
.
onLooperPrepared
();
task
.
setResult
(
this
);
task
.
setResult
(
this
);
...
@@ -92,7 +95,16 @@ public class RocketChatWebSocketThread extends HandlerThread {
...
@@ -92,7 +95,16 @@ public class RocketChatWebSocketThread extends HandlerThread {
_task
.
getResult
().
connect
().
onSuccessTask
(
__task
->
_task
));
_task
.
getResult
().
connect
().
onSuccessTask
(
__task
->
_task
));
}
}
@Override
protected
void
onLooperPrepared
()
{
/**
* destroy the thread.
*/
@DebugLog
public
static
void
destroy
(
RocketChatWebSocketThread
thread
)
{
thread
.
quit
();
}
@Override
protected
void
onLooperPrepared
()
{
super
.
onLooperPrepared
();
super
.
onLooperPrepared
();
forceInvalidateTokens
();
forceInvalidateTokens
();
}
}
...
@@ -110,14 +122,8 @@ public class RocketChatWebSocketThread extends HandlerThread {
...
@@ -110,14 +122,8 @@ public class RocketChatWebSocketThread extends HandlerThread {
}).
continueWith
(
new
LogcatIfError
());
}).
continueWith
(
new
LogcatIfError
());
}
}
/**
@Override
* destroy the thread.
public
boolean
quit
()
{
*/
@DebugLog
public
static
void
destroy
(
RocketChatWebSocketThread
thread
)
{
thread
.
quit
();
}
@Override
public
boolean
quit
()
{
if
(
isAlive
())
{
if
(
isAlive
())
{
new
Handler
(
getLooper
()).
post
(()
->
{
new
Handler
(
getLooper
()).
post
(()
->
{
RCLog
.
d
(
"thread %s: quit()"
,
Thread
.
currentThread
().
getId
());
RCLog
.
d
(
"thread %s: quit()"
,
Thread
.
currentThread
().
getId
());
...
@@ -133,7 +139,8 @@ public class RocketChatWebSocketThread extends HandlerThread {
...
@@ -133,7 +139,8 @@ public class RocketChatWebSocketThread extends HandlerThread {
/**
/**
* synchronize the state of the thread with ServerConfig.
* synchronize the state of the thread with ServerConfig.
*/
*/
@DebugLog
public
void
keepalive
()
{
@DebugLog
public
void
keepalive
()
{
if
(
ddpClient
==
null
||
!
ddpClient
.
isConnected
())
{
if
(
ddpClient
==
null
||
!
ddpClient
.
isConnected
())
{
defaultRealm
.
executeTransaction
(
realm
->
{
defaultRealm
.
executeTransaction
(
realm
->
{
ServerConfig
config
=
realm
.
where
(
ServerConfig
.
class
)
ServerConfig
config
=
realm
.
where
(
ServerConfig
.
class
)
...
@@ -154,7 +161,8 @@ public class RocketChatWebSocketThread extends HandlerThread {
...
@@ -154,7 +161,8 @@ public class RocketChatWebSocketThread extends HandlerThread {
}
}
}
}
@DebugLog
private
Task
<
Void
>
connect
()
{
@DebugLog
private
Task
<
Void
>
connect
()
{
final
ServerConfig
config
=
defaultRealm
.
executeTransactionForRead
(
realm
->
final
ServerConfig
config
=
defaultRealm
.
executeTransactionForRead
(
realm
->
realm
.
where
(
ServerConfig
.
class
).
equalTo
(
"serverConfigId"
,
serverConfigId
).
findFirst
());
realm
.
where
(
ServerConfig
.
class
).
equalTo
(
"serverConfigId"
,
serverConfigId
).
findFirst
());
...
@@ -177,7 +185,8 @@ public class RocketChatWebSocketThread extends HandlerThread {
...
@@ -177,7 +185,8 @@ public class RocketChatWebSocketThread extends HandlerThread {
return
task
;
return
task
;
}).
onSuccess
(
new
Continuation
<
DDPClientCallback
.
Connect
,
Object
>()
{
}).
onSuccess
(
new
Continuation
<
DDPClientCallback
.
Connect
,
Object
>()
{
// TODO type detection doesn't work due to retrolambda's bug...
// TODO type detection doesn't work due to retrolambda's bug...
@Override
public
Object
then
(
Task
<
DDPClientCallback
.
Connect
>
task
)
@Override
public
Object
then
(
Task
<
DDPClientCallback
.
Connect
>
task
)
throws
Exception
{
throws
Exception
{
registerListeners
();
registerListeners
();
...
...
app/src/main/java/chat/rocket/android/service/ddp/AbstractDDPDocEventSubscriber.java
View file @
9c34af88
...
@@ -2,18 +2,19 @@ package chat.rocket.android.service.ddp;
...
@@ -2,18 +2,19 @@ package chat.rocket.android.service.ddp;
import
android.content.Context
;
import
android.content.Context
;
import
android.text.TextUtils
;
import
android.text.TextUtils
;
import
io.realm.Realm
;
import
io.realm.RealmObject
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
java.util.Iterator
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.log.RCLog
;
import
chat.rocket.android.log.RCLog
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.service.Registerable
;
import
chat.rocket.android.service.Registerable
;
import
chat.rocket.android_ddp.DDPSubscription
;
import
chat.rocket.android_ddp.DDPSubscription
;
import
io.realm.Realm
;
import
io.realm.RealmObject
;
import
java.util.Iterator
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
rx.Subscription
;
import
rx.Subscription
;
public
abstract
class
AbstractDDPDocEventSubscriber
implements
Registerable
{
public
abstract
class
AbstractDDPDocEventSubscriber
implements
Registerable
{
...
@@ -49,11 +50,14 @@ public abstract class AbstractDDPDocEventSubscriber implements Registerable {
...
@@ -49,11 +50,14 @@ public abstract class AbstractDDPDocEventSubscriber implements Registerable {
return
json
;
return
json
;
}
}
protected
void
onRegister
()
{}
protected
void
onRegister
()
{
}
protected
void
onUnregister
()
{}
protected
void
onUnregister
()
{
}
@Override
public
final
void
register
()
{
@Override
public
final
void
register
()
{
isUnsubscribed
=
false
;
isUnsubscribed
=
false
;
JSONArray
params
=
null
;
JSONArray
params
=
null
;
try
{
try
{
...
@@ -170,7 +174,8 @@ public abstract class AbstractDDPDocEventSubscriber implements Registerable {
...
@@ -170,7 +174,8 @@ public abstract class AbstractDDPDocEventSubscriber implements Registerable {
}
}
}
}
@Override
public
final
void
unregister
()
{
@Override
public
final
void
unregister
()
{
isUnsubscribed
=
true
;
isUnsubscribed
=
true
;
onUnregister
();
onUnregister
();
if
(
rxSubscription
!=
null
)
{
if
(
rxSubscription
!=
null
)
{
...
...
app/src/main/java/chat/rocket/android/service/ddp/base/AbstractBaseSubscriber.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
service
.
ddp
.
base
;
package
chat
.
rocket
.
android
.
service
.
ddp
.
base
;
import
android.content.Context
;
import
android.content.Context
;
import
org.json.JSONArray
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.service.ddp.AbstractDDPDocEventSubscriber
;
import
chat.rocket.android.service.ddp.AbstractDDPDocEventSubscriber
;
import
org.json.JSONArray
;
abstract
class
AbstractBaseSubscriber
extends
AbstractDDPDocEventSubscriber
{
abstract
class
AbstractBaseSubscriber
extends
AbstractDDPDocEventSubscriber
{
protected
AbstractBaseSubscriber
(
Context
context
,
String
hostname
,
RealmHelper
realmHelper
,
protected
AbstractBaseSubscriber
(
Context
context
,
String
hostname
,
RealmHelper
realmHelper
,
...
@@ -12,17 +13,20 @@ abstract class AbstractBaseSubscriber extends AbstractDDPDocEventSubscriber {
...
@@ -12,17 +13,20 @@ abstract class AbstractBaseSubscriber extends AbstractDDPDocEventSubscriber {
super
(
context
,
hostname
,
realmHelper
,
ddpClient
);
super
(
context
,
hostname
,
realmHelper
,
ddpClient
);
}
}
@Override
protected
final
JSONArray
getSubscriptionParams
()
{
@Override
protected
final
JSONArray
getSubscriptionParams
()
{
return
null
;
return
null
;
}
}
@Override
protected
final
boolean
shouldTruncateTableOnInitialize
()
{
@Override
protected
final
boolean
shouldTruncateTableOnInitialize
()
{
return
true
;
return
true
;
}
}
protected
abstract
String
getSubscriptionCallbackName
();
protected
abstract
String
getSubscriptionCallbackName
();
@Override
protected
final
boolean
isTarget
(
String
callbackName
)
{
@Override
protected
final
boolean
isTarget
(
String
callbackName
)
{
return
getSubscriptionCallbackName
().
equals
(
callbackName
);
return
getSubscriptionCallbackName
().
equals
(
callbackName
);
}
}
}
}
app/src/main/java/chat/rocket/android/service/ddp/base/ActiveUsersSubscriber.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
service
.
ddp
.
base
;
package
chat
.
rocket
.
android
.
service
.
ddp
.
base
;
import
android.content.Context
;
import
android.content.Context
;
import
io.realm.RealmObject
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.model.ddp.User
;
import
chat.rocket.android.model.ddp.User
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.api.DDPClientWraper
;
import
io.realm.RealmObject
;
/**
/**
* "activeUsers" subscriber.
* "activeUsers" subscriber.
...
@@ -15,15 +16,18 @@ public class ActiveUsersSubscriber extends AbstractBaseSubscriber {
...
@@ -15,15 +16,18 @@ public class ActiveUsersSubscriber extends AbstractBaseSubscriber {
super
(
context
,
hostname
,
realmHelper
,
ddpClient
);
super
(
context
,
hostname
,
realmHelper
,
ddpClient
);
}
}
@Override
protected
String
getSubscriptionName
()
{
@Override
protected
String
getSubscriptionName
()
{
return
"activeUsers"
;
return
"activeUsers"
;
}
}
@Override
protected
String
getSubscriptionCallbackName
()
{
@Override
protected
String
getSubscriptionCallbackName
()
{
return
"users"
;
return
"users"
;
}
}
@Override
protected
Class
<?
extends
RealmObject
>
getModelClass
()
{
@Override
protected
Class
<?
extends
RealmObject
>
getModelClass
()
{
return
User
.
class
;
return
User
.
class
;
}
}
}
}
app/src/main/java/chat/rocket/android/service/ddp/base/LoginServiceConfigurationSubscriber.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
service
.
ddp
.
base
;
package
chat
.
rocket
.
android
.
service
.
ddp
.
base
;
import
android.content.Context
;
import
android.content.Context
;
import
io.realm.RealmObject
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.model.ddp.MeteorLoginServiceConfiguration
;
import
chat.rocket.android.model.ddp.MeteorLoginServiceConfiguration
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.api.DDPClientWraper
;
import
io.realm.RealmObject
;
/**
/**
* meteor.loginServiceConfiguration subscriber
* meteor.loginServiceConfiguration subscriber
...
@@ -15,15 +16,18 @@ public class LoginServiceConfigurationSubscriber extends AbstractBaseSubscriber
...
@@ -15,15 +16,18 @@ public class LoginServiceConfigurationSubscriber extends AbstractBaseSubscriber
super
(
context
,
hostname
,
realmHelper
,
ddpClient
);
super
(
context
,
hostname
,
realmHelper
,
ddpClient
);
}
}
@Override
protected
String
getSubscriptionName
()
{
@Override
protected
String
getSubscriptionName
()
{
return
"meteor.loginServiceConfiguration"
;
return
"meteor.loginServiceConfiguration"
;
}
}
@Override
protected
String
getSubscriptionCallbackName
()
{
@Override
protected
String
getSubscriptionCallbackName
()
{
return
"meteor_accounts_loginServiceConfiguration"
;
return
"meteor_accounts_loginServiceConfiguration"
;
}
}
@Override
protected
Class
<?
extends
RealmObject
>
getModelClass
()
{
@Override
protected
Class
<?
extends
RealmObject
>
getModelClass
()
{
return
MeteorLoginServiceConfiguration
.
class
;
return
MeteorLoginServiceConfiguration
.
class
;
}
}
}
}
app/src/main/java/chat/rocket/android/service/ddp/base/UserDataSubscriber.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
service
.
ddp
.
base
;
package
chat
.
rocket
.
android
.
service
.
ddp
.
base
;
import
android.content.Context
;
import
android.content.Context
;
import
io.realm.RealmObject
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.model.ddp.User
;
import
chat.rocket.android.model.ddp.User
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
io.realm.RealmObject
;
/**
/**
* "userData" subscriber.
* "userData" subscriber.
...
@@ -15,15 +16,18 @@ public class UserDataSubscriber extends AbstractBaseSubscriber {
...
@@ -15,15 +16,18 @@ public class UserDataSubscriber extends AbstractBaseSubscriber {
super
(
context
,
hostname
,
realmHelper
,
ddpClient
);
super
(
context
,
hostname
,
realmHelper
,
ddpClient
);
}
}
@Override
protected
String
getSubscriptionName
()
{
@Override
protected
String
getSubscriptionName
()
{
return
"userData"
;
return
"userData"
;
}
}
@Override
protected
String
getSubscriptionCallbackName
()
{
@Override
protected
String
getSubscriptionCallbackName
()
{
return
"users"
;
return
"users"
;
}
}
@Override
protected
Class
<?
extends
RealmObject
>
getModelClass
()
{
@Override
protected
Class
<?
extends
RealmObject
>
getModelClass
()
{
return
User
.
class
;
return
User
.
class
;
}
}
}
}
app/src/main/java/chat/rocket/android/service/ddp/stream/AbstractStreamNotifyEventSubscriber.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
service
.
ddp
.
stream
;
package
chat
.
rocket
.
android
.
service
.
ddp
.
stream
;
import
android.content.Context
;
import
android.content.Context
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.log.RCLog
;
import
chat.rocket.android.log.RCLog
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.service.ddp.AbstractDDPDocEventSubscriber
;
import
chat.rocket.android.service.ddp.AbstractDDPDocEventSubscriber
;
import
chat.rocket.android_ddp.DDPSubscription
;
import
chat.rocket.android_ddp.DDPSubscription
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
abstract
class
AbstractStreamNotifyEventSubscriber
extends
AbstractDDPDocEventSubscriber
{
abstract
class
AbstractStreamNotifyEventSubscriber
extends
AbstractDDPDocEventSubscriber
{
protected
AbstractStreamNotifyEventSubscriber
(
Context
context
,
String
hostname
,
protected
AbstractStreamNotifyEventSubscriber
(
Context
context
,
String
hostname
,
RealmHelper
realmHelper
,
DDPClientWraper
ddpClient
)
{
RealmHelper
realmHelper
,
DDPClientWraper
ddpClient
)
{
super
(
context
,
hostname
,
realmHelper
,
ddpClient
);
super
(
context
,
hostname
,
realmHelper
,
ddpClient
);
}
}
@Override
protected
final
boolean
shouldTruncateTableOnInitialize
()
{
@Override
protected
final
boolean
shouldTruncateTableOnInitialize
()
{
return
false
;
return
false
;
}
}
@Override
protected
final
boolean
isTarget
(
String
callbackName
)
{
@Override
protected
final
boolean
isTarget
(
String
callbackName
)
{
return
getSubscriptionName
().
equals
(
callbackName
);
return
getSubscriptionName
().
equals
(
callbackName
);
}
}
protected
abstract
String
getSubscriptionParam
();
protected
abstract
String
getSubscriptionParam
();
@Override
protected
final
JSONArray
getSubscriptionParams
()
throws
JSONException
{
@Override
protected
final
JSONArray
getSubscriptionParams
()
throws
JSONException
{
return
new
JSONArray
().
put
(
getSubscriptionParam
()).
put
(
false
);
return
new
JSONArray
().
put
(
getSubscriptionParam
()).
put
(
false
);
}
}
protected
abstract
String
getPrimaryKeyForModel
();
protected
abstract
String
getPrimaryKeyForModel
();
@Override
protected
final
void
onDocumentAdded
(
DDPSubscription
.
Added
docEvent
)
{
@Override
protected
final
void
onDocumentAdded
(
DDPSubscription
.
Added
docEvent
)
{
// do nothing.
// do nothing.
}
}
@Override
protected
final
void
onDocumentRemoved
(
DDPSubscription
.
Removed
docEvent
)
{
@Override
protected
final
void
onDocumentRemoved
(
DDPSubscription
.
Removed
docEvent
)
{
// do nothing.
// do nothing.
}
}
@Override
protected
final
void
onDocumentChanged
(
DDPSubscription
.
Changed
docEvent
)
{
@Override
protected
final
void
onDocumentChanged
(
DDPSubscription
.
Changed
docEvent
)
{
try
{
try
{
if
(!
docEvent
.
fields
.
getString
(
"eventName"
).
equals
(
getSubscriptionParam
()))
{
if
(!
docEvent
.
fields
.
getString
(
"eventName"
).
equals
(
getSubscriptionParam
()))
{
return
;
return
;
...
...
app/src/main/java/chat/rocket/android/service/ddp/stream/AbstractStreamNotifyUserEventSubscriber.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
service
.
ddp
.
stream
;
package
chat
.
rocket
.
android
.
service
.
ddp
.
stream
;
import
android.content.Context
;
import
android.content.Context
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
abstract
class
AbstractStreamNotifyUserEventSubscriber
extends
AbstractStreamNotifyEventSubscriber
{
abstract
class
AbstractStreamNotifyUserEventSubscriber
extends
AbstractStreamNotifyEventSubscriber
{
protected
final
String
userId
;
protected
final
String
userId
;
protected
AbstractStreamNotifyUserEventSubscriber
(
Context
context
,
String
hostname
,
protected
AbstractStreamNotifyUserEventSubscriber
(
Context
context
,
String
hostname
,
RealmHelper
realmHelper
,
DDPClientWraper
ddpClient
,
String
userId
)
{
RealmHelper
realmHelper
,
DDPClientWraper
ddpClient
,
String
userId
)
{
super
(
context
,
hostname
,
realmHelper
,
ddpClient
);
super
(
context
,
hostname
,
realmHelper
,
ddpClient
);
this
.
userId
=
userId
;
this
.
userId
=
userId
;
}
}
@Override
protected
final
String
getSubscriptionName
()
{
@Override
protected
final
String
getSubscriptionName
()
{
return
"stream-notify-user"
;
return
"stream-notify-user"
;
}
}
@Override
protected
final
String
getSubscriptionParam
()
{
@Override
protected
final
String
getSubscriptionParam
()
{
return
userId
+
"/"
+
getSubscriptionSubParam
();
return
userId
+
"/"
+
getSubscriptionSubParam
();
}
}
...
...
app/src/main/java/chat/rocket/android/service/ddp/stream/StreamNotifyUserSubscriptionsChanged.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
service
.
ddp
.
stream
;
package
chat
.
rocket
.
android
.
service
.
ddp
.
stream
;
import
android.content.Context
;
import
android.content.Context
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.model.ddp.RoomSubscription
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
io.realm.RealmObject
;
import
io.realm.RealmObject
;
import
org.json.JSONException
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
org.json.JSONObject
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.model.ddp.RoomSubscription
;
import
chat.rocket.android.realm_helper.RealmHelper
;
public
class
StreamNotifyUserSubscriptionsChanged
extends
AbstractStreamNotifyUserEventSubscriber
{
public
class
StreamNotifyUserSubscriptionsChanged
extends
AbstractStreamNotifyUserEventSubscriber
{
public
StreamNotifyUserSubscriptionsChanged
(
Context
context
,
String
hostname
,
public
StreamNotifyUserSubscriptionsChanged
(
Context
context
,
String
hostname
,
RealmHelper
realmHelper
,
DDPClientWraper
ddpClient
,
String
userId
)
{
RealmHelper
realmHelper
,
DDPClientWraper
ddpClient
,
String
userId
)
{
super
(
context
,
hostname
,
realmHelper
,
ddpClient
,
userId
);
super
(
context
,
hostname
,
realmHelper
,
ddpClient
,
userId
);
}
}
@Override
protected
String
getSubscriptionSubParam
()
{
@Override
protected
String
getSubscriptionSubParam
()
{
return
"subscriptions-changed"
;
return
"subscriptions-changed"
;
}
}
@Override
protected
Class
<?
extends
RealmObject
>
getModelClass
()
{
@Override
protected
Class
<?
extends
RealmObject
>
getModelClass
()
{
return
RoomSubscription
.
class
;
return
RoomSubscription
.
class
;
}
}
@Override
protected
JSONObject
customizeFieldJson
(
JSONObject
json
)
throws
JSONException
{
@Override
protected
JSONObject
customizeFieldJson
(
JSONObject
json
)
throws
JSONException
{
return
RoomSubscription
.
customizeJson
(
super
.
customizeFieldJson
(
json
));
return
RoomSubscription
.
customizeJson
(
super
.
customizeFieldJson
(
json
));
}
}
@Override
protected
String
getPrimaryKeyForModel
()
{
@Override
protected
String
getPrimaryKeyForModel
()
{
return
"rid"
;
return
"rid"
;
}
}
}
}
app/src/main/java/chat/rocket/android/service/ddp/stream/StreamRoomMessage.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
service
.
ddp
.
stream
;
package
chat
.
rocket
.
android
.
service
.
ddp
.
stream
;
import
android.content.Context
;
import
android.content.Context
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.model.ddp.Message
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
io.realm.RealmObject
;
import
io.realm.RealmObject
;
import
org.json.JSONException
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
org.json.JSONObject
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.model.ddp.Message
;
import
chat.rocket.android.realm_helper.RealmHelper
;
/**
/**
* stream-room-message subscriber.
* stream-room-message subscriber.
*/
*/
...
@@ -20,23 +21,28 @@ public class StreamRoomMessage extends AbstractStreamNotifyEventSubscriber {
...
@@ -20,23 +21,28 @@ public class StreamRoomMessage extends AbstractStreamNotifyEventSubscriber {
this
.
roomId
=
roomId
;
this
.
roomId
=
roomId
;
}
}
@Override
protected
String
getSubscriptionName
()
{
@Override
protected
String
getSubscriptionName
()
{
return
"stream-room-messages"
;
return
"stream-room-messages"
;
}
}
@Override
protected
String
getSubscriptionParam
()
{
@Override
protected
String
getSubscriptionParam
()
{
return
roomId
;
return
roomId
;
}
}
@Override
protected
Class
<?
extends
RealmObject
>
getModelClass
()
{
@Override
protected
Class
<?
extends
RealmObject
>
getModelClass
()
{
return
Message
.
class
;
return
Message
.
class
;
}
}
@Override
protected
String
getPrimaryKeyForModel
()
{
@Override
protected
String
getPrimaryKeyForModel
()
{
return
"_id"
;
return
"_id"
;
}
}
@Override
protected
JSONObject
customizeFieldJson
(
JSONObject
json
)
throws
JSONException
{
@Override
protected
JSONObject
customizeFieldJson
(
JSONObject
json
)
throws
JSONException
{
return
Message
.
customizeJson
(
super
.
customizeFieldJson
(
json
));
return
Message
.
customizeJson
(
super
.
customizeFieldJson
(
json
));
}
}
}
}
app/src/main/java/chat/rocket/android/service/internal/AbstractRocketChatCacheObserver.java
View file @
9c34af88
...
@@ -2,6 +2,7 @@ package chat.rocket.android.service.internal;
...
@@ -2,6 +2,7 @@ package chat.rocket.android.service.internal;
import
android.content.Context
;
import
android.content.Context
;
import
android.content.SharedPreferences
;
import
android.content.SharedPreferences
;
import
chat.rocket.android.RocketChatCache
;
import
chat.rocket.android.RocketChatCache
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.helper.TextUtils
;
import
chat.rocket.android.model.ddp.RoomSubscription
;
import
chat.rocket.android.model.ddp.RoomSubscription
;
...
@@ -12,6 +13,12 @@ public abstract class AbstractRocketChatCacheObserver implements Registerable {
...
@@ -12,6 +13,12 @@ public abstract class AbstractRocketChatCacheObserver implements Registerable {
private
final
Context
context
;
private
final
Context
context
;
private
final
RealmHelper
realmHelper
;
private
final
RealmHelper
realmHelper
;
private
String
roomId
;
private
String
roomId
;
private
SharedPreferences
.
OnSharedPreferenceChangeListener
listener
=
(
prefs
,
key
)
->
{
if
(
RocketChatCache
.
KEY_SELECTED_ROOM_ID
.
equals
(
key
))
{
updateRoomIdWith
(
prefs
);
}
};
protected
AbstractRocketChatCacheObserver
(
Context
context
,
RealmHelper
realmHelper
)
{
protected
AbstractRocketChatCacheObserver
(
Context
context
,
RealmHelper
realmHelper
)
{
this
.
context
=
context
;
this
.
context
=
context
;
...
@@ -40,20 +47,15 @@ public abstract class AbstractRocketChatCacheObserver implements Registerable {
...
@@ -40,20 +47,15 @@ public abstract class AbstractRocketChatCacheObserver implements Registerable {
protected
abstract
void
onRoomIdUpdated
(
String
roomId
);
protected
abstract
void
onRoomIdUpdated
(
String
roomId
);
private
SharedPreferences
.
OnSharedPreferenceChangeListener
listener
=
@Override
(
prefs
,
key
)
->
{
public
final
void
register
()
{
if
(
RocketChatCache
.
KEY_SELECTED_ROOM_ID
.
equals
(
key
))
{
updateRoomIdWith
(
prefs
);
}
};
@Override
public
final
void
register
()
{
SharedPreferences
prefs
=
RocketChatCache
.
get
(
context
);
SharedPreferences
prefs
=
RocketChatCache
.
get
(
context
);
prefs
.
registerOnSharedPreferenceChangeListener
(
listener
);
prefs
.
registerOnSharedPreferenceChangeListener
(
listener
);
updateRoomIdWith
(
prefs
);
updateRoomIdWith
(
prefs
);
}
}
@Override
public
final
void
unregister
()
{
@Override
public
final
void
unregister
()
{
RocketChatCache
.
get
(
context
).
unregisterOnSharedPreferenceChangeListener
(
listener
);
RocketChatCache
.
get
(
context
).
unregisterOnSharedPreferenceChangeListener
(
listener
);
}
}
}
}
app/src/main/java/chat/rocket/android/service/internal/StreamRoomMessageManager.java
View file @
9c34af88
...
@@ -3,6 +3,7 @@ package chat.rocket.android.service.internal;
...
@@ -3,6 +3,7 @@ package chat.rocket.android.service.internal;
import
android.content.Context
;
import
android.content.Context
;
import
android.os.Handler
;
import
android.os.Handler
;
import
android.os.Looper
;
import
android.os.Looper
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.service.Registerable
;
import
chat.rocket.android.service.Registerable
;
...
@@ -12,14 +13,13 @@ import chat.rocket.android.service.ddp.stream.StreamRoomMessage;
...
@@ -12,14 +13,13 @@ import chat.rocket.android.service.ddp.stream.StreamRoomMessage;
* wrapper for managing stream-notify-message depending on RocketChatCache.
* wrapper for managing stream-notify-message depending on RocketChatCache.
*/
*/
public
class
StreamRoomMessageManager
implements
Registerable
{
public
class
StreamRoomMessageManager
implements
Registerable
{
private
StreamRoomMessage
streamRoomMessage
;
private
final
Context
context
;
private
final
Context
context
;
private
final
String
hostname
;
private
final
String
hostname
;
private
final
RealmHelper
realmHelper
;
private
final
RealmHelper
realmHelper
;
private
final
DDPClientWraper
ddpClient
;
private
final
DDPClientWraper
ddpClient
;
private
final
AbstractRocketChatCacheObserver
cacheObserver
;
private
final
AbstractRocketChatCacheObserver
cacheObserver
;
private
final
Handler
handler
;
private
final
Handler
handler
;
private
StreamRoomMessage
streamRoomMessage
;
public
StreamRoomMessageManager
(
Context
context
,
String
hostname
,
public
StreamRoomMessageManager
(
Context
context
,
String
hostname
,
RealmHelper
realmHelper
,
DDPClientWraper
ddpClient
)
{
RealmHelper
realmHelper
,
DDPClientWraper
ddpClient
)
{
...
@@ -29,7 +29,8 @@ public class StreamRoomMessageManager implements Registerable {
...
@@ -29,7 +29,8 @@ public class StreamRoomMessageManager implements Registerable {
this
.
ddpClient
=
ddpClient
;
this
.
ddpClient
=
ddpClient
;
cacheObserver
=
new
AbstractRocketChatCacheObserver
(
context
,
realmHelper
)
{
cacheObserver
=
new
AbstractRocketChatCacheObserver
(
context
,
realmHelper
)
{
@Override
protected
void
onRoomIdUpdated
(
String
roomId
)
{
@Override
protected
void
onRoomIdUpdated
(
String
roomId
)
{
unregisterStreamNotifyMessageIfNeeded
();
unregisterStreamNotifyMessageIfNeeded
();
registerStreamNotifyMessage
(
roomId
);
registerStreamNotifyMessage
(
roomId
);
}
}
...
@@ -53,11 +54,13 @@ public class StreamRoomMessageManager implements Registerable {
...
@@ -53,11 +54,13 @@ public class StreamRoomMessageManager implements Registerable {
});
});
}
}
@Override
public
void
register
()
{
@Override
public
void
register
()
{
cacheObserver
.
register
();
cacheObserver
.
register
();
}
}
@Override
public
void
unregister
()
{
@Override
public
void
unregister
()
{
unregisterStreamNotifyMessageIfNeeded
();
unregisterStreamNotifyMessageIfNeeded
();
cacheObserver
.
unregister
();
cacheObserver
.
unregister
();
}
}
...
...
app/src/main/java/chat/rocket/android/service/notification/NotificationDismissalCallbackService.java
View file @
9c34af88
...
@@ -2,6 +2,7 @@ package chat.rocket.android.service.notification;
...
@@ -2,6 +2,7 @@ package chat.rocket.android.service.notification;
import
android.app.IntentService
;
import
android.app.IntentService
;
import
android.content.Intent
;
import
android.content.Intent
;
import
chat.rocket.android.model.internal.NotificationItem
;
import
chat.rocket.android.model.internal.NotificationItem
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
chat.rocket.android.realm_helper.RealmStore
;
...
@@ -14,7 +15,8 @@ public class NotificationDismissalCallbackService extends IntentService {
...
@@ -14,7 +15,8 @@ public class NotificationDismissalCallbackService extends IntentService {
super
(
NotificationDismissalCallbackService
.
class
.
getSimpleName
());
super
(
NotificationDismissalCallbackService
.
class
.
getSimpleName
());
}
}
@Override
protected
void
onHandleIntent
(
Intent
intent
)
{
@Override
protected
void
onHandleIntent
(
Intent
intent
)
{
if
(!
intent
.
hasExtra
(
"serverConfigId"
)
||
!
intent
.
hasExtra
(
"roomId"
))
{
if
(!
intent
.
hasExtra
(
"serverConfigId"
)
||
!
intent
.
hasExtra
(
"roomId"
))
{
return
;
return
;
}
}
...
...
app/src/main/java/chat/rocket/android/service/observer/AbstractModelObserver.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
service
.
observer
;
package
chat
.
rocket
.
android
.
service
.
observer
;
import
android.content.Context
;
import
android.content.Context
;
import
io.realm.RealmObject
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmListObserver
;
import
chat.rocket.android.realm_helper.RealmListObserver
;
import
chat.rocket.android.service.Registerable
;
import
chat.rocket.android.service.Registerable
;
import
chat.rocket.android.api.DDPClientWraper
;
import
io.realm.RealmObject
;
abstract
class
AbstractModelObserver
<
T
extends
RealmObject
>
abstract
class
AbstractModelObserver
<
T
extends
RealmObject
>
implements
Registerable
,
RealmListObserver
.
Query
<
T
>,
RealmListObserver
.
OnUpdateListener
<
T
>
{
implements
Registerable
,
RealmListObserver
.
Query
<
T
>,
RealmListObserver
.
OnUpdateListener
<
T
>
{
...
@@ -25,11 +26,13 @@ abstract class AbstractModelObserver<T extends RealmObject>
...
@@ -25,11 +26,13 @@ abstract class AbstractModelObserver<T extends RealmObject>
observer
=
realmHelper
.
createListObserver
(
this
).
setOnUpdateListener
(
this
);
observer
=
realmHelper
.
createListObserver
(
this
).
setOnUpdateListener
(
this
);
}
}
@Override
public
void
register
()
{
@Override
public
void
register
()
{
observer
.
sub
();
observer
.
sub
();
}
}
@Override
public
void
unregister
()
{
@Override
public
void
unregister
()
{
observer
.
unsub
();
observer
.
unsub
();
}
}
}
}
app/src/main/java/chat/rocket/android/service/observer/CurrentUserObserver.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
service
.
observer
;
package
chat
.
rocket
.
android
.
service
.
observer
;
import
android.content.Context
;
import
android.content.Context
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
java.util.ArrayList
;
import
java.util.List
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.LogcatIfError
;
...
@@ -9,19 +14,13 @@ import chat.rocket.android.realm_helper.RealmHelper;
...
@@ -9,19 +14,13 @@ import chat.rocket.android.realm_helper.RealmHelper;
import
chat.rocket.android.service.Registerable
;
import
chat.rocket.android.service.Registerable
;
import
chat.rocket.android.service.ddp.stream.StreamNotifyUserSubscriptionsChanged
;
import
chat.rocket.android.service.ddp.stream.StreamNotifyUserSubscriptionsChanged
;
import
hugo.weaving.DebugLog
;
import
hugo.weaving.DebugLog
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
/**
* observe the user with emails.
* observe the user with emails.
*/
*/
public
class
CurrentUserObserver
extends
AbstractModelObserver
<
User
>
{
public
class
CurrentUserObserver
extends
AbstractModelObserver
<
User
>
{
private
boolean
currentUserExists
;
private
final
MethodCallHelper
methodCall
;
private
final
MethodCallHelper
methodCall
;
private
boolean
currentUserExists
;
private
ArrayList
<
Registerable
>
listeners
;
private
ArrayList
<
Registerable
>
listeners
;
public
CurrentUserObserver
(
Context
context
,
String
hostname
,
public
CurrentUserObserver
(
Context
context
,
String
hostname
,
...
@@ -31,11 +30,13 @@ public class CurrentUserObserver extends AbstractModelObserver<User> {
...
@@ -31,11 +30,13 @@ public class CurrentUserObserver extends AbstractModelObserver<User> {
currentUserExists
=
false
;
currentUserExists
=
false
;
}
}
@Override
public
RealmResults
<
User
>
queryItems
(
Realm
realm
)
{
@Override
public
RealmResults
<
User
>
queryItems
(
Realm
realm
)
{
return
User
.
queryCurrentUser
(
realm
).
findAll
();
return
User
.
queryCurrentUser
(
realm
).
findAll
();
}
}
@Override
public
void
onUpdateResults
(
List
<
User
>
results
)
{
@Override
public
void
onUpdateResults
(
List
<
User
>
results
)
{
boolean
exists
=
!
results
.
isEmpty
();
boolean
exists
=
!
results
.
isEmpty
();
if
(
currentUserExists
!=
exists
)
{
if
(
currentUserExists
!=
exists
)
{
...
...
app/src/main/java/chat/rocket/android/service/observer/FileUploadingToS3Observer.java
View file @
9c34af88
...
@@ -2,6 +2,14 @@ package chat.rocket.android.service.observer;
...
@@ -2,6 +2,14 @@ package chat.rocket.android.service.observer;
import
android.content.Context
;
import
android.content.Context
;
import
android.net.Uri
;
import
android.net.Uri
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
org.json.JSONArray
;
import
org.json.JSONObject
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.util.List
;
import
bolts.Task
;
import
bolts.Task
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.FileUploadingHelper
;
import
chat.rocket.android.api.FileUploadingHelper
;
...
@@ -11,11 +19,6 @@ import chat.rocket.android.log.RCLog;
...
@@ -11,11 +19,6 @@ import chat.rocket.android.log.RCLog;
import
chat.rocket.android.model.SyncState
;
import
chat.rocket.android.model.SyncState
;
import
chat.rocket.android.model.internal.FileUploading
;
import
chat.rocket.android.model.internal.FileUploading
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.util.List
;
import
okhttp3.MediaType
;
import
okhttp3.MediaType
;
import
okhttp3.MultipartBody
;
import
okhttp3.MultipartBody
;
import
okhttp3.Request
;
import
okhttp3.Request
;
...
@@ -24,8 +27,6 @@ import okhttp3.Response;
...
@@ -24,8 +27,6 @@ import okhttp3.Response;
import
okio.BufferedSink
;
import
okio.BufferedSink
;
import
okio.Okio
;
import
okio.Okio
;
import
okio.Source
;
import
okio.Source
;
import
org.json.JSONArray
;
import
org.json.JSONObject
;
/**
/**
* execute file uploading and requesting sendMessage with attachment.
* execute file uploading and requesting sendMessage with attachment.
...
@@ -61,14 +62,16 @@ public class FileUploadingToS3Observer extends AbstractModelObserver<FileUploadi
...
@@ -61,14 +62,16 @@ public class FileUploadingToS3Observer extends AbstractModelObserver<FileUploadi
}).
continueWith
(
new
LogcatIfError
());
}).
continueWith
(
new
LogcatIfError
());
}
}
@Override
public
RealmResults
<
FileUploading
>
queryItems
(
Realm
realm
)
{
@Override
public
RealmResults
<
FileUploading
>
queryItems
(
Realm
realm
)
{
return
realm
.
where
(
FileUploading
.
class
)
return
realm
.
where
(
FileUploading
.
class
)
.
equalTo
(
"syncstate"
,
SyncState
.
NOT_SYNCED
)
.
equalTo
(
"syncstate"
,
SyncState
.
NOT_SYNCED
)
.
equalTo
(
"storageType"
,
FileUploading
.
STORAGE_TYPE_S3
)
.
equalTo
(
"storageType"
,
FileUploading
.
STORAGE_TYPE_S3
)
.
findAll
();
.
findAll
();
}
}
@Override
public
void
onUpdateResults
(
List
<
FileUploading
>
results
)
{
@Override
public
void
onUpdateResults
(
List
<
FileUploading
>
results
)
{
if
(
results
.
isEmpty
())
{
if
(
results
.
isEmpty
())
{
return
;
return
;
}
}
...
@@ -111,15 +114,19 @@ public class FileUploadingToS3Observer extends AbstractModelObserver<FileUploadi
...
@@ -111,15 +114,19 @@ public class FileUploadingToS3Observer extends AbstractModelObserver<FileUploadi
bodyBuilder
.
addFormDataPart
(
"file"
,
filename
,
bodyBuilder
.
addFormDataPart
(
"file"
,
filename
,
new
RequestBody
()
{
new
RequestBody
()
{
private
long
numBytes
=
0
;
private
long
numBytes
=
0
;
@Override
public
MediaType
contentType
()
{
@Override
public
MediaType
contentType
()
{
return
MediaType
.
parse
(
mimeType
);
return
MediaType
.
parse
(
mimeType
);
}
}
@Override
public
long
contentLength
()
throws
IOException
{
@Override
public
long
contentLength
()
throws
IOException
{
return
filesize
;
return
filesize
;
}
}
@Override
public
void
writeTo
(
BufferedSink
sink
)
throws
IOException
{
@Override
public
void
writeTo
(
BufferedSink
sink
)
throws
IOException
{
InputStream
inputStream
=
context
.
getContentResolver
().
openInputStream
(
fileUri
);
InputStream
inputStream
=
context
.
getContentResolver
().
openInputStream
(
fileUri
);
try
(
Source
source
=
Okio
.
source
(
inputStream
))
{
try
(
Source
source
=
Okio
.
source
(
inputStream
))
{
long
readBytes
;
long
readBytes
;
...
...
app/src/main/java/chat/rocket/android/service/observer/FileUploadingWithUfsObserver.java
View file @
9c34af88
...
@@ -2,6 +2,12 @@ package chat.rocket.android.service.observer;
...
@@ -2,6 +2,12 @@ package chat.rocket.android.service.observer;
import
android.content.Context
;
import
android.content.Context
;
import
android.net.Uri
;
import
android.net.Uri
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
org.json.JSONObject
;
import
java.io.InputStream
;
import
java.util.List
;
import
bolts.Task
;
import
bolts.Task
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.FileUploadingHelper
;
import
chat.rocket.android.api.FileUploadingHelper
;
...
@@ -13,15 +19,10 @@ import chat.rocket.android.model.ddp.User;
...
@@ -13,15 +19,10 @@ import chat.rocket.android.model.ddp.User;
import
chat.rocket.android.model.internal.FileUploading
;
import
chat.rocket.android.model.internal.FileUploading
;
import
chat.rocket.android.model.internal.Session
;
import
chat.rocket.android.model.internal.Session
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
java.io.InputStream
;
import
java.util.List
;
import
okhttp3.MediaType
;
import
okhttp3.MediaType
;
import
okhttp3.Request
;
import
okhttp3.Request
;
import
okhttp3.RequestBody
;
import
okhttp3.RequestBody
;
import
okhttp3.Response
;
import
okhttp3.Response
;
import
org.json.JSONObject
;
/**
/**
* execute file uploading and requesting sendMessage with attachment.
* execute file uploading and requesting sendMessage with attachment.
...
@@ -65,7 +66,8 @@ public class FileUploadingWithUfsObserver extends AbstractModelObserver<FileUplo
...
@@ -65,7 +66,8 @@ public class FileUploadingWithUfsObserver extends AbstractModelObserver<FileUplo
}).
continueWith
(
new
LogcatIfError
());
}).
continueWith
(
new
LogcatIfError
());
}
}
@Override
public
RealmResults
<
FileUploading
>
queryItems
(
Realm
realm
)
{
@Override
public
RealmResults
<
FileUploading
>
queryItems
(
Realm
realm
)
{
return
realm
.
where
(
FileUploading
.
class
)
return
realm
.
where
(
FileUploading
.
class
)
.
equalTo
(
"syncstate"
,
SyncState
.
NOT_SYNCED
)
.
equalTo
(
"syncstate"
,
SyncState
.
NOT_SYNCED
)
.
beginGroup
()
.
beginGroup
()
...
@@ -76,7 +78,8 @@ public class FileUploadingWithUfsObserver extends AbstractModelObserver<FileUplo
...
@@ -76,7 +78,8 @@ public class FileUploadingWithUfsObserver extends AbstractModelObserver<FileUplo
.
findAll
();
.
findAll
();
}
}
@Override
public
void
onUpdateResults
(
List
<
FileUploading
>
results
)
{
@Override
public
void
onUpdateResults
(
List
<
FileUploading
>
results
)
{
if
(
results
.
isEmpty
())
{
if
(
results
.
isEmpty
())
{
return
;
return
;
}
}
...
...
app/src/main/java/chat/rocket/android/service/observer/GetUsersOfRoomsProcedureObserver.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
service
.
observer
;
package
chat
.
rocket
.
android
.
service
.
observer
;
import
android.content.Context
;
import
android.content.Context
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
org.json.JSONObject
;
import
java.util.List
;
import
bolts.Task
;
import
bolts.Task
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.api.MethodCallHelper
;
...
@@ -8,10 +13,6 @@ import chat.rocket.android.log.RCLog;
...
@@ -8,10 +13,6 @@ import chat.rocket.android.log.RCLog;
import
chat.rocket.android.model.SyncState
;
import
chat.rocket.android.model.SyncState
;
import
chat.rocket.android.model.internal.GetUsersOfRoomsProcedure
;
import
chat.rocket.android.model.internal.GetUsersOfRoomsProcedure
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
java.util.List
;
import
org.json.JSONObject
;
/**
/**
* Model observer for executing getUsersOfRooms.
* Model observer for executing getUsersOfRooms.
...
@@ -27,13 +28,15 @@ public class GetUsersOfRoomsProcedureObserver
...
@@ -27,13 +28,15 @@ public class GetUsersOfRoomsProcedureObserver
methodCall
=
new
MethodCallHelper
(
realmHelper
,
ddpClient
);
methodCall
=
new
MethodCallHelper
(
realmHelper
,
ddpClient
);
}
}
@Override
public
RealmResults
<
GetUsersOfRoomsProcedure
>
queryItems
(
Realm
realm
)
{
@Override
public
RealmResults
<
GetUsersOfRoomsProcedure
>
queryItems
(
Realm
realm
)
{
return
realm
.
where
(
GetUsersOfRoomsProcedure
.
class
)
return
realm
.
where
(
GetUsersOfRoomsProcedure
.
class
)
.
equalTo
(
"syncstate"
,
SyncState
.
NOT_SYNCED
)
.
equalTo
(
"syncstate"
,
SyncState
.
NOT_SYNCED
)
.
findAll
();
.
findAll
();
}
}
@Override
public
void
onUpdateResults
(
List
<
GetUsersOfRoomsProcedure
>
results
)
{
@Override
public
void
onUpdateResults
(
List
<
GetUsersOfRoomsProcedure
>
results
)
{
if
(
results
==
null
||
results
.
isEmpty
())
{
if
(
results
==
null
||
results
.
isEmpty
())
{
return
;
return
;
}
}
...
...
app/src/main/java/chat/rocket/android/service/observer/LoadMessageProcedureObserver.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
service
.
observer
;
package
chat
.
rocket
.
android
.
service
.
observer
;
import
android.content.Context
;
import
android.content.Context
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
io.realm.Sort
;
import
org.json.JSONObject
;
import
java.util.List
;
import
bolts.Task
;
import
bolts.Task
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.api.MethodCallHelper
;
...
@@ -9,11 +15,6 @@ import chat.rocket.android.model.SyncState;
...
@@ -9,11 +15,6 @@ import chat.rocket.android.model.SyncState;
import
chat.rocket.android.model.ddp.Message
;
import
chat.rocket.android.model.ddp.Message
;
import
chat.rocket.android.model.internal.LoadMessageProcedure
;
import
chat.rocket.android.model.internal.LoadMessageProcedure
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
io.realm.Sort
;
import
java.util.List
;
import
org.json.JSONObject
;
/**
/**
* Background process for loading messages.
* Background process for loading messages.
...
@@ -28,13 +29,15 @@ public class LoadMessageProcedureObserver extends AbstractModelObserver<LoadMess
...
@@ -28,13 +29,15 @@ public class LoadMessageProcedureObserver extends AbstractModelObserver<LoadMess
methodCall
=
new
MethodCallHelper
(
realmHelper
,
ddpClient
);
methodCall
=
new
MethodCallHelper
(
realmHelper
,
ddpClient
);
}
}
@Override
public
RealmResults
<
LoadMessageProcedure
>
queryItems
(
Realm
realm
)
{
@Override
public
RealmResults
<
LoadMessageProcedure
>
queryItems
(
Realm
realm
)
{
return
realm
.
where
(
LoadMessageProcedure
.
class
)
return
realm
.
where
(
LoadMessageProcedure
.
class
)
.
equalTo
(
"syncstate"
,
SyncState
.
NOT_SYNCED
)
.
equalTo
(
"syncstate"
,
SyncState
.
NOT_SYNCED
)
.
findAll
();
.
findAll
();
}
}
@Override
public
void
onUpdateResults
(
List
<
LoadMessageProcedure
>
results
)
{
@Override
public
void
onUpdateResults
(
List
<
LoadMessageProcedure
>
results
)
{
if
(
results
==
null
||
results
.
isEmpty
())
{
if
(
results
==
null
||
results
.
isEmpty
())
{
return
;
return
;
}
}
...
...
app/src/main/java/chat/rocket/android/service/observer/MethodCallObserver.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
service
.
observer
;
package
chat
.
rocket
.
android
.
service
.
observer
;
import
android.content.Context
;
import
android.content.Context
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
org.json.JSONObject
;
import
java.util.List
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.helper.CheckSum
;
import
chat.rocket.android.helper.CheckSum
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.model.SyncState
;
import
chat.rocket.android.model.SyncState
;
import
chat.rocket.android.model.internal.MethodCall
;
import
chat.rocket.android.model.internal.MethodCall
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android_ddp.DDPClientCallback
;
import
chat.rocket.android_ddp.DDPClientCallback
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
java.util.List
;
import
org.json.JSONObject
;
/**
/**
* Observing MethodCall record, executing RPC if needed.
* Observing MethodCall record, executing RPC if needed.
...
@@ -47,7 +48,8 @@ public class MethodCallObserver extends AbstractModelObserver<MethodCall> {
...
@@ -47,7 +48,8 @@ public class MethodCallObserver extends AbstractModelObserver<MethodCall> {
}).
continueWith
(
new
LogcatIfError
());
}).
continueWith
(
new
LogcatIfError
());
}
}
@Override
public
RealmResults
<
MethodCall
>
queryItems
(
Realm
realm
)
{
@Override
public
RealmResults
<
MethodCall
>
queryItems
(
Realm
realm
)
{
return
realm
.
where
(
MethodCall
.
class
)
return
realm
.
where
(
MethodCall
.
class
)
.
isNotNull
(
"name"
)
.
isNotNull
(
"name"
)
.
equalTo
(
"syncstate"
,
SyncState
.
NOT_SYNCED
)
.
equalTo
(
"syncstate"
,
SyncState
.
NOT_SYNCED
)
...
@@ -68,7 +70,8 @@ public class MethodCallObserver extends AbstractModelObserver<MethodCall> {
...
@@ -68,7 +70,8 @@ public class MethodCallObserver extends AbstractModelObserver<MethodCall> {
return
CheckSum
.
sha256
(
stringBuilder
.
toString
());
return
CheckSum
.
sha256
(
stringBuilder
.
toString
());
}
}
@Override
public
void
onUpdateResults
(
List
<
MethodCall
>
results
)
{
@Override
public
void
onUpdateResults
(
List
<
MethodCall
>
results
)
{
String
digest
=
getDigestFor
(
results
);
String
digest
=
getDigestFor
(
results
);
if
(
prevDigest
==
null
)
{
if
(
prevDigest
==
null
)
{
if
(
digest
==
null
)
{
if
(
digest
==
null
)
{
...
...
app/src/main/java/chat/rocket/android/service/observer/NewMessageObserver.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
service
.
observer
;
package
chat
.
rocket
.
android
.
service
.
observer
;
import
android.content.Context
;
import
android.content.Context
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
org.json.JSONObject
;
import
java.util.List
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.LogcatIfError
;
...
@@ -8,10 +13,6 @@ import chat.rocket.android.log.RCLog;
...
@@ -8,10 +13,6 @@ import chat.rocket.android.log.RCLog;
import
chat.rocket.android.model.SyncState
;
import
chat.rocket.android.model.SyncState
;
import
chat.rocket.android.model.ddp.Message
;
import
chat.rocket.android.model.ddp.Message
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
java.util.List
;
import
org.json.JSONObject
;
/**
/**
* Observe messages for sending.
* Observe messages for sending.
...
@@ -38,14 +39,16 @@ public class NewMessageObserver extends AbstractModelObserver<Message> {
...
@@ -38,14 +39,16 @@ public class NewMessageObserver extends AbstractModelObserver<Message> {
}).
continueWith
(
new
LogcatIfError
());
}).
continueWith
(
new
LogcatIfError
());
}
}
@Override
public
RealmResults
<
Message
>
queryItems
(
Realm
realm
)
{
@Override
public
RealmResults
<
Message
>
queryItems
(
Realm
realm
)
{
return
realm
.
where
(
Message
.
class
)
return
realm
.
where
(
Message
.
class
)
.
equalTo
(
"syncstate"
,
SyncState
.
NOT_SYNCED
)
.
equalTo
(
"syncstate"
,
SyncState
.
NOT_SYNCED
)
.
isNotNull
(
"rid"
)
.
isNotNull
(
"rid"
)
.
findAll
();
.
findAll
();
}
}
@Override
public
void
onUpdateResults
(
List
<
Message
>
results
)
{
@Override
public
void
onUpdateResults
(
List
<
Message
>
results
)
{
if
(
results
.
isEmpty
())
{
if
(
results
.
isEmpty
())
{
return
;
return
;
}
}
...
...
app/src/main/java/chat/rocket/android/service/observer/NotificationItemObserver.java
View file @
9c34af88
...
@@ -10,6 +10,10 @@ import android.support.annotation.Nullable;
...
@@ -10,6 +10,10 @@ import android.support.annotation.Nullable;
import
android.support.v4.app.NotificationCompat
;
import
android.support.v4.app.NotificationCompat
;
import
android.support.v4.app.NotificationManagerCompat
;
import
android.support.v4.app.NotificationManagerCompat
;
import
android.support.v4.content.ContextCompat
;
import
android.support.v4.content.ContextCompat
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
java.util.List
;
import
bolts.Task
;
import
bolts.Task
;
import
chat.rocket.android.R
;
import
chat.rocket.android.R
;
import
chat.rocket.android.activity.MainActivity
;
import
chat.rocket.android.activity.MainActivity
;
...
@@ -21,9 +25,6 @@ import chat.rocket.android.model.internal.NotificationItem;
...
@@ -21,9 +25,6 @@ import chat.rocket.android.model.internal.NotificationItem;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
chat.rocket.android.service.notification.NotificationDismissalCallbackService
;
import
chat.rocket.android.service.notification.NotificationDismissalCallbackService
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
java.util.List
;
/**
/**
* observes NotificationItem and notify/cancel notification.
* observes NotificationItem and notify/cancel notification.
...
@@ -34,11 +35,13 @@ public class NotificationItemObserver extends AbstractModelObserver<Notification
...
@@ -34,11 +35,13 @@ public class NotificationItemObserver extends AbstractModelObserver<Notification
super
(
context
,
hostname
,
realmHelper
,
ddpClient
);
super
(
context
,
hostname
,
realmHelper
,
ddpClient
);
}
}
@Override
public
RealmResults
<
NotificationItem
>
queryItems
(
Realm
realm
)
{
@Override
public
RealmResults
<
NotificationItem
>
queryItems
(
Realm
realm
)
{
return
realm
.
where
(
NotificationItem
.
class
).
findAll
();
return
realm
.
where
(
NotificationItem
.
class
).
findAll
();
}
}
@Override
public
void
onUpdateResults
(
List
<
NotificationItem
>
results
)
{
@Override
public
void
onUpdateResults
(
List
<
NotificationItem
>
results
)
{
if
(
results
.
isEmpty
())
{
if
(
results
.
isEmpty
())
{
return
;
return
;
}
}
...
@@ -114,7 +117,8 @@ public class NotificationItemObserver extends AbstractModelObserver<Notification
...
@@ -114,7 +117,8 @@ public class NotificationItemObserver extends AbstractModelObserver<Notification
}
}
private
Notification
generateNotification
(
String
roomId
,
String
title
,
private
Notification
generateNotification
(
String
roomId
,
String
title
,
@NonNull
String
description
,
int
unreadCount
,
@Nullable
Bitmap
icon
)
{
@NonNull
String
description
,
int
unreadCount
,
@Nullable
Bitmap
icon
)
{
NotificationCompat
.
Builder
builder
=
new
NotificationCompat
.
Builder
(
context
)
NotificationCompat
.
Builder
builder
=
new
NotificationCompat
.
Builder
(
context
)
.
setContentTitle
(
title
)
.
setContentTitle
(
title
)
...
...
app/src/main/java/chat/rocket/android/service/observer/ReactiveNotificationManager.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
service
.
observer
;
package
chat
.
rocket
.
android
.
service
.
observer
;
import
android.content.Context
;
import
android.content.Context
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
java.util.List
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.log.RCLog
;
import
chat.rocket.android.log.RCLog
;
import
chat.rocket.android.model.ddp.RoomSubscription
;
import
chat.rocket.android.model.ddp.RoomSubscription
;
import
chat.rocket.android.model.internal.NotificationItem
;
import
chat.rocket.android.model.internal.NotificationItem
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
java.util.List
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
/**
/**
* observing room subscriptions with unread>0.
* observing room subscriptions with unread>0.
...
@@ -23,13 +24,15 @@ public class ReactiveNotificationManager extends AbstractModelObserver<RoomSubsc
...
@@ -23,13 +24,15 @@ public class ReactiveNotificationManager extends AbstractModelObserver<RoomSubsc
super
(
context
,
hostname
,
realmHelper
,
ddpClient
);
super
(
context
,
hostname
,
realmHelper
,
ddpClient
);
}
}
@Override
public
RealmResults
<
RoomSubscription
>
queryItems
(
Realm
realm
)
{
@Override
public
RealmResults
<
RoomSubscription
>
queryItems
(
Realm
realm
)
{
return
realm
.
where
(
RoomSubscription
.
class
)
return
realm
.
where
(
RoomSubscription
.
class
)
.
equalTo
(
"open"
,
true
)
.
equalTo
(
"open"
,
true
)
.
findAll
();
.
findAll
();
}
}
@Override
public
void
onUpdateResults
(
List
<
RoomSubscription
>
roomSubscriptions
)
{
@Override
public
void
onUpdateResults
(
List
<
RoomSubscription
>
roomSubscriptions
)
{
JSONArray
notifications
=
new
JSONArray
();
JSONArray
notifications
=
new
JSONArray
();
for
(
RoomSubscription
roomSubscription
:
roomSubscriptions
)
{
for
(
RoomSubscription
roomSubscription
:
roomSubscriptions
)
{
final
String
roomId
=
roomSubscription
.
getRid
();
final
String
roomId
=
roomSubscription
.
getRid
();
...
...
app/src/main/java/chat/rocket/android/service/observer/SessionObserver.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
service
.
observer
;
package
chat
.
rocket
.
android
.
service
.
observer
;
import
android.content.Context
;
import
android.content.Context
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
java.util.List
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.LogcatIfError
;
...
@@ -12,17 +16,13 @@ import chat.rocket.android.model.internal.Session;
...
@@ -12,17 +16,13 @@ import chat.rocket.android.model.internal.Session;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.service.internal.StreamRoomMessageManager
;
import
chat.rocket.android.service.internal.StreamRoomMessageManager
;
import
hugo.weaving.DebugLog
;
import
hugo.weaving.DebugLog
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
java.util.List
;
/**
/**
* Observes user is logged into server.
* Observes user is logged into server.
*/
*/
public
class
SessionObserver
extends
AbstractModelObserver
<
Session
>
{
public
class
SessionObserver
extends
AbstractModelObserver
<
Session
>
{
private
int
count
;
private
final
StreamRoomMessageManager
streamNotifyMessage
;
private
final
StreamRoomMessageManager
streamNotifyMessage
;
private
int
count
;
/**
/**
* constructor.
* constructor.
...
@@ -35,7 +35,8 @@ public class SessionObserver extends AbstractModelObserver<Session> {
...
@@ -35,7 +35,8 @@ public class SessionObserver extends AbstractModelObserver<Session> {
streamNotifyMessage
=
new
StreamRoomMessageManager
(
context
,
hostname
,
realmHelper
,
ddpClient
);
streamNotifyMessage
=
new
StreamRoomMessageManager
(
context
,
hostname
,
realmHelper
,
ddpClient
);
}
}
@Override
public
RealmResults
<
Session
>
queryItems
(
Realm
realm
)
{
@Override
public
RealmResults
<
Session
>
queryItems
(
Realm
realm
)
{
return
realm
.
where
(
Session
.
class
)
return
realm
.
where
(
Session
.
class
)
.
isNotNull
(
"token"
)
.
isNotNull
(
"token"
)
.
equalTo
(
"tokenVerified"
,
true
)
.
equalTo
(
"tokenVerified"
,
true
)
...
@@ -43,7 +44,8 @@ public class SessionObserver extends AbstractModelObserver<Session> {
...
@@ -43,7 +44,8 @@ public class SessionObserver extends AbstractModelObserver<Session> {
.
findAll
();
.
findAll
();
}
}
@Override
public
void
onUpdateResults
(
List
<
Session
>
results
)
{
@Override
public
void
onUpdateResults
(
List
<
Session
>
results
)
{
int
origCount
=
count
;
int
origCount
=
count
;
count
=
results
.
size
();
count
=
results
.
size
();
if
(
origCount
>
0
&&
count
>
0
)
{
if
(
origCount
>
0
&&
count
>
0
)
{
...
@@ -62,13 +64,15 @@ public class SessionObserver extends AbstractModelObserver<Session> {
...
@@ -62,13 +64,15 @@ public class SessionObserver extends AbstractModelObserver<Session> {
}
}
}
}
@DebugLog
private
void
onLogin
()
{
@DebugLog
private
void
onLogin
()
{
streamNotifyMessage
.
register
();
streamNotifyMessage
.
register
();
new
MethodCallHelper
(
realmHelper
,
ddpClient
).
getPublicSettings
()
new
MethodCallHelper
(
realmHelper
,
ddpClient
).
getPublicSettings
()
.
continueWith
(
new
LogcatIfError
());
.
continueWith
(
new
LogcatIfError
());
}
}
@DebugLog
private
void
onLogout
()
{
@DebugLog
private
void
onLogout
()
{
streamNotifyMessage
.
unregister
();
streamNotifyMessage
.
unregister
();
realmHelper
.
executeTransaction
(
realm
->
{
realmHelper
.
executeTransaction
(
realm
->
{
...
...
app/src/main/java/chat/rocket/android/service/observer/TokenLoginObserver.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
service
.
observer
;
package
chat
.
rocket
.
android
.
service
.
observer
;
import
android.content.Context
;
import
android.content.Context
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
java.util.List
;
import
chat.rocket.android.api.DDPClientWraper
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.helper.LogcatIfError
;
import
chat.rocket.android.model.internal.Session
;
import
chat.rocket.android.model.internal.Session
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.realm_helper.RealmHelper
;
import
chat.rocket.android.api.DDPClientWraper
;
import
io.realm.Realm
;
import
io.realm.RealmResults
;
import
java.util.List
;
public
class
TokenLoginObserver
extends
AbstractModelObserver
<
Session
>
{
public
class
TokenLoginObserver
extends
AbstractModelObserver
<
Session
>
{
...
@@ -20,7 +21,8 @@ public class TokenLoginObserver extends AbstractModelObserver<Session> {
...
@@ -20,7 +21,8 @@ public class TokenLoginObserver extends AbstractModelObserver<Session> {
methodCall
=
new
MethodCallHelper
(
realmHelper
,
ddpClient
);
methodCall
=
new
MethodCallHelper
(
realmHelper
,
ddpClient
);
}
}
@Override
public
RealmResults
<
Session
>
queryItems
(
Realm
realm
)
{
@Override
public
RealmResults
<
Session
>
queryItems
(
Realm
realm
)
{
return
realm
.
where
(
Session
.
class
)
return
realm
.
where
(
Session
.
class
)
.
isNotNull
(
"token"
)
.
isNotNull
(
"token"
)
.
equalTo
(
"tokenVerified"
,
false
)
.
equalTo
(
"tokenVerified"
,
false
)
...
@@ -28,7 +30,8 @@ public class TokenLoginObserver extends AbstractModelObserver<Session> {
...
@@ -28,7 +30,8 @@ public class TokenLoginObserver extends AbstractModelObserver<Session> {
.
findAll
();
.
findAll
();
}
}
@Override
public
void
onUpdateResults
(
List
<
Session
>
results
)
{
@Override
public
void
onUpdateResults
(
List
<
Session
>
results
)
{
if
(
results
.
isEmpty
())
{
if
(
results
.
isEmpty
())
{
return
;
return
;
}
}
...
...
app/src/main/res/drawable/ic_arrow_forward_white_24dp.xml
View file @
9c34af88
app/src/main/res/drawable/ic_at_white_24dp.xml
View file @
9c34af88
<vector
android:height=
"24dp"
android:viewportHeight=
"1792.0"
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:viewportWidth=
"1792.0"
android:width=
"24dp"
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
android:height=
"24dp"
<path
android:fillColor=
"#FFFFFFFF"
android:pathData=
"M1100,775q0,-108 -53.5,-169t-147.5,-61q-63,0 -124,30.5t-110,84.5 -79.5,137 -30.5,180q0,112 53.5,173t150.5,61q96,0 176,-66.5t122.5,-166 42.5,-203.5zM1664,896q0,111 -37,197t-98.5,135 -131.5,74.5 -145,27.5q-6,0 -15.5,0.5t-16.5,0.5q-95,0 -142,-53 -28,-33 -33,-83 -52,66 -131.5,110t-173.5,44q-161,0 -249.5,-95.5t-88.5,-269.5q0,-157 66,-290t179,-210.5 246,-77.5q87,0 155,35.5t106,99.5l2,-19 11,-56q1,-6 5.5,-12t9.5,-6h118q5,0 13,11 5,5 3,16l-120,614q-5,24 -5,48 0,39 12.5,52t44.5,13q28,-1 57,-5.5t73,-24 77,-50 57,-89.5 24,-137q0,-292 -174,-466t-466,-174q-130,0 -248.5,51t-204,136.5 -136.5,204 -51,248.5 51,248.5 136.5,204 204,136.5 248.5,51q228,0 405,-144 11,-9 24,-8t21,12l41,49q8,12 7,24 -2,13 -12,22 -102,83 -227.5,128t-258.5,45q-156,0 -298,-61t-245,-164 -164,-245 -61,-298 61,-298 164,-245 245,-164 298,-61q344,0 556,212t212,556z"
/>
android:viewportHeight=
"1792.0"
android:viewportWidth=
"1792.0"
android:width=
"24dp"
>
<path
android:fillColor=
"#FFFFFFFF"
android:pathData=
"M1100,775q0,-108 -53.5,-169t-147.5,-61q-63,0 -124,30.5t-110,84.5 -79.5,137 -30.5,180q0,112 53.5,173t150.5,61q96,0 176,-66.5t122.5,-166 42.5,-203.5zM1664,896q0,111 -37,197t-98.5,135 -131.5,74.5 -145,27.5q-6,0 -15.5,0.5t-16.5,0.5q-95,0 -142,-53 -28,-33 -33,-83 -52,66 -131.5,110t-173.5,44q-161,0 -249.5,-95.5t-88.5,-269.5q0,-157 66,-290t179,-210.5 246,-77.5q87,0 155,35.5t106,99.5l2,-19 11,-56q1,-6 5.5,-12t9.5,-6h118q5,0 13,11 5,5 3,16l-120,614q-5,24 -5,48 0,39 12.5,52t44.5,13q28,-1 57,-5.5t73,-24 77,-50 57,-89.5 24,-137q0,-292 -174,-466t-466,-174q-130,0 -248.5,51t-204,136.5 -136.5,204 -51,248.5 51,248.5 136.5,204 204,136.5 248.5,51q228,0 405,-144 11,-9 24,-8t21,12l41,49q8,12 7,24 -2,13 -12,22 -102,83 -227.5,128t-258.5,45q-156,0 -298,-61t-245,-164 -164,-245 -61,-298 61,-298 164,-245 245,-164 298,-61q344,0 556,212t212,556z"
/>
</vector>
</vector>
app/src/main/res/drawable/ic_compose_white_24dp.xml
View file @
9c34af88
app/src/main/res/drawable/ic_error_outline_black_24dp.xml
View file @
9c34af88
<vector
android:alpha=
"0.78"
android:height=
"24dp"
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:viewportHeight=
"24.0"
android:viewportWidth=
"24.0"
android:alpha=
"0.78"
android:width=
"24dp"
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
android:height=
"24dp"
<path
android:fillColor=
"#FF000000"
android:pathData=
"M11,15h2v2h-2zM11,7h2v6h-2zM11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM12,20c-4.42,0 -8,-3.58 -8,-8s3.58,-8 8,-8 8,3.58 8,8 -3.58,8 -8,8z"
/>
android:viewportHeight=
"24.0"
android:viewportWidth=
"24.0"
android:width=
"24dp"
>
<path
android:fillColor=
"#FF000000"
android:pathData=
"M11,15h2v2h-2zM11,7h2v6h-2zM11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM12,20c-4.42,0 -8,-3.58 -8,-8s3.58,-8 8,-8 8,3.58 8,8 -3.58,8 -8,8z"
/>
</vector>
</vector>
app/src/main/res/drawable/ic_hashtag_white_24dp.xml
View file @
9c34af88
<vector
android:height=
"24dp"
android:viewportHeight=
"1792.0"
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:viewportWidth=
"1792.0"
android:width=
"24dp"
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
android:height=
"24dp"
<path
android:fillColor=
"#FFFFFFFF"
android:pathData=
"M991,1024l64,-256h-254l-64,256h254zM1759,520l-56,224q-7,24 -31,24h-327l-64,256h311q15,0 25,12 10,14 6,28l-56,224q-5,24 -31,24h-327l-81,328q-7,24 -31,24h-224q-16,0 -26,-12 -9,-12 -6,-28l78,-312h-254l-81,328q-7,24 -31,24h-225q-15,0 -25,-12 -9,-12 -6,-28l78,-312h-311q-15,0 -25,-12 -9,-12 -6,-28l56,-224q7,-24 31,-24h327l64,-256h-311q-15,0 -25,-12 -10,-14 -6,-28l56,-224q5,-24 31,-24h327l81,-328q7,-24 32,-24h224q15,0 25,12 9,12 6,28l-78,312h254l81,-328q7,-24 32,-24h224q15,0 25,12 9,12 6,28l-78,312h311q15,0 25,12 9,12 6,28z"
/>
android:viewportHeight=
"1792.0"
android:viewportWidth=
"1792.0"
android:width=
"24dp"
>
<path
android:fillColor=
"#FFFFFFFF"
android:pathData=
"M991,1024l64,-256h-254l-64,256h254zM1759,520l-56,224q-7,24 -31,24h-327l-64,256h311q15,0 25,12 10,14 6,28l-56,224q-5,24 -31,24h-327l-81,328q-7,24 -31,24h-224q-16,0 -26,-12 -9,-12 -6,-28l78,-312h-254l-81,328q-7,24 -31,24h-225q-15,0 -25,-12 -9,-12 -6,-28l78,-312h-311q-15,0 -25,-12 -9,-12 -6,-28l56,-224q7,-24 31,-24h327l64,-256h-311q-15,0 -25,-12 -10,-14 -6,-28l56,-224q5,-24 31,-24h327l81,-328q7,-24 32,-24h224q15,0 25,12 9,12 6,28l-78,312h254l81,-328q7,-24 32,-24h224q15,0 25,12 9,12 6,28l-78,312h311q15,0 25,12 9,12 6,28z"
/>
</vector>
</vector>
app/src/main/res/drawable/ic_insert_photo_white_24dp.xml
View file @
9c34af88
app/src/main/res/drawable/ic_lock_white_24dp.xml
View file @
9c34af88
<vector
android:height=
"24dp"
android:viewportHeight=
"1792.0"
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:viewportWidth=
"1792.0"
android:width=
"24dp"
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
android:height=
"24dp"
<path
android:fillColor=
"#FFFFFFFF"
android:pathData=
"M640,768h512v-192q0,-106 -75,-181t-181,-75 -181,75 -75,181v192zM1472,864v576q0,40 -28,68t-68,28h-960q-40,0 -68,-28t-28,-68v-576q0,-40 28,-68t68,-28h32v-192q0,-184 132,-316t316,-132 316,132 132,316v192h32q40,0 68,28t28,68z"
/>
android:viewportHeight=
"1792.0"
android:viewportWidth=
"1792.0"
android:width=
"24dp"
>
<path
android:fillColor=
"#FFFFFFFF"
android:pathData=
"M640,768h512v-192q0,-106 -75,-181t-181,-75 -181,75 -75,181v192zM1472,864v576q0,40 -28,68t-68,28h-960q-40,0 -68,-28t-28,-68v-576q0,-40 28,-68t68,-28h32v-192q0,-184 132,-316t316,-132 316,132 132,316v192h32q40,0 68,28t28,68z"
/>
</vector>
</vector>
app/src/main/res/drawable/ic_user_registration_blue_24dp.xml
View file @
9c34af88
app/src/main/res/drawable/progress_bar.xml
View file @
9c34af88
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
<item
android:id=
"@android:id/background"
>
<item
android:id=
"@android:id/background"
>
<shape>
<shape>
<corners
android:radius=
"2dp"
/>
<corners
android:radius=
"2dp"
/>
<solid
android:color=
"#12000000"
/>
<solid
android:color=
"#12000000"
/>
</shape>
</shape>
</item>
</item>
...
@@ -11,7 +11,7 @@
...
@@ -11,7 +11,7 @@
<item
android:id=
"@android:id/secondaryProgress"
>
<item
android:id=
"@android:id/secondaryProgress"
>
<clip>
<clip>
<shape>
<shape>
<corners
android:radius=
"2dp"
/>
<corners
android:radius=
"2dp"
/>
<solid
android:color=
"@color/colorAccent_a40"
/>
<solid
android:color=
"@color/colorAccent_a40"
/>
</shape>
</shape>
</clip>
</clip>
...
@@ -20,7 +20,7 @@
...
@@ -20,7 +20,7 @@
<item
android:id=
"@android:id/progress"
>
<item
android:id=
"@android:id/progress"
>
<clip>
<clip>
<shape>
<shape>
<corners
android:radius=
"2dp"
/>
<corners
android:radius=
"2dp"
/>
<solid
android:color=
"@color/colorAccent"
/>
<solid
android:color=
"@color/colorAccent"
/>
</shape>
</shape>
</clip>
</clip>
...
...
app/src/main/res/drawable/rocket_chat_notification_24dp.xml
View file @
9c34af88
<vector
android:height=
"24dp"
android:viewportHeight=
"48.0"
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:viewportWidth=
"48.0"
android:width=
"24dp"
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
android:height=
"24dp"
<path
android:fillColor=
"#A3000000"
android:viewportHeight=
"48.0"
android:viewportWidth=
"48.0"
android:width=
"24dp"
>
<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: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:strokeColor=
"#00000000"
<path
android:fillColor=
"#A3000000"
android:strokeWidth=
"1"
/>
<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: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"
/>
android:strokeColor=
"#00000000"
<path
android:fillColor=
"#33000000"
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: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:strokeColor=
"#00000000"
android:strokeWidth=
"1"
/>
</vector>
</vector>
app/src/main/res/drawable/selector_text_color_link.xml
View file @
9c34af88
app/src/main/res/drawable/userstatus_away.xml
View file @
9c34af88
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"oval"
>
android:shape=
"oval"
>
<solid
android:color=
"@color/userstatus_away"
/>
<solid
android:color=
"@color/userstatus_away"
/>
<stroke
<stroke
android:width=
"1dp"
android:width=
"1dp"
android:color=
"@color/userstatus_away_outline"
/>
android:color=
"@color/userstatus_away_outline"
/>
<size
<size
android:width=
"16dp"
android:width=
"16dp"
android:height=
"16dp"
/>
android:height=
"16dp"
/>
</shape>
</shape>
app/src/main/res/drawable/userstatus_busy.xml
View file @
9c34af88
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"oval"
>
android:shape=
"oval"
>
<solid
android:color=
"@color/userstatus_busy"
/>
<solid
android:color=
"@color/userstatus_busy"
/>
<stroke
<stroke
android:width=
"1dp"
android:width=
"1dp"
android:color=
"@color/userstatus_busy_outline"
/>
android:color=
"@color/userstatus_busy_outline"
/>
<size
<size
android:width=
"16dp"
android:width=
"16dp"
android:height=
"16dp"
/>
android:height=
"16dp"
/>
</shape>
</shape>
app/src/main/res/drawable/userstatus_offline.xml
View file @
9c34af88
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"oval"
>
android:shape=
"oval"
>
<solid
android:color=
"@color/userstatus_offline"
/>
<solid
android:color=
"@color/userstatus_offline"
/>
<stroke
<stroke
android:width=
"1dp"
android:width=
"1dp"
android:color=
"@color/userstatus_offline_outline"
/>
android:color=
"@color/userstatus_offline_outline"
/>
<size
<size
android:width=
"16dp"
android:width=
"16dp"
android:height=
"16dp"
/>
android:height=
"16dp"
/>
</shape>
</shape>
app/src/main/res/drawable/userstatus_online.xml
View file @
9c34af88
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"oval"
>
android:shape=
"oval"
>
<solid
android:color=
"@color/userstatus_online"
/>
<solid
android:color=
"@color/userstatus_online"
/>
<stroke
<stroke
android:width=
"1dp"
android:width=
"1dp"
android:color=
"@color/userstatus_online_outline"
/>
android:color=
"@color/userstatus_online_outline"
/>
<size
<size
android:width=
"16dp"
android:width=
"16dp"
android:height=
"16dp"
/>
android:height=
"16dp"
/>
</shape>
</shape>
app/src/main/res/layout-w720dp/activity_main.xml
View file @
9c34af88
...
@@ -2,24 +2,28 @@
...
@@ -2,24 +2,28 @@
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
android:layout_height=
"match_parent"
>
<include
layout=
"@layout/sidebar"
/>
<include
layout=
"@layout/sidebar"
/>
<android.support.design.widget.CoordinatorLayout
<android.support.design.widget.CoordinatorLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
android:layout_height=
"match_parent"
>
<android.support.design.widget.AppBarLayout
<android.support.design.widget.AppBarLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
>
android:layout_height=
"wrap_content"
>
<android.support.v7.widget.Toolbar
<android.support.v7.widget.Toolbar
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:theme=
"@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:theme=
"@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme=
"@style/ThemeOverlay.AppCompat.Light"
app:popupTheme=
"@style/ThemeOverlay.AppCompat.Light"
app:title=
"@string/app_name"
/>
app:title=
"@string/app_name"
/>
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.AppBarLayout>
<FrameLayout
<FrameLayout
...
@@ -27,7 +31,8 @@
...
@@ -27,7 +31,8 @@
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@color/white"
android:background=
"@color/white"
app:layout_behavior=
"@string/appbar_scrolling_view_behavior"
/>
app:layout_behavior=
"@string/appbar_scrolling_view_behavior"
/>
</android.support.design.widget.CoordinatorLayout>
</android.support.design.widget.CoordinatorLayout>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout-w720dp/fragment_room.xml
View file @
9c34af88
...
@@ -2,9 +2,10 @@
...
@@ -2,9 +2,10 @@
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"horizontal"
>
android:orientation=
"horizontal"
>
<include
layout=
"@layout/fragment_room_main"
/>
<include
layout=
"@layout/fragment_room_main"
/>
<include
layout=
"@layout/room_side_menu"
/>
<include
layout=
"@layout/room_side_menu"
/>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/activity_main.xml
View file @
9c34af88
...
@@ -3,17 +3,20 @@
...
@@ -3,17 +3,20 @@
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:id=
"@+id/sliding_pane"
android:id=
"@+id/sliding_pane"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
android:layout_height=
"match_parent"
>
<include
layout=
"@layout/sidebar"
/>
<include
layout=
"@layout/sidebar"
/>
<android.support.design.widget.CoordinatorLayout
<android.support.design.widget.CoordinatorLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
android:layout_height=
"match_parent"
>
<android.support.design.widget.AppBarLayout
<android.support.design.widget.AppBarLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
>
android:layout_height=
"wrap_content"
>
<android.support.v7.widget.Toolbar
<android.support.v7.widget.Toolbar
android:id=
"@+id/activity_main_toolbar"
android:id=
"@+id/activity_main_toolbar"
...
@@ -21,7 +24,8 @@
...
@@ -21,7 +24,8 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:theme=
"@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:theme=
"@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme=
"@style/ThemeOverlay.AppCompat.Light"
app:popupTheme=
"@style/ThemeOverlay.AppCompat.Light"
app:title=
"@string/app_name"
/>
app:title=
"@string/app_name"
/>
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.AppBarLayout>
<FrameLayout
<FrameLayout
...
@@ -30,7 +34,8 @@
...
@@ -30,7 +34,8 @@
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@color/white"
android:background=
"@color/white"
android:clickable=
"true"
android:clickable=
"true"
app:layout_behavior=
"@string/appbar_scrolling_view_behavior"
/>
app:layout_behavior=
"@string/appbar_scrolling_view_behavior"
/>
</android.support.design.widget.CoordinatorLayout>
</android.support.design.widget.CoordinatorLayout>
</android.support.v4.widget.SlidingPaneLayout>
</android.support.v4.widget.SlidingPaneLayout>
\ No newline at end of file
app/src/main/res/layout/dialog_add_channel.xml
View file @
9c34af88
...
@@ -58,7 +58,8 @@
...
@@ -58,7 +58,8 @@
android:layout_gravity=
"end|bottom"
android:layout_gravity=
"end|bottom"
app:elevation=
"2dp"
app:elevation=
"2dp"
app:fabSize=
"mini"
app:fabSize=
"mini"
app:srcCompat=
"@drawable/ic_arrow_forward_white_24dp"
/>
app:srcCompat=
"@drawable/ic_arrow_forward_white_24dp"
/>
<chat.rocket.android.widget.WaitingView
<chat.rocket.android.widget.WaitingView
android:id=
"@+id/waiting"
android:id=
"@+id/waiting"
...
@@ -67,6 +68,7 @@
...
@@ -67,6 +68,7 @@
android:layout_gravity=
"center"
android:layout_gravity=
"center"
android:visibility=
"gone"
android:visibility=
"gone"
app:dotCount=
"5"
app:dotCount=
"5"
app:dotSize=
"12dp"
/>
app:dotSize=
"12dp"
/>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/dialog_add_direct_message.xml
View file @
9c34af88
...
@@ -33,7 +33,8 @@
...
@@ -33,7 +33,8 @@
android:layout_gravity=
"end|bottom"
android:layout_gravity=
"end|bottom"
app:elevation=
"2dp"
app:elevation=
"2dp"
app:fabSize=
"mini"
app:fabSize=
"mini"
app:srcCompat=
"@drawable/ic_arrow_forward_white_24dp"
/>
app:srcCompat=
"@drawable/ic_arrow_forward_white_24dp"
/>
<chat.rocket.android.widget.WaitingView
<chat.rocket.android.widget.WaitingView
android:id=
"@+id/waiting"
android:id=
"@+id/waiting"
...
@@ -42,6 +43,7 @@
...
@@ -42,6 +43,7 @@
android:layout_gravity=
"center"
android:layout_gravity=
"center"
android:visibility=
"gone"
android:visibility=
"gone"
app:dotCount=
"5"
app:dotCount=
"5"
app:dotSize=
"12dp"
/>
app:dotSize=
"12dp"
/>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/dialog_file_uploading.xml
View file @
9c34af88
...
@@ -12,14 +12,16 @@
...
@@ -12,14 +12,16 @@
<FrameLayout
<FrameLayout
android:id=
"@+id/room_user_titlebar"
android:id=
"@+id/room_user_titlebar"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"?attr/actionBarSize"
>
android:layout_height=
"?attr/actionBarSize"
>
<TextView
<TextView
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"start|center_vertical"
android:layout_gravity=
"start|center_vertical"
android:text=
"@string/file_uploading_title"
android:text=
"@string/file_uploading_title"
android:textAppearance=
"@style/TextAppearance.AppCompat.Title"
/>
android:textAppearance=
"@style/TextAppearance.AppCompat.Title"
/>
</FrameLayout>
</FrameLayout>
...
...
app/src/main/res/layout/dialog_user_registration.xml
View file @
9c34af88
...
@@ -5,12 +5,14 @@
...
@@ -5,12 +5,14 @@
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:minWidth=
"288dp"
android:minWidth=
"288dp"
android:orientation=
"vertical"
android:orientation=
"vertical"
android:padding=
"@dimen/margin_24"
>
android:padding=
"@dimen/margin_24"
>
<android.support.design.widget.TextInputLayout
<android.support.design.widget.TextInputLayout
android:id=
"@+id/text_input_email"
android:id=
"@+id/text_input_email"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
>
android:layout_height=
"wrap_content"
>
<android.support.design.widget.TextInputEditText
<android.support.design.widget.TextInputEditText
android:id=
"@+id/editor_email"
android:id=
"@+id/editor_email"
...
@@ -19,17 +21,20 @@
...
@@ -19,17 +21,20 @@
android:hint=
"@string/dialog_user_registration_email"
android:hint=
"@string/dialog_user_registration_email"
android:imeOptions=
"actionNext"
android:imeOptions=
"actionNext"
android:inputType=
"textWebEmailAddress"
android:inputType=
"textWebEmailAddress"
android:singleLine=
"true"
/>
android:singleLine=
"true"
/>
</android.support.design.widget.TextInputLayout>
</android.support.design.widget.TextInputLayout>
<Space
<Space
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"@dimen/margin_8"
/>
android:layout_height=
"@dimen/margin_8"
/>
<android.support.design.widget.TextInputLayout
<android.support.design.widget.TextInputLayout
android:id=
"@+id/text_input_username"
android:id=
"@+id/text_input_username"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
>
android:layout_height=
"wrap_content"
>
<android.support.design.widget.TextInputEditText
<android.support.design.widget.TextInputEditText
android:id=
"@+id/editor_username"
android:id=
"@+id/editor_username"
...
@@ -38,18 +43,21 @@
...
@@ -38,18 +43,21 @@
android:hint=
"@string/dialog_user_registration_username"
android:hint=
"@string/dialog_user_registration_username"
android:imeOptions=
"actionNext"
android:imeOptions=
"actionNext"
android:inputType=
"textWebEmailAddress"
android:inputType=
"textWebEmailAddress"
android:singleLine=
"true"
/>
android:singleLine=
"true"
/>
</android.support.design.widget.TextInputLayout>
</android.support.design.widget.TextInputLayout>
<Space
<Space
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"@dimen/margin_8"
/>
android:layout_height=
"@dimen/margin_8"
/>
<android.support.design.widget.TextInputLayout
<android.support.design.widget.TextInputLayout
android:id=
"@+id/text_input_passwd"
android:id=
"@+id/text_input_passwd"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
app:passwordToggleEnabled=
"true"
>
app:passwordToggleEnabled=
"true"
>
<android.support.design.widget.TextInputEditText
<android.support.design.widget.TextInputEditText
android:id=
"@+id/editor_passwd"
android:id=
"@+id/editor_passwd"
...
@@ -58,12 +66,14 @@
...
@@ -58,12 +66,14 @@
android:hint=
"@string/dialog_user_registration_password"
android:hint=
"@string/dialog_user_registration_password"
android:imeOptions=
"actionNext"
android:imeOptions=
"actionNext"
android:inputType=
"textWebPassword"
android:inputType=
"textWebPassword"
android:singleLine=
"true"
/>
android:singleLine=
"true"
/>
</android.support.design.widget.TextInputLayout>
</android.support.design.widget.TextInputLayout>
<Space
<Space
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"@dimen/margin_16"
/>
android:layout_height=
"@dimen/margin_16"
/>
<android.support.design.widget.FloatingActionButton
<android.support.design.widget.FloatingActionButton
android:id=
"@+id/btn_register_user"
android:id=
"@+id/btn_register_user"
...
@@ -72,7 +82,8 @@
...
@@ -72,7 +82,8 @@
android:layout_gravity=
"end|bottom"
android:layout_gravity=
"end|bottom"
app:elevation=
"2dp"
app:elevation=
"2dp"
app:fabSize=
"mini"
app:fabSize=
"mini"
app:srcCompat=
"@drawable/ic_arrow_forward_white_24dp"
/>
app:srcCompat=
"@drawable/ic_arrow_forward_white_24dp"
/>
<chat.rocket.android.widget.WaitingView
<chat.rocket.android.widget.WaitingView
android:id=
"@+id/waiting"
android:id=
"@+id/waiting"
...
@@ -80,6 +91,7 @@
...
@@ -80,6 +91,7 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:layout_gravity=
"center"
app:dotCount=
"5"
app:dotCount=
"5"
app:dotSize=
"12dp"
/>
app:dotSize=
"12dp"
/>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/dialog_users_of_room.xml
View file @
9c34af88
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
android:layout_height=
"match_parent"
>
<LinearLayout
<LinearLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
>
android:orientation=
"vertical"
>
<FrameLayout
<FrameLayout
android:id=
"@+id/room_user_titlebar"
android:id=
"@+id/room_user_titlebar"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"?attr/actionBarSize"
android:layout_height=
"?attr/actionBarSize"
android:paddingRight=
"@dimen/margin_16"
android:paddingRight=
"@dimen/margin_16"
android:paddingStart=
"@dimen/margin_16"
>
android:paddingStart=
"@dimen/margin_16"
>
<TextView
<TextView
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"start|center_vertical"
android:layout_gravity=
"start|center_vertical"
android:text=
"@string/users_of_room_title"
android:text=
"@string/users_of_room_title"
android:textAppearance=
"@style/TextAppearance.AppCompat.Title"
/>
android:textAppearance=
"@style/TextAppearance.AppCompat.Title"
/>
<TextView
<TextView
android:id=
"@+id/room_user_count"
android:id=
"@+id/room_user_count"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"end|center_vertical"
android:layout_gravity=
"end|center_vertical"
android:textAppearance=
"@style/TextAppearance.AppCompat.Small"
/>
android:textAppearance=
"@style/TextAppearance.AppCompat.Small"
/>
</FrameLayout>
</FrameLayout>
<android.support.v7.widget.RecyclerView
<android.support.v7.widget.RecyclerView
android:id=
"@+id/recyclerview"
android:id=
"@+id/recyclerview"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
/>
android:orientation=
"vertical"
/>
</LinearLayout>
</LinearLayout>
...
@@ -42,6 +48,7 @@
...
@@ -42,6 +48,7 @@
android:id=
"@+id/waiting"
android:id=
"@+id/waiting"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
/>
android:layout_gravity=
"center"
/>
</FrameLayout>
</FrameLayout>
\ No newline at end of file
app/src/main/res/layout/dialog_waiting.xml
View file @
9c34af88
...
@@ -5,23 +5,27 @@
...
@@ -5,23 +5,27 @@
android:gravity=
"center"
android:gravity=
"center"
android:minWidth=
"288dp"
android:minWidth=
"288dp"
android:orientation=
"vertical"
android:orientation=
"vertical"
android:padding=
"@dimen/margin_24"
>
android:padding=
"@dimen/margin_24"
>
<ImageView
<ImageView
android:layout_width=
"80dp"
android:layout_width=
"80dp"
android:layout_height=
"80dp"
android:layout_height=
"80dp"
android:layout_marginBottom=
"@dimen/margin_24"
android:layout_marginBottom=
"@dimen/margin_24"
android:scaleType=
"fitCenter"
android:scaleType=
"fitCenter"
android:src=
"@mipmap/ic_launcher"
/>
android:src=
"@mipmap/ic_launcher"
/>
<chat.rocket.android.widget.WaitingView
<chat.rocket.android.widget.WaitingView
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
/>
android:layout_height=
"wrap_content"
/>
<TextView
<TextView
android:id=
"@+id/txt_caption"
android:id=
"@+id/txt_caption"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/margin_16"
android:layout_marginTop=
"@dimen/margin_16"
android:textAppearance=
"@style/TextAppearance.AppCompat.Caption"
/>
android:textAppearance=
"@style/TextAppearance.AppCompat.Caption"
/>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/fragment_home.xml
View file @
9c34af88
...
@@ -5,7 +5,8 @@
...
@@ -5,7 +5,8 @@
android:gravity=
"center"
android:gravity=
"center"
android:orientation=
"vertical"
android:orientation=
"vertical"
android:padding=
"@dimen/margin_16"
android:padding=
"@dimen/margin_16"
android:theme=
"@style/Theme.AppCompat.Light"
>
android:theme=
"@style/Theme.AppCompat.Light"
>
<TextView
<TextView
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
...
@@ -13,10 +14,12 @@
...
@@ -13,10 +14,12 @@
android:layout_marginBottom=
"@dimen/margin_16"
android:layout_marginBottom=
"@dimen/margin_16"
android:gravity=
"center"
android:gravity=
"center"
android:text=
"@string/fragment_home_welcome_message"
android:text=
"@string/fragment_home_welcome_message"
android:textSize=
"14sp"
/>
android:textSize=
"14sp"
/>
<ImageView
<ImageView
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:src=
"@mipmap/ic_launcher"
/>
android:src=
"@mipmap/ic_launcher"
/>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/fragment_input_hostname.xml
View file @
9c34af88
...
@@ -3,7 +3,8 @@
...
@@ -3,7 +3,8 @@
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"?attr/colorPrimaryDark"
>
android:background=
"?attr/colorPrimaryDark"
>
<LinearLayout
<LinearLayout
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
...
@@ -12,19 +13,22 @@
...
@@ -12,19 +13,22 @@
android:background=
"@color/white"
android:background=
"@color/white"
android:minWidth=
"288dp"
android:minWidth=
"288dp"
android:orientation=
"horizontal"
android:orientation=
"horizontal"
android:padding=
"@dimen/margin_24"
>
android:padding=
"@dimen/margin_24"
>
<LinearLayout
<LinearLayout
android:layout_width=
"0px"
android:layout_width=
"0px"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:layout_weight=
"1"
android:orientation=
"vertical"
>
android:orientation=
"vertical"
>
<TextView
<TextView
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@string/fragment_input_hostname_hostname"
android:text=
"@string/fragment_input_hostname_hostname"
android:textAppearance=
"@style/TextAppearance.AppCompat.Caption"
/>
android:textAppearance=
"@style/TextAppearance.AppCompat.Caption"
/>
<EditText
<EditText
android:id=
"@+id/editor_hostname"
android:id=
"@+id/editor_hostname"
...
@@ -33,12 +37,14 @@
...
@@ -33,12 +37,14 @@
android:hint=
"@string/fragment_input_hostname_server_hint"
android:hint=
"@string/fragment_input_hostname_server_hint"
android:imeOptions=
"actionGo"
android:imeOptions=
"actionGo"
android:inputType=
"textWebEditText"
android:inputType=
"textWebEditText"
android:singleLine=
"true"
/>
android:singleLine=
"true"
/>
</LinearLayout>
</LinearLayout>
<Space
<Space
android:layout_width=
"@dimen/margin_8"
android:layout_width=
"@dimen/margin_8"
android:layout_height=
"wrap_content"
/>
android:layout_height=
"wrap_content"
/>
<android.support.design.widget.FloatingActionButton
<android.support.design.widget.FloatingActionButton
android:id=
"@+id/btn_connect"
android:id=
"@+id/btn_connect"
...
@@ -47,6 +53,7 @@
...
@@ -47,6 +53,7 @@
android:layout_gravity=
"end|bottom"
android:layout_gravity=
"end|bottom"
app:elevation=
"2dp"
app:elevation=
"2dp"
app:fabSize=
"mini"
app:fabSize=
"mini"
app:srcCompat=
"@drawable/ic_arrow_forward_white_24dp"
/>
app:srcCompat=
"@drawable/ic_arrow_forward_white_24dp"
/>
</LinearLayout>
</LinearLayout>
</FrameLayout>
</FrameLayout>
\ No newline at end of file
app/src/main/res/layout/fragment_login.xml
View file @
9c34af88
...
@@ -3,7 +3,8 @@
...
@@ -3,7 +3,8 @@
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"?attr/colorPrimaryDark"
>
android:background=
"?attr/colorPrimaryDark"
>
<LinearLayout
<LinearLayout
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
...
@@ -12,12 +13,14 @@
...
@@ -12,12 +13,14 @@
android:background=
"@color/white"
android:background=
"@color/white"
android:minWidth=
"288dp"
android:minWidth=
"288dp"
android:orientation=
"vertical"
android:orientation=
"vertical"
android:padding=
"@dimen/margin_24"
>
android:padding=
"@dimen/margin_24"
>
<LinearLayout
<LinearLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:orientation=
"horizontal"
>
android:orientation=
"horizontal"
>
<chat.rocket.android.widget.FontAwesomeButton
<chat.rocket.android.widget.FontAwesomeButton
android:id=
"@+id/btn_login_with_twitter"
android:id=
"@+id/btn_login_with_twitter"
...
@@ -25,7 +28,8 @@
...
@@ -25,7 +28,8 @@
android:layout_height=
"48dp"
android:layout_height=
"48dp"
android:layout_marginEnd=
"@dimen/margin_8"
android:layout_marginEnd=
"@dimen/margin_8"
android:text=
"@string/fa_twitter"
android:text=
"@string/fa_twitter"
android:textSize=
"16dp"
/>
android:textSize=
"16dp"
/>
<chat.rocket.android.widget.FontAwesomeButton
<chat.rocket.android.widget.FontAwesomeButton
android:id=
"@+id/btn_login_with_facebook"
android:id=
"@+id/btn_login_with_facebook"
...
@@ -33,7 +37,8 @@
...
@@ -33,7 +37,8 @@
android:layout_height=
"48dp"
android:layout_height=
"48dp"
android:layout_marginEnd=
"@dimen/margin_8"
android:layout_marginEnd=
"@dimen/margin_8"
android:text=
"@string/fa_facebook_official"
android:text=
"@string/fa_facebook_official"
android:textSize=
"16dp"
/>
android:textSize=
"16dp"
/>
<chat.rocket.android.widget.FontAwesomeButton
<chat.rocket.android.widget.FontAwesomeButton
android:id=
"@+id/btn_login_with_github"
android:id=
"@+id/btn_login_with_github"
...
@@ -41,7 +46,8 @@
...
@@ -41,7 +46,8 @@
android:layout_height=
"48dp"
android:layout_height=
"48dp"
android:layout_marginEnd=
"@dimen/margin_8"
android:layout_marginEnd=
"@dimen/margin_8"
android:text=
"@string/fa_github"
android:text=
"@string/fa_github"
android:textSize=
"16dp"
/>
android:textSize=
"16dp"
/>
<chat.rocket.android.widget.FontAwesomeButton
<chat.rocket.android.widget.FontAwesomeButton
android:id=
"@+id/btn_login_with_google"
android:id=
"@+id/btn_login_with_google"
...
@@ -49,14 +55,16 @@
...
@@ -49,14 +55,16 @@
android:layout_height=
"48dp"
android:layout_height=
"48dp"
android:layout_marginEnd=
"@dimen/margin_8"
android:layout_marginEnd=
"@dimen/margin_8"
android:text=
"@string/fa_google"
android:text=
"@string/fa_google"
android:textSize=
"16dp"
/>
android:textSize=
"16dp"
/>
</LinearLayout>
</LinearLayout>
<android.support.design.widget.TextInputLayout
<android.support.design.widget.TextInputLayout
android:id=
"@+id/text_input_username"
android:id=
"@+id/text_input_username"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
>
android:layout_height=
"wrap_content"
>
<android.support.design.widget.TextInputEditText
<android.support.design.widget.TextInputEditText
android:id=
"@+id/editor_username"
android:id=
"@+id/editor_username"
...
@@ -65,18 +73,21 @@
...
@@ -65,18 +73,21 @@
android:hint=
"@string/fragment_login_username_or_email"
android:hint=
"@string/fragment_login_username_or_email"
android:imeOptions=
"actionNext"
android:imeOptions=
"actionNext"
android:inputType=
"textWebEmailAddress"
android:inputType=
"textWebEmailAddress"
android:singleLine=
"true"
/>
android:singleLine=
"true"
/>
</android.support.design.widget.TextInputLayout>
</android.support.design.widget.TextInputLayout>
<Space
<Space
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"@dimen/margin_8"
/>
android:layout_height=
"@dimen/margin_8"
/>
<android.support.design.widget.TextInputLayout
<android.support.design.widget.TextInputLayout
android:id=
"@+id/text_input_passwd"
android:id=
"@+id/text_input_passwd"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
app:passwordToggleEnabled=
"true"
>
app:passwordToggleEnabled=
"true"
>
<android.support.design.widget.TextInputEditText
<android.support.design.widget.TextInputEditText
android:id=
"@+id/editor_passwd"
android:id=
"@+id/editor_passwd"
...
@@ -85,17 +96,20 @@
...
@@ -85,17 +96,20 @@
android:hint=
"@string/fragment_login_password"
android:hint=
"@string/fragment_login_password"
android:imeOptions=
"actionNext"
android:imeOptions=
"actionNext"
android:inputType=
"textWebPassword"
android:inputType=
"textWebPassword"
android:singleLine=
"true"
/>
android:singleLine=
"true"
/>
</android.support.design.widget.TextInputLayout>
</android.support.design.widget.TextInputLayout>
<Space
<Space
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"@dimen/margin_16"
/>
android:layout_height=
"@dimen/margin_16"
/>
<FrameLayout
<FrameLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:orientation=
"horizontal"
>
android:orientation=
"horizontal"
>
<android.support.design.widget.FloatingActionButton
<android.support.design.widget.FloatingActionButton
android:id=
"@+id/btn_user_registration"
android:id=
"@+id/btn_user_registration"
...
@@ -105,7 +119,8 @@
...
@@ -105,7 +119,8 @@
app:backgroundTint=
"@color/white"
app:backgroundTint=
"@color/white"
app:elevation=
"2dp"
app:elevation=
"2dp"
app:fabSize=
"mini"
app:fabSize=
"mini"
app:srcCompat=
"@drawable/ic_user_registration_blue_24dp"
/>
app:srcCompat=
"@drawable/ic_user_registration_blue_24dp"
/>
<android.support.design.widget.FloatingActionButton
<android.support.design.widget.FloatingActionButton
android:id=
"@+id/btn_login_with_email"
android:id=
"@+id/btn_login_with_email"
...
@@ -114,7 +129,8 @@
...
@@ -114,7 +129,8 @@
android:layout_gravity=
"end|bottom"
android:layout_gravity=
"end|bottom"
app:elevation=
"2dp"
app:elevation=
"2dp"
app:fabSize=
"normal"
app:fabSize=
"normal"
app:srcCompat=
"@drawable/ic_arrow_forward_white_24dp"
/>
app:srcCompat=
"@drawable/ic_arrow_forward_white_24dp"
/>
</FrameLayout>
</FrameLayout>
</LinearLayout>
</LinearLayout>
</FrameLayout>
</FrameLayout>
\ No newline at end of file
app/src/main/res/layout/fragment_retry_login.xml
View file @
9c34af88
...
@@ -3,7 +3,8 @@
...
@@ -3,7 +3,8 @@
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"?attr/colorPrimaryDark"
>
android:background=
"?attr/colorPrimaryDark"
>
<LinearLayout
<LinearLayout
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
...
@@ -12,13 +13,15 @@
...
@@ -12,13 +13,15 @@
android:background=
"@color/white"
android:background=
"@color/white"
android:minWidth=
"288dp"
android:minWidth=
"288dp"
android:orientation=
"vertical"
android:orientation=
"vertical"
android:padding=
"@dimen/margin_24"
>
android:padding=
"@dimen/margin_24"
>
<TextView
<TextView
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@string/fragment_retry_login_error_title"
android:text=
"@string/fragment_retry_login_error_title"
android:textAppearance=
"@style/TextAppearance.AppCompat.Title"
/>
android:textAppearance=
"@style/TextAppearance.AppCompat.Title"
/>
<TextView
<TextView
android:id=
"@+id/txt_error_description"
android:id=
"@+id/txt_error_description"
...
@@ -26,14 +29,16 @@
...
@@ -26,14 +29,16 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginBottom=
"@dimen/margin_8"
android:layout_marginBottom=
"@dimen/margin_8"
android:layout_marginTop=
"@dimen/margin_8"
android:layout_marginTop=
"@dimen/margin_8"
android:textAppearance=
"@style/Base.TextAppearance.AppCompat.Body1"
/>
android:textAppearance=
"@style/Base.TextAppearance.AppCompat.Body1"
/>
<LinearLayout
<LinearLayout
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:layout_gravity=
"center"
android:gravity=
"center"
android:gravity=
"center"
android:orientation=
"vertical"
>
android:orientation=
"vertical"
>
<android.support.design.widget.FloatingActionButton
<android.support.design.widget.FloatingActionButton
android:id=
"@+id/btn_retry_login"
android:id=
"@+id/btn_retry_login"
...
@@ -42,13 +47,15 @@
...
@@ -42,13 +47,15 @@
android:layout_margin=
"@dimen/margin_8"
android:layout_margin=
"@dimen/margin_8"
app:elevation=
"2dp"
app:elevation=
"2dp"
app:fabSize=
"normal"
app:fabSize=
"normal"
app:srcCompat=
"@drawable/ic_arrow_forward_white_24dp"
/>
app:srcCompat=
"@drawable/ic_arrow_forward_white_24dp"
/>
<TextView
<TextView
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@string/fragment_retry_login_retry_title"
android:text=
"@string/fragment_retry_login_retry_title"
android:textAppearance=
"@style/TextAppearance.AppCompat.Body1"
/>
android:textAppearance=
"@style/TextAppearance.AppCompat.Body1"
/>
</LinearLayout>
</LinearLayout>
...
@@ -59,7 +66,8 @@
...
@@ -59,7 +66,8 @@
android:layout_gravity=
"center"
android:layout_gravity=
"center"
android:layout_marginTop=
"@dimen/margin_16"
android:layout_marginTop=
"@dimen/margin_16"
app:dotCount=
"5"
app:dotCount=
"5"
app:dotSize=
"12dp"
/>
app:dotSize=
"12dp"
/>
</LinearLayout>
</LinearLayout>
</FrameLayout>
</FrameLayout>
\ No newline at end of file
app/src/main/res/layout/fragment_room.xml
View file @
9c34af88
...
@@ -2,17 +2,19 @@
...
@@ -2,17 +2,19 @@
<android.support.v4.widget.DrawerLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<android.support.v4.widget.DrawerLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:id=
"@+id/drawer_layout"
android:id=
"@+id/drawer_layout"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
android:layout_height=
"match_parent"
>
<include
layout=
"@layout/fragment_room_main"
/>
<include
layout=
"@layout/fragment_room_main"
/>
<FrameLayout
<FrameLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:layout_gravity=
"end"
android:layout_gravity=
"end"
android:clickable=
"true"
android:clickable=
"true"
android:theme=
"@style/AppTheme.Dark"
>
android:theme=
"@style/AppTheme.Dark"
>
<include
layout=
"@layout/room_side_menu"
/>
<include
layout=
"@layout/room_side_menu"
/>
</FrameLayout>
</FrameLayout>
</android.support.v4.widget.DrawerLayout>
</android.support.v4.widget.DrawerLayout>
\ No newline at end of file
app/src/main/res/layout/fragment_room_main.xml
View file @
9c34af88
...
@@ -18,7 +18,8 @@
...
@@ -18,7 +18,8 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:theme=
"@style/Theme.AppCompat.Light"
android:theme=
"@style/Theme.AppCompat.Light"
android:layout_gravity=
"bottom"
android:layout_gravity=
"bottom"
android:background=
"@android:color/white"
/>
android:background=
"@android:color/white"
/>
<android.support.design.widget.FloatingActionButton
<android.support.design.widget.FloatingActionButton
android:id=
"@+id/fab_upload_file"
android:id=
"@+id/fab_upload_file"
...
...
app/src/main/res/layout/fragment_sidebar_main.xml
View file @
9c34af88
...
@@ -3,7 +3,8 @@
...
@@ -3,7 +3,8 @@
xmlns:tools=
"http://schemas.android.com/tools"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:theme=
"@style/AppTheme.Dark"
>
android:theme=
"@style/AppTheme.Dark"
>
<LinearLayout
<LinearLayout
android:id=
"@+id/user_info_container"
android:id=
"@+id/user_info_container"
...
@@ -15,22 +16,26 @@
...
@@ -15,22 +16,26 @@
android:foreground=
"?attr/selectableItemBackground"
android:foreground=
"?attr/selectableItemBackground"
android:gravity=
"center_vertical"
android:gravity=
"center_vertical"
android:orientation=
"horizontal"
android:orientation=
"horizontal"
android:padding=
"@dimen/margin_16"
>
android:padding=
"@dimen/margin_16"
>
<ImageView
<ImageView
android:id=
"@+id/current_user_status"
android:id=
"@+id/current_user_status"
android:layout_width=
"8dp"
android:layout_width=
"8dp"
android:layout_height=
"8dp"
android:layout_height=
"8dp"
android:src=
"@drawable/userstatus_online"
/>
android:src=
"@drawable/userstatus_online"
/>
<Space
<Space
android:layout_width=
"@dimen/margin_8"
android:layout_width=
"@dimen/margin_8"
android:layout_height=
"wrap_content"
/>
android:layout_height=
"wrap_content"
/>
<ImageView
<ImageView
android:id=
"@+id/current_user_avatar"
android:id=
"@+id/current_user_avatar"
android:layout_width=
"48dp"
android:layout_width=
"48dp"
android:layout_height=
"48dp"
/>
android:layout_height=
"48dp"
/>
<TextView
<TextView
android:id=
"@+id/current_user_name"
android:id=
"@+id/current_user_name"
...
@@ -41,12 +46,14 @@
...
@@ -41,12 +46,14 @@
android:layout_marginRight=
"@dimen/margin_8"
android:layout_marginRight=
"@dimen/margin_8"
android:layout_weight=
"1"
android:layout_weight=
"1"
android:textSize=
"14sp"
android:textSize=
"14sp"
tools:text=
"John Doe"
/>
tools:text=
"John Doe"
/>
<chat.rocket.android.widget.DownUpToggleView
<chat.rocket.android.widget.DownUpToggleView
android:id=
"@+id/toggle_user_action"
android:id=
"@+id/toggle_user_action"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
/>
android:layout_height=
"wrap_content"
/>
</LinearLayout>
</LinearLayout>
...
@@ -55,18 +62,21 @@
...
@@ -55,18 +62,21 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_alignParentBottom=
"true"
android:layout_alignParentBottom=
"true"
android:layout_below=
"@+id/user_info_container"
android:layout_below=
"@+id/user_info_container"
android:background=
"?attr/colorPrimary"
>
android:background=
"?attr/colorPrimary"
>
<LinearLayout
<LinearLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
android:orientation=
"vertical"
android:paddingStart=
"?attr/listPreferredItemPaddingLeft"
>
android:paddingStart=
"?attr/listPreferredItemPaddingLeft"
>
<FrameLayout
<FrameLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/margin_8"
>
android:layout_marginTop=
"@dimen/margin_8"
>
<TextView
<TextView
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
...
@@ -75,7 +85,8 @@
...
@@ -75,7 +85,8 @@
android:alpha=
"0.62"
android:alpha=
"0.62"
android:text=
"@string/fragment_sidebar_main_channels_title"
android:text=
"@string/fragment_sidebar_main_channels_title"
android:textAppearance=
"@style/TextAppearance.AppCompat.Body2"
android:textAppearance=
"@style/TextAppearance.AppCompat.Body2"
android:textStyle=
"bold"
/>
android:textStyle=
"bold"
/>
<chat.rocket.android.widget.FontAwesomeButton
<chat.rocket.android.widget.FontAwesomeButton
android:id=
"@+id/btn_add_channel"
android:id=
"@+id/btn_add_channel"
...
@@ -84,7 +95,8 @@
...
@@ -84,7 +95,8 @@
android:layout_height=
"48dp"
android:layout_height=
"48dp"
android:layout_gravity=
"end|center_vertical"
android:layout_gravity=
"end|center_vertical"
android:text=
"@string/fa_plus"
android:text=
"@string/fa_plus"
android:textSize=
"12dp"
/>
android:textSize=
"12dp"
/>
</FrameLayout>
</FrameLayout>
...
@@ -93,12 +105,14 @@
...
@@ -93,12 +105,14 @@
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginEnd=
"?attr/listPreferredItemPaddingRight"
android:layout_marginEnd=
"?attr/listPreferredItemPaddingRight"
android:orientation=
"vertical"
/>
android:orientation=
"vertical"
/>
<FrameLayout
<FrameLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/margin_8"
>
android:layout_marginTop=
"@dimen/margin_8"
>
<TextView
<TextView
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
...
@@ -107,7 +121,8 @@
...
@@ -107,7 +121,8 @@
android:alpha=
"0.62"
android:alpha=
"0.62"
android:text=
"@string/fragment_sidebar_main_direct_messages_title"
android:text=
"@string/fragment_sidebar_main_direct_messages_title"
android:textAppearance=
"@style/TextAppearance.AppCompat.Body2"
android:textAppearance=
"@style/TextAppearance.AppCompat.Body2"
android:textStyle=
"bold"
/>
android:textStyle=
"bold"
/>
<chat.rocket.android.widget.FontAwesomeButton
<chat.rocket.android.widget.FontAwesomeButton
android:id=
"@+id/btn_add_direct_message"
android:id=
"@+id/btn_add_direct_message"
...
@@ -116,7 +131,8 @@
...
@@ -116,7 +131,8 @@
android:layout_height=
"48dp"
android:layout_height=
"48dp"
android:layout_gravity=
"end|center_vertical"
android:layout_gravity=
"end|center_vertical"
android:text=
"@string/fa_plus"
android:text=
"@string/fa_plus"
android:textSize=
"12dp"
/>
android:textSize=
"12dp"
/>
</FrameLayout>
</FrameLayout>
...
@@ -125,7 +141,8 @@
...
@@ -125,7 +141,8 @@
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginEnd=
"?attr/listPreferredItemPaddingRight"
android:layout_marginEnd=
"?attr/listPreferredItemPaddingRight"
android:orientation=
"vertical"
/>
android:orientation=
"vertical"
/>
</LinearLayout>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</android.support.v4.widget.NestedScrollView>
...
@@ -139,12 +156,14 @@
...
@@ -139,12 +156,14 @@
android:background=
"?attr/colorPrimaryDark"
android:background=
"?attr/colorPrimaryDark"
android:elevation=
"2dp"
android:elevation=
"2dp"
android:visibility=
"gone"
android:visibility=
"gone"
tools:visibility=
"visible"
>
tools:visibility=
"visible"
>
<LinearLayout
<LinearLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
>
android:orientation=
"vertical"
>
<TextView
<TextView
android:id=
"@+id/btn_status_online"
android:id=
"@+id/btn_status_online"
...
@@ -153,7 +172,8 @@
...
@@ -153,7 +172,8 @@
android:drawableLeft=
"@drawable/userstatus_online"
android:drawableLeft=
"@drawable/userstatus_online"
android:drawablePadding=
"16dp"
android:drawablePadding=
"16dp"
android:text=
"@string/user_status_online"
android:text=
"@string/user_status_online"
android:textAppearance=
"?attr/textAppearanceListItemSmall"
/>
android:textAppearance=
"?attr/textAppearanceListItemSmall"
/>
<TextView
<TextView
android:id=
"@+id/btn_status_away"
android:id=
"@+id/btn_status_away"
...
@@ -162,7 +182,8 @@
...
@@ -162,7 +182,8 @@
android:drawableLeft=
"@drawable/userstatus_away"
android:drawableLeft=
"@drawable/userstatus_away"
android:drawablePadding=
"16dp"
android:drawablePadding=
"16dp"
android:text=
"@string/user_status_away"
android:text=
"@string/user_status_away"
android:textAppearance=
"?attr/textAppearanceListItemSmall"
/>
android:textAppearance=
"?attr/textAppearanceListItemSmall"
/>
<TextView
<TextView
android:id=
"@+id/btn_status_busy"
android:id=
"@+id/btn_status_busy"
...
@@ -171,7 +192,8 @@
...
@@ -171,7 +192,8 @@
android:drawableLeft=
"@drawable/userstatus_busy"
android:drawableLeft=
"@drawable/userstatus_busy"
android:drawablePadding=
"16dp"
android:drawablePadding=
"16dp"
android:text=
"@string/user_status_busy"
android:text=
"@string/user_status_busy"
android:textAppearance=
"?attr/textAppearanceListItemSmall"
/>
android:textAppearance=
"?attr/textAppearanceListItemSmall"
/>
<TextView
<TextView
android:id=
"@+id/btn_status_invisible"
android:id=
"@+id/btn_status_invisible"
...
@@ -180,20 +202,24 @@
...
@@ -180,20 +202,24 @@
android:drawableLeft=
"@drawable/userstatus_offline"
android:drawableLeft=
"@drawable/userstatus_offline"
android:drawablePadding=
"16dp"
android:drawablePadding=
"16dp"
android:text=
"@string/user_status_invisible"
android:text=
"@string/user_status_invisible"
android:textAppearance=
"?attr/textAppearanceListItemSmall"
/>
android:textAppearance=
"?attr/textAppearanceListItemSmall"
/>
<chat.rocket.android.widget.DividerView
<chat.rocket.android.widget.DividerView
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
/>
android:layout_height=
"wrap_content"
/>
<LinearLayout
<LinearLayout
android:id=
"@+id/btn_logout"
android:id=
"@+id/btn_logout"
style=
"@style/sidebar_list_item"
style=
"@style/sidebar_list_item"
android:orientation=
"horizontal"
>
android:orientation=
"horizontal"
>
<FrameLayout
<FrameLayout
android:layout_width=
"48dp"
android:layout_width=
"48dp"
android:layout_height=
"match_parent"
>
android:layout_height=
"match_parent"
>
<chat.rocket.android.widget.FontAwesomeTextView
<chat.rocket.android.widget.FontAwesomeTextView
android:layout_width=
"16dp"
android:layout_width=
"16dp"
...
@@ -201,14 +227,16 @@
...
@@ -201,14 +227,16 @@
android:layout_gravity=
"center"
android:layout_gravity=
"center"
android:gravity=
"center"
android:gravity=
"center"
android:text=
"@string/fa_sign_out"
android:text=
"@string/fa_sign_out"
android:textSize=
"14dp"
/>
android:textSize=
"14dp"
/>
</FrameLayout>
</FrameLayout>
<TextView
<TextView
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@string/fragment_sidebar_main_logout_title"
android:text=
"@string/fragment_sidebar_main_logout_title"
android:textAppearance=
"?attr/textAppearanceListItemSmall"
/>
android:textAppearance=
"?attr/textAppearanceListItemSmall"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</android.support.v4.widget.NestedScrollView>
...
...
app/src/main/res/layout/fragment_waiting.xml
View file @
9c34af88
...
@@ -3,25 +3,29 @@
...
@@ -3,25 +3,29 @@
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"?attr/colorPrimaryDark"
android:background=
"?attr/colorPrimaryDark"
android:theme=
"@style/AppTheme.Dark"
>
android:theme=
"@style/AppTheme.Dark"
>
<LinearLayout
<LinearLayout
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:layout_gravity=
"center"
android:gravity=
"center"
android:gravity=
"center"
android:orientation=
"vertical"
>
android:orientation=
"vertical"
>
<chat.rocket.android.widget.WaitingView
<chat.rocket.android.widget.WaitingView
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
/>
android:layout_height=
"wrap_content"
/>
<TextView
<TextView
android:id=
"@+id/txt_caption"
android:id=
"@+id/txt_caption"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/margin_32"
android:layout_marginTop=
"@dimen/margin_32"
android:textAppearance=
"@style/TextAppearance.AppCompat.Caption"
/>
android:textAppearance=
"@style/TextAppearance.AppCompat.Caption"
/>
</LinearLayout>
</LinearLayout>
</FrameLayout>
</FrameLayout>
\ No newline at end of file
app/src/main/res/layout/list_item_message.xml
View file @
9c34af88
...
@@ -4,66 +4,77 @@
...
@@ -4,66 +4,77 @@
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
android:orientation=
"vertical"
android:theme=
"@style/AppTheme"
>
android:theme=
"@style/AppTheme"
>
<include
layout=
"@layout/list_item_message_newday"
/>
<include
layout=
"@layout/list_item_message_newday"
/>
<LinearLayout
<LinearLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:orientation=
"horizontal"
>
android:orientation=
"horizontal"
>
<ImageView
<ImageView
android:id=
"@+id/user_avatar"
android:id=
"@+id/user_avatar"
android:layout_width=
"32dp"
android:layout_width=
"32dp"
android:layout_height=
"32dp"
android:layout_height=
"32dp"
android:layout_margin=
"8dp"
android:layout_margin=
"8dp"
tools:src=
"@drawable/ic_default_avatar"
/>
tools:src=
"@drawable/ic_default_avatar"
/>
<LinearLayout
<LinearLayout
android:layout_width=
"0px"
android:layout_width=
"0px"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginEnd=
"8dp"
android:layout_marginEnd=
"8dp"
android:layout_weight=
"1"
android:layout_weight=
"1"
android:orientation=
"vertical"
>
android:orientation=
"vertical"
>
<LinearLayout
<LinearLayout
android:id=
"@+id/user_and_timestamp_container"
android:id=
"@+id/user_and_timestamp_container"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:orientation=
"horizontal"
>
android:orientation=
"horizontal"
>
<TextView
<TextView
android:id=
"@+id/username"
android:id=
"@+id/username"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:textStyle=
"bold"
android:textStyle=
"bold"
tools:text=
"John Doe"
/>
tools:text=
"John Doe"
/>
<Space
<Space
android:layout_width=
"@dimen/margin_8"
android:layout_width=
"@dimen/margin_8"
android:layout_height=
"wrap_content"
/>
android:layout_height=
"wrap_content"
/>
<TextView
<TextView
android:id=
"@+id/timestamp"
android:id=
"@+id/timestamp"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:enabled=
"false"
android:enabled=
"false"
tools:text=
"12:34"
/>
tools:text=
"12:34"
/>
</LinearLayout>
</LinearLayout>
<chat.rocket.android.widget.message.RocketChatMessageLayout
<chat.rocket.android.widget.message.RocketChatMessageLayout
android:id=
"@+id/message_body"
android:id=
"@+id/message_body"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
/>
android:layout_height=
"wrap_content"
/>
<chat.rocket.android.widget.message.RocketChatMessageUrlsLayout
<chat.rocket.android.widget.message.RocketChatMessageUrlsLayout
android:id=
"@+id/message_urls"
android:id=
"@+id/message_urls"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
/>
android:layout_height=
"wrap_content"
/>
<chat.rocket.android.widget.message.RocketChatMessageAttachmentsLayout
<chat.rocket.android.widget.message.RocketChatMessageAttachmentsLayout
android:id=
"@+id/message_attachments"
android:id=
"@+id/message_attachments"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
/>
android:layout_height=
"wrap_content"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/list_item_message_header.xml
View file @
9c34af88
...
@@ -2,4 +2,5 @@
...
@@ -2,4 +2,5 @@
<Space
xmlns:android=
"http://schemas.android.com/apk/res/android"
<Space
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:id=
"@+id/space"
android:id=
"@+id/space"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"88dp"
/>
android:layout_height=
"88dp"
\ No newline at end of file
/>
\ No newline at end of file
app/src/main/res/layout/list_item_message_loading.xml
View file @
9c34af88
...
@@ -3,12 +3,14 @@
...
@@ -3,12 +3,14 @@
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
android:orientation=
"vertical"
android:theme=
"@style/AppTheme"
>
android:theme=
"@style/AppTheme"
>
<chat.rocket.android.widget.WaitingView
<chat.rocket.android.widget.WaitingView
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:layout_gravity=
"center"
android:layout_margin=
"@dimen/margin_8"
/>
android:layout_margin=
"@dimen/margin_8"
/>
</FrameLayout>
</FrameLayout>
\ No newline at end of file
app/src/main/res/layout/list_item_message_newday.xml
View file @
9c34af88
...
@@ -6,13 +6,15 @@
...
@@ -6,13 +6,15 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_margin=
"16dp"
android:layout_margin=
"16dp"
android:gravity=
"center_vertical"
android:gravity=
"center_vertical"
android:orientation=
"horizontal"
>
android:orientation=
"horizontal"
>
<View
<View
android:layout_width=
"0px"
android:layout_width=
"0px"
android:layout_height=
"1dp"
android:layout_height=
"1dp"
android:layout_weight=
"1"
android:layout_weight=
"1"
android:background=
"@color/newday_color"
/>
android:background=
"@color/newday_color"
/>
<TextView
<TextView
android:id=
"@+id/newday_text"
android:id=
"@+id/newday_text"
...
@@ -23,12 +25,14 @@
...
@@ -23,12 +25,14 @@
android:textColor=
"@color/newday_color"
android:textColor=
"@color/newday_color"
android:textSize=
"8sp"
android:textSize=
"8sp"
android:textStyle=
"bold"
android:textStyle=
"bold"
tools:text=
"2016/01/23"
/>
tools:text=
"2016/01/23"
/>
<View
<View
android:layout_width=
"0px"
android:layout_width=
"0px"
android:layout_height=
"1dp"
android:layout_height=
"1dp"
android:layout_weight=
"1"
android:layout_weight=
"1"
android:background=
"@color/newday_color"
/>
android:background=
"@color/newday_color"
/>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/list_item_message_start_of_conversation.xml
View file @
9c34af88
...
@@ -3,7 +3,8 @@
...
@@ -3,7 +3,8 @@
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
android:orientation=
"vertical"
android:theme=
"@style/AppTheme"
>
android:theme=
"@style/AppTheme"
>
<TextView
<TextView
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
...
@@ -11,6 +12,7 @@
...
@@ -11,6 +12,7 @@
android:layout_gravity=
"center"
android:layout_gravity=
"center"
android:layout_margin=
"@dimen/margin_16"
android:layout_margin=
"@dimen/margin_16"
android:text=
"@string/start_of_conversation"
android:text=
"@string/start_of_conversation"
android:textAppearance=
"@style/TextAppearance.AppCompat.Body1"
/>
android:textAppearance=
"@style/TextAppearance.AppCompat.Body1"
/>
</FrameLayout>
</FrameLayout>
\ No newline at end of file
app/src/main/res/layout/listitem_room_user.xml
View file @
9c34af88
...
@@ -3,18 +3,21 @@
...
@@ -3,18 +3,21 @@
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"?attr/listPreferredItemHeightSmall"
android:layout_height=
"?attr/listPreferredItemHeightSmall"
android:gravity=
"center_vertical"
android:gravity=
"center_vertical"
android:orientation=
"horizontal"
>
android:orientation=
"horizontal"
>
<ImageView
<ImageView
android:id=
"@+id/room_user_status"
android:id=
"@+id/room_user_status"
android:layout_width=
"8dp"
android:layout_width=
"8dp"
android:layout_height=
"8dp"
android:layout_height=
"8dp"
android:layout_margin=
"@dimen/margin_8"
/>
android:layout_margin=
"@dimen/margin_8"
/>
<ImageView
<ImageView
android:id=
"@+id/room_user_avatar"
android:id=
"@+id/room_user_avatar"
android:layout_width=
"24dp"
android:layout_width=
"24dp"
android:layout_height=
"24dp"
/>
android:layout_height=
"24dp"
/>
<TextView
<TextView
android:id=
"@+id/room_user_name"
android:id=
"@+id/room_user_name"
...
@@ -24,6 +27,7 @@
...
@@ -24,6 +27,7 @@
android:layout_marginLeft=
"@dimen/margin_8"
android:layout_marginLeft=
"@dimen/margin_8"
android:layout_marginRight=
"@dimen/margin_8"
android:layout_marginRight=
"@dimen/margin_8"
android:layout_weight=
"1"
android:layout_weight=
"1"
android:textAppearance=
"@style/TextAppearance.AppCompat.Small"
/>
android:textAppearance=
"@style/TextAppearance.AppCompat.Small"
/>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/room_side_menu.xml
View file @
9c34af88
...
@@ -4,27 +4,31 @@
...
@@ -4,27 +4,31 @@
android:layout_width=
"48dp"
android:layout_width=
"48dp"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:layout_gravity=
"end"
android:layout_gravity=
"end"
android:orientation=
"vertical"
>
android:orientation=
"vertical"
>
<chat.rocket.android.widget.FontAwesomeButton
<chat.rocket.android.widget.FontAwesomeButton
android:layout_width=
"48dp"
android:layout_width=
"48dp"
android:layout_height=
"48dp"
android:layout_height=
"48dp"
android:enabled=
"false"
android:enabled=
"false"
android:text=
"@string/fa_search"
android:text=
"@string/fa_search"
android:textSize=
"24dp"
/>
android:textSize=
"24dp"
/>
<chat.rocket.android.widget.FontAwesomeButton
<chat.rocket.android.widget.FontAwesomeButton
android:id=
"@+id/btn_users"
android:id=
"@+id/btn_users"
android:layout_width=
"48dp"
android:layout_width=
"48dp"
android:layout_height=
"48dp"
android:layout_height=
"48dp"
android:text=
"@string/fa_users"
android:text=
"@string/fa_users"
android:textSize=
"24dp"
/>
android:textSize=
"24dp"
/>
<chat.rocket.android.widget.FontAwesomeButton
<chat.rocket.android.widget.FontAwesomeButton
android:layout_width=
"48dp"
android:layout_width=
"48dp"
android:layout_height=
"48dp"
android:layout_height=
"48dp"
android:enabled=
"false"
android:enabled=
"false"
android:text=
"@string/fa_at"
android:text=
"@string/fa_at"
android:textSize=
"24dp"
/>
android:textSize=
"24dp"
/>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/sidebar.xml
View file @
9c34af88
...
@@ -4,38 +4,44 @@
...
@@ -4,38 +4,44 @@
android:layout_width=
"280dp"
android:layout_width=
"280dp"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:layout_gravity=
"start"
android:layout_gravity=
"start"
android:theme=
"@style/AppTheme.Dark"
>
android:theme=
"@style/AppTheme.Dark"
>
<android.support.v4.widget.NestedScrollView
<android.support.v4.widget.NestedScrollView
android:layout_width=
"96dp"
android:layout_width=
"96dp"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:layout_gravity=
"start"
android:layout_gravity=
"start"
android:background=
"?attr/colorPrimaryDark"
>
android:background=
"?attr/colorPrimaryDark"
>
<LinearLayout
<LinearLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
>
android:orientation=
"vertical"
>
<ImageButton
<ImageButton
style=
"@style/Base.Widget.AppCompat.Button.Borderless"
style=
"@style/Base.Widget.AppCompat.Button.Borderless"
android:layout_width=
"80dp"
android:layout_width=
"80dp"
android:layout_height=
"80dp"
android:layout_height=
"80dp"
android:layout_margin=
"@dimen/margin_8"
android:layout_margin=
"@dimen/margin_8"
android:src=
"@mipmap/ic_launcher"
/>
android:src=
"@mipmap/ic_launcher"
/>
<chat.rocket.android.widget.FontAwesomeButton
<chat.rocket.android.widget.FontAwesomeButton
style=
"@style/Base.Widget.AppCompat.Button.Borderless"
style=
"@style/Base.Widget.AppCompat.Button.Borderless"
android:layout_width=
"80dp"
android:layout_width=
"80dp"
android:layout_height=
"80dp"
android:layout_height=
"80dp"
android:layout_margin=
"@dimen/margin_8"
android:layout_margin=
"@dimen/margin_8"
android:text=
"@string/fa_plus"
/>
android:text=
"@string/fa_plus"
/>
</LinearLayout>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</android.support.v4.widget.NestedScrollView>
<FrameLayout
<FrameLayout
android:id=
"@+id/sidebar_fragment_container"
android:id=
"@+id/sidebar_fragment_container"
android:layout_width=
"280dp"
android:layout_width=
"280dp"
android:layout_height=
"match_parent"
/>
android:layout_height=
"match_parent"
/>
</android.support.v4.widget.SlidingPaneLayout>
</android.support.v4.widget.SlidingPaneLayout>
\ No newline at end of file
app/src/main/res/layout/simple_screen.xml
View file @
9c34af88
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:id=
"@+id/content"
android:id=
"@+id/content"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
android:layout_height=
"match_parent"
>
</FrameLayout>
</FrameLayout>
\ No newline at end of file
app/src/main/res/layout/webview.xml
View file @
9c34af88
...
@@ -2,4 +2,5 @@
...
@@ -2,4 +2,5 @@
<WebView
xmlns:android=
"http://schemas.android.com/apk/res/android"
<WebView
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:id=
"@+id/webview"
android:id=
"@+id/webview"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
/>
android:layout_height=
"match_parent"
\ No newline at end of file
/>
\ No newline at end of file
app/src/main/res/values/api_key_strings.xml
View file @
9c34af88
app/src/main/res/values/colors.xml
View file @
9c34af88
app/src/main/res/values/dimens.xml
View file @
9c34af88
app/src/main/res/values/fa_strings.xml
View file @
9c34af88
app/src/main/res/values/margin_dimens.xml
View file @
9c34af88
app/src/main/res/values/message_styles.xml
View file @
9c34af88
app/src/main/res/values/sidebar_styles.xml
View file @
9c34af88
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<resources>
<style
name=
"sidebar_list_item"
>
<style
name=
"sidebar_list_item"
>
<item
name=
"android:layout_width"
>
match_parent
</item>
<item
name=
"android:layout_width"
>
match_parent
</item>
<item
name=
"android:layout_height"
>
?attr/listPreferredItemHeight
</item>
<item
name=
"android:layout_height"
>
?attr/listPreferredItemHeight
</item>
...
...
app/src/main/res/values/styles.xml
View file @
9c34af88
app/src/main/res/values/user_status_colors.xml
View file @
9c34af88
build.gradle
View file @
9c34af88
config/quality/checkstyle/checkstyle-config.xml
View file @
9c34af88
...
@@ -179,7 +179,8 @@
...
@@ -179,7 +179,8 @@
value=
"BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR, LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR "
/>
value=
"BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR, LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR "
/>
</module>
</module>
<module
name=
"AnnotationLocation"
>
<module
name=
"AnnotationLocation"
>
<property
name=
"tokens"
value=
"CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"
/>
<property
name=
"tokens"
value=
"CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"
/>
</module>
</module>
<module
name=
"AnnotationLocation"
>
<module
name=
"AnnotationLocation"
>
<property
name=
"tokens"
value=
"VARIABLE_DEF"
/>
<property
name=
"tokens"
value=
"VARIABLE_DEF"
/>
...
...
config/quality/checkstyle/checkstyle-suppressions.xml
View file @
9c34af88
config/quality/findbugs/android-exclude-filter.xml
View file @
9c34af88
config/quality/pmd/pmd-ruleset.xml
View file @
9c34af88
config/quality/quality.gradle
View file @
9c34af88
config/quality/style-guide/intellij-google-style.xml
View file @
9c34af88
<code_scheme
name=
"GoogleStyle"
>
<code_scheme
name=
"GoogleStyle"
>
<option
name=
"JAVA_INDENT_OPTIONS"
>
<option
name=
"JAVA_INDENT_OPTIONS"
>
<value>
<value>
<option
name=
"INDENT_SIZE"
value=
"2"
/>
<option
name=
"INDENT_SIZE"
value=
"2"
/>
<option
name=
"CONTINUATION_INDENT_SIZE"
value=
"4"
/>
<option
name=
"CONTINUATION_INDENT_SIZE"
value=
"4"
/>
<option
name=
"TAB_SIZE"
value=
"8"
/>
<option
name=
"TAB_SIZE"
value=
"8"
/>
<option
name=
"USE_TAB_CHARACTER"
value=
"false"
/>
<option
name=
"USE_TAB_CHARACTER"
value=
"false"
/>
<option
name=
"SMART_TABS"
value=
"false"
/>
<option
name=
"SMART_TABS"
value=
"false"
/>
<option
name=
"LABEL_INDENT_SIZE"
value=
"0"
/>
<option
name=
"LABEL_INDENT_SIZE"
value=
"0"
/>
<option
name=
"LABEL_INDENT_ABSOLUTE"
value=
"false"
/>
<option
name=
"LABEL_INDENT_ABSOLUTE"
value=
"false"
/>
<option
name=
"USE_RELATIVE_INDENTS"
value=
"false"
/>
<option
name=
"USE_RELATIVE_INDENTS"
value=
"false"
/>
</value>
</value>
</option>
</option>
<option
name=
"OTHER_INDENT_OPTIONS"
>
<option
name=
"OTHER_INDENT_OPTIONS"
>
<value>
<value>
<option
name=
"INDENT_SIZE"
value=
"2"
/>
<option
name=
"INDENT_SIZE"
value=
"2"
/>
<option
name=
"CONTINUATION_INDENT_SIZE"
value=
"4"
/>
<option
name=
"CONTINUATION_INDENT_SIZE"
value=
"4"
/>
<option
name=
"TAB_SIZE"
value=
"8"
/>
<option
name=
"TAB_SIZE"
value=
"8"
/>
<option
name=
"USE_TAB_CHARACTER"
value=
"false"
/>
<option
name=
"USE_TAB_CHARACTER"
value=
"false"
/>
<option
name=
"SMART_TABS"
value=
"false"
/>
<option
name=
"SMART_TABS"
value=
"false"
/>
<option
name=
"LABEL_INDENT_SIZE"
value=
"0"
/>
<option
name=
"LABEL_INDENT_SIZE"
value=
"0"
/>
<option
name=
"LABEL_INDENT_ABSOLUTE"
value=
"false"
/>
<option
name=
"LABEL_INDENT_ABSOLUTE"
value=
"false"
/>
<option
name=
"USE_RELATIVE_INDENTS"
value=
"false"
/>
<option
name=
"USE_RELATIVE_INDENTS"
value=
"false"
/>
</value>
</value>
</option>
</option>
<option
name=
"LINE_SEPARATOR"
value=
"
"
/>
<option
name=
"LINE_SEPARATOR"
value=
"
"
/>
<option
name=
"CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND"
value=
"99"
/>
<option
name=
"CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND"
value=
"99"
/>
<option
name=
"NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND"
value=
"99"
/>
<option
name=
"NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND"
value=
"99"
/>
<option
name=
"PACKAGES_TO_USE_IMPORT_ON_DEMAND"
>
<option
name=
"PACKAGES_TO_USE_IMPORT_ON_DEMAND"
>
<value
/>
<value
/>
</option>
</option>
<option
name=
"IMPORT_LAYOUT_TABLE"
>
<option
name=
"IMPORT_LAYOUT_TABLE"
>
<value>
<value>
<package
name=
""
withSubpackages=
"true"
static=
"true"
/>
<package
name=
""
withSubpackages=
"true"
static=
"true"
/>
<emptyLine
/>
<emptyLine
/>
<package
name=
"com.google"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"com.google"
withSubpackages=
"true"
static=
"false"
/>
<emptyLine
/>
<emptyLine
/>
<package
name=
"android"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"android"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"antenna"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"antenna"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"antlr"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"antlr"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"ar"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"ar"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"asposewobfuscated"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"asposewobfuscated"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"asquare"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"asquare"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"atg"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"atg"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"au"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"au"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"beaver"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"beaver"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"bibtex"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"bibtex"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"bmsi"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"bmsi"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"bsh"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"bsh"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"ccl"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"ccl"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"cern"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"cern"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"ChartDirector"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"ChartDirector"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"checkers"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"checkers"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"com"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"com"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"COM"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"COM"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"common"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"common"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"contribs"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"contribs"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"corejava"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"corejava"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"cryptix"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"cryptix"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"cybervillains"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"cybervillains"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"dalvik"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"dalvik"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"danbikel"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"danbikel"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"de"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"de"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"EDU"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"EDU"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"eg"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"eg"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"eu"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"eu"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"examples"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"examples"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"fat"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"fat"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"fit"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"fit"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"fitlibrary"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"fitlibrary"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"fmpp"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"fmpp"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"freemarker"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"freemarker"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"gnu"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"gnu"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"groovy"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"groovy"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"groovyjarjarantlr"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"groovyjarjarantlr"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"groovyjarjarasm"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"groovyjarjarasm"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"hak"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"hak"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"hep"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"hep"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"ie"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"ie"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"io"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"io"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"imageinfo"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"imageinfo"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"info"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"info"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"it"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"it"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jal"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jal"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"Jama"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"Jama"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"japa"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"japa"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"japacheckers"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"japacheckers"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jas"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jas"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jasmin"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jasmin"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"javancss"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"javancss"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"javanet"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"javanet"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"javassist"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"javassist"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"javazoom"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"javazoom"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"java_cup"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"java_cup"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jcifs"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jcifs"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jetty"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jetty"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"JFlex"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"JFlex"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jj2000"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jj2000"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jline"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jline"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jp"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jp"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"JSci"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"JSci"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jsr166y"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jsr166y"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"junit"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"junit"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jxl"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jxl"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jxxload_help"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"jxxload_help"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"kawa"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"kawa"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"kea"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"kea"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"libcore"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"libcore"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"libsvm"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"libsvm"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"lti"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"lti"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"memetic"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"memetic"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"mt"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"mt"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"mx4j"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"mx4j"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"net"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"net"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"netscape"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"netscape"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"nl"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"nl"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"nu"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"nu"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"oauth"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"oauth"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"ognl"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"ognl"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"opennlp"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"opennlp"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"oracle"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"oracle"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"org"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"org"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"penn2dg"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"penn2dg"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"pennconverter"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"pennconverter"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"pl"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"pl"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"prefuse"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"prefuse"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"proguard"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"proguard"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"repackage"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"repackage"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"scm"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"scm"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"se"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"se"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"serp"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"serp"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"simple"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"simple"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"soot"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"soot"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"sqlj"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"sqlj"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"src"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"src"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"ssa"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"ssa"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"sun"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"sun"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"sunlabs"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"sunlabs"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"tcl"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"tcl"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"testdata"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"testdata"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"testshell"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"testshell"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"testsuite"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"testsuite"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"twitter4j"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"twitter4j"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"uk"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"uk"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"ViolinStrings"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"ViolinStrings"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"weka"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"weka"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"wet"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"wet"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"winstone"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"winstone"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"woolfel"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"woolfel"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"wowza"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"wowza"
withSubpackages=
"true"
static=
"false"
/>
<emptyLine
/>
<emptyLine
/>
<package
name=
"java"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"java"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"javax"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
"javax"
withSubpackages=
"true"
static=
"false"
/>
<package
name=
""
withSubpackages=
"true"
static=
"false"
/>
<package
name=
""
withSubpackages=
"true"
static=
"false"
/>
</value>
</value>
</option>
</option>
<option
name=
"STATIC_METHODS_ORDER_WEIGHT"
value=
"5"
/>
<option
name=
"STATIC_METHODS_ORDER_WEIGHT"
value=
"5"
/>
<option
name=
"METHODS_ORDER_WEIGHT"
value=
"4"
/>
<option
name=
"METHODS_ORDER_WEIGHT"
value=
"4"
/>
<option
name=
"RIGHT_MARGIN"
value=
"100"
/>
<option
name=
"RIGHT_MARGIN"
value=
"100"
/>
<option
name=
"JD_ALIGN_PARAM_COMMENTS"
value=
"false"
/>
<option
name=
"JD_ALIGN_PARAM_COMMENTS"
value=
"false"
/>
<option
name=
"JD_ALIGN_EXCEPTION_COMMENTS"
value=
"false"
/>
<option
name=
"JD_ALIGN_EXCEPTION_COMMENTS"
value=
"false"
/>
<option
name=
"JD_ADD_BLANK_AFTER_DESCRIPTION"
value=
"false"
/>
<option
name=
"JD_ADD_BLANK_AFTER_DESCRIPTION"
value=
"false"
/>
<option
name=
"JD_P_AT_EMPTY_LINES"
value=
"false"
/>
<option
name=
"JD_P_AT_EMPTY_LINES"
value=
"false"
/>
<option
name=
"JD_KEEP_EMPTY_PARAMETER"
value=
"false"
/>
<option
name=
"JD_KEEP_EMPTY_PARAMETER"
value=
"false"
/>
<option
name=
"JD_KEEP_EMPTY_EXCEPTION"
value=
"false"
/>
<option
name=
"JD_KEEP_EMPTY_EXCEPTION"
value=
"false"
/>
<option
name=
"JD_KEEP_EMPTY_RETURN"
value=
"false"
/>
<option
name=
"JD_KEEP_EMPTY_RETURN"
value=
"false"
/>
<option
name=
"HTML_KEEP_BLANK_LINES"
value=
"1"
/>
<option
name=
"HTML_KEEP_BLANK_LINES"
value=
"1"
/>
<option
name=
"HTML_ALIGN_TEXT"
value=
"true"
/>
<option
name=
"HTML_ALIGN_TEXT"
value=
"true"
/>
<option
name=
"KEEP_LINE_BREAKS"
value=
"false"
/>
<option
name=
"KEEP_LINE_BREAKS"
value=
"false"
/>
<option
name=
"KEEP_FIRST_COLUMN_COMMENT"
value=
"false"
/>
<option
name=
"KEEP_FIRST_COLUMN_COMMENT"
value=
"false"
/>
<option
name=
"KEEP_CONTROL_STATEMENT_IN_ONE_LINE"
value=
"false"
/>
<option
name=
"KEEP_CONTROL_STATEMENT_IN_ONE_LINE"
value=
"false"
/>
<option
name=
"KEEP_BLANK_LINES_IN_DECLARATIONS"
value=
"1"
/>
<option
name=
"KEEP_BLANK_LINES_IN_DECLARATIONS"
value=
"1"
/>
<option
name=
"KEEP_BLANK_LINES_IN_CODE"
value=
"1"
/>
<option
name=
"KEEP_BLANK_LINES_IN_CODE"
value=
"1"
/>
<option
name=
"KEEP_BLANK_LINES_BEFORE_RBRACE"
value=
"1"
/>
<option
name=
"KEEP_BLANK_LINES_BEFORE_RBRACE"
value=
"1"
/>
<option
name=
"BLANK_LINES_AROUND_CLASS"
value=
"0"
/>
<option
name=
"BLANK_LINES_AROUND_CLASS"
value=
"0"
/>
<option
name=
"BLANK_LINES_AROUND_FIELD"
value=
"1"
/>
<option
name=
"BLANK_LINES_AROUND_FIELD"
value=
"1"
/>
<option
name=
"BLANK_LINES_AFTER_CLASS_HEADER"
value=
"1"
/>
<option
name=
"BLANK_LINES_AFTER_CLASS_HEADER"
value=
"1"
/>
<option
name=
"BRACE_STYLE"
value=
"2"
/>
<option
name=
"BRACE_STYLE"
value=
"2"
/>
<option
name=
"CLASS_BRACE_STYLE"
value=
"2"
/>
<option
name=
"CLASS_BRACE_STYLE"
value=
"2"
/>
<option
name=
"METHOD_BRACE_STYLE"
value=
"2"
/>
<option
name=
"METHOD_BRACE_STYLE"
value=
"2"
/>
<option
name=
"ELSE_ON_NEW_LINE"
value=
"true"
/>
<option
name=
"ELSE_ON_NEW_LINE"
value=
"true"
/>
<option
name=
"WHILE_ON_NEW_LINE"
value=
"true"
/>
<option
name=
"WHILE_ON_NEW_LINE"
value=
"true"
/>
<option
name=
"CATCH_ON_NEW_LINE"
value=
"true"
/>
<option
name=
"CATCH_ON_NEW_LINE"
value=
"true"
/>
<option
name=
"FINALLY_ON_NEW_LINE"
value=
"true"
/>
<option
name=
"FINALLY_ON_NEW_LINE"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_PARAMETERS_IN_CALLS"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_PARAMETERS_IN_CALLS"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_BINARY_OPERATION"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_BINARY_OPERATION"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_ASSIGNMENT"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_ASSIGNMENT"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_TERNARY_OPERATION"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_TERNARY_OPERATION"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_THROWS_LIST"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_THROWS_LIST"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_EXTENDS_LIST"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_EXTENDS_LIST"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_PARENTHESIZED_EXPRESSION"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_PARENTHESIZED_EXPRESSION"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION"
value=
"true"
/>
<option
name=
"SPACE_AFTER_TYPE_CAST"
value=
"false"
/>
<option
name=
"SPACE_AFTER_TYPE_CAST"
value=
"false"
/>
<option
name=
"SPACE_BEFORE_IF_PARENTHESES"
value=
"false"
/>
<option
name=
"SPACE_BEFORE_IF_PARENTHESES"
value=
"false"
/>
<option
name=
"SPACE_BEFORE_WHILE_PARENTHESES"
value=
"false"
/>
<option
name=
"SPACE_BEFORE_WHILE_PARENTHESES"
value=
"false"
/>
<option
name=
"SPACE_BEFORE_FOR_PARENTHESES"
value=
"false"
/>
<option
name=
"SPACE_BEFORE_FOR_PARENTHESES"
value=
"false"
/>
<option
name=
"SPACE_BEFORE_CATCH_PARENTHESES"
value=
"false"
/>
<option
name=
"SPACE_BEFORE_CATCH_PARENTHESES"
value=
"false"
/>
<option
name=
"SPACE_BEFORE_SWITCH_PARENTHESES"
value=
"false"
/>
<option
name=
"SPACE_BEFORE_SWITCH_PARENTHESES"
value=
"false"
/>
<option
name=
"SPACE_BEFORE_SYNCHRONIZED_PARENTHESES"
value=
"false"
/>
<option
name=
"SPACE_BEFORE_SYNCHRONIZED_PARENTHESES"
value=
"false"
/>
<option
name=
"CALL_PARAMETERS_WRAP"
value=
"1"
/>
<option
name=
"CALL_PARAMETERS_WRAP"
value=
"1"
/>
<option
name=
"CALL_PARAMETERS_LPAREN_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"CALL_PARAMETERS_LPAREN_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"METHOD_PARAMETERS_WRAP"
value=
"1"
/>
<option
name=
"METHOD_PARAMETERS_WRAP"
value=
"1"
/>
<option
name=
"EXTENDS_LIST_WRAP"
value=
"1"
/>
<option
name=
"EXTENDS_LIST_WRAP"
value=
"1"
/>
<option
name=
"THROWS_LIST_WRAP"
value=
"1"
/>
<option
name=
"THROWS_LIST_WRAP"
value=
"1"
/>
<option
name=
"EXTENDS_KEYWORD_WRAP"
value=
"1"
/>
<option
name=
"EXTENDS_KEYWORD_WRAP"
value=
"1"
/>
<option
name=
"THROWS_KEYWORD_WRAP"
value=
"1"
/>
<option
name=
"THROWS_KEYWORD_WRAP"
value=
"1"
/>
<option
name=
"METHOD_CALL_CHAIN_WRAP"
value=
"1"
/>
<option
name=
"METHOD_CALL_CHAIN_WRAP"
value=
"1"
/>
<option
name=
"BINARY_OPERATION_WRAP"
value=
"1"
/>
<option
name=
"BINARY_OPERATION_WRAP"
value=
"1"
/>
<option
name=
"BINARY_OPERATION_SIGN_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"BINARY_OPERATION_SIGN_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"TERNARY_OPERATION_WRAP"
value=
"1"
/>
<option
name=
"TERNARY_OPERATION_WRAP"
value=
"1"
/>
<option
name=
"TERNARY_OPERATION_SIGNS_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"TERNARY_OPERATION_SIGNS_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"FOR_STATEMENT_WRAP"
value=
"1"
/>
<option
name=
"FOR_STATEMENT_WRAP"
value=
"1"
/>
<option
name=
"ARRAY_INITIALIZER_WRAP"
value=
"1"
/>
<option
name=
"ARRAY_INITIALIZER_WRAP"
value=
"1"
/>
<option
name=
"ASSIGNMENT_WRAP"
value=
"5"
/>
<option
name=
"ASSIGNMENT_WRAP"
value=
"5"
/>
<option
name=
"WRAP_COMMENTS"
value=
"true"
/>
<option
name=
"WRAP_COMMENTS"
value=
"true"
/>
<option
name=
"IF_BRACE_FORCE"
value=
"3"
/>
<option
name=
"IF_BRACE_FORCE"
value=
"3"
/>
<option
name=
"DOWHILE_BRACE_FORCE"
value=
"3"
/>
<option
name=
"DOWHILE_BRACE_FORCE"
value=
"3"
/>
<option
name=
"WHILE_BRACE_FORCE"
value=
"3"
/>
<option
name=
"WHILE_BRACE_FORCE"
value=
"3"
/>
<option
name=
"FOR_BRACE_FORCE"
value=
"3"
/>
<option
name=
"FOR_BRACE_FORCE"
value=
"3"
/>
<JavaCodeStyleSettings>
<JavaCodeStyleSettings>
<option
name=
"DO_NOT_WRAP_AFTER_SINGLE_ANNOTATION"
value=
"true"
/>
<option
name=
"DO_NOT_WRAP_AFTER_SINGLE_ANNOTATION"
value=
"true"
/>
<option
name=
"CLASS_NAMES_IN_JAVADOC"
value=
"3"
/>
<option
name=
"CLASS_NAMES_IN_JAVADOC"
value=
"3"
/>
</JavaCodeStyleSettings>
</JavaCodeStyleSettings>
<MarkdownNavigatorCodeStyleSettings>
<MarkdownNavigatorCodeStyleSettings>
<option
name=
"RIGHT_MARGIN"
value=
"72"
/>
<option
name=
"RIGHT_MARGIN"
value=
"72"
/>
</MarkdownNavigatorCodeStyleSettings>
</MarkdownNavigatorCodeStyleSettings>
<XML>
<XML>
<option
name=
"XML_KEEP_BLANK_LINES"
value=
"1"
/>
<option
name=
"XML_KEEP_BLANK_LINES"
value=
"1"
/>
<option
name=
"XML_LEGACY_SETTINGS_IMPORTED"
value=
"true"
/>
<option
name=
"XML_LEGACY_SETTINGS_IMPORTED"
value=
"true"
/>
</XML>
</XML>
<ADDITIONAL_INDENT_OPTIONS
fileType=
"haml"
>
<ADDITIONAL_INDENT_OPTIONS
fileType=
"haml"
>
<option
name=
"INDENT_SIZE"
value=
"2"
/>
<option
name=
"INDENT_SIZE"
value=
"2"
/>
</ADDITIONAL_INDENT_OPTIONS>
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS
fileType=
"java"
>
<ADDITIONAL_INDENT_OPTIONS
fileType=
"java"
>
<option
name=
"INDENT_SIZE"
value=
"2"
/>
<option
name=
"INDENT_SIZE"
value=
"2"
/>
<option
name=
"CONTINUATION_INDENT_SIZE"
value=
"4"
/>
<option
name=
"CONTINUATION_INDENT_SIZE"
value=
"4"
/>
<option
name=
"TAB_SIZE"
value=
"8"
/>
<option
name=
"TAB_SIZE"
value=
"8"
/>
</ADDITIONAL_INDENT_OPTIONS>
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS
fileType=
"js"
>
<ADDITIONAL_INDENT_OPTIONS
fileType=
"js"
>
<option
name=
"CONTINUATION_INDENT_SIZE"
value=
"4"
/>
<option
name=
"CONTINUATION_INDENT_SIZE"
value=
"4"
/>
</ADDITIONAL_INDENT_OPTIONS>
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS
fileType=
"sass"
>
<ADDITIONAL_INDENT_OPTIONS
fileType=
"sass"
>
<option
name=
"INDENT_SIZE"
value=
"2"
/>
<option
name=
"INDENT_SIZE"
value=
"2"
/>
</ADDITIONAL_INDENT_OPTIONS>
</ADDITIONAL_INDENT_OPTIONS>
<ADDITIONAL_INDENT_OPTIONS
fileType=
"yml"
>
<ADDITIONAL_INDENT_OPTIONS
fileType=
"yml"
>
<option
name=
"INDENT_SIZE"
value=
"2"
/>
<option
name=
"INDENT_SIZE"
value=
"2"
/>
</ADDITIONAL_INDENT_OPTIONS>
</ADDITIONAL_INDENT_OPTIONS>
<codeStyleSettings
language=
"ECMA Script Level 4"
>
<codeStyleSettings
language=
"ECMA Script Level 4"
>
<option
name=
"KEEP_BLANK_LINES_IN_CODE"
value=
"1"
/>
<option
name=
"KEEP_BLANK_LINES_IN_CODE"
value=
"1"
/>
<option
name=
"ALIGN_MULTILINE_PARAMETERS_IN_CALLS"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_PARAMETERS_IN_CALLS"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_BINARY_OPERATION"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_BINARY_OPERATION"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_TERNARY_OPERATION"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_TERNARY_OPERATION"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_EXTENDS_LIST"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_EXTENDS_LIST"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION"
value=
"true"
/>
<option
name=
"CALL_PARAMETERS_WRAP"
value=
"1"
/>
<option
name=
"CALL_PARAMETERS_WRAP"
value=
"1"
/>
<option
name=
"METHOD_PARAMETERS_WRAP"
value=
"1"
/>
<option
name=
"METHOD_PARAMETERS_WRAP"
value=
"1"
/>
<option
name=
"EXTENDS_LIST_WRAP"
value=
"1"
/>
<option
name=
"EXTENDS_LIST_WRAP"
value=
"1"
/>
<option
name=
"EXTENDS_KEYWORD_WRAP"
value=
"1"
/>
<option
name=
"EXTENDS_KEYWORD_WRAP"
value=
"1"
/>
<option
name=
"METHOD_CALL_CHAIN_WRAP"
value=
"1"
/>
<option
name=
"METHOD_CALL_CHAIN_WRAP"
value=
"1"
/>
<option
name=
"BINARY_OPERATION_WRAP"
value=
"1"
/>
<option
name=
"BINARY_OPERATION_WRAP"
value=
"1"
/>
<option
name=
"BINARY_OPERATION_SIGN_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"BINARY_OPERATION_SIGN_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"TERNARY_OPERATION_WRAP"
value=
"1"
/>
<option
name=
"TERNARY_OPERATION_WRAP"
value=
"1"
/>
<option
name=
"TERNARY_OPERATION_SIGNS_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"TERNARY_OPERATION_SIGNS_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"FOR_STATEMENT_WRAP"
value=
"1"
/>
<option
name=
"FOR_STATEMENT_WRAP"
value=
"1"
/>
<option
name=
"ARRAY_INITIALIZER_WRAP"
value=
"1"
/>
<option
name=
"ARRAY_INITIALIZER_WRAP"
value=
"1"
/>
<option
name=
"ASSIGNMENT_WRAP"
value=
"5"
/>
<option
name=
"ASSIGNMENT_WRAP"
value=
"5"
/>
<option
name=
"WRAP_COMMENTS"
value=
"true"
/>
<option
name=
"WRAP_COMMENTS"
value=
"true"
/>
<option
name=
"IF_BRACE_FORCE"
value=
"3"
/>
<option
name=
"IF_BRACE_FORCE"
value=
"3"
/>
<option
name=
"DOWHILE_BRACE_FORCE"
value=
"3"
/>
<option
name=
"DOWHILE_BRACE_FORCE"
value=
"3"
/>
<option
name=
"WHILE_BRACE_FORCE"
value=
"3"
/>
<option
name=
"WHILE_BRACE_FORCE"
value=
"3"
/>
<option
name=
"FOR_BRACE_FORCE"
value=
"3"
/>
<option
name=
"FOR_BRACE_FORCE"
value=
"3"
/>
<option
name=
"PARENT_SETTINGS_INSTALLED"
value=
"true"
/>
<option
name=
"PARENT_SETTINGS_INSTALLED"
value=
"true"
/>
</codeStyleSettings>
</codeStyleSettings>
<codeStyleSettings
language=
"JAVA"
>
<codeStyleSettings
language=
"JAVA"
>
<option
name=
"RIGHT_MARGIN"
value=
"100"
/>
<option
name=
"RIGHT_MARGIN"
value=
"100"
/>
<option
name=
"KEEP_CONTROL_STATEMENT_IN_ONE_LINE"
value=
"false"
/>
<option
name=
"KEEP_CONTROL_STATEMENT_IN_ONE_LINE"
value=
"false"
/>
<option
name=
"KEEP_BLANK_LINES_IN_CODE"
value=
"1"
/>
<option
name=
"KEEP_BLANK_LINES_IN_CODE"
value=
"1"
/>
<option
name=
"CALL_PARAMETERS_WRAP"
value=
"1"
/>
<option
name=
"CALL_PARAMETERS_WRAP"
value=
"1"
/>
<option
name=
"METHOD_PARAMETERS_WRAP"
value=
"1"
/>
<option
name=
"METHOD_PARAMETERS_WRAP"
value=
"1"
/>
<option
name=
"EXTENDS_LIST_WRAP"
value=
"1"
/>
<option
name=
"EXTENDS_LIST_WRAP"
value=
"1"
/>
<option
name=
"THROWS_LIST_WRAP"
value=
"1"
/>
<option
name=
"THROWS_LIST_WRAP"
value=
"1"
/>
<option
name=
"EXTENDS_KEYWORD_WRAP"
value=
"1"
/>
<option
name=
"EXTENDS_KEYWORD_WRAP"
value=
"1"
/>
<option
name=
"THROWS_KEYWORD_WRAP"
value=
"1"
/>
<option
name=
"THROWS_KEYWORD_WRAP"
value=
"1"
/>
<option
name=
"METHOD_CALL_CHAIN_WRAP"
value=
"1"
/>
<option
name=
"METHOD_CALL_CHAIN_WRAP"
value=
"1"
/>
<option
name=
"BINARY_OPERATION_WRAP"
value=
"1"
/>
<option
name=
"BINARY_OPERATION_WRAP"
value=
"1"
/>
<option
name=
"BINARY_OPERATION_SIGN_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"BINARY_OPERATION_SIGN_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"TERNARY_OPERATION_WRAP"
value=
"1"
/>
<option
name=
"TERNARY_OPERATION_WRAP"
value=
"1"
/>
<option
name=
"TERNARY_OPERATION_SIGNS_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"TERNARY_OPERATION_SIGNS_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"FOR_STATEMENT_WRAP"
value=
"1"
/>
<option
name=
"FOR_STATEMENT_WRAP"
value=
"1"
/>
<option
name=
"ARRAY_INITIALIZER_WRAP"
value=
"1"
/>
<option
name=
"ARRAY_INITIALIZER_WRAP"
value=
"1"
/>
<option
name=
"ASSIGNMENT_WRAP"
value=
"5"
/>
<option
name=
"ASSIGNMENT_WRAP"
value=
"5"
/>
<option
name=
"IF_BRACE_FORCE"
value=
"3"
/>
<option
name=
"IF_BRACE_FORCE"
value=
"3"
/>
<option
name=
"DOWHILE_BRACE_FORCE"
value=
"3"
/>
<option
name=
"DOWHILE_BRACE_FORCE"
value=
"3"
/>
<option
name=
"WHILE_BRACE_FORCE"
value=
"3"
/>
<option
name=
"WHILE_BRACE_FORCE"
value=
"3"
/>
<option
name=
"FOR_BRACE_FORCE"
value=
"3"
/>
<option
name=
"FOR_BRACE_FORCE"
value=
"3"
/>
<indentOptions>
<indentOptions>
<option
name=
"INDENT_SIZE"
value=
"2"
/>
<option
name=
"INDENT_SIZE"
value=
"2"
/>
<option
name=
"CONTINUATION_INDENT_SIZE"
value=
"4"
/>
<option
name=
"CONTINUATION_INDENT_SIZE"
value=
"4"
/>
<option
name=
"TAB_SIZE"
value=
"8"
/>
<option
name=
"TAB_SIZE"
value=
"8"
/>
</indentOptions>
</indentOptions>
</codeStyleSettings>
</codeStyleSettings>
<codeStyleSettings
language=
"JavaScript"
>
<codeStyleSettings
language=
"JavaScript"
>
<option
name=
"KEEP_BLANK_LINES_IN_CODE"
value=
"1"
/>
<option
name=
"KEEP_BLANK_LINES_IN_CODE"
value=
"1"
/>
<option
name=
"ALIGN_MULTILINE_PARAMETERS_IN_CALLS"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_PARAMETERS_IN_CALLS"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_BINARY_OPERATION"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_BINARY_OPERATION"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_TERNARY_OPERATION"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_TERNARY_OPERATION"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION"
value=
"true"
/>
<option
name=
"CALL_PARAMETERS_WRAP"
value=
"1"
/>
<option
name=
"CALL_PARAMETERS_WRAP"
value=
"1"
/>
<option
name=
"METHOD_PARAMETERS_WRAP"
value=
"1"
/>
<option
name=
"METHOD_PARAMETERS_WRAP"
value=
"1"
/>
<option
name=
"METHOD_CALL_CHAIN_WRAP"
value=
"1"
/>
<option
name=
"METHOD_CALL_CHAIN_WRAP"
value=
"1"
/>
<option
name=
"BINARY_OPERATION_WRAP"
value=
"1"
/>
<option
name=
"BINARY_OPERATION_WRAP"
value=
"1"
/>
<option
name=
"BINARY_OPERATION_SIGN_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"BINARY_OPERATION_SIGN_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"TERNARY_OPERATION_WRAP"
value=
"1"
/>
<option
name=
"TERNARY_OPERATION_WRAP"
value=
"1"
/>
<option
name=
"TERNARY_OPERATION_SIGNS_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"TERNARY_OPERATION_SIGNS_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"FOR_STATEMENT_WRAP"
value=
"1"
/>
<option
name=
"FOR_STATEMENT_WRAP"
value=
"1"
/>
<option
name=
"ARRAY_INITIALIZER_WRAP"
value=
"1"
/>
<option
name=
"ARRAY_INITIALIZER_WRAP"
value=
"1"
/>
<option
name=
"ASSIGNMENT_WRAP"
value=
"5"
/>
<option
name=
"ASSIGNMENT_WRAP"
value=
"5"
/>
<option
name=
"WRAP_COMMENTS"
value=
"true"
/>
<option
name=
"WRAP_COMMENTS"
value=
"true"
/>
<option
name=
"IF_BRACE_FORCE"
value=
"3"
/>
<option
name=
"IF_BRACE_FORCE"
value=
"3"
/>
<option
name=
"DOWHILE_BRACE_FORCE"
value=
"3"
/>
<option
name=
"DOWHILE_BRACE_FORCE"
value=
"3"
/>
<option
name=
"WHILE_BRACE_FORCE"
value=
"3"
/>
<option
name=
"WHILE_BRACE_FORCE"
value=
"3"
/>
<option
name=
"FOR_BRACE_FORCE"
value=
"3"
/>
<option
name=
"FOR_BRACE_FORCE"
value=
"3"
/>
<option
name=
"PARENT_SETTINGS_INSTALLED"
value=
"true"
/>
<option
name=
"PARENT_SETTINGS_INSTALLED"
value=
"true"
/>
</codeStyleSettings>
</codeStyleSettings>
<codeStyleSettings
language=
"PHP"
>
<codeStyleSettings
language=
"PHP"
>
<option
name=
"KEEP_CONTROL_STATEMENT_IN_ONE_LINE"
value=
"false"
/>
<option
name=
"KEEP_CONTROL_STATEMENT_IN_ONE_LINE"
value=
"false"
/>
<option
name=
"KEEP_BLANK_LINES_IN_CODE"
value=
"1"
/>
<option
name=
"KEEP_BLANK_LINES_IN_CODE"
value=
"1"
/>
<option
name=
"BLANK_LINES_AFTER_CLASS_HEADER"
value=
"1"
/>
<option
name=
"BLANK_LINES_AFTER_CLASS_HEADER"
value=
"1"
/>
<option
name=
"ALIGN_MULTILINE_ASSIGNMENT"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_ASSIGNMENT"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_TERNARY_OPERATION"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_TERNARY_OPERATION"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_THROWS_LIST"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_THROWS_LIST"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_EXTENDS_LIST"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_EXTENDS_LIST"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_PARENTHESIZED_EXPRESSION"
value=
"true"
/>
<option
name=
"ALIGN_MULTILINE_PARENTHESIZED_EXPRESSION"
value=
"true"
/>
<option
name=
"CALL_PARAMETERS_WRAP"
value=
"1"
/>
<option
name=
"CALL_PARAMETERS_WRAP"
value=
"1"
/>
<option
name=
"METHOD_PARAMETERS_WRAP"
value=
"1"
/>
<option
name=
"METHOD_PARAMETERS_WRAP"
value=
"1"
/>
<option
name=
"EXTENDS_LIST_WRAP"
value=
"1"
/>
<option
name=
"EXTENDS_LIST_WRAP"
value=
"1"
/>
<option
name=
"THROWS_LIST_WRAP"
value=
"1"
/>
<option
name=
"THROWS_LIST_WRAP"
value=
"1"
/>
<option
name=
"EXTENDS_KEYWORD_WRAP"
value=
"1"
/>
<option
name=
"EXTENDS_KEYWORD_WRAP"
value=
"1"
/>
<option
name=
"THROWS_KEYWORD_WRAP"
value=
"1"
/>
<option
name=
"THROWS_KEYWORD_WRAP"
value=
"1"
/>
<option
name=
"METHOD_CALL_CHAIN_WRAP"
value=
"1"
/>
<option
name=
"METHOD_CALL_CHAIN_WRAP"
value=
"1"
/>
<option
name=
"BINARY_OPERATION_WRAP"
value=
"1"
/>
<option
name=
"BINARY_OPERATION_WRAP"
value=
"1"
/>
<option
name=
"BINARY_OPERATION_SIGN_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"BINARY_OPERATION_SIGN_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"TERNARY_OPERATION_WRAP"
value=
"1"
/>
<option
name=
"TERNARY_OPERATION_WRAP"
value=
"1"
/>
<option
name=
"TERNARY_OPERATION_SIGNS_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"TERNARY_OPERATION_SIGNS_ON_NEXT_LINE"
value=
"true"
/>
<option
name=
"FOR_STATEMENT_WRAP"
value=
"1"
/>
<option
name=
"FOR_STATEMENT_WRAP"
value=
"1"
/>
<option
name=
"ARRAY_INITIALIZER_WRAP"
value=
"1"
/>
<option
name=
"ARRAY_INITIALIZER_WRAP"
value=
"1"
/>
<option
name=
"ASSIGNMENT_WRAP"
value=
"5"
/>
<option
name=
"ASSIGNMENT_WRAP"
value=
"5"
/>
<option
name=
"WRAP_COMMENTS"
value=
"true"
/>
<option
name=
"WRAP_COMMENTS"
value=
"true"
/>
<option
name=
"IF_BRACE_FORCE"
value=
"3"
/>
<option
name=
"IF_BRACE_FORCE"
value=
"3"
/>
<option
name=
"DOWHILE_BRACE_FORCE"
value=
"3"
/>
<option
name=
"DOWHILE_BRACE_FORCE"
value=
"3"
/>
<option
name=
"WHILE_BRACE_FORCE"
value=
"3"
/>
<option
name=
"WHILE_BRACE_FORCE"
value=
"3"
/>
<option
name=
"FOR_BRACE_FORCE"
value=
"3"
/>
<option
name=
"FOR_BRACE_FORCE"
value=
"3"
/>
<option
name=
"PARENT_SETTINGS_INSTALLED"
value=
"true"
/>
<option
name=
"PARENT_SETTINGS_INSTALLED"
value=
"true"
/>
<indentOptions>
<indentOptions>
<option
name=
"INDENT_SIZE"
value=
"4"
/>
<option
name=
"INDENT_SIZE"
value=
"4"
/>
<option
name=
"CONTINUATION_INDENT_SIZE"
value=
"8"
/>
<option
name=
"CONTINUATION_INDENT_SIZE"
value=
"8"
/>
<option
name=
"TAB_SIZE"
value=
"4"
/>
<option
name=
"TAB_SIZE"
value=
"4"
/>
<option
name=
"USE_TAB_CHARACTER"
value=
"false"
/>
<option
name=
"USE_TAB_CHARACTER"
value=
"false"
/>
<option
name=
"SMART_TABS"
value=
"false"
/>
<option
name=
"SMART_TABS"
value=
"false"
/>
<option
name=
"LABEL_INDENT_SIZE"
value=
"0"
/>
<option
name=
"LABEL_INDENT_SIZE"
value=
"0"
/>
<option
name=
"LABEL_INDENT_ABSOLUTE"
value=
"false"
/>
<option
name=
"LABEL_INDENT_ABSOLUTE"
value=
"false"
/>
<option
name=
"USE_RELATIVE_INDENTS"
value=
"false"
/>
<option
name=
"USE_RELATIVE_INDENTS"
value=
"false"
/>
</indentOptions>
</indentOptions>
</codeStyleSettings>
</codeStyleSettings>
</code_scheme>
</code_scheme>
\ No newline at end of file
dependencies.gradle
View file @
9c34af88
log-wrapper/build.gradle
View file @
9c34af88
realm-helpers/build.gradle
View file @
9c34af88
realm-helpers/src/main/java/chat/rocket/android/realm_helper/AbstractRealmResultsObserver.java
View file @
9c34af88
...
@@ -6,21 +6,19 @@ import io.realm.RealmObject;
...
@@ -6,21 +6,19 @@ import io.realm.RealmObject;
import
io.realm.RealmResults
;
import
io.realm.RealmResults
;
abstract
class
AbstractRealmResultsObserver
<
T
extends
RealmObject
>
{
abstract
class
AbstractRealmResultsObserver
<
T
extends
RealmObject
>
{
private
final
RealmHelper
helper
;
protected
Realm
realm
;
protected
Realm
realm
;
private
RealmChangeListener
<
RealmResults
<
T
>>
listener
;
private
RealmChangeListener
<
RealmResults
<
T
>>
listener
;
protected
abstract
RealmResults
<
T
>
queryItems
(
Realm
realm
);
protected
abstract
RealmChangeListener
<
RealmResults
<
T
>>
getListener
();
private
RealmResults
<
T
>
results
;
private
RealmResults
<
T
>
results
;
private
final
RealmHelper
helper
;
protected
AbstractRealmResultsObserver
(
RealmHelper
helper
)
{
protected
AbstractRealmResultsObserver
(
RealmHelper
helper
)
{
this
.
helper
=
helper
;
this
.
helper
=
helper
;
}
}
protected
abstract
RealmResults
<
T
>
queryItems
(
Realm
realm
);
protected
abstract
RealmChangeListener
<
RealmResults
<
T
>>
getListener
();
public
void
sub
()
{
public
void
sub
()
{
unsub
();
unsub
();
...
...
realm-helpers/src/main/java/chat/rocket/android/realm_helper/RealmAutoCompleteAdapter.java
View file @
9c34af88
...
@@ -11,6 +11,7 @@ import android.widget.TextView;
...
@@ -11,6 +11,7 @@ import android.widget.TextView;
import
io.realm.Realm
;
import
io.realm.Realm
;
import
io.realm.RealmObject
;
import
io.realm.RealmObject
;
import
io.realm.RealmResults
;
import
io.realm.RealmResults
;
import
java.util.Collections
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.List
;
...
@@ -18,6 +19,51 @@ import java.util.List;
...
@@ -18,6 +19,51 @@ import java.util.List;
* ListAdapter for AutoCompleteTextView.
* ListAdapter for AutoCompleteTextView.
*/
*/
public
abstract
class
RealmAutoCompleteAdapter
<
T
extends
RealmObject
>
extends
ArrayAdapter
<
T
>
{
public
abstract
class
RealmAutoCompleteAdapter
<
T
extends
RealmObject
>
extends
ArrayAdapter
<
T
>
{
private
final
int
textViewResourceId
;
private
RealmHelper
realmHelper
;
private
AutoCompleteFilter
filter
;
/**
* NOTE
* getStringForSelectedItem(T model) is automatically set to the TextView(id=textViewResourceId).
*/
protected
RealmAutoCompleteAdapter
(
Context
context
,
int
resource
,
int
textViewResourceId
)
{
super
(
context
,
resource
,
textViewResourceId
);
this
.
textViewResourceId
=
textViewResourceId
;
}
protected
void
filterList
(
List
<
T
>
items
,
String
text
)
{
}
/*package*/
RealmAutoCompleteAdapter
<
T
>
initializeWith
(
RealmHelper
realmHelper
,
RealmFilter
<
T
>
itemFilter
)
{
this
.
realmHelper
=
realmHelper
;
this
.
filter
=
new
AutoCompleteFilter
<
T
>(
this
,
itemFilter
);
return
this
;
}
@NonNull
@Override
public
Filter
getFilter
()
{
return
filter
;
}
@NonNull
@Override
public
final
View
getView
(
int
position
,
View
convertView
,
@NonNull
ViewGroup
parent
)
{
View
itemView
=
super
.
getView
(
position
,
convertView
,
parent
);
T
item
=
getItem
(
position
);
TextView
textView
=
(
TextView
)
itemView
.
findViewById
(
textViewResourceId
);
textView
.
setText
(
getStringForSelectedItem
(
item
));
onBindItemView
(
itemView
,
item
);
return
itemView
;
}
protected
abstract
void
onBindItemView
(
View
itemView
,
T
model
);
protected
abstract
String
getStringForSelectedItem
(
T
model
);
public
interface
Constructor
<
T
extends
RealmObject
>
{
public
interface
Constructor
<
T
extends
RealmObject
>
{
RealmAutoCompleteAdapter
<
T
>
getNewInstance
(
Context
context
);
RealmAutoCompleteAdapter
<
T
>
getNewInstance
(
Context
context
);
}
}
...
@@ -26,9 +72,6 @@ public abstract class RealmAutoCompleteAdapter<T extends RealmObject> extends Ar
...
@@ -26,9 +72,6 @@ public abstract class RealmAutoCompleteAdapter<T extends RealmObject> extends Ar
RealmResults
<
T
>
filterItems
(
Realm
realm
,
String
text
);
RealmResults
<
T
>
filterItems
(
Realm
realm
,
String
text
);
}
}
protected
void
filterList
(
List
<
T
>
items
,
String
text
)
{
}
/**
/**
* Filter for completion.
* Filter for completion.
*/
*/
...
@@ -36,12 +79,14 @@ public abstract class RealmAutoCompleteAdapter<T extends RealmObject> extends Ar
...
@@ -36,12 +79,14 @@ public abstract class RealmAutoCompleteAdapter<T extends RealmObject> extends Ar
private
final
RealmAutoCompleteAdapter
<
T
>
adapter
;
private
final
RealmAutoCompleteAdapter
<
T
>
adapter
;
private
final
RealmFilter
<
T
>
realmFilter
;
private
final
RealmFilter
<
T
>
realmFilter
;
/*package*/
AutoCompleteFilter
(
RealmAutoCompleteAdapter
<
T
>
adapter
,
RealmFilter
<
T
>
realmFilter
)
{
/*package*/
AutoCompleteFilter
(
RealmAutoCompleteAdapter
<
T
>
adapter
,
RealmFilter
<
T
>
realmFilter
)
{
this
.
adapter
=
adapter
;
this
.
adapter
=
adapter
;
this
.
realmFilter
=
realmFilter
;
this
.
realmFilter
=
realmFilter
;
}
}
@Override
protected
FilterResults
performFiltering
(
CharSequence
charSequence
)
{
@Override
protected
FilterResults
performFiltering
(
CharSequence
charSequence
)
{
FilterResults
results
=
new
FilterResults
();
FilterResults
results
=
new
FilterResults
();
if
(
TextUtils
.
isEmpty
(
charSequence
))
{
if
(
TextUtils
.
isEmpty
(
charSequence
))
{
results
.
values
=
Collections
.
emptyList
();
results
.
values
=
Collections
.
emptyList
();
...
@@ -67,48 +112,9 @@ public abstract class RealmAutoCompleteAdapter<T extends RealmObject> extends Ar
...
@@ -67,48 +112,9 @@ public abstract class RealmAutoCompleteAdapter<T extends RealmObject> extends Ar
}
}
}
}
@Override
public
CharSequence
convertResultToString
(
Object
resultValue
)
{
@Override
public
CharSequence
convertResultToString
(
Object
resultValue
)
{
return
adapter
.
getStringForSelectedItem
((
T
)
resultValue
);
return
adapter
.
getStringForSelectedItem
((
T
)
resultValue
);
}
}
}
}
private
RealmHelper
realmHelper
;
private
AutoCompleteFilter
filter
;
private
final
int
textViewResourceId
;
/**
* NOTE
* getStringForSelectedItem(T model) is automatically set to the TextView(id=textViewResourceId).
*/
protected
RealmAutoCompleteAdapter
(
Context
context
,
int
resource
,
int
textViewResourceId
)
{
super
(
context
,
resource
,
textViewResourceId
);
this
.
textViewResourceId
=
textViewResourceId
;
}
/*package*/
RealmAutoCompleteAdapter
<
T
>
initializeWith
(
RealmHelper
realmHelper
,
RealmFilter
<
T
>
itemFilter
)
{
this
.
realmHelper
=
realmHelper
;
this
.
filter
=
new
AutoCompleteFilter
<
T
>(
this
,
itemFilter
);
return
this
;
}
@NonNull
@Override
public
Filter
getFilter
()
{
return
filter
;
}
@NonNull
@Override
public
final
View
getView
(
int
position
,
View
convertView
,
@NonNull
ViewGroup
parent
)
{
View
itemView
=
super
.
getView
(
position
,
convertView
,
parent
);
T
item
=
getItem
(
position
);
TextView
textView
=
(
TextView
)
itemView
.
findViewById
(
textViewResourceId
);
textView
.
setText
(
getStringForSelectedItem
(
item
));
onBindItemView
(
itemView
,
item
);
return
itemView
;
}
protected
abstract
void
onBindItemView
(
View
itemView
,
T
model
);
protected
abstract
String
getStringForSelectedItem
(
T
model
);
}
}
realm-helpers/src/main/java/chat/rocket/android/realm_helper/RealmHelper.java
View file @
9c34af88
...
@@ -4,16 +4,17 @@ import android.annotation.SuppressLint;
...
@@ -4,16 +4,17 @@ import android.annotation.SuppressLint;
import
android.content.Context
;
import
android.content.Context
;
import
android.os.Looper
;
import
android.os.Looper
;
import
android.support.v7.widget.RecyclerView
;
import
android.support.v7.widget.RecyclerView
;
import
bolts.Task
;
import
bolts.TaskCompletionSource
;
import
chat.rocket.android.log.RCLog
;
import
io.realm.Realm
;
import
io.realm.Realm
;
import
io.realm.RealmConfiguration
;
import
io.realm.RealmConfiguration
;
import
io.realm.RealmObject
;
import
io.realm.RealmObject
;
import
io.realm.RealmResults
;
import
io.realm.RealmResults
;
import
org.json.JSONException
;
import
java.util.Collections
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.List
;
import
org.json.JSONException
;
import
bolts.Task
;
import
bolts.TaskCompletionSource
;
import
chat.rocket.android.log.RCLog
;
@SuppressLint
(
"NewApi"
)
@SuppressLint
(
"NewApi"
)
public
class
RealmHelper
{
public
class
RealmHelper
{
...
@@ -52,10 +53,6 @@ public class RealmHelper {
...
@@ -52,10 +53,6 @@ public class RealmHelper {
}
}
}
}
public
interface
Transaction
<
T
>
{
T
execute
(
Realm
realm
)
throws
JSONException
;
}
public
<
T
extends
RealmObject
>
T
executeTransactionForRead
(
Transaction
<
T
>
transaction
)
{
public
<
T
extends
RealmObject
>
T
executeTransactionForRead
(
Transaction
<
T
>
transaction
)
{
try
(
Realm
realm
=
instance
())
{
try
(
Realm
realm
=
instance
())
{
T
source
=
transaction
.
execute
(
realm
);
T
source
=
transaction
.
execute
(
realm
);
...
@@ -159,4 +156,8 @@ public class RealmHelper {
...
@@ -159,4 +156,8 @@ public class RealmHelper {
RealmAutoCompleteAdapter
.
Constructor
constructor
)
{
RealmAutoCompleteAdapter
.
Constructor
constructor
)
{
return
constructor
.
getNewInstance
(
context
).
initializeWith
(
this
,
filter
);
return
constructor
.
getNewInstance
(
context
).
initializeWith
(
this
,
filter
);
}
}
public
interface
Transaction
<
T
>
{
T
execute
(
Realm
realm
)
throws
JSONException
;
}
}
}
realm-helpers/src/main/java/chat/rocket/android/realm_helper/RealmListObserver.java
View file @
9c34af88
...
@@ -4,18 +4,13 @@ import io.realm.Realm;
...
@@ -4,18 +4,13 @@ import io.realm.Realm;
import
io.realm.RealmChangeListener
;
import
io.realm.RealmChangeListener
;
import
io.realm.RealmObject
;
import
io.realm.RealmObject
;
import
io.realm.RealmResults
;
import
io.realm.RealmResults
;
import
java.util.List
;
import
java.util.List
;
public
class
RealmListObserver
<
T
extends
RealmObject
>
extends
AbstractRealmResultsObserver
<
T
>
{
public
class
RealmListObserver
<
T
extends
RealmObject
>
extends
AbstractRealmResultsObserver
<
T
>
{
public
interface
Query
<
T
extends
RealmObject
>
{
RealmResults
<
T
>
queryItems
(
Realm
realm
);
}
public
interface
OnUpdateListener
<
T
extends
RealmObject
>
{
void
onUpdateResults
(
List
<
T
>
results
);
}
private
final
Query
<
T
>
query
;
private
final
Query
<
T
>
query
;
private
OnUpdateListener
<
T
>
onUpdateListener
;
private
OnUpdateListener
<
T
>
onUpdateListener
;
private
String
previousResultsString
;
/*package*/
RealmListObserver
(
RealmHelper
helper
,
Query
<
T
>
query
)
{
/*package*/
RealmListObserver
(
RealmHelper
helper
,
Query
<
T
>
query
)
{
super
(
helper
);
super
(
helper
);
...
@@ -27,13 +22,13 @@ public class RealmListObserver<T extends RealmObject> extends AbstractRealmResul
...
@@ -27,13 +22,13 @@ public class RealmListObserver<T extends RealmObject> extends AbstractRealmResul
return
this
;
return
this
;
}
}
@Override
protected
final
RealmResults
<
T
>
queryItems
(
Realm
realm
)
{
@Override
protected
final
RealmResults
<
T
>
queryItems
(
Realm
realm
)
{
return
query
.
queryItems
(
realm
);
return
query
.
queryItems
(
realm
);
}
}
private
String
previousResultsString
;
@Override
public
final
RealmChangeListener
<
RealmResults
<
T
>>
getListener
()
{
@Override
public
final
RealmChangeListener
<
RealmResults
<
T
>>
getListener
()
{
return
results
->
{
return
results
->
{
String
currentResultString
=
results
!=
null
?
results
.
toString
()
:
null
;
String
currentResultString
=
results
!=
null
?
results
.
toString
()
:
null
;
if
(
previousResultsString
!=
null
&&
previousResultsString
.
equals
(
currentResultString
))
{
if
(
previousResultsString
!=
null
&&
previousResultsString
.
equals
(
currentResultString
))
{
...
@@ -45,4 +40,12 @@ public class RealmListObserver<T extends RealmObject> extends AbstractRealmResul
...
@@ -45,4 +40,12 @@ public class RealmListObserver<T extends RealmObject> extends AbstractRealmResul
}
}
};
};
}
}
public
interface
Query
<
T
extends
RealmObject
>
{
RealmResults
<
T
>
queryItems
(
Realm
realm
);
}
public
interface
OnUpdateListener
<
T
extends
RealmObject
>
{
void
onUpdateResults
(
List
<
T
>
results
);
}
}
}
\ No newline at end of file
realm-helpers/src/main/java/chat/rocket/android/realm_helper/RealmModelListAdapter.java
View file @
9c34af88
...
@@ -7,19 +7,12 @@ import android.view.LayoutInflater;
...
@@ -7,19 +7,12 @@ import android.view.LayoutInflater;
import
android.view.View
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.view.ViewGroup
;
import
io.realm.RealmObject
;
import
io.realm.RealmObject
;
import
java.util.List
;
import
java.util.List
;
public
abstract
class
RealmModelListAdapter
<
T
extends
RealmObject
,
VM
,
public
abstract
class
RealmModelListAdapter
<
T
extends
RealmObject
,
VM
,
VH
extends
RealmModelViewHolder
<
VM
>>
extends
RecyclerView
.
Adapter
<
VH
>
{
VH
extends
RealmModelViewHolder
<
VM
>>
extends
RecyclerView
.
Adapter
<
VH
>
{
public
interface
Constructor
<
T
extends
RealmObject
,
VM
,
VH
extends
RealmModelViewHolder
<
VM
>>
{
RealmModelListAdapter
<
T
,
VM
,
VH
>
getNewInstance
(
Context
context
);
}
public
interface
OnItemClickListener
<
VM
>
{
void
onItemClick
(
VM
model
);
}
protected
final
LayoutInflater
inflater
;
protected
final
LayoutInflater
inflater
;
private
RealmListObserver
<
T
>
realmListObserver
;
private
RealmListObserver
<
T
>
realmListObserver
;
private
List
<
VM
>
adapterData
;
private
List
<
VM
>
adapterData
;
...
@@ -36,35 +29,41 @@ public abstract class RealmModelListAdapter<T extends RealmObject, VM,
...
@@ -36,35 +29,41 @@ public abstract class RealmModelListAdapter<T extends RealmObject, VM,
return
this
;
return
this
;
}
}
@Override
public
void
onAttachedToRecyclerView
(
RecyclerView
recyclerView
)
{
@Override
public
void
onAttachedToRecyclerView
(
RecyclerView
recyclerView
)
{
super
.
onAttachedToRecyclerView
(
recyclerView
);
super
.
onAttachedToRecyclerView
(
recyclerView
);
realmListObserver
.
sub
();
realmListObserver
.
sub
();
}
}
@Override
public
void
onDetachedFromRecyclerView
(
RecyclerView
recyclerView
)
{
@Override
public
void
onDetachedFromRecyclerView
(
RecyclerView
recyclerView
)
{
realmListObserver
.
unsub
();
realmListObserver
.
unsub
();
super
.
onDetachedFromRecyclerView
(
recyclerView
);
super
.
onDetachedFromRecyclerView
(
recyclerView
);
}
}
protected
abstract
int
getRealmModelViewType
(
VM
model
);
protected
abstract
int
getRealmModelViewType
(
VM
model
);
protected
abstract
@LayoutRes
int
getLayout
(
int
viewType
);
protected
abstract
@LayoutRes
int
getLayout
(
int
viewType
);
protected
abstract
VH
onCreateRealmModelViewHolder
(
int
viewType
,
View
itemView
);
protected
abstract
VH
onCreateRealmModelViewHolder
(
int
viewType
,
View
itemView
);
protected
abstract
List
<
VM
>
mapResultsToViewModel
(
List
<
T
>
results
);
protected
abstract
List
<
VM
>
mapResultsToViewModel
(
List
<
T
>
results
);
@Override
@Override
public
int
getItemViewType
(
int
position
)
{
public
int
getItemViewType
(
int
position
)
{
return
getRealmModelViewType
(
getItem
(
position
));
return
getRealmModelViewType
(
getItem
(
position
));
}
}
@Override
public
final
VH
onCreateViewHolder
(
ViewGroup
parent
,
int
viewType
)
{
@Override
public
final
VH
onCreateViewHolder
(
ViewGroup
parent
,
int
viewType
)
{
View
itemView
=
inflater
.
inflate
(
getLayout
(
viewType
),
parent
,
false
);
View
itemView
=
inflater
.
inflate
(
getLayout
(
viewType
),
parent
,
false
);
return
onCreateRealmModelViewHolder
(
viewType
,
itemView
);
return
onCreateRealmModelViewHolder
(
viewType
,
itemView
);
}
}
@Override
public
void
onBindViewHolder
(
VH
holder
,
int
position
)
{
@Override
public
void
onBindViewHolder
(
VH
holder
,
int
position
)
{
VM
model
=
getItem
(
position
);
VM
model
=
getItem
(
position
);
holder
.
itemView
.
setTag
(
model
);
holder
.
itemView
.
setTag
(
model
);
holder
.
itemView
.
setOnClickListener
(
view
->
{
holder
.
itemView
.
setOnClickListener
(
view
->
{
...
@@ -76,7 +75,8 @@ public abstract class RealmModelListAdapter<T extends RealmObject, VM,
...
@@ -76,7 +75,8 @@ public abstract class RealmModelListAdapter<T extends RealmObject, VM,
holder
.
bind
(
model
);
holder
.
bind
(
model
);
}
}
@Override
public
int
getItemCount
()
{
@Override
public
int
getItemCount
()
{
return
adapterData
!=
null
?
adapterData
.
size
()
:
0
;
return
adapterData
!=
null
?
adapterData
.
size
()
:
0
;
}
}
...
@@ -98,4 +98,12 @@ public abstract class RealmModelListAdapter<T extends RealmObject, VM,
...
@@ -98,4 +98,12 @@ public abstract class RealmModelListAdapter<T extends RealmObject, VM,
public
void
setOnItemClickListener
(
OnItemClickListener
<
VM
>
onItemClickListener
)
{
public
void
setOnItemClickListener
(
OnItemClickListener
<
VM
>
onItemClickListener
)
{
this
.
onItemClickListener
=
onItemClickListener
;
this
.
onItemClickListener
=
onItemClickListener
;
}
}
public
interface
Constructor
<
T
extends
RealmObject
,
VM
,
VH
extends
RealmModelViewHolder
<
VM
>>
{
RealmModelListAdapter
<
T
,
VM
,
VH
>
getNewInstance
(
Context
context
);
}
public
interface
OnItemClickListener
<
VM
>
{
void
onItemClick
(
VM
model
);
}
}
}
realm-helpers/src/main/java/chat/rocket/android/realm_helper/RealmObjectObserver.java
View file @
9c34af88
...
@@ -8,23 +8,10 @@ import io.realm.RealmResults;
...
@@ -8,23 +8,10 @@ import io.realm.RealmResults;
public
class
RealmObjectObserver
<
T
extends
RealmObject
>
extends
AbstractRealmResultsObserver
<
T
>
{
public
class
RealmObjectObserver
<
T
extends
RealmObject
>
extends
AbstractRealmResultsObserver
<
T
>
{
public
interface
Query
<
T
extends
RealmObject
>
{
RealmQuery
<
T
>
query
(
Realm
realm
);
}
public
interface
OnUpdateListener
<
T
extends
RealmObject
>
{
void
onUpdateObject
(
T
element
);
}
public
static
class
Impl
<
T
extends
RealmObject
>
{
protected
T
extractObjectFromResults
(
RealmResults
<
T
>
results
)
{
return
results
.
isEmpty
()
?
null
:
results
.
last
();
}
}
private
final
Query
<
T
>
query
;
private
final
Query
<
T
>
query
;
private
OnUpdateListener
<
T
>
onUpdateListener
;
private
OnUpdateListener
<
T
>
onUpdateListener
;
private
Impl
<
T
>
impl
;
private
Impl
<
T
>
impl
;
private
String
previousResultString
;
/*package*/
RealmObjectObserver
(
RealmHelper
helper
,
Query
<
T
>
query
)
{
/*package*/
RealmObjectObserver
(
RealmHelper
helper
,
Query
<
T
>
query
)
{
super
(
helper
);
super
(
helper
);
...
@@ -41,13 +28,13 @@ public class RealmObjectObserver<T extends RealmObject> extends AbstractRealmRes
...
@@ -41,13 +28,13 @@ public class RealmObjectObserver<T extends RealmObject> extends AbstractRealmRes
return
this
;
return
this
;
}
}
private
String
previousResultString
;
@Override
protected
final
RealmResults
<
T
>
queryItems
(
Realm
realm
)
{
@Override
protected
final
RealmResults
<
T
>
queryItems
(
Realm
realm
)
{
return
query
.
query
(
realm
).
findAll
();
return
query
.
query
(
realm
).
findAll
();
}
}
@Override
protected
final
RealmChangeListener
<
RealmResults
<
T
>>
getListener
()
{
@Override
protected
final
RealmChangeListener
<
RealmResults
<
T
>>
getListener
()
{
return
element
->
{
return
element
->
{
T
currentResult
=
impl
.
extractObjectFromResults
(
element
);
T
currentResult
=
impl
.
extractObjectFromResults
(
element
);
String
currentResultString
=
currentResult
!=
null
?
currentResult
.
toString
()
:
null
;
String
currentResultString
=
currentResult
!=
null
?
currentResult
.
toString
()
:
null
;
...
@@ -62,9 +49,22 @@ public class RealmObjectObserver<T extends RealmObject> extends AbstractRealmRes
...
@@ -62,9 +49,22 @@ public class RealmObjectObserver<T extends RealmObject> extends AbstractRealmRes
};
};
}
}
public
void
sub
()
{
public
void
sub
()
{
previousResultString
=
null
;
previousResultString
=
null
;
super
.
sub
();
super
.
sub
();
}
}
public
interface
Query
<
T
extends
RealmObject
>
{
RealmQuery
<
T
>
query
(
Realm
realm
);
}
public
interface
OnUpdateListener
<
T
extends
RealmObject
>
{
void
onUpdateObject
(
T
element
);
}
public
static
class
Impl
<
T
extends
RealmObject
>
{
protected
T
extractObjectFromResults
(
RealmResults
<
T
>
results
)
{
return
results
.
isEmpty
()
?
null
:
results
.
last
();
}
}
}
}
\ No newline at end of file
realm-helpers/src/main/java/chat/rocket/android/realm_helper/RealmStore.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
realm_helper
;
package
chat
.
rocket
.
android
.
realm_helper
;
import
io.realm.RealmConfiguration
;
import
io.realm.RealmConfiguration
;
import
java.util.HashMap
;
import
java.util.HashMap
;
public
class
RealmStore
{
public
class
RealmStore
{
...
...
rocket-chat-android-widgets/build.gradle
View file @
9c34af88
rocket-chat-android-widgets/src/main/java/chat/rocket/android/widget/DividerView.java
View file @
9c34af88
package
chat
.
rocket
.
android
.
widget
;
package
chat
.
rocket
.
android
.
widget
;
import
android.annotation.TargetApi
;
import
android.content.Context
;
import
android.content.Context
;
import
android.content.res.TypedArray
;
import
android.content.res.TypedArray
;
import
android.graphics.Color
;
import
android.graphics.Color
;
import
android.support.v4.widget.Space
;
import
android.util.AttributeSet
;
import
android.util.AttributeSet
;
import
android.view.View
;
import
android.widget.FrameLayout
;
import
android.widget.FrameLayout
;
/**
/**
...
@@ -29,7 +26,9 @@ public class DividerView extends FrameLayout {
...
@@ -29,7 +26,9 @@ public class DividerView extends FrameLayout {
}
}
private
void
initialize
(
Context
context
,
AttributeSet
attrs
)
{
private
void
initialize
(
Context
context
,
AttributeSet
attrs
)
{
int
thickness
=
context
.
getResources
().
getDimensionPixelSize
(
R
.
dimen
.
def_divider_view_thickness
);
int
thickness
=
context
.
getResources
().
getDimensionPixelSize
(
R
.
dimen
.
def_divider_view_thickness
);
if
(
attrs
!=
null
)
{
if
(
attrs
!=
null
)
{
TypedArray
array
=
TypedArray
array
=
...
...
rocket-chat-android-widgets/src/main/java/chat/rocket/android/widget/FontAwesomeButton.java
View file @
9c34af88
...
@@ -19,7 +19,8 @@ public class FontAwesomeButton extends AbstractCustomFontButton {
...
@@ -19,7 +19,8 @@ public class FontAwesomeButton extends AbstractCustomFontButton {
super
(
context
);
super
(
context
);
}
}
@Override
protected
String
getFont
()
{
@Override
protected
String
getFont
()
{
return
"fontawesome-webfont.ttf"
;
return
"fontawesome-webfont.ttf"
;
}
}
}
}
rocket-chat-android-widgets/src/main/java/chat/rocket/android/widget/FontAwesomeTextView.java
View file @
9c34af88
...
@@ -19,7 +19,8 @@ public class FontAwesomeTextView extends AbstractCustomFontTextView {
...
@@ -19,7 +19,8 @@ public class FontAwesomeTextView extends AbstractCustomFontTextView {
super
(
context
);
super
(
context
);
}
}
@Override
protected
String
getFont
()
{
@Override
protected
String
getFont
()
{
return
"fontawesome-webfont.ttf"
;
return
"fontawesome-webfont.ttf"
;
}
}
}
}
rocket-chat-android-widgets/src/main/java/chat/rocket/android/widget/FontelloTextView.java
View file @
9c34af88
...
@@ -19,7 +19,8 @@ public class FontelloTextView extends AbstractCustomFontTextView {
...
@@ -19,7 +19,8 @@ public class FontelloTextView extends AbstractCustomFontTextView {
super
(
context
);
super
(
context
);
}
}
@Override
protected
String
getFont
()
{
@Override
protected
String
getFont
()
{
return
"fontello.ttf"
;
return
"fontello.ttf"
;
}
}
}
}
rocket-chat-android-widgets/src/main/java/chat/rocket/android/widget/TypefaceHelper.java
View file @
9c34af88
...
@@ -3,6 +3,7 @@ package chat.rocket.android.widget;
...
@@ -3,6 +3,7 @@ package chat.rocket.android.widget;
import
android.content.Context
;
import
android.content.Context
;
import
android.graphics.Typeface
;
import
android.graphics.Typeface
;
import
android.util.Log
;
import
android.util.Log
;
import
java.util.Hashtable
;
import
java.util.Hashtable
;
/**
/**
...
...
rocket-chat-android-widgets/src/main/java/chat/rocket/android/widget/WaitingView.java
View file @
9c34af88
...
@@ -10,6 +10,7 @@ import android.view.View;
...
@@ -10,6 +10,7 @@ import android.view.View;
import
android.widget.FrameLayout
;
import
android.widget.FrameLayout
;
import
android.widget.ImageView
;
import
android.widget.ImageView
;
import
android.widget.LinearLayout
;
import
android.widget.LinearLayout
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
/**
/**
...
@@ -58,11 +59,13 @@ public class WaitingView extends LinearLayout {
...
@@ -58,11 +59,13 @@ public class WaitingView extends LinearLayout {
}
}
addOnAttachStateChangeListener
(
new
OnAttachStateChangeListener
()
{
addOnAttachStateChangeListener
(
new
OnAttachStateChangeListener
()
{
@Override
public
void
onViewAttachedToWindow
(
View
view
)
{
@Override
public
void
onViewAttachedToWindow
(
View
view
)
{
start
();
start
();
}
}
@Override
public
void
onViewDetachedFromWindow
(
View
view
)
{
@Override
public
void
onViewDetachedFromWindow
(
View
view
)
{
cancel
();
cancel
();
}
}
});
});
...
@@ -95,14 +98,16 @@ public class WaitingView extends LinearLayout {
...
@@ -95,14 +98,16 @@ public class WaitingView extends LinearLayout {
.
setDuration
(
duration
)
.
setDuration
(
duration
)
.
setStartDelay
(
startDelay
)
.
setStartDelay
(
startDelay
)
.
withEndAction
(
new
Runnable
()
{
.
withEndAction
(
new
Runnable
()
{
@Override
public
void
run
()
{
@Override
public
void
run
()
{
dot
.
animate
()
dot
.
animate
()
.
scaleX
(
0
)
.
scaleX
(
0
)
.
scaleY
(
0
)
.
scaleY
(
0
)
.
setDuration
(
duration
)
.
setDuration
(
duration
)
.
setStartDelay
(
0
)
.
setStartDelay
(
0
)
.
withEndAction
(
new
Runnable
()
{
.
withEndAction
(
new
Runnable
()
{
@Override
public
void
run
()
{
@Override
public
void
run
()
{
animateDot
(
dot
,
interval
,
duration
,
interval
);
animateDot
(
dot
,
interval
,
duration
,
interval
);
}
}
})
})
...
...
rocket-chat-android-widgets/src/main/java/chat/rocket/android/widget/helper/InlineHightlighter.java
View file @
9c34af88
...
@@ -12,6 +12,7 @@ import android.text.style.ForegroundColorSpan;
...
@@ -12,6 +12,7 @@ import android.text.style.ForegroundColorSpan;
import
android.text.style.StyleSpan
;
import
android.text.style.StyleSpan
;
import
android.text.style.TypefaceSpan
;
import
android.text.style.TypefaceSpan
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
chat.rocket.android.widget.R
;
import
chat.rocket.android.widget.R
;
public
class
InlineHightlighter
{
public
class
InlineHightlighter
{
...
@@ -25,7 +26,7 @@ public class InlineHightlighter {
...
@@ -25,7 +26,7 @@ public class InlineHightlighter {
}
}
private
static
CharacterStyle
[]
createCharStyles
(
final
Context
context
)
{
private
static
CharacterStyle
[]
createCharStyles
(
final
Context
context
)
{
return
new
CharacterStyle
[]
{
return
new
CharacterStyle
[]{
new
ForegroundColorSpan
(
ContextCompat
.
getColor
(
context
,
R
.
color
.
highlight_text_color
)),
new
ForegroundColorSpan
(
ContextCompat
.
getColor
(
context
,
R
.
color
.
highlight_text_color
)),
new
BackgroundColorSpan
(
new
BackgroundColorSpan
(
ContextCompat
.
getColor
(
context
,
R
.
color
.
highlight_text_background_color
)),
ContextCompat
.
getColor
(
context
,
R
.
color
.
highlight_text_background_color
)),
...
...
rocket-chat-android-widgets/src/main/java/chat/rocket/android/widget/helper/LinkMovementMethodCompat.java
View file @
9c34af88
...
@@ -21,12 +21,14 @@ public class LinkMovementMethodCompat extends LinkMovementMethod {
...
@@ -21,12 +21,14 @@ public class LinkMovementMethodCompat extends LinkMovementMethod {
return
sInstance
;
return
sInstance
;
}
}
@Override
public
boolean
canSelectArbitrarily
()
{
@Override
public
boolean
canSelectArbitrarily
()
{
return
true
;
return
true
;
}
}
// http://stackoverflow.com/a/30572151/2104686
// http://stackoverflow.com/a/30572151/2104686
@Override
public
boolean
onTouchEvent
(
TextView
widget
,
Spannable
buffer
,
MotionEvent
event
)
{
@Override
public
boolean
onTouchEvent
(
TextView
widget
,
Spannable
buffer
,
MotionEvent
event
)
{
int
action
=
event
.
getAction
();
int
action
=
event
.
getAction
();
if
(
action
==
MotionEvent
.
ACTION_UP
||
action
==
MotionEvent
.
ACTION_DOWN
)
{
if
(
action
==
MotionEvent
.
ACTION_UP
||
action
==
MotionEvent
.
ACTION_DOWN
)
{
...
...
rocket-chat-android-widgets/src/main/java/chat/rocket/android/widget/helper/Linkify.java
View file @
9c34af88
...
@@ -11,11 +11,12 @@ import android.text.style.ClickableSpan;
...
@@ -11,11 +11,12 @@ import android.text.style.ClickableSpan;
import
android.view.View
;
import
android.view.View
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
android.widget.Toast
;
import
android.widget.Toast
;
import
java.util.HashSet
;
import
org.nibor.autolink.LinkExtractor
;
import
org.nibor.autolink.LinkExtractor
;
import
org.nibor.autolink.LinkSpan
;
import
org.nibor.autolink.LinkSpan
;
import
org.nibor.autolink.LinkType
;
import
org.nibor.autolink.LinkType
;
import
java.util.HashSet
;
public
class
Linkify
{
public
class
Linkify
{
private
static
HashSet
<
LinkType
>
sTargetType
=
new
HashSet
<>();
private
static
HashSet
<
LinkType
>
sTargetType
=
new
HashSet
<>();
...
@@ -48,7 +49,8 @@ public class Linkify {
...
@@ -48,7 +49,8 @@ public class Linkify {
private
static
ClickableSpan
createLinkSpan
(
final
String
url
)
{
private
static
ClickableSpan
createLinkSpan
(
final
String
url
)
{
return
new
ClickableSpan
()
{
return
new
ClickableSpan
()
{
@Override
public
void
onClick
(
View
view
)
{
@Override
public
void
onClick
(
View
view
)
{
final
Context
context
=
view
.
getContext
();
final
Context
context
=
view
.
getContext
();
try
{
try
{
Intent
intent
=
new
Intent
(
Intent
.
ACTION_VIEW
,
Uri
.
parse
(
url
));
Intent
intent
=
new
Intent
(
Intent
.
ACTION_VIEW
,
Uri
.
parse
(
url
));
...
...
rocket-chat-android-widgets/src/main/java/chat/rocket/android/widget/internal/RoomListItemView.java
View file @
9c34af88
...
@@ -8,23 +8,23 @@ import android.util.AttributeSet;
...
@@ -8,23 +8,23 @@ import android.util.AttributeSet;
import
android.view.View
;
import
android.view.View
;
import
android.widget.LinearLayout
;
import
android.widget.LinearLayout
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
chat.rocket.android.widget.R
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
chat.rocket.android.widget.R
;
/**
/**
* Room list-item view used in sidebar.
* Room list-item view used in sidebar.
*/
*/
public
class
RoomListItemView
extends
LinearLayout
{
public
class
RoomListItemView
extends
LinearLayout
{
private
String
roomId
;
private
static
HashMap
<
String
,
Integer
>
ICON_TABLE
=
new
HashMap
<
String
,
Integer
>()
{
private
String
roomName
;
private
static
HashMap
<
String
,
Integer
>
ICON_TABLE
=
new
HashMap
<
String
,
Integer
>(){
{
{
put
(
"c"
,
R
.
string
.
fa_hashtag
);
put
(
"c"
,
R
.
string
.
fa_hashtag
);
put
(
"p"
,
R
.
string
.
fa_lock
);
put
(
"p"
,
R
.
string
.
fa_lock
);
put
(
"d"
,
R
.
string
.
fa_at
);
put
(
"d"
,
R
.
string
.
fa_at
);
}
}
};
};
private
String
roomId
;
private
String
roomName
;
public
RoomListItemView
(
Context
context
)
{
public
RoomListItemView
(
Context
context
)
{
super
(
context
);
super
(
context
);
...
...
rocket-chat-android-widgets/src/main/java/chat/rocket/android/widget/message/MessageComposer.java
View file @
9c34af88
...
@@ -11,6 +11,7 @@ import android.view.ViewGroup;
...
@@ -11,6 +11,7 @@ import android.view.ViewGroup;
import
android.view.inputmethod.InputMethodManager
;
import
android.view.inputmethod.InputMethodManager
;
import
android.widget.LinearLayout
;
import
android.widget.LinearLayout
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
chat.rocket.android.widget.R
;
import
chat.rocket.android.widget.R
;
public
class
MessageComposer
extends
LinearLayout
{
public
class
MessageComposer
extends
LinearLayout
{
...
@@ -47,7 +48,8 @@ public class MessageComposer extends LinearLayout {
...
@@ -47,7 +48,8 @@ public class MessageComposer extends LinearLayout {
composer
=
(
ViewGroup
)
LayoutInflater
.
from
(
getContext
())
composer
=
(
ViewGroup
)
LayoutInflater
.
from
(
getContext
())
.
inflate
(
R
.
layout
.
message_composer
,
this
,
false
);
.
inflate
(
R
.
layout
.
message_composer
,
this
,
false
);
composer
.
findViewById
(
R
.
id
.
btn_submit
).
setOnClickListener
(
new
OnClickListener
()
{
composer
.
findViewById
(
R
.
id
.
btn_submit
).
setOnClickListener
(
new
OnClickListener
()
{
@Override
public
void
onClick
(
View
view
)
{
@Override
public
void
onClick
(
View
view
)
{
String
messageText
=
getText
();
String
messageText
=
getText
();
if
(
messageText
.
length
()
>
0
)
{
if
(
messageText
.
length
()
>
0
)
{
if
(
actionListener
!=
null
)
{
if
(
actionListener
!=
null
)
{
...
...
rocket-chat-android-widgets/src/main/java/chat/rocket/android/widget/message/RocketChatMessageAttachmentsLayout.java
View file @
9c34af88
...
@@ -12,18 +12,19 @@ import android.view.View;
...
@@ -12,18 +12,19 @@ import android.view.View;
import
android.widget.ImageView
;
import
android.widget.ImageView
;
import
android.widget.LinearLayout
;
import
android.widget.LinearLayout
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
chat.rocket.android.widget.R
;
import
chat.rocket.android.widget.helper.ImageFormat
;
import
com.jakewharton.picasso.OkHttp3Downloader
;
import
com.jakewharton.picasso.OkHttp3Downloader
;
import
com.squareup.picasso.Picasso
;
import
com.squareup.picasso.Picasso
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
java.io.IOException
;
import
java.io.IOException
;
import
chat.rocket.android.widget.R
;
import
chat.rocket.android.widget.helper.ImageFormat
;
import
okhttp3.Interceptor
;
import
okhttp3.Interceptor
;
import
okhttp3.OkHttpClient
;
import
okhttp3.OkHttpClient
;
import
okhttp3.Request
;
import
okhttp3.Request
;
import
okhttp3.Response
;
import
okhttp3.Response
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
/**
/**
*/
*/
...
@@ -125,7 +126,6 @@ public class RocketChatMessageAttachmentsLayout extends LinearLayout {
...
@@ -125,7 +126,6 @@ public class RocketChatMessageAttachmentsLayout extends LinearLayout {
return
;
return
;
}
}
View
attachmentView
=
inflater
.
inflate
(
R
.
layout
.
message_inline_attachment
,
this
,
false
);
View
attachmentView
=
inflater
.
inflate
(
R
.
layout
.
message_inline_attachment
,
this
,
false
);
new
Picasso
.
Builder
(
getContext
())
new
Picasso
.
Builder
(
getContext
())
...
@@ -149,7 +149,8 @@ public class RocketChatMessageAttachmentsLayout extends LinearLayout {
...
@@ -149,7 +149,8 @@ public class RocketChatMessageAttachmentsLayout extends LinearLayout {
}
else
{
}
else
{
final
String
link
=
absolutize
(
attachmentObj
.
getString
(
"title_link"
));
final
String
link
=
absolutize
(
attachmentObj
.
getString
(
"title_link"
));
titleView
.
setOnClickListener
(
new
OnClickListener
()
{
titleView
.
setOnClickListener
(
new
OnClickListener
()
{
@Override
public
void
onClick
(
View
view
)
{
@Override
public
void
onClick
(
View
view
)
{
Intent
intent
=
new
Intent
(
Intent
.
ACTION_VIEW
,
Uri
.
parse
(
link
));
Intent
intent
=
new
Intent
(
Intent
.
ACTION_VIEW
,
Uri
.
parse
(
link
));
intent
.
setFlags
(
Intent
.
FLAG_ACTIVITY_NEW_TASK
);
intent
.
setFlags
(
Intent
.
FLAG_ACTIVITY_NEW_TASK
);
view
.
getContext
().
startActivity
(
intent
);
view
.
getContext
().
startActivity
(
intent
);
...
...
rocket-chat-android-widgets/src/main/java/chat/rocket/android/widget/message/RocketChatMessageLayout.java
View file @
9c34af88
...
@@ -8,10 +8,11 @@ import android.util.AttributeSet;
...
@@ -8,10 +8,11 @@ import android.util.AttributeSet;
import
android.view.LayoutInflater
;
import
android.view.LayoutInflater
;
import
android.widget.LinearLayout
;
import
android.widget.LinearLayout
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
com.emojione.Emojione
;
import
chat.rocket.android.widget.R
;
import
chat.rocket.android.widget.R
;
import
chat.rocket.android.widget.helper.InlineHightlighter
;
import
chat.rocket.android.widget.helper.InlineHightlighter
;
import
chat.rocket.android.widget.helper.Linkify
;
import
chat.rocket.android.widget.helper.Linkify
;
import
com.emojione.Emojione
;
/**
/**
*/
*/
...
...
rocket-chat-android-widgets/src/main/java/chat/rocket/android/widget/message/RocketChatMessageUrlsLayout.java
View file @
9c34af88
...
@@ -12,13 +12,14 @@ import android.view.View;
...
@@ -12,13 +12,14 @@ import android.view.View;
import
android.widget.ImageView
;
import
android.widget.ImageView
;
import
android.widget.LinearLayout
;
import
android.widget.LinearLayout
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
chat.rocket.android.widget.R
;
import
chat.rocket.android.widget.helper.ImageFormat
;
import
com.squareup.picasso.Picasso
;
import
com.squareup.picasso.Picasso
;
import
org.json.JSONArray
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
org.json.JSONObject
;
import
chat.rocket.android.widget.R
;
import
chat.rocket.android.widget.helper.ImageFormat
;
/**
/**
*/
*/
public
class
RocketChatMessageUrlsLayout
extends
LinearLayout
{
public
class
RocketChatMessageUrlsLayout
extends
LinearLayout
{
...
@@ -115,7 +116,6 @@ public class RocketChatMessageUrlsLayout extends LinearLayout {
...
@@ -115,7 +116,6 @@ public class RocketChatMessageUrlsLayout extends LinearLayout {
}
}
}
}
String
imageURL
=
null
;
String
imageURL
=
null
;
if
(!
meta
.
isNull
(
"ogImage"
))
{
if
(!
meta
.
isNull
(
"ogImage"
))
{
imageURL
=
meta
.
getString
(
"ogImage"
);
imageURL
=
meta
.
getString
(
"ogImage"
);
...
@@ -131,7 +131,6 @@ public class RocketChatMessageUrlsLayout extends LinearLayout {
...
@@ -131,7 +131,6 @@ public class RocketChatMessageUrlsLayout extends LinearLayout {
((
TextView
)
embedUrl
.
findViewById
(
R
.
id
.
title
)).
setText
(
title
);
((
TextView
)
embedUrl
.
findViewById
(
R
.
id
.
title
)).
setText
(
title
);
((
TextView
)
embedUrl
.
findViewById
(
R
.
id
.
description
)).
setText
(
description
);
((
TextView
)
embedUrl
.
findViewById
(
R
.
id
.
description
)).
setText
(
description
);
ImageView
image
=
(
ImageView
)
embedUrl
.
findViewById
(
R
.
id
.
image
);
ImageView
image
=
(
ImageView
)
embedUrl
.
findViewById
(
R
.
id
.
image
);
if
(
TextUtils
.
isEmpty
(
imageURL
))
{
if
(
TextUtils
.
isEmpty
(
imageURL
))
{
image
.
setVisibility
(
View
.
GONE
);
image
.
setVisibility
(
View
.
GONE
);
...
...
rocket-chat-android-widgets/src/main/java/com/emojione/Emojione.java
View file @
9c34af88
This source diff could not be displayed because it is too large. You can
view the blob
instead.
rocket-chat-android-widgets/src/main/res/drawable/down_up_toggle.xml
View file @
9c34af88
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<selector
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<item
android:state_checked=
"false"
android:drawable=
"@drawable/down_up_toggle_down"
/>
<item
android:state_checked=
"false"
android:drawable=
"@drawable/down_up_toggle_down"
/>
<item
android:state_checked=
"true"
android:drawable=
"@drawable/down_up_toggle_up"
/>
<item
android:state_checked=
"true"
android:drawable=
"@drawable/down_up_toggle_up"
/>
<item
android:drawable=
"@drawable/down_up_toggle_down"
/>
<!-- default state -->
<item
android:drawable=
"@drawable/down_up_toggle_down"
/>
<!-- default state -->
</selector>
</selector>
\ No newline at end of file
rocket-chat-android-widgets/src/main/res/drawable/highlight_background_with_border.xml
View file @
9c34af88
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"rectangle"
>
android:shape=
"rectangle"
>
<solid
android:color=
"@color/highlight_text_background_color"
/>
<solid
android:color=
"@color/highlight_text_background_color"
/>
<stroke
android:width=
"1dp"
android:color=
"@color/highlight_text_border_color"
/>
<stroke
android:width=
"1dp"
android:color=
"@color/highlight_text_border_color"
/>
<corners
android:radius=
"4dp"
/>
<corners
android:radius=
"4dp"
/>
</shape>
</shape>
\ No newline at end of file
rocket-chat-android-widgets/src/main/res/drawable/ic_send_black_24dp.xml
View file @
9c34af88
<vector
android:alpha=
"0.87"
android:height=
"24dp"
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:viewportHeight=
"24.0"
android:viewportWidth=
"24.0"
android:alpha=
"0.87"
android:width=
"24dp"
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
android:height=
"24dp"
<path
android:fillColor=
"#FF000000"
android:pathData=
"M2.01,21L23,12 2.01,3 2,10l15,2 -15,2z"
/>
android:viewportHeight=
"24.0"
android:viewportWidth=
"24.0"
android:width=
"24dp"
>
<path
android:fillColor=
"#FF000000"
android:pathData=
"M2.01,21L23,12 2.01,3 2,10l15,2 -15,2z"
/>
</vector>
</vector>
rocket-chat-android-widgets/src/main/res/drawable/image_dummy.xml
View file @
9c34af88
rocket-chat-android-widgets/src/main/res/drawable/image_error.xml
View file @
9c34af88
rocket-chat-android-widgets/src/main/res/drawable/inline_attachment_background.xml
View file @
9c34af88
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<stroke
android:color=
"@color/inline_attachment_box_outline"
android:width=
"1dp"
/>
<stroke
android:color=
"@color/inline_attachment_box_outline"
android:width=
"1dp"
/>
<solid
android:color=
"@color/inline_attachment_box_background"
/>
<solid
android:color=
"@color/inline_attachment_box_background"
/>
<corners
android:radius=
"2dp"
/>
<corners
android:radius=
"2dp"
/>
</shape>
</shape>
\ No newline at end of file
rocket-chat-android-widgets/src/main/res/drawable/normal_circle.xml
View file @
9c34af88
rocket-chat-android-widgets/src/main/res/drawable/unread_count_background.xml
View file @
9c34af88
rocket-chat-android-widgets/src/main/res/layout/message_body.xml
View file @
9c34af88
rocket-chat-android-widgets/src/main/res/layout/message_body_highlight.xml
View file @
9c34af88
rocket-chat-android-widgets/src/main/res/layout/message_composer.xml
View file @
9c34af88
rocket-chat-android-widgets/src/main/res/layout/message_inline_attachment.xml
View file @
9c34af88
...
@@ -4,18 +4,21 @@
...
@@ -4,18 +4,21 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:orientation=
"horizontal"
android:orientation=
"horizontal"
android:layout_margin=
"4dp"
android:layout_margin=
"4dp"
android:padding=
"4dp"
>
android:padding=
"4dp"
>
<View
<View
android:layout_width=
"3dp"
android:layout_width=
"3dp"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginRight=
"5dp"
android:layout_marginRight=
"5dp"
android:background=
"@color/inline_attachment_quote_line"
/>
android:background=
"@color/inline_attachment_quote_line"
/>
<LinearLayout
<LinearLayout
android:layout_width=
"0px"
android:layout_width=
"0px"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:layout_weight=
"1"
android:orientation=
"vertical"
>
android:orientation=
"vertical"
>
<TextView
<TextView
android:id=
"@+id/title"
android:id=
"@+id/title"
...
@@ -24,7 +27,8 @@
...
@@ -24,7 +27,8 @@
android:layout_marginTop=
"2dp"
android:layout_marginTop=
"2dp"
android:layout_marginBottom=
"2dp"
android:layout_marginBottom=
"2dp"
android:textAppearance=
"@style/TextAppearance.RocketChat.MessageAttachment.Title"
android:textAppearance=
"@style/TextAppearance.RocketChat.MessageAttachment.Title"
android:background=
"?attr/selectableItemBackground"
/>
android:background=
"?attr/selectableItemBackground"
/>
<ImageView
<ImageView
android:id=
"@+id/image"
android:id=
"@+id/image"
...
@@ -34,7 +38,8 @@
...
@@ -34,7 +38,8 @@
android:layout_marginTop=
"4dp"
android:layout_marginTop=
"4dp"
android:layout_marginRight=
"8dp"
android:layout_marginRight=
"8dp"
android:adjustViewBounds=
"true"
android:adjustViewBounds=
"true"
android:scaleType=
"fitStart"
/>
android:scaleType=
"fitStart"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
rocket-chat-android-widgets/src/main/res/layout/message_inline_embed_url.xml
View file @
9c34af88
...
@@ -5,12 +5,14 @@
...
@@ -5,12 +5,14 @@
android:orientation=
"horizontal"
android:orientation=
"horizontal"
android:background=
"?attr/selectableItemBackground"
android:background=
"?attr/selectableItemBackground"
android:layout_margin=
"4dp"
android:layout_margin=
"4dp"
android:padding=
"4dp"
>
android:padding=
"4dp"
>
<View
<View
android:layout_width=
"3dp"
android:layout_width=
"3dp"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginEnd=
"5dp"
android:layout_marginEnd=
"5dp"
android:background=
"@color/inline_attachment_quote_line"
/>
android:background=
"@color/inline_attachment_quote_line"
/>
<ImageView
<ImageView
android:id=
"@+id/image"
android:id=
"@+id/image"
...
@@ -20,13 +22,15 @@
...
@@ -20,13 +22,15 @@
android:layout_marginTop=
"2dp"
android:layout_marginTop=
"2dp"
android:layout_marginEnd=
"8dp"
android:layout_marginEnd=
"8dp"
android:adjustViewBounds=
"true"
android:adjustViewBounds=
"true"
android:scaleType=
"fitStart"
/>
android:scaleType=
"fitStart"
/>
<LinearLayout
<LinearLayout
android:layout_width=
"0px"
android:layout_width=
"0px"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:layout_weight=
"1"
android:orientation=
"vertical"
>
android:orientation=
"vertical"
>
<TextView
<TextView
android:id=
"@+id/hostname"
android:id=
"@+id/hostname"
...
@@ -34,7 +38,8 @@
...
@@ -34,7 +38,8 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"2dp"
android:layout_marginTop=
"2dp"
android:layout_marginBottom=
"2dp"
android:layout_marginBottom=
"2dp"
android:enabled=
"false"
/>
android:enabled=
"false"
/>
<TextView
<TextView
android:id=
"@+id/title"
android:id=
"@+id/title"
...
@@ -42,7 +47,8 @@
...
@@ -42,7 +47,8 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"2dp"
android:layout_marginTop=
"2dp"
android:layout_marginBottom=
"2dp"
android:layout_marginBottom=
"2dp"
android:textAppearance=
"@style/TextAppearance.RocketChat.MessageAttachment.Title"
/>
android:textAppearance=
"@style/TextAppearance.RocketChat.MessageAttachment.Title"
/>
<TextView
<TextView
android:id=
"@+id/description"
android:id=
"@+id/description"
...
@@ -50,7 +56,8 @@
...
@@ -50,7 +56,8 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"2dp"
android:layout_marginTop=
"2dp"
android:layout_marginBottom=
"2dp"
android:layout_marginBottom=
"2dp"
android:textAppearance=
"@style/TextAppearance.RocketChat.MessageAttachment.Description"
/>
android:textAppearance=
"@style/TextAppearance.RocketChat.MessageAttachment.Description"
/>
</LinearLayout>
</LinearLayout>
...
...
rocket-chat-android-widgets/src/main/res/layout/message_inline_image.xml
View file @
9c34af88
...
@@ -3,12 +3,14 @@
...
@@ -3,12 +3,14 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:background=
"@drawable/inline_attachment_background"
android:background=
"@drawable/inline_attachment_background"
android:layout_margin=
"4dp"
android:layout_margin=
"4dp"
android:padding=
"4dp"
>
android:padding=
"4dp"
>
<ImageView
<ImageView
android:id=
"@+id/message_inline_image"
android:id=
"@+id/message_inline_image"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:maxHeight=
"200dp"
android:maxHeight=
"200dp"
android:adjustViewBounds=
"true"
android:adjustViewBounds=
"true"
android:scaleType=
"fitStart"
/>
android:scaleType=
"fitStart"
/>
</FrameLayout>
</FrameLayout>
rocket-chat-android-widgets/src/main/res/layout/room_list_item.xml
View file @
9c34af88
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<merge
xmlns:android=
"http://schemas.android.com/apk/res/android"
<merge
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
>
android:layout_height=
"wrap_content"
>
<FrameLayout
<FrameLayout
android:layout_width=
"32dp"
android:layout_width=
"32dp"
android:layout_height=
"?attr/listPreferredItemHeightSmall"
android:layout_height=
"?attr/listPreferredItemHeightSmall"
...
...
rocket-chat-android-widgets/src/main/res/values/divider_view_attrs.xml
View file @
9c34af88
rocket-chat-android-widgets/src/main/res/values/fa_strings.xml
View file @
9c34af88
rocket-chat-android-widgets/src/main/res/values/message_styles.xml
View file @
9c34af88
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<resources>
<style
name=
"TextAppearance.RocketChat"
parent=
"TextAppearance.AppCompat"
/>
<style
name=
"TextAppearance.RocketChat"
parent=
"TextAppearance.AppCompat"
/>
<style
name=
"TextAppearance.RocketChat.MessageBody"
parent=
"TextAppearance.AppCompat.Body1"
>
<style
name=
"TextAppearance.RocketChat.MessageBody"
parent=
"TextAppearance.AppCompat.Body1"
>
</style>
</style>
<style
name=
"TextAppearance.RocketChat.MessageBody.Highlight"
>
<style
name=
"TextAppearance.RocketChat.MessageBody.Highlight"
>
<item
name=
"android:textColor"
>
@color/highlight_text_color
</item>
<item
name=
"android:textColor"
>
@color/highlight_text_color
</item>
<item
name=
"android:typeface"
>
monospace
</item>
<item
name=
"android:typeface"
>
monospace
</item>
...
@@ -11,13 +14,16 @@
...
@@ -11,13 +14,16 @@
</style>
</style>
<style
name=
"TextAppearance.RocketChat.MessageAttachment"
parent=
"TextAppearance.AppCompat.Body1"
/>
<style
name=
"TextAppearance.RocketChat.MessageAttachment"
parent=
"TextAppearance.AppCompat.Body1"
/>
<style
name=
"TextAppearance.RocketChat.MessageAttachment.Title"
parent=
"TextAppearance.AppCompat.Title"
>
<style
name=
"TextAppearance.RocketChat.MessageAttachment.Title"
parent=
"TextAppearance.AppCompat.Title"
>
<item
name=
"android:textSize"
>
14sp
</item>
<item
name=
"android:textSize"
>
14sp
</item>
<item
name=
"android:textColor"
>
?android:attr/textColorLink
</item>
<item
name=
"android:textColor"
>
?android:attr/textColorLink
</item>
</style>
</style>
<style
name=
"TextAppearance.RocketChat.MessageAttachment.Description"
>
<style
name=
"TextAppearance.RocketChat.MessageAttachment.Description"
>
<item
name=
"android:textSize"
>
12sp
</item>
<item
name=
"android:textSize"
>
12sp
</item>
</style>
</style>
<style
name=
"TextAppearance.RocketChat.MessageAttachment.Hostname"
<style
name=
"TextAppearance.RocketChat.MessageAttachment.Hostname"
parent=
"TextAppearance.AppCompat.Caption"
>
parent=
"TextAppearance.AppCompat.Caption"
>
<item
name=
"android:textSize"
>
8sp
</item>
<item
name=
"android:textSize"
>
8sp
</item>
...
...
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