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
cbda8984
Commit
cbda8984
authored
Nov 27, 2017
by
Leonardo Aramaki
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Refactor indentation
parent
49c0e63b
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
374 additions
and
374 deletions
+374
-374
LoginPresenter.java
...rocket/android/fragment/server_config/LoginPresenter.java
+73
-73
SidebarMainFragment.java
.../rocket/android/fragment/sidebar/SidebarMainFragment.java
+298
-297
SidebarMainPresenter.java
...rocket/android/fragment/sidebar/SidebarMainPresenter.java
+3
-4
No files found.
app/src/main/java/chat/rocket/android/fragment/server_config/LoginPresenter.java
View file @
cbda8984
...
...
@@ -18,81 +18,81 @@ import chat.rocket.core.repositories.PublicSettingRepository;
import
io.reactivex.android.schedulers.AndroidSchedulers
;
public
class
LoginPresenter
extends
BasePresenter
<
LoginContract
.
View
>
implements
LoginContract
.
Presenter
{
private
final
LoginServiceConfigurationRepository
loginServiceConfigurationRepository
;
private
final
PublicSettingRepository
publicSettingRepository
;
private
final
MethodCallHelper
methodCallHelper
;
public
LoginPresenter
(
LoginServiceConfigurationRepository
loginServiceConfigurationRepository
,
PublicSettingRepository
publicSettingRepository
,
MethodCallHelper
methodCallHelper
)
{
this
.
loginServiceConfigurationRepository
=
loginServiceConfigurationRepository
;
this
.
publicSettingRepository
=
publicSettingRepository
;
this
.
methodCallHelper
=
methodCallHelper
;
}
@Override
public
void
bindView
(
@NonNull
LoginContract
.
View
view
)
{
super
.
bindView
(
view
);
getLoginServices
();
}
@Override
public
void
login
(
String
username
,
String
password
)
{
if
(
TextUtils
.
isEmpty
(
username
)
||
TextUtils
.
isEmpty
(
password
))
{
return
;
implements
LoginContract
.
Presenter
{
private
final
LoginServiceConfigurationRepository
loginServiceConfigurationRepository
;
private
final
PublicSettingRepository
publicSettingRepository
;
private
final
MethodCallHelper
methodCallHelper
;
public
LoginPresenter
(
LoginServiceConfigurationRepository
loginServiceConfigurationRepository
,
PublicSettingRepository
publicSettingRepository
,
MethodCallHelper
methodCallHelper
)
{
this
.
loginServiceConfigurationRepository
=
loginServiceConfigurationRepository
;
this
.
publicSettingRepository
=
publicSettingRepository
;
this
.
methodCallHelper
=
methodCallHelper
;
}
view
.
showLoader
();
addSubscription
(
publicSettingRepository
.
getById
(
PublicSettingsConstants
.
LDAP
.
ENABLE
)
.
subscribeOn
(
AndroidSchedulers
.
from
(
BackgroundLooper
.
get
()))
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
(
publicSettingOptional
->
doLogin
(
username
,
password
,
publicSettingOptional
),
Logger:
:
report
)
);
}
private
void
getLoginServices
()
{
addSubscription
(
loginServiceConfigurationRepository
.
getAll
()
.
subscribeOn
(
AndroidSchedulers
.
from
(
BackgroundLooper
.
get
()))
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
(
loginServiceConfigurations
->
view
.
showLoginServices
(
loginServiceConfigurations
),
Logger:
:
report
)
);
}
private
void
doLogin
(
String
username
,
String
password
,
Optional
<
PublicSetting
>
optional
)
{
call
(
username
,
password
,
optional
)
.
continueWith
(
task
->
{
if
(
task
.
isFaulted
())
{
view
.
hideLoader
();
final
Exception
error
=
task
.
getError
();
if
(
error
instanceof
TwoStepAuthException
)
{
view
.
showTwoStepAuth
();
}
else
{
view
.
showError
(
error
.
getMessage
());
}
}
return
null
;
},
Task
.
UI_THREAD_EXECUTOR
);
}
private
Task
<
Void
>
call
(
String
username
,
String
password
,
Optional
<
PublicSetting
>
optional
)
{
if
(
optional
.
isPresent
()
&&
optional
.
get
().
getValueAsBoolean
())
{
return
methodCallHelper
.
loginWithLdap
(
username
,
password
);
@Override
public
void
bindView
(
@NonNull
LoginContract
.
View
view
)
{
super
.
bindView
(
view
);
getLoginServices
();
}
@Override
public
void
login
(
String
username
,
String
password
)
{
if
(
TextUtils
.
isEmpty
(
username
)
||
TextUtils
.
isEmpty
(
password
))
{
return
;
}
view
.
showLoader
();
addSubscription
(
publicSettingRepository
.
getById
(
PublicSettingsConstants
.
LDAP
.
ENABLE
)
.
subscribeOn
(
AndroidSchedulers
.
from
(
BackgroundLooper
.
get
()))
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
(
publicSettingOptional
->
doLogin
(
username
,
password
,
publicSettingOptional
),
Logger:
:
report
)
);
}
private
void
getLoginServices
()
{
addSubscription
(
loginServiceConfigurationRepository
.
getAll
()
.
subscribeOn
(
AndroidSchedulers
.
from
(
BackgroundLooper
.
get
()))
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
(
loginServiceConfigurations
->
view
.
showLoginServices
(
loginServiceConfigurations
),
Logger:
:
report
)
);
}
return
methodCallHelper
.
loginWithEmail
(
username
,
password
);
}
private
void
doLogin
(
String
username
,
String
password
,
Optional
<
PublicSetting
>
optional
)
{
call
(
username
,
password
,
optional
)
.
continueWith
(
task
->
{
if
(
task
.
isFaulted
())
{
view
.
hideLoader
();
final
Exception
error
=
task
.
getError
();
if
(
error
instanceof
TwoStepAuthException
)
{
view
.
showTwoStepAuth
();
}
else
{
view
.
showError
(
error
.
getMessage
());
}
}
return
null
;
},
Task
.
UI_THREAD_EXECUTOR
);
}
private
Task
<
Void
>
call
(
String
username
,
String
password
,
Optional
<
PublicSetting
>
optional
)
{
if
(
optional
.
isPresent
()
&&
optional
.
get
().
getValueAsBoolean
())
{
return
methodCallHelper
.
loginWithLdap
(
username
,
password
);
}
return
methodCallHelper
.
loginWithEmail
(
username
,
password
);
}
}
app/src/main/java/chat/rocket/android/fragment/sidebar/SidebarMainFragment.java
View file @
cbda8984
...
...
@@ -55,309 +55,310 @@ import io.reactivex.android.schedulers.AndroidSchedulers;
import
io.reactivex.disposables.Disposable
;
public
class
SidebarMainFragment
extends
AbstractFragment
implements
SidebarMainContract
.
View
{
private
SidebarMainContract
.
Presenter
presenter
;
private
RoomListAdapter
adapter
;
private
SearchView
searchView
;
private
TextView
loadMoreResultsText
;
private
List
<
RoomSidebar
>
roomSidebarList
=
Collections
.
emptyList
();
private
Disposable
spotlightDisposable
;
private
String
hostname
;
private
static
final
String
HOSTNAME
=
"hostname"
;
public
SidebarMainFragment
()
{}
/**
* build SidebarMainFragment with hostname.
*/
public
static
SidebarMainFragment
create
(
String
hostname
)
{
Bundle
args
=
new
Bundle
();
args
.
putString
(
HOSTNAME
,
hostname
);
SidebarMainFragment
fragment
=
new
SidebarMainFragment
();
fragment
.
setArguments
(
args
);
return
fragment
;
}
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
hostname
=
getArguments
().
getString
(
HOSTNAME
);
RealmUserRepository
userRepository
=
new
RealmUserRepository
(
hostname
);
AbsoluteUrlHelper
absoluteUrlHelper
=
new
AbsoluteUrlHelper
(
hostname
,
new
RealmServerInfoRepository
(),
userRepository
,
new
SessionInteractor
(
new
RealmSessionRepository
(
hostname
))
);
RocketChatCache
rocketChatCache
=
new
RocketChatCache
(
getContext
().
getApplicationContext
());
presenter
=
new
SidebarMainPresenter
(
hostname
,
new
RoomInteractor
(
new
RealmRoomRepository
(
hostname
)),
userRepository
,
rocketChatCache
,
absoluteUrlHelper
,
new
MethodCallHelper
(
getContext
(),
hostname
),
new
RealmSpotlightRepository
(
hostname
)
);
}
@Nullable
@Override
public
View
onCreateView
(
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
,
@Nullable
Bundle
savedInstanceState
)
{
View
view
=
super
.
onCreateView
(
inflater
,
container
,
savedInstanceState
);
presenter
.
bindView
(
this
);
return
view
;
}
@Override
public
void
onDestroyView
()
{
presenter
.
release
();
super
.
onDestroyView
();
}
@Override
public
void
onResume
()
{
super
.
onResume
();
}
@Override
public
void
onPause
()
{
super
.
onPause
();
}
@Override
protected
int
getLayout
()
{
return
R
.
layout
.
fragment_sidebar_main
;
}
@SuppressLint
(
"RxLeakedSubscription"
)
@Override
protected
void
onSetupView
()
{
setupUserActionToggle
();
setupUserStatusButtons
();
setupLogoutButton
();
setupVersionInfo
();
searchView
=
rootView
.
findViewById
(
R
.
id
.
search
);
adapter
=
new
RoomListAdapter
();
adapter
.
setOnItemClickListener
(
new
RoomListAdapter
.
OnItemClickListener
()
{
@Override
public
void
onItemClick
(
RoomSidebar
roomSidebar
)
{
searchView
.
setQuery
(
null
,
false
);
searchView
.
clearFocus
();
presenter
.
onRoomSelected
(
roomSidebar
);
}
private
SidebarMainContract
.
Presenter
presenter
;
private
RoomListAdapter
adapter
;
private
SearchView
searchView
;
private
TextView
loadMoreResultsText
;
private
List
<
RoomSidebar
>
roomSidebarList
=
Collections
.
emptyList
();
private
Disposable
spotlightDisposable
;
private
String
hostname
;
private
static
final
String
HOSTNAME
=
"hostname"
;
public
SidebarMainFragment
()
{
}
@Override
public
void
onItemClick
(
Spotlight
spotlight
)
{
searchView
.
setQuery
(
null
,
false
);
searchView
.
clearFocus
();
presenter
.
onSpotlightSelected
(
spotlight
);
}
});
RecyclerView
recyclerView
=
rootView
.
findViewById
(
R
.
id
.
room_list_container
);
recyclerView
.
setLayoutManager
(
new
LinearLayoutManager
(
getContext
(),
LinearLayoutManager
.
VERTICAL
,
false
));
recyclerView
.
setAdapter
(
adapter
);
loadMoreResultsText
=
rootView
.
findViewById
(
R
.
id
.
text_load_more_results
);
RxSearchView
.
queryTextChanges
(
searchView
)
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
(
charSequence
->
{
if
(
spotlightDisposable
!=
null
&&
!
spotlightDisposable
.
isDisposed
())
{
spotlightDisposable
.
dispose
();
}
presenter
.
disposeSubscriptions
();
if
(
charSequence
.
length
()
==
0
)
{
loadMoreResultsText
.
setVisibility
(
View
.
GONE
);
adapter
.
setMode
(
RoomListAdapter
.
MODE_ROOM
);
presenter
.
bindView
(
this
);
}
else
{
filterRoomSidebarList
(
charSequence
);
}
});
loadMoreResultsText
.
setOnClickListener
(
view
->
loadMoreResults
());
}
@Override
public
void
showRoomSidebarList
(
@NonNull
List
<
RoomSidebar
>
roomSidebarList
)
{
this
.
roomSidebarList
=
roomSidebarList
;
adapter
.
setRoomSidebarList
(
roomSidebarList
);
}
@Override
public
void
filterRoomSidebarList
(
CharSequence
term
)
{
List
<
RoomSidebar
>
filteredRoomSidebarList
=
new
ArrayList
<>();
for
(
RoomSidebar
roomSidebar:
roomSidebarList
)
{
if
(
roomSidebar
.
getRoomName
().
contains
(
term
))
{
filteredRoomSidebarList
.
add
(
roomSidebar
);
}
}
if
(
filteredRoomSidebarList
.
isEmpty
())
{
loadMoreResults
();
}
else
{
loadMoreResultsText
.
setVisibility
(
View
.
VISIBLE
);
adapter
.
setMode
(
RoomListAdapter
.
MODE_ROOM
);
adapter
.
setRoomSidebarList
(
filteredRoomSidebarList
);
}
}
private
void
loadMoreResults
()
{
spotlightDisposable
=
presenter
.
searchSpotlight
(
searchView
.
getQuery
().
toString
())
.
toObservable
()
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
(
this
::
showSearchSuggestions
);
}
private
void
showSearchSuggestions
(
List
<
Spotlight
>
spotlightList
)
{
loadMoreResultsText
.
setVisibility
(
View
.
GONE
);
adapter
.
setMode
(
RoomListAdapter
.
MODE_SPOTLIGHT
);
adapter
.
setSpotlightList
(
spotlightList
);
}
@SuppressLint
(
"RxLeakedSubscription"
)
private
void
setupUserActionToggle
()
{
final
CompoundButton
toggleUserAction
=
rootView
.
findViewById
(
R
.
id
.
toggle_user_action
);
toggleUserAction
.
setFocusableInTouchMode
(
false
);
rootView
.
findViewById
(
R
.
id
.
user_info_container
).
setOnClickListener
(
view
->
toggleUserAction
.
toggle
());
RxCompoundButton
.
checkedChanges
(
toggleUserAction
)
.
compose
(
bindToLifecycle
())
.
subscribe
(
this
::
showUserActionContainer
,
Logger:
:
report
/**
* build SidebarMainFragment with hostname.
*/
public
static
SidebarMainFragment
create
(
String
hostname
)
{
Bundle
args
=
new
Bundle
();
args
.
putString
(
HOSTNAME
,
hostname
);
SidebarMainFragment
fragment
=
new
SidebarMainFragment
();
fragment
.
setArguments
(
args
);
return
fragment
;
}
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
hostname
=
getArguments
().
getString
(
HOSTNAME
);
RealmUserRepository
userRepository
=
new
RealmUserRepository
(
hostname
);
AbsoluteUrlHelper
absoluteUrlHelper
=
new
AbsoluteUrlHelper
(
hostname
,
new
RealmServerInfoRepository
(),
userRepository
,
new
SessionInteractor
(
new
RealmSessionRepository
(
hostname
))
);
}
public
void
showUserActionContainer
(
boolean
show
)
{
rootView
.
findViewById
(
R
.
id
.
user_action_outer_container
)
.
setVisibility
(
show
?
View
.
VISIBLE
:
View
.
GONE
);
}
public
void
toggleUserActionContainer
(
boolean
checked
)
{
CompoundButton
toggleUserAction
=
rootView
.
findViewById
(
R
.
id
.
toggle_user_action
);
toggleUserAction
.
setChecked
(
checked
);
}
@Override
public
void
showScreen
()
{
rootView
.
setVisibility
(
View
.
VISIBLE
);
}
@Override
public
void
showEmptyScreen
()
{
rootView
.
setVisibility
(
View
.
INVISIBLE
);
}
@Override
public
void
show
(
User
user
)
{
onRenderCurrentUser
(
user
);
updateRoomListMode
();
}
private
void
setupUserStatusButtons
()
{
rootView
.
findViewById
(
R
.
id
.
btn_status_online
).
setOnClickListener
(
view
->
{
presenter
.
onUserOnline
();
closeUserActionContainer
();
});
rootView
.
findViewById
(
R
.
id
.
btn_status_away
).
setOnClickListener
(
view
->
{
presenter
.
onUserAway
();
closeUserActionContainer
();
});
rootView
.
findViewById
(
R
.
id
.
btn_status_busy
).
setOnClickListener
(
view
->
{
presenter
.
onUserBusy
();
closeUserActionContainer
();
});
rootView
.
findViewById
(
R
.
id
.
btn_status_invisible
).
setOnClickListener
(
view
->
{
presenter
.
onUserOffline
();
closeUserActionContainer
();
});
}
private
void
onRenderCurrentUser
(
User
user
)
{
if
(
user
!=
null
)
{
UserRenderer
userRenderer
=
new
UserRenderer
(
user
);
userRenderer
.
showAvatar
(
rootView
.
findViewById
(
R
.
id
.
current_user_avatar
),
hostname
);
userRenderer
.
showUsername
(
rootView
.
findViewById
(
R
.
id
.
current_user_name
));
userRenderer
.
showStatusColor
(
rootView
.
findViewById
(
R
.
id
.
current_user_status
));
RocketChatCache
rocketChatCache
=
new
RocketChatCache
(
getContext
().
getApplicationContext
());
presenter
=
new
SidebarMainPresenter
(
hostname
,
new
RoomInteractor
(
new
RealmRoomRepository
(
hostname
)),
userRepository
,
rocketChatCache
,
absoluteUrlHelper
,
new
MethodCallHelper
(
getContext
(),
hostname
),
new
RealmSpotlightRepository
(
hostname
)
);
}
@Nullable
@Override
public
View
onCreateView
(
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
,
@Nullable
Bundle
savedInstanceState
)
{
View
view
=
super
.
onCreateView
(
inflater
,
container
,
savedInstanceState
);
presenter
.
bindView
(
this
);
return
view
;
}
@Override
public
void
onDestroyView
()
{
presenter
.
release
();
super
.
onDestroyView
();
}
@Override
public
void
onResume
()
{
super
.
onResume
();
}
@Override
public
void
onPause
()
{
super
.
onPause
();
}
@Override
protected
int
getLayout
()
{
return
R
.
layout
.
fragment_sidebar_main
;
}
@SuppressLint
(
"RxLeakedSubscription"
)
@Override
protected
void
onSetupView
()
{
setupUserActionToggle
();
setupUserStatusButtons
();
setupLogoutButton
();
setupVersionInfo
();
searchView
=
rootView
.
findViewById
(
R
.
id
.
search
);
adapter
=
new
RoomListAdapter
();
adapter
.
setOnItemClickListener
(
new
RoomListAdapter
.
OnItemClickListener
()
{
@Override
public
void
onItemClick
(
RoomSidebar
roomSidebar
)
{
searchView
.
setQuery
(
null
,
false
);
searchView
.
clearFocus
();
presenter
.
onRoomSelected
(
roomSidebar
);
}
@Override
public
void
onItemClick
(
Spotlight
spotlight
)
{
searchView
.
setQuery
(
null
,
false
);
searchView
.
clearFocus
();
presenter
.
onSpotlightSelected
(
spotlight
);
}
});
RecyclerView
recyclerView
=
rootView
.
findViewById
(
R
.
id
.
room_list_container
);
recyclerView
.
setLayoutManager
(
new
LinearLayoutManager
(
getContext
(),
LinearLayoutManager
.
VERTICAL
,
false
));
recyclerView
.
setAdapter
(
adapter
);
loadMoreResultsText
=
rootView
.
findViewById
(
R
.
id
.
text_load_more_results
);
RxSearchView
.
queryTextChanges
(
searchView
)
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
(
charSequence
->
{
if
(
spotlightDisposable
!=
null
&&
!
spotlightDisposable
.
isDisposed
())
{
spotlightDisposable
.
dispose
();
}
presenter
.
disposeSubscriptions
();
if
(
charSequence
.
length
()
==
0
)
{
loadMoreResultsText
.
setVisibility
(
View
.
GONE
);
adapter
.
setMode
(
RoomListAdapter
.
MODE_ROOM
);
presenter
.
bindView
(
this
);
}
else
{
filterRoomSidebarList
(
charSequence
);
}
});
loadMoreResultsText
.
setOnClickListener
(
view
->
loadMoreResults
());
}
@Override
public
void
showRoomSidebarList
(
@NonNull
List
<
RoomSidebar
>
roomSidebarList
)
{
this
.
roomSidebarList
=
roomSidebarList
;
adapter
.
setRoomSidebarList
(
roomSidebarList
);
}
@Override
public
void
filterRoomSidebarList
(
CharSequence
term
)
{
List
<
RoomSidebar
>
filteredRoomSidebarList
=
new
ArrayList
<>();
for
(
RoomSidebar
roomSidebar
:
roomSidebarList
)
{
if
(
roomSidebar
.
getRoomName
().
contains
(
term
))
{
filteredRoomSidebarList
.
add
(
roomSidebar
);
}
}
if
(
filteredRoomSidebarList
.
isEmpty
())
{
loadMoreResults
();
}
else
{
loadMoreResultsText
.
setVisibility
(
View
.
VISIBLE
);
adapter
.
setMode
(
RoomListAdapter
.
MODE_ROOM
);
adapter
.
setRoomSidebarList
(
filteredRoomSidebarList
);
}
}
private
void
loadMoreResults
()
{
spotlightDisposable
=
presenter
.
searchSpotlight
(
searchView
.
getQuery
().
toString
())
.
toObservable
()
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
(
this
::
showSearchSuggestions
);
}
private
void
showSearchSuggestions
(
List
<
Spotlight
>
spotlightList
)
{
loadMoreResultsText
.
setVisibility
(
View
.
GONE
);
adapter
.
setMode
(
RoomListAdapter
.
MODE_SPOTLIGHT
);
adapter
.
setSpotlightList
(
spotlightList
);
}
}
private
void
updateRoomListMode
()
{
final
List
<
RoomListHeader
>
roomListHeaders
=
new
ArrayList
<>();
roomListHeaders
.
add
(
new
UnreadRoomListHeader
(
getString
(
R
.
string
.
fragment_sidebar_main_unread_rooms_title
)
));
roomListHeaders
.
add
(
new
FavoriteRoomListHeader
(
getString
(
R
.
string
.
fragment_sidebar_main_favorite_title
)
));
roomListHeaders
.
add
(
new
LivechatRoomListHeader
(
getString
(
R
.
string
.
fragment_sidebar_main_livechat_title
)
));
roomListHeaders
.
add
(
new
ChannelRoomListHeader
(
getString
(
R
.
string
.
fragment_sidebar_main_channels_title
),
()
->
showAddRoomDialog
(
AddChannelDialogFragment
.
create
(
hostname
))
));
roomListHeaders
.
add
(
new
DirectMessageRoomListHeader
(
getString
(
R
.
string
.
fragment_sidebar_main_direct_messages_title
),
()
->
showAddRoomDialog
(
AddDirectMessageDialogFragment
.
create
(
hostname
))
));
adapter
.
setRoomListHeaders
(
roomListHeaders
);
}
@DebugLog
@Override
public
void
onPreparedToLogOut
()
{
final
Activity
activity
=
getActivity
();
if
(
activity
!=
null
&&
activity
instanceof
MainActivity
)
{
((
MainActivity
)
activity
).
onLogout
();
@SuppressLint
(
"RxLeakedSubscription"
)
private
void
setupUserActionToggle
()
{
final
CompoundButton
toggleUserAction
=
rootView
.
findViewById
(
R
.
id
.
toggle_user_action
);
toggleUserAction
.
setFocusableInTouchMode
(
false
);
rootView
.
findViewById
(
R
.
id
.
user_info_container
).
setOnClickListener
(
view
->
toggleUserAction
.
toggle
());
RxCompoundButton
.
checkedChanges
(
toggleUserAction
)
.
compose
(
bindToLifecycle
())
.
subscribe
(
this
::
showUserActionContainer
,
Logger:
:
report
);
}
public
void
showUserActionContainer
(
boolean
show
)
{
rootView
.
findViewById
(
R
.
id
.
user_action_outer_container
)
.
setVisibility
(
show
?
View
.
VISIBLE
:
View
.
GONE
);
}
public
void
toggleUserActionContainer
(
boolean
checked
)
{
CompoundButton
toggleUserAction
=
rootView
.
findViewById
(
R
.
id
.
toggle_user_action
);
toggleUserAction
.
setChecked
(
checked
);
}
@Override
public
void
showScreen
()
{
rootView
.
setVisibility
(
View
.
VISIBLE
);
}
@Override
public
void
showEmptyScreen
()
{
rootView
.
setVisibility
(
View
.
INVISIBLE
);
}
@Override
public
void
show
(
User
user
)
{
onRenderCurrentUser
(
user
);
updateRoomListMode
();
}
private
void
setupUserStatusButtons
()
{
rootView
.
findViewById
(
R
.
id
.
btn_status_online
).
setOnClickListener
(
view
->
{
presenter
.
onUserOnline
();
closeUserActionContainer
();
});
rootView
.
findViewById
(
R
.
id
.
btn_status_away
).
setOnClickListener
(
view
->
{
presenter
.
onUserAway
();
closeUserActionContainer
();
});
rootView
.
findViewById
(
R
.
id
.
btn_status_busy
).
setOnClickListener
(
view
->
{
presenter
.
onUserBusy
();
closeUserActionContainer
();
});
rootView
.
findViewById
(
R
.
id
.
btn_status_invisible
).
setOnClickListener
(
view
->
{
presenter
.
onUserOffline
();
closeUserActionContainer
();
});
}
private
void
onRenderCurrentUser
(
User
user
)
{
if
(
user
!=
null
)
{
UserRenderer
userRenderer
=
new
UserRenderer
(
user
);
userRenderer
.
showAvatar
(
rootView
.
findViewById
(
R
.
id
.
current_user_avatar
),
hostname
);
userRenderer
.
showUsername
(
rootView
.
findViewById
(
R
.
id
.
current_user_name
));
userRenderer
.
showStatusColor
(
rootView
.
findViewById
(
R
.
id
.
current_user_status
));
}
}
}
private
void
setupLogoutButton
()
{
rootView
.
findViewById
(
R
.
id
.
btn_logout
).
setOnClickListener
(
view
->
{
closeUserActionContainer
();
// Clear relative data and set new hostname if any.
presenter
.
prepareToLogOut
();
});
}
public
void
clearSearchViewFocus
()
{
searchView
.
clearFocus
();
}
public
void
closeUserActionContainer
()
{
final
CompoundButton
toggleUserAction
=
rootView
.
findViewById
(
R
.
id
.
toggle_user_action
);
if
(
toggleUserAction
!=
null
&&
toggleUserAction
.
isChecked
())
{
toggleUserAction
.
setChecked
(
false
);
private
void
updateRoomListMode
()
{
final
List
<
RoomListHeader
>
roomListHeaders
=
new
ArrayList
<>();
roomListHeaders
.
add
(
new
UnreadRoomListHeader
(
getString
(
R
.
string
.
fragment_sidebar_main_unread_rooms_title
)
));
roomListHeaders
.
add
(
new
FavoriteRoomListHeader
(
getString
(
R
.
string
.
fragment_sidebar_main_favorite_title
)
));
roomListHeaders
.
add
(
new
LivechatRoomListHeader
(
getString
(
R
.
string
.
fragment_sidebar_main_livechat_title
)
));
roomListHeaders
.
add
(
new
ChannelRoomListHeader
(
getString
(
R
.
string
.
fragment_sidebar_main_channels_title
),
()
->
showAddRoomDialog
(
AddChannelDialogFragment
.
create
(
hostname
))
));
roomListHeaders
.
add
(
new
DirectMessageRoomListHeader
(
getString
(
R
.
string
.
fragment_sidebar_main_direct_messages_title
),
()
->
showAddRoomDialog
(
AddDirectMessageDialogFragment
.
create
(
hostname
))
));
adapter
.
setRoomListHeaders
(
roomListHeaders
);
}
@DebugLog
@Override
public
void
onPreparedToLogOut
()
{
final
Activity
activity
=
getActivity
();
if
(
activity
!=
null
&&
activity
instanceof
MainActivity
)
{
((
MainActivity
)
activity
).
onLogout
();
}
}
}
private
void
setupVersionInfo
()
{
TextView
versionInfoView
=
rootView
.
findViewById
(
R
.
id
.
version_info
);
versionInfoView
.
setText
(
getString
(
R
.
string
.
version_info_text
,
BuildConfig
.
VERSION_NAME
));
}
private
void
setupLogoutButton
()
{
rootView
.
findViewById
(
R
.
id
.
btn_logout
).
setOnClickListener
(
view
->
{
closeUserActionContainer
();
// Clear relative data and set new hostname if any.
presenter
.
prepareToLogOut
();
});
}
private
void
showAddRoomDialog
(
DialogFragment
dialog
)
{
dialog
.
show
(
getFragmentManager
(),
"AbstractAddRoomDialogFragment"
);
}
public
void
clearSearchViewFocus
()
{
searchView
.
clearFocus
();
}
public
void
closeUserActionContainer
()
{
final
CompoundButton
toggleUserAction
=
rootView
.
findViewById
(
R
.
id
.
toggle_user_action
);
if
(
toggleUserAction
!=
null
&&
toggleUserAction
.
isChecked
())
{
toggleUserAction
.
setChecked
(
false
);
}
}
private
void
setupVersionInfo
()
{
TextView
versionInfoView
=
rootView
.
findViewById
(
R
.
id
.
version_info
);
versionInfoView
.
setText
(
getString
(
R
.
string
.
version_info_text
,
BuildConfig
.
VERSION_NAME
));
}
private
void
showAddRoomDialog
(
DialogFragment
dialog
)
{
dialog
.
show
(
getFragmentManager
(),
"AbstractAddRoomDialogFragment"
);
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/fragment/sidebar/SidebarMainPresenter.java
View file @
cbda8984
...
...
@@ -12,7 +12,6 @@ import bolts.Task;
import
chat.rocket.android.BackgroundLooper
;
import
chat.rocket.android.RocketChatApplication
;
import
chat.rocket.android.RocketChatCache
;
import
chat.rocket.android.activity.MainActivity
;
import
chat.rocket.android.api.MethodCallHelper
;
import
chat.rocket.android.helper.AbsoluteUrlHelper
;
import
chat.rocket.android.helper.LogIfError
;
...
...
@@ -243,11 +242,11 @@ public class SidebarMainPresenter extends BasePresenter<SidebarMainContract.View
.
observeOn
(
AndroidSchedulers
.
mainThread
())
.
subscribe
(
this
::
processUsers
,
Logger:
:
report
);
addSubscription
(
subscription
);
}
}
private
void
processUsers
(
List
<
User
>
userList
)
{
for
(
User
user:
userList
)
{
for
(
RoomSidebar
roomSidebar
:
roomSidebarList
)
{
for
(
User
user
:
userList
)
{
for
(
RoomSidebar
roomSidebar
:
roomSidebarList
)
{
if
(
roomSidebar
.
getRoomName
().
equals
(
user
.
getUsername
()))
{
roomSidebar
.
setUserStatus
(
user
.
getStatus
());
}
...
...
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