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
f4efa770
Unverified
Commit
f4efa770
authored
Apr 16, 2019
by
Hussein El Feky
Committed by
GitHub
Apr 16, 2019
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' into patch-1
parents
ab24ba31
d9f8a831
Changes
138
Show whitespace changes
Inline
Side-by-side
Showing
138 changed files
with
2760 additions
and
2453 deletions
+2760
-2453
AboutFragmentProvider.kt
...ava/chat/rocket/android/about/di/AboutFragmentProvider.kt
+0
-12
AboutFragment.kt
...c/main/java/chat/rocket/android/about/ui/AboutFragment.kt
+0
-66
Analytics.kt
app/src/main/java/chat/rocket/android/analytics/Analytics.kt
+2
-2
DrawableHelper.kt
app/src/main/java/chat/rocket/android/app/DrawableHelper.kt
+20
-5
RocketChatApplication.kt
...ain/java/chat/rocket/android/app/RocketChatApplication.kt
+2
-2
LoginPresenter.kt
...droid/authentication/login/presentation/LoginPresenter.kt
+1
-1
LoginOptionsPresenter.kt
...cation/loginoptions/presentation/LoginOptionsPresenter.kt
+1
-1
RegisterUsernamePresenter.kt
...egisterusername/presentation/RegisterUsernamePresenter.kt
+1
-1
RegisterUsernameFragment.kt
...ntication/registerusername/ui/RegisterUsernameFragment.kt
+1
-1
ResetPasswordPresenter.kt
...tion/resetpassword/presentation/ResetPasswordPresenter.kt
+1
-1
ResetPasswordView.kt
...ntication/resetpassword/presentation/ResetPasswordView.kt
+1
-1
VersionCheckView.kt
...id/authentication/server/presentation/VersionCheckView.kt
+1
-1
SignupPresenter.kt
...oid/authentication/signup/presentation/SignupPresenter.kt
+1
-1
TwoFAPresenter.kt
...d/authentication/twofactor/presentation/TwoFAPresenter.kt
+1
-1
ChatDetailsFragment.kt
...chat/rocket/android/chatdetails/ui/ChatDetailsFragment.kt
+1
-1
MessageInfoFragment.kt
.../rocket/android/chatinformation/ui/MessageInfoFragment.kt
+2
-1
ChatRoomFragment.kt
.../java/chat/rocket/android/chatroom/ui/ChatRoomFragment.kt
+2
-1
ChatRoomsFragmentModule.kt
...at/rocket/android/chatrooms/di/ChatRoomsFragmentModule.kt
+1
-2
ChatRoomsPresenter.kt
...cket/android/chatrooms/presentation/ChatRoomsPresenter.kt
+36
-22
ChatRoomsView.kt
...at/rocket/android/chatrooms/presentation/ChatRoomsView.kt
+22
-2
ChatRoomsFragment.kt
...ava/chat/rocket/android/chatrooms/ui/ChatRoomsFragment.kt
+180
-210
CreateChannelPresenter.kt
...roid/createchannel/presentation/CreateChannelPresenter.kt
+1
-2
CreateChannelView.kt
...t/android/createchannel/presentation/CreateChannelView.kt
+0
-6
CreateChannelFragment.kt
.../rocket/android/createchannel/ui/CreateChannelFragment.kt
+15
-25
ActivityBuilder.kt
...java/chat/rocket/android/dagger/module/ActivityBuilder.kt
+4
-4
AppModule.kt
.../main/java/chat/rocket/android/dagger/module/AppModule.kt
+19
-8
DatabaseManager.kt
app/src/main/java/chat/rocket/android/db/DatabaseManager.kt
+1
-1
FavoriteMessagesPresenter.kt
...avoritemessages/presentation/FavoriteMessagesPresenter.kt
+1
-2
FilesPresenter.kt
.../chat/rocket/android/files/presentation/FilesPresenter.kt
+1
-2
Constants.kt
app/src/main/java/chat/rocket/android/helper/Constants.kt
+0
-18
SharedPreferenceHelper.kt
...java/chat/rocket/android/helper/SharedPreferenceHelper.kt
+0
-48
UserHelper.kt
app/src/main/java/chat/rocket/android/helper/UserHelper.kt
+18
-0
StatusViewHolder.kt
...java/chat/rocket/android/main/adapter/StatusViewHolder.kt
+0
-18
MainModule.kt
app/src/main/java/chat/rocket/android/main/di/MainModule.kt
+2
-6
MainNavigator.kt
...va/chat/rocket/android/main/presentation/MainNavigator.kt
+19
-17
MainPresenter.kt
...va/chat/rocket/android/main/presentation/MainPresenter.kt
+15
-225
MainView.kt
...in/java/chat/rocket/android/main/presentation/MainView.kt
+0
-38
MainActivity.kt
...src/main/java/chat/rocket/android/main/ui/MainActivity.kt
+17
-241
Menu.kt
app/src/main/java/chat/rocket/android/main/ui/Menu.kt
+0
-69
NavHeaderUiModel.kt
...java/chat/rocket/android/main/uimodel/NavHeaderUiModel.kt
+0
-11
NavHeaderUiModelMapper.kt
...hat/rocket/android/main/uimodel/NavHeaderUiModelMapper.kt
+0
-32
MembersPresenter.kt
...t/rocket/android/members/presentation/MembersPresenter.kt
+1
-1
MentionsPresenter.kt
...ocket/android/mentions/presentention/MentionsPresenter.kt
+1
-1
PinnedMessagesPresenter.kt
...id/pinnedmessages/presentation/PinnedMessagesPresenter.kt
+1
-2
PreferencesPresenter.kt
.../android/preferences/presentation/PreferencesPresenter.kt
+0
-22
PreferencesView.kt
...ocket/android/preferences/presentation/PreferencesView.kt
+0
-11
PreferencesFragment.kt
...chat/rocket/android/preferences/ui/PreferencesFragment.kt
+0
-96
ProfilePresenter.kt
...t/rocket/android/profile/presentation/ProfilePresenter.kt
+27
-24
ProfileView.kt
...a/chat/rocket/android/profile/presentation/ProfileView.kt
+8
-1
ProfileFragment.kt
...in/java/chat/rocket/android/profile/ui/ProfileFragment.kt
+63
-36
PermissionsInteractor.kt
...hat/rocket/android/server/domain/PermissionsInteractor.kt
+1
-1
RefreshPermissionsInteractor.kt
...ket/android/server/domain/RefreshPermissionsInteractor.kt
+1
-1
RefreshSettingsInteractor.kt
...rocket/android/server/domain/RefreshSettingsInteractor.kt
+1
-1
SortingAndGroupingInteractor.kt
...ket/android/server/domain/SortingAndGroupingInteractor.kt
+32
-0
SortingAndGroupingRepository.kt
...ket/android/server/domain/SortingAndGroupingRepository.kt
+20
-0
ConnectionManagerFactory.kt
...ndroid/server/infraestructure/ConnectionManagerFactory.kt
+1
-2
RocketChatClientFactory.kt
...android/server/infraestructure/RocketChatClientFactory.kt
+1
-1
SharedPrefsSortingAndGroupingRepository.kt
...nfraestructure/SharedPrefsSortingAndGroupingRepository.kt
+39
-0
CheckServerPresenter.kt
...ocket/android/server/presentation/CheckServerPresenter.kt
+1
-1
AddNewServerViewHolder.kt
.../rocket/android/servers/adapter/AddNewServerViewHolder.kt
+6
-0
ServerViewHolder.kt
...a/chat/rocket/android/servers/adapter/ServerViewHolder.kt
+21
-0
ServersAdapter.kt
...ava/chat/rocket/android/servers/adapter/ServersAdapter.kt
+58
-0
ServersBottomSheetFragmentModule.kt
...et/android/servers/di/ServersBottomSheetFragmentModule.kt
+15
-0
ServersBottomSheetFragmentProvider.kt
.../android/servers/di/ServersBottomSheetFragmentProvider.kt
+14
-0
ServersPresenter.kt
...t/rocket/android/servers/presentation/ServersPresenter.kt
+47
-0
ServersView.kt
...a/chat/rocket/android/servers/presentation/ServersView.kt
+20
-0
ServersBottomSheetFragment.kt
...t/rocket/android/servers/ui/ServersBottomSheetFragment.kt
+67
-0
SettingsFragmentModule.kt
...chat/rocket/android/settings/di/SettingsFragmentModule.kt
+2
-10
SettingsFragmentProvider.kt
...at/rocket/android/settings/di/SettingsFragmentProvider.kt
+2
-0
PasswordPresenter.kt
...droid/settings/password/presentation/PasswordPresenter.kt
+1
-2
SettingsPresenter.kt
...rocket/android/settings/presentation/SettingsPresenter.kt
+134
-0
SettingsView.kt
...chat/rocket/android/settings/presentation/SettingsView.kt
+27
-1
SettingsFragment.kt
.../java/chat/rocket/android/settings/ui/SettingsFragment.kt
+115
-66
SortingAndGroupingBottomSheetFragmentModule.kt
...rouping/di/SortingAndGroupingBottomSheetFragmentModule.kt
+16
-0
SortingAndGroupingBottomSheetFragmentProvider.kt
...uping/di/SortingAndGroupingBottomSheetFragmentProvider.kt
+15
-0
SortingAndGroupingPresenter.kt
...ngandgrouping/presentation/SortingAndGroupingPresenter.kt
+38
-0
SortingAndGroupingView.kt
...sortingandgrouping/presentation/SortingAndGroupingView.kt
+19
-0
SortingAndGroupingBottomSheetFragment.kt
...ngandgrouping/ui/SortingAndGroupingBottomSheetFragment.kt
+173
-0
RocketChatClient.kt
...a/chat/rocket/android/util/extensions/RocketChatClient.kt
+1
-1
AdminPanelWebViewFragment.kt
...ndroid/webview/adminpanel/ui/AdminPanelWebViewFragment.kt
+11
-11
black_gradient.xml
app/src/main/res/drawable/black_gradient.xml
+0
-11
ic_activity_20dp.xml
app/src/main/res/drawable/ic_activity_20dp.xml
+19
-0
ic_add_new_server_48dp.xml
app/src/main/res/drawable/ic_add_new_server_48dp.xml
+20
-0
ic_arrow_expand_20dp.xml
app/src/main/res/drawable/ic_arrow_expand_20dp.xml
+13
-0
ic_chat_bubble_black_24dp.xml
app/src/main/res/drawable/ic_chat_bubble_black_24dp.xml
+0
-9
ic_check.xml
app/src/main/res/drawable/ic_check.xml
+14
-0
ic_check_read_24dp.xml
app/src/main/res/drawable/ic_check_read_24dp.xml
+3
-2
ic_create_black_24dp.xml
app/src/main/res/drawable/ic_create_black_24dp.xml
+0
-9
ic_favorites_20dp.xml
app/src/main/res/drawable/ic_favorites_20dp.xml
+13
-0
ic_filter_20dp.xml
app/src/main/res/drawable/ic_filter_20dp.xml
+40
-0
ic_group_by_type_20dp.xml
app/src/main/res/drawable/ic_group_by_type_20dp.xml
+13
-0
ic_logout_black_24dp.xml
app/src/main/res/drawable/ic_logout_black_24dp.xml
+0
-11
ic_menu_white_24dp.xml
app/src/main/res/drawable/ic_menu_white_24dp.xml
+0
-9
ic_navigation_24dp.xml
app/src/main/res/drawable/ic_navigation_24dp.xml
+13
-0
ic_new_channel_24dp.xml
app/src/main/res/drawable/ic_new_channel_24dp.xml
+13
-0
ic_settings_black_24dp.xml
app/src/main/res/drawable/ic_settings_black_24dp.xml
+0
-9
ic_sort.xml
app/src/main/res/drawable/ic_sort.xml
+0
-9
ic_unread_20dp.xml
app/src/main/res/drawable/ic_unread_20dp.xml
+25
-0
activity_add_members.xml
app/src/main/res/layout/activity_add_members.xml
+0
-82
activity_main.xml
app/src/main/res/layout/activity_main.xml
+3
-44
app_bar.xml
app/src/main/res/layout/app_bar.xml
+2
-2
app_bar_chat_rooms.xml
app/src/main/res/layout/app_bar_chat_rooms.xml
+31
-0
bottom_sheet_fragment_servers.xml
app/src/main/res/layout/bottom_sheet_fragment_servers.xml
+39
-0
bottom_sheet_fragment_sort_by.xml
app/src/main/res/layout/bottom_sheet_fragment_sort_by.xml
+109
-0
dialog_delete_account.xml
app/src/main/res/layout/dialog_delete_account.xml
+0
-1
dialog_status.xml
app/src/main/res/layout/dialog_status.xml
+45
-0
fragment_about.xml
app/src/main/res/layout/fragment_about.xml
+0
-62
fragment_chat_rooms.xml
app/src/main/res/layout/fragment_chat_rooms.xml
+33
-40
fragment_create_channel.xml
app/src/main/res/layout/fragment_create_channel.xml
+24
-4
fragment_profile.xml
app/src/main/res/layout/fragment_profile.xml
+20
-2
fragment_settings.xml
app/src/main/res/layout/fragment_settings.xml
+324
-6
item_add_new_server.xml
app/src/main/res/layout/item_add_new_server.xml
+25
-0
item_change_status.xml
app/src/main/res/layout/item_change_status.xml
+0
-61
item_chatroom_header.xml
app/src/main/res/layout/item_chatroom_header.xml
+2
-3
item_message_attachment_old.xml
app/src/main/res/layout/item_message_attachment_old.xml
+0
-79
item_server.xml
app/src/main/res/layout/item_server.xml
+61
-0
nav_header.xml
app/src/main/res/layout/nav_header.xml
+0
-94
chatrooms.xml
app/src/main/res/menu/chatrooms.xml
+7
-10
profile.xml
app/src/main/res/menu/profile.xml
+0
-10
strings.xml
app/src/main/res/values-ar/strings.xml
+30
-34
strings.xml
app/src/main/res/values-de/strings.xml
+31
-37
strings.xml
app/src/main/res/values-es/strings.xml
+28
-28
strings.xml
app/src/main/res/values-fa/strings.xml
+28
-28
strings.xml
app/src/main/res/values-fr/strings.xml
+28
-28
strings.xml
app/src/main/res/values-hi-rIN/strings.xml
+28
-28
strings.xml
app/src/main/res/values-it/strings.xml
+28
-28
strings.xml
app/src/main/res/values-ja/strings.xml
+28
-29
strings.xml
app/src/main/res/values-pt-rBR/strings.xml
+28
-28
strings.xml
app/src/main/res/values-pt-rPT/strings.xml
+29
-29
strings.xml
app/src/main/res/values-ru-rRU/strings.xml
+28
-28
strings.xml
app/src/main/res/values-tr/strings.xml
+28
-28
strings.xml
app/src/main/res/values-uk/strings.xml
+28
-28
strings.xml
app/src/main/res/values-zh-rCN/strings.xml
+29
-29
strings.xml
app/src/main/res/values-zh-rTW/strings.xml
+29
-29
ids.xml
app/src/main/res/values/ids.xml
+0
-14
strings.xml
app/src/main/res/values/strings.xml
+29
-29
AnswersAnalytics.kt
...ay/java/chat/rocket/android/analytics/AnswersAnalytics.kt
+1
-1
dependencies.gradle
dependencies.gradle
+1
-1
No files found.
app/src/main/java/chat/rocket/android/about/di/AboutFragmentProvider.kt
deleted
100644 → 0
View file @
ab24ba31
package
chat.rocket.android.about.di
import
chat.rocket.android.about.ui.AboutFragment
import
dagger.Module
import
dagger.android.ContributesAndroidInjector
@Module
abstract
class
AboutFragmentProvider
{
@ContributesAndroidInjector
()
abstract
fun
provideAboutFragment
():
AboutFragment
}
app/src/main/java/chat/rocket/android/about/ui/AboutFragment.kt
deleted
100644 → 0
View file @
ab24ba31
package
chat.rocket.android.about.ui
import
android.os.Bundle
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
androidx.fragment.app.Fragment
import
chat.rocket.android.BuildConfig
import
chat.rocket.android.R
import
chat.rocket.android.analytics.AnalyticsManager
import
chat.rocket.android.analytics.event.ScreenViewEvent
import
chat.rocket.android.main.ui.MainActivity
import
dagger.android.support.AndroidSupportInjection
import
kotlinx.android.synthetic.main.app_bar.*
import
kotlinx.android.synthetic.main.fragment_about.*
import
javax.inject.Inject
internal
const
val
TAG_ABOUT_FRAGMENT
=
"AboutFragment"
class
AboutFragment
:
Fragment
()
{
@Inject
lateinit
var
analyticsManager
:
AnalyticsManager
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
AndroidSupportInjection
.
inject
(
this
)
}
override
fun
onCreateView
(
inflater
:
LayoutInflater
,
container
:
ViewGroup
?,
savedInstanceState
:
Bundle
?
):
View
?
=
inflater
.
inflate
(
R
.
layout
.
fragment_about
,
container
,
false
)
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
super
.
onViewCreated
(
view
,
savedInstanceState
)
setupViews
()
analyticsManager
.
logScreenView
(
ScreenViewEvent
.
About
)
}
override
fun
onResume
()
{
super
.
onResume
()
setupToolbar
()
}
private
fun
setupViews
()
{
text_version_name
.
text
=
BuildConfig
.
VERSION_NAME
text_build_number
.
text
=
getString
(
R
.
string
.
msg_build
,
BuildConfig
.
VERSION_CODE
,
BuildConfig
.
GIT_SHA
,
BuildConfig
.
FLAVOR
)
}
private
fun
setupToolbar
()
{
with
((
activity
as
MainActivity
).
toolbar
)
{
title
=
getString
(
R
.
string
.
title_about
)
setNavigationIcon
(
R
.
drawable
.
ic_arrow_back_white_24dp
)
setNavigationOnClickListener
{
activity
?.
onBackPressed
()
}
}
}
companion
object
{
fun
newInstance
()
=
AboutFragment
()
}
}
app/src/main/java/chat/rocket/android/analytics/Analytics.kt
View file @
f4efa770
...
...
@@ -10,7 +10,7 @@ interface Analytics {
* Logs the login event.
*
* @param event The [AuthenticationEvent] used to log in.
* @param loginSucceeded True if
successful logged in
, false otherwise.
* @param loginSucceeded True if
logged in successfully
, false otherwise.
*/
fun
logLogin
(
event
:
AuthenticationEvent
,
loginSucceeded
:
Boolean
)
{}
...
...
@@ -18,7 +18,7 @@ interface Analytics {
* Logs the sign up event.
*
* @param event The [AuthenticationEvent] used to sign up.
* @param signUpSucceeded True if s
uccessful signed up
, false otherwise.
* @param signUpSucceeded True if s
igned up successfully
, false otherwise.
*/
fun
logSignUp
(
event
:
AuthenticationEvent
,
signUpSucceeded
:
Boolean
)
{}
...
...
app/src/main/java/chat/rocket/android/app/DrawableHelper.kt
View file @
f4efa770
import
android.content.Context
import
android.graphics.drawable.Drawable
import
android.widget.TextView
import
androidx.core.content.ContextCompat
import
androidx.core.graphics.drawable.DrawableCompat
import
android.widget.TextView
import
chat.rocket.android.R
import
chat.rocket.common.model.UserStatus
...
...
@@ -43,7 +43,7 @@ object DrawableHelper {
/**
* Tints an array of Drawable.
*
* REMARK: you MUST always wrap the array of Drawable before tint it.
* REMARK: you MUST always wrap the array of Drawable before tint
ing
it.
*
* @param drawables The array of Drawable to tint.
* @param context The context.
...
...
@@ -78,7 +78,7 @@ object DrawableHelper {
*
* @param textView The array of TextView.
* @param drawables The array of Drawable.
* @see compoundDrawable
* @see compound
Left
Drawable
*/
fun
compoundDrawables
(
textView
:
Array
<
TextView
>,
drawables
:
Array
<
Drawable
>)
{
if
(
textView
.
size
!=
drawables
.
size
)
{
...
...
@@ -97,7 +97,7 @@ object DrawableHelper {
* @param drawable The Drawable.
* @see compoundDrawables
*/
fun
compoundDrawable
(
textView
:
TextView
,
drawable
:
Drawable
)
=
fun
compound
Left
Drawable
(
textView
:
TextView
,
drawable
:
Drawable
)
=
textView
.
setCompoundDrawablesWithIntrinsicBounds
(
drawable
,
null
,
null
,
null
)
/**
...
...
@@ -105,11 +105,26 @@ object DrawableHelper {
*
* @param textView The TextView.
* @param drawable The Drawable.
* @see compoundDrawable
* @see compound
Left
Drawable
*/
fun
compoundRightDrawable
(
textView
:
TextView
,
drawable
:
Drawable
)
=
textView
.
setCompoundDrawablesWithIntrinsicBounds
(
null
,
null
,
drawable
,
null
)
/**
* Compounds a Drawable (to appear on the left and right side of a text) into a TextView.
*
* @param textView The TextView.
* @param leftDrawable The left Drawable.
* @param rightDrawable The right Drawable.
* @see compoundLeftDrawable
*/
fun
compoundLeftAndRightDrawable
(
textView
:
TextView
,
leftDrawable
:
Drawable
,
rightDrawable
:
Drawable
)
=
textView
.
setCompoundDrawablesWithIntrinsicBounds
(
leftDrawable
,
null
,
rightDrawable
,
null
)
/**
* Returns the user status drawable.
*
...
...
app/src/main/java/chat/rocket/android/app/RocketChatApplication.kt
View file @
f4efa770
...
...
@@ -115,7 +115,7 @@ class RocketChatApplication : Application(), HasActivityInjector, HasServiceInje
// TODO - remove this
checkCurrentServer
()
// TODO - FIXME - we need to proper
inject the EmojiRepository and initialize it properl
y
// TODO - FIXME - we need to proper
ly inject and initialize the EmojiRepositor
y
loadEmojis
()
}
...
...
@@ -176,7 +176,7 @@ class RocketChatApplication : Application(), HasActivityInjector, HasServiceInje
val
currentServer
=
getCurrentServerInteractor
.
get
()
currentServer
?.
let
{
server
->
GlobalScope
.
launch
{
val
client
=
factory
.
create
(
server
)
val
client
=
factory
.
get
(
server
)
EmojiRepository
.
setCurrentServerUrl
(
server
)
val
customEmojiList
=
mutableListOf
<
Emoji
>()
try
{
...
...
app/src/main/java/chat/rocket/android/authentication/login/presentation/LoginPresenter.kt
View file @
f4efa770
...
...
@@ -60,7 +60,7 @@ class LoginPresenter @Inject constructor(
private
fun
setupConnectionInfo
(
serverUrl
:
String
)
{
currentServer
=
serverUrl
client
=
factory
.
create
(
currentServer
)
client
=
factory
.
get
(
currentServer
)
settings
=
settingsInteractor
.
get
(
currentServer
)
}
...
...
app/src/main/java/chat/rocket/android/authentication/loginoptions/presentation/LoginOptionsPresenter.kt
View file @
f4efa770
...
...
@@ -169,7 +169,7 @@ class LoginOptionsPresenter @Inject constructor(
private
fun
setupConnectionInfo
(
serverUrl
:
String
)
{
currentServer
=
serverUrl
client
=
factory
.
create
(
currentServer
)
client
=
factory
.
get
(
currentServer
)
settings
=
settingsInteractor
.
get
(
currentServer
)
}
...
...
app/src/main/java/chat/rocket/android/authentication/registerusername/presentation/RegisterUsernamePresenter.kt
View file @
f4efa770
...
...
@@ -38,7 +38,7 @@ class RegisterUsernamePresenter @Inject constructor(
val
settingsInteractor
:
GetSettingsInteractor
)
{
private
val
currentServer
=
serverInteractor
.
get
()
!!
private
val
client
:
RocketChatClient
=
factory
.
create
(
currentServer
)
private
val
client
:
RocketChatClient
=
factory
.
get
(
currentServer
)
private
var
settings
:
PublicSettings
=
settingsInteractor
.
get
(
serverInteractor
.
get
()
!!
)
fun
registerUsername
(
username
:
String
,
userId
:
String
,
authToken
:
String
)
{
...
...
app/src/main/java/chat/rocket/android/authentication/registerusername/ui/RegisterUsernameFragment.kt
View file @
f4efa770
...
...
@@ -140,7 +140,7 @@ class RegisterUsernameFragment : Fragment(), RegisterUsernameView {
val
atDrawable
=
DrawableHelper
.
getDrawableFromId
(
R
.
drawable
.
ic_at_black_20dp
,
it
)
DrawableHelper
.
wrapDrawable
(
atDrawable
)
DrawableHelper
.
tintDrawable
(
atDrawable
,
it
,
R
.
color
.
colorDrawableTintGrey
)
DrawableHelper
.
compoundDrawable
(
text_username
,
atDrawable
)
DrawableHelper
.
compound
Left
Drawable
(
text_username
,
atDrawable
)
}
}
...
...
app/src/main/java/chat/rocket/android/authentication/resetpassword/presentation/ResetPasswordPresenter.kt
View file @
f4efa770
...
...
@@ -21,7 +21,7 @@ class ResetPasswordPresenter @Inject constructor(
serverInteractor
:
GetConnectingServerInteractor
)
{
private
val
currentServer
=
serverInteractor
.
get
()
!!
private
val
client
:
RocketChatClient
=
factory
.
create
(
currentServer
)
private
val
client
:
RocketChatClient
=
factory
.
get
(
currentServer
)
fun
resetPassword
(
email
:
String
)
{
launchUI
(
strategy
)
{
...
...
app/src/main/java/chat/rocket/android/authentication/resetpassword/presentation/ResetPasswordView.kt
View file @
f4efa770
...
...
@@ -21,7 +21,7 @@ interface ResetPasswordView : LoadingView, MessageView {
fun
enableButtonConnect
()
/**
* Disables the button to reset the password when the user entered an invalid email address
* Disables the button to reset the password when the user
has
entered an invalid email address
*/
fun
disableButtonConnect
()
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/authentication/server/presentation/VersionCheckView.kt
View file @
f4efa770
...
...
@@ -26,7 +26,7 @@ interface VersionCheckView {
fun
versionOk
()
{}
/**
* Alters the user this protocol is invalid. This is optional.
* Alters the user th
at th
is protocol is invalid. This is optional.
*/
fun
errorInvalidProtocol
()
{}
...
...
app/src/main/java/chat/rocket/android/authentication/signup/presentation/SignupPresenter.kt
View file @
f4efa770
...
...
@@ -44,7 +44,7 @@ class SignupPresenter @Inject constructor(
private
var
settings
:
PublicSettings
=
settingsInteractor
.
get
(
serverInteractor
.
get
()
!!
)
fun
signup
(
name
:
String
,
username
:
String
,
password
:
String
,
email
:
String
)
{
val
client
=
factory
.
create
(
currentServer
)
val
client
=
factory
.
get
(
currentServer
)
launchUI
(
strategy
)
{
view
.
showLoading
()
try
{
...
...
app/src/main/java/chat/rocket/android/authentication/twofactor/presentation/TwoFAPresenter.kt
View file @
f4efa770
...
...
@@ -51,7 +51,7 @@ class TwoFAPresenter @Inject constructor(
twoFactorAuthenticationCode
:
String
)
{
launchUI
(
strategy
)
{
val
client
=
factory
.
create
(
currentServer
)
val
client
=
factory
.
get
(
currentServer
)
view
.
showLoading
()
try
{
// The token is saved via the client TokenProvider
...
...
app/src/main/java/chat/rocket/android/chatdetails/ui/ChatDetailsFragment.kt
View file @
f4efa770
...
...
@@ -200,7 +200,7 @@ class ChatDetailsFragment : Fragment(), ChatDetailsView {
val
wrappedDrawable
=
DrawableHelper
.
wrapDrawable
(
it
)
val
mutableDrawable
=
wrappedDrawable
.
mutate
()
DrawableHelper
.
tintDrawable
(
mutableDrawable
,
context
!!
,
R
.
color
.
colorPrimary
)
DrawableHelper
.
compoundDrawable
(
name
,
mutableDrawable
)
DrawableHelper
.
compound
Left
Drawable
(
name
,
mutableDrawable
)
}
}
...
...
app/src/main/java/chat/rocket/android/chatinformation/ui/MessageInfoFragment.kt
View file @
f4efa770
...
...
@@ -44,7 +44,6 @@ class MessageInfoFragment : Fragment(), MessageInfoView {
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
AndroidSupportInjection
.
inject
(
this
)
setHasOptionsMenu
(
true
)
val
bundle
=
arguments
if
(
bundle
!=
null
)
{
...
...
@@ -52,6 +51,8 @@ class MessageInfoFragment : Fragment(), MessageInfoView {
}
else
{
requireNotNull
(
bundle
)
{
"no arguments supplied when the fragment was instantiated"
}
}
setHasOptionsMenu
(
true
)
}
override
fun
onCreateView
(
...
...
app/src/main/java/chat/rocket/android/chatroom/ui/ChatRoomFragment.kt
View file @
f4efa770
...
...
@@ -268,7 +268,6 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
AndroidSupportInjection
.
inject
(
this
)
setHasOptionsMenu
(
true
)
arguments
?.
run
{
chatRoomId
=
getString
(
BUNDLE_CHAT_ROOM_ID
,
""
)
...
...
@@ -292,6 +291,8 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
navigator
=
navigator
,
analyticsManager
=
analyticsManager
)
setHasOptionsMenu
(
true
)
}
override
fun
onCreateView
(
...
...
app/src/main/java/chat/rocket/android/chatrooms/di/ChatRoomsFragmentModule.kt
View file @
f4efa770
...
...
@@ -10,7 +10,6 @@ import chat.rocket.android.dagger.scope.PerFragment
import
chat.rocket.android.db.ChatRoomDao
import
chat.rocket.android.db.DatabaseManager
import
chat.rocket.android.db.UserDao
import
chat.rocket.android.infrastructure.LocalRepository
import
chat.rocket.android.server.domain.GetCurrentUserInteractor
import
chat.rocket.android.server.domain.PermissionsInteractor
import
chat.rocket.android.server.domain.PublicSettings
...
...
@@ -45,7 +44,7 @@ class ChatRoomsFragmentModule {
factory
:
RocketChatClientFactory
,
@Named
(
"currentServer"
)
currentServer
:
String
):
RocketChatClient
{
return
factory
.
create
(
currentServer
)
return
factory
.
get
(
currentServer
)
}
@Provides
...
...
app/src/main/java/chat/rocket/android/chatrooms/presentation/ChatRoomsPresenter.kt
View file @
f4efa770
...
...
@@ -10,6 +10,7 @@ import chat.rocket.android.helper.UserHelper
import
chat.rocket.android.infrastructure.LocalRepository
import
chat.rocket.android.main.presentation.MainNavigator
import
chat.rocket.android.server.domain.SettingsRepository
import
chat.rocket.android.server.domain.SortingAndGroupingInteractor
import
chat.rocket.android.server.domain.useRealName
import
chat.rocket.android.server.domain.useSpecialCharsOnRoom
import
chat.rocket.android.server.infraestructure.ConnectionManager
...
...
@@ -35,6 +36,7 @@ class ChatRoomsPresenter @Inject constructor(
private
val
strategy
:
CancelStrategy
,
private
val
navigator
:
MainNavigator
,
@Named
(
"currentServer"
)
private
val
currentServer
:
String
,
private
val
sortingAndGroupingInteractor
:
SortingAndGroupingInteractor
,
private
val
dbManager
:
DatabaseManager
,
manager
:
ConnectionManager
,
private
val
localRepository
:
LocalRepository
,
...
...
@@ -44,29 +46,42 @@ class ChatRoomsPresenter @Inject constructor(
private
val
client
=
manager
.
client
private
val
settings
=
settingsRepository
.
get
(
currentServer
)
fun
toCreateChannel
()
=
navigator
.
toCreateChannel
()
fun
toSettings
()
=
navigator
.
toSettings
()
fun
getCurrentServerName
()
=
view
.
setupToolbar
(
currentServer
)
fun
getSortingAndGroupingPreferences
()
{
with
(
sortingAndGroupingInteractor
)
{
view
.
setupSortingAndGrouping
(
getSortByName
(
currentServer
),
getUnreadOnTop
(
currentServer
),
getGroupByType
(
currentServer
),
getGroupByFavorites
(
currentServer
)
)
}
}
fun
loadChatRoom
(
roomId
:
String
)
{
launchUI
(
strategy
)
{
view
.
showLoadingRoom
(
""
)
try
{
val
room
=
dbManager
.
getRoom
(
roomId
)
if
(
room
!=
null
)
{
loadChatRoom
(
room
.
chatRoom
,
true
)
}
else
{
Timber
.
d
(
"Error loading channel"
)
Timber
.
e
(
"Error loading channel"
)
view
.
showGenericErrorMessage
()
}
}
catch
(
ex
:
Exception
)
{
Timber
.
d
(
ex
,
"Error loading channel"
)
Timber
.
e
(
ex
,
"Error loading channel"
)
view
.
showGenericErrorMessage
()
}
finally
{
view
.
hideLoadingRoom
()
}
}
}
fun
loadChatRoom
(
chatRoom
:
RoomUiModel
)
{
launchUI
(
strategy
)
{
view
.
showLoadingRoom
(
chatRoom
.
name
)
try
{
val
room
=
retryDB
(
"getRoom(${chatRoom.id}"
)
{
dbManager
.
getRoom
(
chatRoom
.
id
)
}
if
(
room
!=
null
)
{
...
...
@@ -86,10 +101,8 @@ class ChatRoomsPresenter @Inject constructor(
}
}
}
catch
(
ex
:
Exception
)
{
Timber
.
d
(
ex
,
"Error loading channel"
)
Timber
.
e
(
ex
,
"Error loading channel"
)
view
.
showGenericErrorMessage
()
}
finally
{
view
.
hideLoadingRoom
()
}
}
}
...
...
@@ -97,7 +110,8 @@ class ChatRoomsPresenter @Inject constructor(
suspend
fun
loadChatRoom
(
chatRoom
:
ChatRoomEntity
,
local
:
Boolean
=
false
)
{
with
(
chatRoom
)
{
val
isDirectMessage
=
roomTypeOf
(
type
)
is
RoomType
.
DirectMessage
val
roomName
=
if
(
settings
.
useSpecialCharsOnRoom
()
||
(
isDirectMessage
&&
settings
.
useRealName
()))
{
val
roomName
=
if
(
settings
.
useSpecialCharsOnRoom
()
||
(
isDirectMessage
&&
settings
.
useRealName
()))
{
fullname
?:
name
}
else
{
name
...
...
app/src/main/java/chat/rocket/android/chatrooms/presentation/ChatRoomsView.kt
View file @
f4efa770
...
...
@@ -4,7 +4,27 @@ import chat.rocket.android.core.behaviours.LoadingView
import
chat.rocket.android.core.behaviours.MessageView
interface
ChatRoomsView
:
LoadingView
,
MessageView
{
fun
showLoadingRoom
(
name
:
CharSequence
)
fun
hideLoadingRoom
()
/**
* Setups the toolbar with the current logged in server name.
*
* @param serverName The current logged in server name to show on Toolbar.
*/
fun
setupToolbar
(
serverName
:
String
)
/**
* Setups the sorting and grouping in the bases of the user preference for
* the current logged in server.
*
* @param isSortByName True if sorting by name, false otherwise.
* @param isUnreadOnTop True if grouping by unread on top, false otherwise.
* @param isGroupByType True if grouping by type , false otherwise.
* @param isGroupByFavorites True if grouping by favorites, false otherwise.
*/
fun
setupSortingAndGrouping
(
isSortByName
:
Boolean
,
isUnreadOnTop
:
Boolean
,
isGroupByType
:
Boolean
,
isGroupByFavorites
:
Boolean
)
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/chatrooms/ui/ChatRoomsFragment.kt
View file @
f4efa770
package
chat.rocket.android.chatrooms.ui
import
androidx.appcompat.app.AlertDialog
import
android.app.ProgressDialog
import
android.os.Bundle
import
android.os.Handler
import
android.view.LayoutInflater
import
android.view.Menu
import
android.view.MenuInflater
import
android.view.MenuItem
import
android.view.View
import
android.view.ViewGroup
import
android.widget.CheckBox
import
android.widget.RadioGroup
import
androidx.appcompat.app.AppCompatActivity
import
androidx.appcompat.widget.SearchView
import
androidx.core.view.isVisible
...
...
@@ -30,12 +25,9 @@ import chat.rocket.android.chatrooms.viewmodel.ChatRoomsViewModel
import
chat.rocket.android.chatrooms.viewmodel.ChatRoomsViewModelFactory
import
chat.rocket.android.chatrooms.viewmodel.LoadingState
import
chat.rocket.android.chatrooms.viewmodel.Query
import
chat.rocket.android.helper.ChatRoomsSortOrder
import
chat.rocket.android.helper.Constants
import
chat.rocket.android.helper.SharedPreferenceHelper
import
chat.rocket.android.servers.ui.ServersBottomSheetFragment
import
chat.rocket.android.sortingandgrouping.ui.SortingAndGroupingBottomSheetFragment
import
chat.rocket.android.util.extension.onQueryTextListener
import
chat.rocket.android.util.extensions.fadeIn
import
chat.rocket.android.util.extensions.fadeOut
import
chat.rocket.android.util.extensions.ifNotNullNotEmpty
import
chat.rocket.android.util.extensions.inflate
import
chat.rocket.android.util.extensions.showToast
...
...
@@ -43,6 +35,7 @@ import chat.rocket.android.util.extensions.ui
import
chat.rocket.android.widget.DividerItemDecoration
import
chat.rocket.core.internal.realtime.socket.model.State
import
dagger.android.support.AndroidSupportInjection
import
kotlinx.android.synthetic.main.app_bar_chat_rooms.*
import
kotlinx.android.synthetic.main.fragment_chat_rooms.*
import
timber.log.Timber
import
javax.inject.Inject
...
...
@@ -51,46 +44,38 @@ internal const val TAG_CHAT_ROOMS_FRAGMENT = "ChatRoomsFragment"
private
const
val
BUNDLE_CHAT_ROOM_ID
=
"BUNDLE_CHAT_ROOM_ID"
class
ChatRoomsFragment
:
Fragment
(),
ChatRoomsView
{
@Inject
lateinit
var
presenter
:
ChatRoomsPresenter
@Inject
lateinit
var
factory
:
ChatRoomsViewModelFactory
@Inject
lateinit
var
analyticsManager
:
AnalyticsManager
private
lateinit
var
viewModel
:
ChatRoomsViewModel
private
var
searchView
:
SearchView
?
=
null
private
var
sortView
:
MenuItem
?
=
null
private
val
handler
=
Handler
()
private
var
chatRoomId
:
String
?
=
null
private
var
progressDialog
:
ProgressDialog
?
=
null
companion
object
{
fun
newInstance
(
chatRoomId
:
String
?
=
null
):
ChatRoomsFragment
=
ChatRoomsFragment
().
apply
{
fun
newInstance
(
chatRoomId
:
String
?):
Fragment
=
ChatRoomsFragment
().
apply
{
arguments
=
Bundle
(
1
).
apply
{
putString
(
BUNDLE_CHAT_ROOM_ID
,
chatRoomId
)
}
}
}
}
class
ChatRoomsFragment
:
Fragment
(),
ChatRoomsView
{
@Inject
lateinit
var
presenter
:
ChatRoomsPresenter
@Inject
lateinit
var
factory
:
ChatRoomsViewModelFactory
@Inject
lateinit
var
analyticsManager
:
AnalyticsManager
private
lateinit
var
viewModel
:
ChatRoomsViewModel
private
var
chatRoomId
:
String
?
=
null
private
var
isSortByName
=
false
private
var
isUnreadOnTop
=
false
private
var
isGroupByType
=
false
private
var
isGroupByFavorites
=
false
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
AndroidSupportInjection
.
inject
(
this
)
setHasOptionsMenu
(
true
)
arguments
?.
run
{
chatRoomId
=
getString
(
BUNDLE_CHAT_ROOM_ID
)
chatRoomId
.
ifNotNullNotEmpty
{
roomId
->
presenter
.
loadChatRoom
(
roomId
)
chatRoomId
.
ifNotNullNotEmpty
{
presenter
.
loadChatRoom
(
it
)
chatRoomId
=
null
}
}
}
override
fun
onDestroy
()
{
handler
.
removeCallbacks
(
dismissStatus
)
super
.
onDestroy
()
setHasOptionsMenu
(
true
)
}
override
fun
onCreateView
(
...
...
@@ -102,62 +87,47 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView {
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
super
.
onViewCreated
(
view
,
savedInstanceState
)
with
(
presenter
)
{
getCurrentServerName
()
getSortingAndGroupingPreferences
()
}
viewModel
=
ViewModelProviders
.
of
(
this
,
factory
).
get
(
ChatRoomsViewModel
::
class
.
java
)
subscribeUi
()
setupToolbar
()
setupListeners
()
analyticsManager
.
logScreenView
(
ScreenViewEvent
.
ChatRooms
)
}
private
fun
subscribeUi
()
{
ui
{
val
adapter
=
RoomsAdapter
{
room
->
presenter
.
loadChatRoom
(
room
)
}
recycler_view
.
layoutManager
=
LinearLayoutManager
(
it
)
recycler_view
.
addItemDecoration
(
DividerItemDecoration
(
it
,
resources
.
getDimensionPixelSize
(
R
.
dimen
.
divider_item_decorator_bound_start
),
resources
.
getDimensionPixelSize
(
R
.
dimen
.
divider_item_decorator_bound_end
)
)
)
recycler_view
.
itemAnimator
=
DefaultItemAnimator
()
viewModel
.
getChatRooms
().
observe
(
viewLifecycleOwner
,
Observer
{
rooms
->
rooms
?.
let
{
Timber
.
d
(
"Got items: $it"
)
adapter
.
values
=
it
if
(
recycler_view
.
adapter
!=
adapter
)
{
recycler_view
.
adapter
=
adapter
}
if
(
rooms
.
isNotEmpty
())
{
text_no_data_to_display
.
isVisible
=
false
}
}
})
viewModel
.
loadingState
.
observe
(
viewLifecycleOwner
,
Observer
{
state
->
when
(
state
)
{
is
LoadingState
.
Loading
->
if
(
state
.
count
==
0L
)
showLoading
()
is
LoadingState
.
Loaded
->
{
hideLoading
()
if
(
state
.
count
==
0L
)
showNoChatRoomsToDisplay
()
override
fun
setupToolbar
(
serverName
:
String
)
{
with
((
activity
as
AppCompatActivity
))
{
with
(
toolbar
)
{
setSupportActionBar
(
this
)
setNavigationOnClickListener
{
presenter
.
toSettings
()
}
}
is
LoadingState
.
Error
->
{
hideLoading
()
showGenericErrorMessage
()
}
text_server_name
.
text
=
serverName
}
})
viewModel
.
getStatus
().
observe
(
viewLifecycleOwner
,
Observer
{
status
->
status
?.
let
{
showConnectionState
(
status
)
}
})
override
fun
setupSortingAndGrouping
(
isSortByName
:
Boolean
,
isUnreadOnTop
:
Boolean
,
isGroupByType
:
Boolean
,
isGroupByFavorites
:
Boolean
)
{
this
.
isSortByName
=
isSortByName
this
.
isUnreadOnTop
=
isUnreadOnTop
this
.
isGroupByType
=
isGroupByType
this
.
isGroupByFavorites
=
isGroupByFavorites
updateSort
()
if
(
isSortByName
)
{
text_sort_by
.
text
=
getString
(
R
.
string
.
msg_sort_by
,
getString
(
R
.
string
.
msg_sort_by_name
).
toLowerCase
())
}
else
{
text_sort_by
.
text
=
getString
(
R
.
string
.
msg_sort_by
,
getString
(
R
.
string
.
msg_sort_by_activity
).
toLowerCase
()
)
}
}
...
...
@@ -165,120 +135,40 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView {
super
.
onCreateOptionsMenu
(
menu
,
inflater
)
inflater
.
inflate
(
R
.
menu
.
chatrooms
,
menu
)
sortView
=
menu
.
findItem
(
R
.
id
.
action_sort
)
val
searchMenuItem
=
menu
.
findItem
(
R
.
id
.
action_search
)
val
searchView
=
searchMenuItem
?.
actionView
as
SearchView
val
searchItem
=
menu
.
findItem
(
R
.
id
.
action_search
)
searchView
=
searchItem
?.
actionView
as
?
SearchView
searchView
?.
setIconifiedByDefault
(
false
)
searchView
?.
maxWidth
=
Integer
.
MAX_VALUE
searchView
?.
onQueryTextListener
{
queryChatRoomsByName
(
it
)
}
with
(
searchView
)
{
setIconifiedByDefault
(
false
)
maxWidth
=
Integer
.
MAX_VALUE
onQueryTextListener
{
queryChatRoomsByName
(
it
)
}
}
val
expandListener
=
object
:
MenuItem
.
OnActionExpandListener
{
searchMenuItem
.
setOnActionExpandListener
(
object
:
MenuItem
.
OnActionExpandListener
{
override
fun
onMenuItemActionCollapse
(
item
:
MenuItem
):
Boolean
{
// Simply setting sortView to visible won't work, so we invalidate the options
// to recreate the entire menu...
viewModel
.
showLastMessage
=
true
// We need to show all the menu items here by invalidating the options to recreate the entire menu.
activity
?.
invalidateOptionsMenu
()
queryChatRoomsByName
(
null
)
return
true
}
override
fun
onMenuItemActionExpand
(
item
:
MenuItem
):
Boolean
{
viewModel
.
showLastMessage
=
false
sortView
?
.
isVisible
=
false
// We need to hide the all the menu items here.
menu
.
findItem
(
R
.
id
.
action_new_channel
)
.
isVisible
=
false
return
true
}
}
searchItem
?.
setOnActionExpandListener
(
expandListener
)
})
}
override
fun
onOptionsItemSelected
(
item
:
MenuItem
):
Boolean
{
when
(
item
.
itemId
)
{
// TODO - simplify this
R
.
id
.
action_sort
->
{
val
dialogLayout
=
layoutInflater
.
inflate
(
R
.
layout
.
chatroom_sort_dialog
,
null
)
val
sortType
=
SharedPreferenceHelper
.
getInt
(
Constants
.
CHATROOM_SORT_TYPE_KEY
,
ChatRoomsSortOrder
.
ACTIVITY
)
val
groupByType
=
SharedPreferenceHelper
.
getBoolean
(
Constants
.
CHATROOM_GROUP_BY_TYPE_KEY
,
false
)
val
radioGroup
=
dialogLayout
.
findViewById
<
RadioGroup
>(
R
.
id
.
radio_group_sort
)
val
groupByTypeCheckBox
=
dialogLayout
.
findViewById
<
CheckBox
>(
R
.
id
.
checkbox_group_by_type
)
radioGroup
.
check
(
when
(
sortType
)
{
0
->
R
.
id
.
radio_sort_alphabetical
else
->
R
.
id
.
radio_sort_activity
}
)
radioGroup
.
setOnCheckedChangeListener
{
_
,
checkedId
->
run
{
SharedPreferenceHelper
.
putInt
(
Constants
.
CHATROOM_SORT_TYPE_KEY
,
when
(
checkedId
)
{
R
.
id
.
radio_sort_alphabetical
->
0
R
.
id
.
radio_sort_activity
->
1
else
->
1
}
)
}
}
groupByTypeCheckBox
.
isChecked
=
groupByType
groupByTypeCheckBox
.
setOnCheckedChangeListener
{
_
,
isChecked
->
SharedPreferenceHelper
.
putBoolean
(
Constants
.
CHATROOM_GROUP_BY_TYPE_KEY
,
isChecked
)
}
context
?.
let
{
AlertDialog
.
Builder
(
it
)
.
setTitle
(
R
.
string
.
dialog_sort_title
)
.
setView
(
dialogLayout
)
.
setPositiveButton
(
R
.
string
.
msg_sort
)
{
dialog
,
_
->
invalidateQueryOnSearch
()
updateSort
()
dialog
.
dismiss
()
}.
show
()
}
}
R
.
id
.
action_new_channel
->
presenter
.
toCreateChannel
()
}
return
super
.
onOptionsItemSelected
(
item
)
}
private
fun
updateSort
()
{
val
sortType
=
SharedPreferenceHelper
.
getInt
(
Constants
.
CHATROOM_SORT_TYPE_KEY
,
ChatRoomsSortOrder
.
ACTIVITY
)
val
grouped
=
SharedPreferenceHelper
.
getBoolean
(
Constants
.
CHATROOM_GROUP_BY_TYPE_KEY
,
false
)
val
query
=
when
(
sortType
)
{
ChatRoomsSortOrder
.
ALPHABETICAL
->
{
Query
.
ByName
(
grouped
)
}
ChatRoomsSortOrder
.
ACTIVITY
->
{
Query
.
ByActivity
(
grouped
)
}
else
->
Query
.
ByActivity
()
}
viewModel
.
setQuery
(
query
)
}
private
fun
invalidateQueryOnSearch
()
{
searchView
?.
let
{
if
(!
searchView
!!
.
isIconified
)
{
queryChatRoomsByName
(
searchView
!!
.
query
.
toString
())
}
}
}
private
fun
showNoChatRoomsToDisplay
()
{
ui
{
text_no_data_to_display
.
isVisible
=
true
}
//
ui { text_no_data_to_display.isVisible = true }
}
override
fun
showLoading
()
{
...
...
@@ -303,55 +193,135 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView {
override
fun
showGenericErrorMessage
()
=
showMessage
(
getString
(
R
.
string
.
msg_generic_error
))
override
fun
showLoadingRoom
(
name
:
CharSequence
)
{
private
fun
showConnectionState
(
state
:
State
)
{
Timber
.
d
(
"Got new state: $state"
)
// ui {
// text_connection_status.fadeIn()
// handler.removeCallbacks(dismissStatus)
// text_connection_status.text = when (state) {
// is State.Connected -> {
// handler.postDelayed(dismissStatus, 2000)
// getString(R.string.status_connected)
// }
// is State.Disconnected -> getString(R.string.status_disconnected)
// is State.Connecting -> getString(R.string.status_connecting)
// is State.Authenticating -> getString(R.string.status_authenticating)
// is State.Disconnecting -> getString(R.string.status_disconnecting)
// is State.Waiting -> getString(R.string.status_waiting, state.seconds)
// else -> {
// handler.postDelayed(dismissStatus, 500)
// ""
// }
// }
// }
}
private
fun
subscribeUi
()
{
ui
{
progressDialog
=
ProgressDialog
.
show
(
activity
,
"Rocket.Chat"
,
"Loading room $name"
)
val
adapter
=
RoomsAdapter
{
room
->
presenter
.
loadChatRoom
(
room
)
}
with
(
recycler_view
)
{
layoutManager
=
LinearLayoutManager
(
it
)
addItemDecoration
(
DividerItemDecoration
(
it
,
resources
.
getDimensionPixelSize
(
R
.
dimen
.
divider_item_decorator_bound_start
),
resources
.
getDimensionPixelSize
(
R
.
dimen
.
divider_item_decorator_bound_end
)
)
)
itemAnimator
=
DefaultItemAnimator
()
}
override
fun
hideLoadingRoom
()
{
progressDialog
?.
dismiss
()
viewModel
.
getChatRooms
().
observe
(
viewLifecycleOwner
,
Observer
{
rooms
->
rooms
?.
let
{
adapter
.
values
=
it
if
(
recycler_view
.
adapter
!=
adapter
)
{
recycler_view
.
adapter
=
adapter
}
if
(
rooms
.
isNotEmpty
())
{
// text_no_data_to_display.isVisible = false
}
}
})
private
fun
showConnectionState
(
state
:
State
)
{
Timber
.
d
(
"Got new state: $state"
)
ui
{
text_connection_status
.
fadeIn
()
handler
.
removeCallbacks
(
dismissStatus
)
text_connection_status
.
text
=
when
(
state
)
{
is
State
.
Connected
->
{
handler
.
postDelayed
(
dismissStatus
,
2000
)
getString
(
R
.
string
.
status_connected
)
viewModel
.
loadingState
.
observe
(
viewLifecycleOwner
,
Observer
{
state
->
when
(
state
)
{
is
LoadingState
.
Loading
->
if
(
state
.
count
==
0L
)
showLoading
()
is
LoadingState
.
Loaded
->
{
hideLoading
()
if
(
state
.
count
==
0L
)
showNoChatRoomsToDisplay
()
}
is
State
.
Disconnected
->
getString
(
R
.
string
.
status_disconnected
)
is
State
.
Connecting
->
getString
(
R
.
string
.
status_connecting
)
is
State
.
Authenticating
->
getString
(
R
.
string
.
status_authenticating
)
is
State
.
Disconnecting
->
getString
(
R
.
string
.
status_disconnecting
)
is
State
.
Waiting
->
getString
(
R
.
string
.
status_waiting
,
state
.
seconds
)
else
->
{
handler
.
postDelayed
(
dismissStatus
,
500
)
""
is
LoadingState
.
Error
->
{
hideLoading
()
showGenericErrorMessage
()
}
}
})
viewModel
.
getStatus
().
observe
(
viewLifecycleOwner
,
Observer
{
status
->
status
?.
let
{
showConnectionState
(
status
)
}
})
showAllChats
()
}
}
private
val
dismissStatus
=
{
if
(
text_connection_status
!=
null
)
{
text_connection_status
.
fadeOut
()
private
fun
setupListeners
()
{
text_server_name
.
setOnClickListener
{
ServersBottomSheetFragment
().
show
(
activity
?.
supportFragmentManager
,
chat
.
rocket
.
android
.
servers
.
ui
.
TAG
)
}
text_sort_by
.
setOnClickListener
{
SortingAndGroupingBottomSheetFragment
().
show
(
activity
?.
supportFragmentManager
,
chat
.
rocket
.
android
.
sortingandgrouping
.
ui
.
TAG
)
}
}
fun
sortChatRoomsList
(
isSortByName
:
Boolean
,
isUnreadOnTop
:
Boolean
,
isGroupByType
:
Boolean
,
isGroupByFavorites
:
Boolean
)
{
this
.
isSortByName
=
isSortByName
this
.
isUnreadOnTop
=
isUnreadOnTop
this
.
isGroupByType
=
isGroupByType
this
.
isGroupByFavorites
=
isGroupByFavorites
private
fun
setupToolbar
()
{
(
activity
as
AppCompatActivity
?)
?.
supportActionBar
?.
title
=
getString
(
R
.
string
.
title_chats
)
if
(
isSortByName
)
{
viewModel
.
setQuery
(
Query
.
ByName
(
isGroupByType
))
changeSortByTitle
(
getString
(
R
.
string
.
msg_sort_by_name
))
}
else
{
viewModel
.
setQuery
(
Query
.
ByActivity
(
isGroupByType
))
changeSortByTitle
(
getString
(
R
.
string
.
msg_sort_by_activity
))
}
}
private
fun
changeSortByTitle
(
text
:
String
)
{
text_sort_by
.
text
=
getString
(
R
.
string
.
msg_sort_by
,
text
.
toLowerCase
())
}
private
fun
queryChatRoomsByName
(
name
:
String
?):
Boolean
{
if
(
name
.
isNullOrEmpty
())
{
updateSort
()
showAllChats
()
}
else
{
viewModel
.
setQuery
(
Query
.
Search
(
name
!!
))
viewModel
.
setQuery
(
Query
.
Search
(
name
))
}
return
true
}
private
fun
showAllChats
()
{
if
(
isSortByName
)
{
viewModel
.
setQuery
(
Query
.
ByName
(
isGroupByType
))
}
else
{
viewModel
.
setQuery
(
Query
.
ByActivity
(
isGroupByType
))
}
}
}
app/src/main/java/chat/rocket/android/createchannel/presentation/CreateChannelPresenter.kt
View file @
f4efa770
...
...
@@ -22,7 +22,7 @@ class CreateChannelPresenter @Inject constructor(
val
serverInteractor
:
GetCurrentServerInteractor
,
val
factory
:
RocketChatClientFactory
)
{
private
val
client
:
RocketChatClient
=
factory
.
create
(
serverInteractor
.
get
()
!!
)
private
val
client
:
RocketChatClient
=
factory
.
get
(
serverInteractor
.
get
()
!!
)
fun
createChannel
(
roomType
:
RoomType
,
...
...
@@ -35,7 +35,6 @@ class CreateChannelPresenter @Inject constructor(
view
.
disableUserInput
()
try
{
client
.
createChannel
(
roomType
,
channelName
,
usersList
,
readOnly
)
view
.
prepareToShowChatList
()
view
.
showChannelCreatedSuccessfullyMessage
()
toChatList
()
}
catch
(
exception
:
RocketChatException
)
{
...
...
app/src/main/java/chat/rocket/android/createchannel/presentation/CreateChannelView.kt
View file @
f4efa770
...
...
@@ -28,12 +28,6 @@ interface CreateChannelView : LoadingView, MessageView {
*/
fun
hideSuggestionViewInProgress
()
/**
* Shows the navigation drawer with the chat item checked before showing the chat list.
* This function is invoked after successfully created the channel.
*/
fun
prepareToShowChatList
()
/**
* Shows a message that a channel was successfully created.
*/
...
...
app/src/main/java/chat/rocket/android/createchannel/ui/CreateChannelFragment.kt
View file @
f4efa770
...
...
@@ -9,7 +9,6 @@ import android.view.ViewGroup
import
androidx.appcompat.app.AppCompatActivity
import
androidx.appcompat.view.ActionMode
import
androidx.core.view.isVisible
import
androidx.core.view.postDelayed
import
androidx.fragment.app.Fragment
import
androidx.recyclerview.widget.DividerItemDecoration
import
androidx.recyclerview.widget.LinearLayoutManager
...
...
@@ -19,7 +18,6 @@ import chat.rocket.android.analytics.AnalyticsManager
import
chat.rocket.android.analytics.event.ScreenViewEvent
import
chat.rocket.android.createchannel.presentation.CreateChannelPresenter
import
chat.rocket.android.createchannel.presentation.CreateChannelView
import
chat.rocket.android.main.ui.MainActivity
import
chat.rocket.android.members.adapter.MembersAdapter
import
chat.rocket.android.members.uimodel.MemberUiModel
import
chat.rocket.android.util.extension.asObservable
...
...
@@ -32,17 +30,18 @@ import com.google.android.material.chip.Chip
import
dagger.android.support.AndroidSupportInjection
import
io.reactivex.android.schedulers.AndroidSchedulers
import
io.reactivex.disposables.CompositeDisposable
import
kotlinx.android.synthetic.main.app_bar.*
import
kotlinx.android.synthetic.main.fragment_create_channel.*
import
java.util.concurrent.TimeUnit
import
javax.inject.Inject
internal
const
val
TAG_CREATE_CHANNEL_FRAGMENT
=
"CreateChannelFragment"
fun
newInstance
()
=
CreateChannelFragment
()
class
CreateChannelFragment
:
Fragment
(),
CreateChannelView
,
ActionMode
.
Callback
{
@Inject
lateinit
var
createChannelPresenter
:
CreateChannelPresenter
@Inject
lateinit
var
analyticsManager
:
AnalyticsManager
@Inject
lateinit
var
presenter
:
CreateChannelPresenter
@Inject
lateinit
var
analyticsManager
:
AnalyticsManager
private
var
actionMode
:
ActionMode
?
=
null
private
val
adapter
:
MembersAdapter
=
MembersAdapter
{
it
.
username
?.
run
{
processSelectedMember
(
this
)
}
...
...
@@ -52,10 +51,6 @@ class CreateChannelFragment : Fragment(), CreateChannelView, ActionMode.Callback
private
var
isChannelReadOnly
:
Boolean
=
false
private
var
memberList
=
arrayListOf
<
String
>()
companion
object
{
fun
newInstance
()
=
CreateChannelFragment
()
}
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
AndroidSupportInjection
.
inject
(
this
)
super
.
onCreate
(
savedInstanceState
)
...
...
@@ -93,7 +88,7 @@ class CreateChannelFragment : Fragment(), CreateChannelView, ActionMode.Callback
override
fun
onActionItemClicked
(
mode
:
ActionMode
,
menuItem
:
MenuItem
):
Boolean
{
return
when
(
menuItem
.
itemId
)
{
R
.
id
.
action_create_channel
->
{
createChannelP
resenter
.
createChannel
(
p
resenter
.
createChannel
(
roomTypeOf
(
channelType
),
text_channel_name
.
text
.
toString
(),
memberList
,
...
...
@@ -165,17 +160,6 @@ class CreateChannelFragment : Fragment(), CreateChannelView, ActionMode.Callback
view_member_suggestion_loading
.
isVisible
=
false
}
override
fun
prepareToShowChatList
()
{
with
(
activity
as
MainActivity
)
{
setCheckedNavDrawerItem
(
R
.
id
.
menu_action_chats
)
openDrawer
()
getDrawerLayout
().
postDelayed
(
1000
)
{
closeDrawer
()
createChannelPresenter
.
toChatList
()
}
}
}
override
fun
showChannelCreatedSuccessfullyMessage
()
{
showMessage
(
getString
(
R
.
string
.
msg_channel_created_successfully
))
}
...
...
@@ -191,8 +175,14 @@ class CreateChannelFragment : Fragment(), CreateChannelView, ActionMode.Callback
}
private
fun
setupToolBar
()
{
(
activity
as
AppCompatActivity
?)
?.
supportActionBar
?.
title
=
getString
(
R
.
string
.
title_create_channel
)
with
((
activity
as
AppCompatActivity
))
{
with
(
toolbar
)
{
setSupportActionBar
(
this
)
title
=
getString
(
R
.
string
.
title_create_channel
)
setNavigationIcon
(
R
.
drawable
.
ic_arrow_back_white_24dp
)
setNavigationOnClickListener
{
activity
?.
onBackPressed
()
}
}
}
}
private
fun
setupViewListeners
()
{
...
...
@@ -247,7 +237,7 @@ class CreateChannelFragment : Fragment(), CreateChannelView, ActionMode.Callback
.
filter
{
t
->
t
.
isNotBlank
()
}
.
subscribe
{
if
(
it
.
length
>=
3
)
{
createChannelP
resenter
.
searchUser
(
it
.
toString
())
p
resenter
.
searchUser
(
it
.
toString
())
}
else
{
view_member_suggestion
.
isVisible
=
false
}
...
...
app/src/main/java/chat/rocket/android/dagger/module/ActivityBuilder.kt
View file @
f4efa770
package
chat.rocket.android.dagger.module
import
chat.rocket.android.about.di.AboutFragmentProvider
import
chat.rocket.android.authentication.di.AuthenticationModule
import
chat.rocket.android.authentication.login.di.LoginFragmentProvider
import
chat.rocket.android.authentication.loginoptions.di.LoginOptionsFragmentProvider
...
...
@@ -29,13 +28,14 @@ import chat.rocket.android.main.ui.MainActivity
import
chat.rocket.android.members.di.MembersFragmentProvider
import
chat.rocket.android.mentions.di.MentionsFragmentProvider
import
chat.rocket.android.pinnedmessages.di.PinnedMessagesFragmentProvider
import
chat.rocket.android.preferences.di.PreferencesFragmentProvider
import
chat.rocket.android.profile.di.ProfileFragmentProvider
import
chat.rocket.android.server.di.ChangeServerModule
import
chat.rocket.android.server.ui.ChangeServerActivity
import
chat.rocket.android.servers.di.ServersBottomSheetFragmentProvider
import
chat.rocket.android.settings.di.SettingsFragmentProvider
import
chat.rocket.android.settings.password.di.PasswordFragmentProvider
import
chat.rocket.android.settings.password.ui.PasswordActivity
import
chat.rocket.android.sortingandgrouping.di.SortingAndGroupingBottomSheetFragmentProvider
import
chat.rocket.android.userdetails.di.UserDetailsFragmentProvider
import
chat.rocket.android.videoconference.di.VideoConferenceModule
import
chat.rocket.android.videoconference.ui.VideoConferenceActivity
...
...
@@ -65,11 +65,11 @@ abstract class ActivityBuilder {
@ContributesAndroidInjector
(
modules
=
[
MainModule
::
class
,
ChatRoomsFragmentProvider
::
class
,
ServersBottomSheetFragmentProvider
::
class
,
SortingAndGroupingBottomSheetFragmentProvider
::
class
,
CreateChannelProvider
::
class
,
ProfileFragmentProvider
::
class
,
SettingsFragmentProvider
::
class
,
AboutFragmentProvider
::
class
,
PreferencesFragmentProvider
::
class
,
AdminPanelWebViewFragmentProvider
::
class
]
)
...
...
app/src/main/java/chat/rocket/android/dagger/module/AppModule.kt
View file @
f4efa770
...
...
@@ -27,23 +27,23 @@ import chat.rocket.android.push.PushManager
import
chat.rocket.android.server.domain.AccountsRepository
import
chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import
chat.rocket.android.server.domain.AnalyticsTrackingRepository
import
chat.rocket.android.server.domain.BasicAuthRepository
import
chat.rocket.android.server.domain.ChatRoomsRepository
import
chat.rocket.android.server.domain.CurrentServerRepository
import
chat.rocket.android.server.domain.GetAccountInteractor
import
chat.rocket.android.server.domain.GetAccountsInteractor
import
chat.rocket.android.server.domain.GetBasicAuthInteractor
import
chat.rocket.android.server.domain.GetCurrentServerInteractor
import
chat.rocket.android.server.domain.GetSettingsInteractor
import
chat.rocket.android.server.domain.JobSchedulerInteractor
import
chat.rocket.android.server.domain.MessagesRepository
import
chat.rocket.android.server.domain.MultiServerTokenRepository
import
chat.rocket.android.server.domain.PermissionsRepository
import
chat.rocket.android.server.domain.SaveBasicAuthInteractor
import
chat.rocket.android.server.domain.SettingsRepository
import
chat.rocket.android.server.domain.SortingAndGroupingRepository
import
chat.rocket.android.server.domain.TokenRepository
import
chat.rocket.android.server.domain.UsersRepository
import
chat.rocket.android.server.domain.BasicAuthRepository
import
chat.rocket.android.server.domain.GetBasicAuthInteractor
import
chat.rocket.android.server.domain.SaveBasicAuthInteractor
import
chat.rocket.android.server.infraestructure.SharedPrefsBasicAuthRepository
import
chat.rocket.android.server.infraestructure.DatabaseMessageMapper
import
chat.rocket.android.server.infraestructure.DatabaseMessagesRepository
import
chat.rocket.android.server.infraestructure.JobSchedulerInteractorImpl
...
...
@@ -53,11 +53,13 @@ import chat.rocket.android.server.infraestructure.SharedPreferencesAccountsRepos
import
chat.rocket.android.server.infraestructure.SharedPreferencesPermissionsRepository
import
chat.rocket.android.server.infraestructure.SharedPreferencesSettingsRepository
import
chat.rocket.android.server.infraestructure.SharedPrefsAnalyticsTrackingRepository
import
chat.rocket.android.server.infraestructure.SharedPrefsBasicAuthRepository
import
chat.rocket.android.server.infraestructure.SharedPrefsConnectingServerRepository
import
chat.rocket.android.server.infraestructure.SharedPrefsCurrentServerRepository
import
chat.rocket.android.server.infraestructure.SharedPrefsSortingAndGroupingRepository
import
chat.rocket.android.util.AppJsonAdapterFactory
import
chat.rocket.android.util.HttpLoggingInterceptor
import
chat.rocket.android.util.BasicAuthenticatorInterceptor
import
chat.rocket.android.util.HttpLoggingInterceptor
import
chat.rocket.android.util.TimberLogger
import
chat.rocket.common.internal.FallbackSealedClassJsonAdapter
import
chat.rocket.common.internal.ISO8601Date
...
...
@@ -123,7 +125,10 @@ class AppModule {
@Provides
@Singleton
fun
provideOkHttpClient
(
logger
:
HttpLoggingInterceptor
,
basicAuthenticator
:
BasicAuthenticatorInterceptor
):
OkHttpClient
{
fun
provideOkHttpClient
(
logger
:
HttpLoggingInterceptor
,
basicAuthenticator
:
BasicAuthenticatorInterceptor
):
OkHttpClient
{
return
OkHttpClient
.
Builder
()
.
addInterceptor
(
logger
)
.
addInterceptor
(
basicAuthenticator
)
...
...
@@ -194,6 +199,12 @@ class AppModule {
return
SharedPrefsAnalyticsTrackingRepository
(
prefs
)
}
@Provides
@Singleton
fun
provideSortingAndGroupingRepository
(
prefs
:
SharedPreferences
):
SortingAndGroupingRepository
{
return
SharedPrefsSortingAndGroupingRepository
(
prefs
)
}
@Provides
@ForAuthentication
fun
provideConnectingServerRepository
(
prefs
:
SharedPreferences
):
CurrentServerRepository
{
...
...
@@ -293,7 +304,7 @@ class AppModule {
@Provides
@Singleton
fun
provideBasicAuthRepository
(
fun
provideBasicAuthRepository
(
preferences
:
SharedPreferences
,
moshi
:
Moshi
):
BasicAuthRepository
=
...
...
app/src/main/java/chat/rocket/android/db/DatabaseManager.kt
View file @
f4efa770
...
...
@@ -139,7 +139,7 @@ class DatabaseManager(val context: Application, val serverUrl: String) {
}
/*
* Creates a list of data
base operations
* Creates a list of database operations
*/
fun
processChatRoomsBatch
(
batch
:
List
<
StreamMessage
<
BaseRoom
>>)
{
GlobalScope
.
launch
(
dbManagerContext
)
{
...
...
app/src/main/java/chat/rocket/android/favoritemessages/presentation/FavoriteMessagesPresenter.kt
View file @
f4efa770
...
...
@@ -5,7 +5,6 @@ import chat.rocket.android.core.lifecycle.CancelStrategy
import
chat.rocket.android.db.DatabaseManager
import
chat.rocket.android.server.infraestructure.RocketChatClientFactory
import
chat.rocket.android.util.extension.launchUI
import
chat.rocket.android.util.retryDB
import
chat.rocket.common.RocketChatException
import
chat.rocket.common.model.roomTypeOf
import
chat.rocket.common.util.ifNull
...
...
@@ -23,7 +22,7 @@ class FavoriteMessagesPresenter @Inject constructor(
private
val
mapper
:
UiModelMapper
,
val
factory
:
RocketChatClientFactory
)
{
private
val
client
:
RocketChatClient
=
factory
.
create
(
currentServer
)
private
val
client
:
RocketChatClient
=
factory
.
get
(
currentServer
)
private
var
offset
:
Int
=
0
/**
...
...
app/src/main/java/chat/rocket/android/files/presentation/FilesPresenter.kt
View file @
f4efa770
...
...
@@ -7,7 +7,6 @@ import chat.rocket.android.files.uimodel.FileUiModel
import
chat.rocket.android.files.uimodel.FileUiModelMapper
import
chat.rocket.android.server.infraestructure.RocketChatClientFactory
import
chat.rocket.android.util.extension.launchUI
import
chat.rocket.android.util.retryDB
import
chat.rocket.common.RocketChatException
import
chat.rocket.common.model.roomTypeOf
import
chat.rocket.common.util.ifNull
...
...
@@ -25,7 +24,7 @@ class FilesPresenter @Inject constructor(
private
val
mapper
:
FileUiModelMapper
,
val
factory
:
RocketChatClientFactory
)
{
private
val
client
:
RocketChatClient
=
factory
.
create
(
currentServer
)
private
val
client
:
RocketChatClient
=
factory
.
get
(
currentServer
)
private
var
offset
:
Int
=
0
/**
...
...
app/src/main/java/chat/rocket/android/helper/Constants.kt
deleted
100644 → 0
View file @
ab24ba31
package
chat.rocket.android.helper
object
Constants
{
const
val
CHATROOM_SORT_TYPE_KEY
:
String
=
"chatroom_sort_type"
const
val
CHATROOM_GROUP_BY_TYPE_KEY
:
String
=
"chatroom_group_by_type"
const
val
CHATROOM_GROUP_FAVOURITES_KEY
:
String
=
"chatroom_group_favourites"
//Used to sort chat rooms
const
val
CHATROOM_CHANNEL
=
0
const
val
CHATROOM_PRIVATE_GROUP
=
1
const
val
CHATROOM_DM
=
2
const
val
CHATROOM_LIVE_CHAT
=
3
}
object
ChatRoomsSortOrder
{
const
val
ALPHABETICAL
:
Int
=
0
const
val
ACTIVITY
:
Int
=
1
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/helper/SharedPreferenceHelper.kt
deleted
100644 → 0
View file @
ab24ba31
package
chat.rocket.android.helper
import
android.content.SharedPreferences
import
android.preference.PreferenceManager
import
chat.rocket.android.app.RocketChatApplication
object
SharedPreferenceHelper
{
private
var
sharedPreferences
:
SharedPreferences
=
PreferenceManager
.
getDefaultSharedPreferences
(
RocketChatApplication
.
getAppContext
())
private
var
editor
:
SharedPreferences
.
Editor
?
=
sharedPreferences
.
edit
()
//Add more methods for other types if needed
fun
putInt
(
key
:
String
,
value
:
Int
)
{
editor
!!
.
putInt
(
key
,
value
).
apply
()
}
fun
getInt
(
key
:
String
,
defaultValue
:
Int
):
Int
{
return
sharedPreferences
.
getInt
(
key
,
defaultValue
)
}
fun
putLong
(
key
:
String
,
value
:
Long
)
{
editor
!!
.
putLong
(
key
,
value
).
apply
()
}
fun
getLong
(
key
:
String
,
defaultValue
:
Long
):
Long
{
return
sharedPreferences
.
getLong
(
key
,
defaultValue
)
}
fun
putString
(
key
:
String
,
value
:
String
)
{
editor
!!
.
putString
(
key
,
value
).
apply
()
}
fun
getString
(
key
:
String
,
defaultValue
:
String
):
String
?
{
return
sharedPreferences
.
getString
(
key
,
defaultValue
)
}
fun
putBoolean
(
key
:
String
,
value
:
Boolean
)
{
editor
!!
.
putBoolean
(
key
,
value
).
apply
()
}
fun
getBoolean
(
key
:
String
,
defaultValue
:
Boolean
):
Boolean
{
return
sharedPreferences
.
getBoolean
(
key
,
defaultValue
)
}
fun
remove
(
key
:
String
)
{
editor
!!
.
remove
(
key
).
apply
()
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/helper/UserHelper.kt
View file @
f4efa770
...
...
@@ -24,6 +24,24 @@ class UserHelper @Inject constructor(
*/
fun
username
():
String
?
=
localRepository
.
get
(
LocalRepository
.
CURRENT_USERNAME_KEY
,
null
)
/**
* Return the name for the current logged [User].
*/
fun
name
():
String
?
=
user
()
?.
name
/**
* Return the display name for the given [user].
* If setting 'Use_Real_Name' is true then the real name will be given, otherwise the username
* without the '@' is yielded.
*/
fun
displayName
(
user
:
User
)
=
getCurrentServerInteractor
.
get
()
?.
let
{
if
(
settingsRepository
.
get
(
it
).
useRealName
())
{
user
.
name
}
else
{
user
.
username
}
}
/**
* Return the display name for the given [user].
* If setting 'Use_Real_Name' is true then the real name will be given, otherwise the username
...
...
app/src/main/java/chat/rocket/android/main/adapter/StatusViewHolder.kt
deleted
100644 → 0
View file @
ab24ba31
package
chat.rocket.android.main.adapter
import
androidx.recyclerview.widget.RecyclerView
import
android.view.View
import
chat.rocket.common.model.UserStatus
import
kotlinx.android.synthetic.main.item_change_status.view.*
class
StatusViewHolder
(
itemView
:
View
)
:
RecyclerView
.
ViewHolder
(
itemView
)
{
fun
bind
(
listener
:
(
UserStatus
)
->
Unit
)
{
with
(
itemView
)
{
text_online
.
setOnClickListener
{
listener
(
UserStatus
.
Online
())
}
text_away
.
setOnClickListener
{
listener
(
UserStatus
.
Away
())
}
text_busy
.
setOnClickListener
{
listener
(
UserStatus
.
Busy
())
}
text_invisible
.
setOnClickListener
{
listener
(
UserStatus
.
Offline
())
}
}
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/main/di/MainModule.kt
View file @
f4efa770
...
...
@@ -4,7 +4,6 @@ import androidx.lifecycle.LifecycleOwner
import
chat.rocket.android.core.lifecycle.CancelStrategy
import
chat.rocket.android.dagger.scope.PerActivity
import
chat.rocket.android.main.presentation.MainNavigator
import
chat.rocket.android.main.presentation.MainView
import
chat.rocket.android.main.ui.MainActivity
import
dagger.Module
import
dagger.Provides
...
...
@@ -13,16 +12,13 @@ import kotlinx.coroutines.Job
@Module
class
MainModule
{
@Provides
@PerActivity
fun
provideJob
()
=
Job
()
@Provides
@PerActivity
fun
provideMainNavigator
(
activity
:
MainActivity
)
=
MainNavigator
(
activity
)
@Provides
fun
provideMainView
(
activity
:
MainActivity
):
MainView
=
activity
@PerActivity
fun
provideJob
()
=
Job
()
@Provides
fun
provideLifecycleOwner
(
activity
:
MainActivity
):
LifecycleOwner
=
activity
...
...
app/src/main/java/chat/rocket/android/main/presentation/MainNavigator.kt
View file @
f4efa770
...
...
@@ -3,49 +3,51 @@ package chat.rocket.android.main.presentation
import
chat.rocket.android.R
import
chat.rocket.android.authentication.ui.newServerIntent
import
chat.rocket.android.chatroom.ui.chatRoomIntent
import
chat.rocket.android.chatrooms.ui.ChatRoomsFragment
import
chat.rocket.android.chatrooms.ui.TAG_CHAT_ROOMS_FRAGMENT
import
chat.rocket.android.createchannel.ui.CreateChannelFragment
import
chat.rocket.android.createchannel.ui.TAG_CREATE_CHANNEL_FRAGMENT
import
chat.rocket.android.main.ui.MainActivity
import
chat.rocket.android.profile.ui.ProfileFragment
import
chat.rocket.android.profile.ui.TAG_PROFILE_FRAGMENT
import
chat.rocket.android.server.ui.changeServerIntent
import
chat.rocket.android.settings.ui.SettingsFragment
import
chat.rocket.android.settings.ui.TAG_SETTINGS_FRAGMENT
import
chat.rocket.android.util.extensions.addFragment
import
chat.rocket.android.webview.adminpanel.ui.AdminPanelWebViewFragment
import
chat.rocket.android.util.extensions.addFragmentBackStack
import
chat.rocket.android.webview.adminpanel.ui.TAG_ADMIN_PANEL_WEB_VIEW_FRAGMENT
import
chat.rocket.android.webview.ui.webViewIntent
class
MainNavigator
(
internal
val
activity
:
MainActivity
)
{
fun
toChatList
(
chatRoomId
:
String
?
=
null
)
{
activity
.
addFragment
(
TAG_CHAT_ROOMS_FRAGMENT
,
R
.
id
.
fragment_container
)
{
ChatRoomsFragment
.
newInstance
(
chatRoomId
)
chat
.
rocket
.
android
.
chatrooms
.
ui
.
newInstance
(
chatRoomId
)
}
}
fun
to
CreateChannel
()
{
activity
.
addFragment
(
TAG_CREATE_CHANNEL
_FRAGMENT
,
R
.
id
.
fragment_container
)
{
CreateChannelFragment
.
newInstance
()
fun
to
Settings
()
{
activity
.
addFragment
BackStack
(
TAG_SETTINGS
_FRAGMENT
,
R
.
id
.
fragment_container
)
{
chat
.
rocket
.
android
.
settings
.
ui
.
newInstance
()
}
}
fun
to
UserProfile
()
{
activity
.
addFragment
(
TAG_PROFILE
_FRAGMENT
,
R
.
id
.
fragment_container
)
{
ProfileFragment
.
newInstance
()
fun
to
CreateChannel
()
{
activity
.
addFragment
BackStack
(
TAG_CREATE_CHANNEL
_FRAGMENT
,
R
.
id
.
fragment_container
)
{
chat
.
rocket
.
android
.
createchannel
.
ui
.
newInstance
()
}
}
fun
to
Settings
()
{
activity
.
addFragment
(
TAG_SETTINGS
_FRAGMENT
,
R
.
id
.
fragment_container
)
{
SettingsFragment
.
newInstance
()
fun
to
Profile
()
{
activity
.
addFragment
BackStack
(
TAG_PROFILE
_FRAGMENT
,
R
.
id
.
fragment_container
)
{
chat
.
rocket
.
android
.
profile
.
ui
.
newInstance
()
}
}
fun
toAdminPanel
(
webPageUrl
:
String
,
userToken
:
String
)
{
activity
.
addFragment
(
"AdminPanelWebViewFragment"
,
R
.
id
.
fragment_container
)
{
AdminPanelWebViewFragment
.
newInstance
(
webPageUrl
,
userToken
)
activity
.
addFragmentBackStack
(
TAG_ADMIN_PANEL_WEB_VIEW_FRAGMENT
,
R
.
id
.
fragment_container
)
{
chat
.
rocket
.
android
.
webview
.
adminpanel
.
ui
.
newInstance
(
webPageUrl
,
userToken
)
}
}
fun
toLicense
(
licenseUrl
:
String
,
licenseTitle
:
String
)
{
activity
.
startActivity
(
activity
.
webViewIntent
(
licenseUrl
,
licenseTitle
))
}
fun
toChatRoom
(
...
...
app/src/main/java/chat/rocket/android/main/presentation/MainPresenter.kt
View file @
f4efa770
package
chat.rocket.android.main.presentation
import
android.content.Context
import
chat.rocket.android.core.lifecycle.CancelStrategy
import
chat.rocket.android.db.DatabaseManagerFactory
import
chat.rocket.android.emoji.Emoji
import
chat.rocket.android.emoji.EmojiRepository
import
chat.rocket.android.emoji.Fitzpatrick
import
chat.rocket.android.emoji.internal.EmojiCategory
import
chat.rocket.android.infrastructure.LocalRepository
import
chat.rocket.android.main.uimodel.NavHeaderUiModel
import
chat.rocket.android.main.uimodel.NavHeaderUiModelMapper
import
chat.rocket.android.push.GroupedPush
import
chat.rocket.android.server.domain.GetAccountsInteractor
import
chat.rocket.android.server.domain.GetCurrentServerInteractor
import
chat.rocket.android.server.domain.GetSettingsInteractor
import
chat.rocket.android.server.domain.PublicSettings
import
chat.rocket.android.server.domain.RefreshSettingsInteractor
import
chat.rocket.android.server.domain.RefreshPermissionsInteractor
import
chat.rocket.android.server.domain.RemoveAccountInteractor
import
chat.rocket.android.server.domain.SaveAccountInteractor
import
chat.rocket.android.server.domain.TokenRepository
import
chat.rocket.android.server.domain.favicon
import
chat.rocket.android.server.domain.model.Account
import
chat.rocket.android.server.domain.RefreshSettingsInteractor
import
chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import
chat.rocket.android.server.infraestructure.RocketChatClientFactory
import
chat.rocket.android.server.presentation.CheckServerPresenter
import
chat.rocket.android.util.extension.launchUI
import
chat.rocket.android.util.extensions.adminPanelUrl
import
chat.rocket.android.util.extensions.serverLogoUrl
import
chat.rocket.android.util.retryIO
import
chat.rocket.common.RocketChatAuthException
import
chat.rocket.common.RocketChatException
import
chat.rocket.common.model.UserStatus
import
chat.rocket.common.util.ifNull
import
chat.rocket.core.RocketChatClient
import
chat.rocket.core.internal.rest.getCustomEmojis
import
chat.rocket.core.internal.rest.me
import
chat.rocket.core.model.Myself
import
kotlinx.coroutines.channels.Channel
import
timber.log.Timber
import
javax.inject.Inject
import
javax.inject.Named
class
MainPresenter
@Inject
constructor
(
private
val
view
:
MainView
,
private
val
strategy
:
CancelStrategy
,
private
val
navigator
:
MainNavigator
,
private
val
tokenRepository
:
TokenRepository
,
@Named
(
"currentServer"
)
private
val
currentServerUrl
:
String
,
private
val
mainNavigator
:
MainNavigator
,
private
val
refreshSettingsInteractor
:
RefreshSettingsInteractor
,
private
val
refreshPermissionsInteractor
:
RefreshPermissionsInteractor
,
private
val
navHeaderMapper
:
NavHeaderUiModelMapper
,
private
val
saveAccountInteractor
:
SaveAccountInteractor
,
private
val
getAccountsInteractor
:
GetAccountsInteractor
,
private
val
groupedPush
:
GroupedPush
,
serverInteractor
:
GetCurrentServerInteractor
,
localRepository
:
LocalRepository
,
removeAccountInteractor
:
RemoveAccountInteractor
,
factory
:
RocketChatClientFactory
,
dbManagerFactory
:
DatabaseManagerFactory
,
getSettingsInteractor
:
GetSettingsInteractor
,
managerFactory
:
ConnectionManagerFactory
)
:
CheckServerPresenter
(
strategy
=
strategy
,
factory
=
factory
,
serverInteractor
=
serverInteractor
,
localRepository
=
localRepository
,
removeAccountInteractor
=
removeAccountInteractor
,
tokenRepository
=
tokenRepository
,
managerFactory
=
managerFactory
,
dbManagerFactory
=
dbManagerFactory
,
tokenView
=
view
,
navigator
=
navigator
private
val
connectionManagerFactory
:
ConnectionManagerFactory
,
private
val
groupedPush
:
GroupedPush
)
{
private
val
currentServer
=
serverInteractor
.
get
()
!!
private
val
manager
=
managerFactory
.
create
(
currentServer
)
private
val
client
:
RocketChatClient
=
factory
.
create
(
currentServer
)
private
var
settings
:
PublicSettings
=
getSettingsInteractor
.
get
(
serverInteractor
.
get
()
!!
)
private
val
userDataChannel
=
Channel
<
Myself
>()
fun
toChatList
(
chatRoomId
:
String
?
=
null
)
=
navigator
.
toChatList
(
chatRoomId
)
fun
toUserProfile
()
=
navigator
.
toUserProfile
()
fun
toSettings
()
=
navigator
.
toSettings
()
fun
toAdminPanel
()
=
tokenRepository
.
get
(
currentServer
)
?.
let
{
navigator
.
toAdminPanel
(
currentServer
.
adminPanelUrl
(),
it
.
authToken
)
}
fun
toCreateChannel
()
=
navigator
.
toCreateChannel
()
fun
loadServerAccounts
()
{
launchUI
(
strategy
)
{
try
{
view
.
setupServerAccountList
(
getAccountsInteractor
.
get
())
}
catch
(
ex
:
Exception
)
{
when
(
ex
)
{
is
RocketChatAuthException
->
logout
()
else
->
{
Timber
.
d
(
ex
,
"Error loading serve accounts"
)
ex
.
message
?.
let
{
view
.
showMessage
(
it
)
}.
ifNull
{
view
.
showGenericErrorMessage
()
}
}
}
}
}
}
fun
loadCurrentInfo
()
{
setupConnectionInfo
(
currentServer
)
checkServerInfo
(
currentServer
)
launchUI
(
strategy
)
{
try
{
val
me
=
retryIO
(
"me"
)
{
client
.
me
()
}
val
model
=
navHeaderMapper
.
mapToUiModel
(
me
)
saveAccount
(
model
)
view
.
setupUserAccountInfo
(
model
)
}
catch
(
ex
:
Exception
)
{
when
(
ex
)
{
is
RocketChatAuthException
->
logout
()
else
->
{
Timber
.
d
(
ex
,
"Error loading my information for navheader"
)
ex
.
message
?.
let
{
view
.
showMessage
(
it
)
}.
ifNull
{
view
.
showGenericErrorMessage
()
}
}
}
}
subscribeMyselfUpdates
()
}
}
/**
* Load all emojis for the current server. Simple emojis are always the same for every server,
* but custom emojis vary according to the its url.
*/
fun
loadEmojis
()
{
launchUI
(
strategy
)
{
EmojiRepository
.
setCurrentServerUrl
(
currentServer
)
val
customEmojiList
=
mutableListOf
<
Emoji
>()
try
{
for
(
customEmoji
in
retryIO
(
"getCustomEmojis()"
)
{
client
.
getCustomEmojis
()
})
{
customEmojiList
.
add
(
Emoji
(
shortname
=
":${customEmoji.name}:"
,
category
=
EmojiCategory
.
CUSTOM
.
name
,
url
=
"$currentServer/emoji-custom/${customEmoji.name}.${customEmoji.extension}"
,
count
=
0
,
fitzpatrick
=
Fitzpatrick
.
Default
.
type
,
keywords
=
customEmoji
.
aliases
,
shortnameAlternates
=
customEmoji
.
aliases
,
siblings
=
mutableListOf
(),
unicode
=
""
,
isDefault
=
true
))
}
EmojiRepository
.
load
(
view
as
Context
,
customEmojis
=
customEmojiList
)
}
catch
(
ex
:
RocketChatException
)
{
Timber
.
e
(
ex
)
EmojiRepository
.
load
(
view
as
Context
)
}
}
}
fun
logout
()
{
setupConnectionInfo
(
currentServer
)
super
.
logout
(
userDataChannel
)
}
fun
connect
()
{
refreshSettingsInteractor
.
refreshAsync
(
currentServer
)
refreshPermissionsInteractor
.
refreshAsync
(
currentServer
)
manager
.
connect
()
}
fun
disconnect
()
{
setupConnectionInfo
(
currentServer
)
super
.
disconnect
(
userDataChannel
)
refreshSettingsInteractor
.
refreshAsync
(
currentServerUrl
)
refreshPermissionsInteractor
.
refreshAsync
(
currentServerUrl
)
connectionManagerFactory
.
create
(
currentServerUrl
).
connect
()
}
fun
changeServer
(
serverUrl
:
String
)
{
if
(
currentServer
!=
serverUrl
)
{
navigator
.
switchOrAddNewServer
(
serverUrl
)
}
else
{
view
.
closeServerSelection
()
}
}
fun
addNewServer
()
{
navigator
.
toServerScreen
()
}
fun
changeDefaultStatus
(
userStatus
:
UserStatus
)
{
launchUI
(
strategy
)
{
try
{
manager
.
setDefaultStatus
(
userStatus
)
view
.
showUserStatus
(
userStatus
)
}
catch
(
ex
:
RocketChatException
)
{
ex
.
message
?.
let
{
view
.
showMessage
(
it
)
}.
ifNull
{
view
.
showGenericErrorMessage
()
}
}
}
}
private
fun
saveAccount
(
uiModel
:
NavHeaderUiModel
)
{
val
icon
=
settings
.
favicon
()
?.
let
{
currentServer
.
serverLogoUrl
(
it
)
}
val
account
=
Account
(
currentServer
,
icon
,
uiModel
.
serverLogo
,
uiModel
.
userDisplayName
!!
,
uiModel
.
userAvatar
)
saveAccountInteractor
.
save
(
account
)
}
private
suspend
fun
subscribeMyselfUpdates
()
{
manager
.
addUserDataChannel
(
userDataChannel
)
for
(
myself
in
userDataChannel
)
{
updateMyself
(
myself
)
}
}
private
fun
updateMyself
(
myself
:
Myself
)
=
view
.
setupUserAccountInfo
(
navHeaderMapper
.
mapToUiModel
(
myself
))
fun
clearNotificationsForChatroom
(
chatRoomId
:
String
?)
{
fun
clearNotificationsForChatRoom
(
chatRoomId
:
String
?)
{
if
(
chatRoomId
==
null
)
return
groupedPush
.
hostToPushMessageList
[
currentServer
]
?
.
let
{
list
->
list
.
removeAll
{
it
.
info
.
roomId
==
chatRoomId
}
groupedPush
.
hostToPushMessageList
[
currentServer
Url
]
.
let
{
list
->
list
?
.
removeAll
{
it
.
info
.
roomId
==
chatRoomId
}
}
}
fun
showChatList
(
chatRoomId
:
String
?
=
null
)
=
mainNavigator
.
toChatList
(
chatRoomId
)
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/main/presentation/MainView.kt
deleted
100644 → 0
View file @
ab24ba31
package
chat.rocket.android.main.presentation
import
chat.rocket.android.authentication.server.presentation.VersionCheckView
import
chat.rocket.android.core.behaviours.MessageView
import
chat.rocket.android.main.uimodel.NavHeaderUiModel
import
chat.rocket.android.server.domain.model.Account
import
chat.rocket.android.server.presentation.TokenView
import
chat.rocket.common.model.UserStatus
interface
MainView
:
MessageView
,
VersionCheckView
,
TokenView
{
/**
* Shows the current user status.
*
* @see [UserStatus]
*/
fun
showUserStatus
(
userStatus
:
UserStatus
)
/**
* Setups the user account info (displayed in the nav. header)
*
* @param uiModel The [NavHeaderUiModel].
*/
fun
setupUserAccountInfo
(
uiModel
:
NavHeaderUiModel
)
/**
* Setups the server account list.
*
* @param serverAccountList The list of server accounts.
*/
fun
setupServerAccountList
(
serverAccountList
:
List
<
Account
>)
fun
closeServerSelection
()
fun
showProgress
()
fun
hideProgress
()
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/main/ui/MainActivity.kt
View file @
f4efa770
package
chat.rocket.android.main.ui
import
DrawableHelper
import
android.app.Activity
import
android
x.appcompat.app.AlertDialog
import
android.
app.ProgressDialog
import
android
.app.NotificationManager
import
android.
content.Context
import
android.os.Bundle
import
androidx.annotation.IdRes
import
androidx.appcompat.app.AppCompatActivity
import
androidx.core.view.GravityCompat
import
androidx.drawerlayout.widget.DrawerLayout
import
androidx.fragment.app.Fragment
import
androidx.recyclerview.widget.LinearLayoutManager
import
chat.rocket.android.BuildConfig
import
chat.rocket.android.R
import
chat.rocket.android.chatrooms.ui.ChatRoomsFragment
import
chat.rocket.android.main.adapter.AccountsAdapter
import
chat.rocket.android.main.adapter.Selector
import
chat.rocket.android.main.presentation.MainPresenter
import
chat.rocket.android.main.presentation.MainView
import
chat.rocket.android.main.uimodel.NavHeaderUiModel
import
chat.rocket.android.push.refreshPushToken
import
chat.rocket.android.server.domain.PermissionsInteractor
import
chat.rocket.android.server.domain.model.Account
import
chat.rocket.android.server.ui.INTENT_CHAT_ROOM_ID
import
chat.rocket.android.util.extensions.fadeIn
import
chat.rocket.android.util.extensions.fadeOut
import
chat.rocket.android.util.extensions.rotateBy
import
chat.rocket.android.util.extensions.showToast
import
chat.rocket.android.util.invalidateFirebaseToken
import
chat.rocket.common.model.UserStatus
import
dagger.android.AndroidInjection
import
dagger.android.AndroidInjector
import
dagger.android.DispatchingAndroidInjector
import
dagger.android.HasActivityInjector
import
dagger.android.support.HasSupportFragmentInjector
import
kotlinx.android.synthetic.main.activity_main.*
import
kotlinx.android.synthetic.main.app_bar.*
import
kotlinx.android.synthetic.main.nav_header.view.*
import
javax.inject.Inject
import
android.app.NotificationManager
import
android.content.Context
private
const
val
CURRENT_STATE
=
"current_state"
class
MainActivity
:
AppCompatActivity
(),
MainView
,
HasActivityInjector
,
class
MainActivity
:
AppCompatActivity
(),
HasActivityInjector
,
HasSupportFragmentInjector
{
@Inject
lateinit
var
activityDispatchingAndroidInjector
:
DispatchingAndroidInjector
<
Activity
>
@Inject
lateinit
var
f
r
agmentDispatchingAndroidInjector
:
DispatchingAndroidInjector
<
Fragment
>
lateinit
var
fagmentDispatchingAndroidInjector
:
DispatchingAndroidInjector
<
Fragment
>
@Inject
lateinit
var
presenter
:
MainPresenter
@Inject
lateinit
var
permissions
:
PermissionsInteractor
private
var
isFragmentAdded
:
Boolean
=
false
private
var
expanded
=
false
private
val
headerLayout
by
lazy
{
view_navigation
.
getHeaderView
(
0
)
}
private
var
chatRoomId
:
String
?
=
null
private
var
progressDialog
:
ProgressDialog
?
=
null
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
AndroidInjection
.
inject
(
this
)
...
...
@@ -66,217 +32,27 @@ class MainActivity : AppCompatActivity(), MainView, HasActivityInjector,
setContentView
(
R
.
layout
.
activity_main
)
refreshPushToken
()
chatRoomId
=
intent
.
getStringExtra
(
INTENT_CHAT_ROOM_ID
)
presenter
.
clearNotificationsForChatroom
(
chatRoomId
)
presenter
.
connect
()
presenter
.
loadServerAccounts
()
presenter
.
loadCurrentInfo
()
presenter
.
loadEmojis
()
setupToolbar
()
setupNavigationView
()
with
(
presenter
)
{
connect
()
intent
.
getStringExtra
(
INTENT_CHAT_ROOM_ID
).
let
{
clearNotificationsForChatRoom
(
it
)
showChatList
(
it
)
}
override
fun
onSaveInstanceState
(
outState
:
Bundle
?)
{
super
.
onSaveInstanceState
(
outState
)
outState
?.
putBoolean
(
CURRENT_STATE
,
isFragmentAdded
)
}
override
fun
onRestoreInstanceState
(
savedInstanceState
:
Bundle
?)
{
super
.
onRestoreInstanceState
(
savedInstanceState
)
isFragmentAdded
=
savedInstanceState
?.
getBoolean
(
CURRENT_STATE
)
?:
false
}
override
fun
onResume
()
{
super
.
onResume
()
if
(!
isFragmentAdded
)
{
presenter
.
toChatList
(
chatRoomId
)
isFragmentAdded
=
true
}
val
notificationManager
=
getSystemService
(
Context
.
NOTIFICATION_SERVICE
)
as
NotificationManager
notificationManager
.
cancelAll
()
}
override
fun
onDestroy
()
{
super
.
onDestroy
()
if
(
isFinishing
)
{
presenter
.
disconnect
()
}
}
override
fun
onBackPressed
()
{
if
(
drawer_layout
.
isDrawerOpen
(
GravityCompat
.
START
))
{
closeDrawer
()
}
else
{
supportFragmentManager
.
findFragmentById
(
R
.
id
.
fragment_container
)
?.
let
{
if
(
it
!
is
ChatRoomsFragment
&&
supportFragmentManager
.
backStackEntryCount
==
0
)
{
presenter
.
toChatList
(
chatRoomId
)
setCheckedNavDrawerItem
(
R
.
id
.
menu_action_chats
)
}
else
{
super
.
onBackPressed
()
}
}
}
clearAppNotifications
()
}
override
fun
activityInjector
():
AndroidInjector
<
Activity
>
=
activityDispatchingAndroidInjector
override
fun
activityInjector
():
AndroidInjector
<
Activity
>
=
activityDispatchingAndroidInjector
override
fun
supportFragmentInjector
():
AndroidInjector
<
Fragment
>
=
fragmentDispatchingAndroidInjector
override
fun
showUserStatus
(
userStatus
:
UserStatus
)
{
headerLayout
.
apply
{
image_user_status
.
setImageDrawable
(
DrawableHelper
.
getUserStatusDrawable
(
userStatus
,
this
.
context
)
)
}
}
override
fun
setupUserAccountInfo
(
uiModel
:
NavHeaderUiModel
)
{
with
(
headerLayout
)
{
with
(
uiModel
)
{
if
(
userStatus
!=
null
)
{
image_user_status
.
setImageDrawable
(
DrawableHelper
.
getUserStatusDrawable
(
userStatus
,
context
)
)
}
if
(
userDisplayName
!=
null
)
{
text_user_name
.
text
=
userDisplayName
}
if
(
userAvatar
!=
null
)
{
setAvatar
(
userAvatar
)
}
if
(
serverLogo
!=
null
)
{
server_logo
.
setImageURI
(
serverLogo
)
}
text_server_url
.
text
=
uiModel
.
serverUrl
}
}
}
override
fun
setupServerAccountList
(
serverAccountList
:
List
<
Account
>)
{
accounts_list
.
layoutManager
=
LinearLayoutManager
(
this
)
accounts_list
.
adapter
=
AccountsAdapter
(
serverAccountList
,
object
:
Selector
{
override
fun
onStatusSelected
(
userStatus
:
UserStatus
)
{
presenter
.
changeDefaultStatus
(
userStatus
)
}
override
fun
onAccountSelected
(
serverUrl
:
String
)
{
presenter
.
changeServer
(
serverUrl
)
}
override
fun
onAddedAccountSelected
()
{
presenter
.
addNewServer
()
}
})
fagmentDispatchingAndroidInjector
headerLayout
.
account_container
.
setOnClickListener
{
it
.
image_account_expand
.
rotateBy
(
180f
)
if
(
expanded
)
{
accounts_list
.
fadeOut
()
}
else
{
accounts_list
.
fadeIn
()
}
expanded
=
!
expanded
}
headerLayout
.
image_avatar
.
setOnClickListener
{
view_navigation
.
menu
.
findItem
(
R
.
id
.
menu_action_profile
).
isChecked
=
true
presenter
.
toUserProfile
()
drawer_layout
.
closeDrawer
(
GravityCompat
.
START
)
}
}
override
fun
closeServerSelection
()
{
view_navigation
.
getHeaderView
(
0
).
account_container
.
performClick
()
}
override
fun
alertNotRecommendedVersion
()
{
AlertDialog
.
Builder
(
this
)
.
setMessage
(
getString
(
R
.
string
.
msg_ver_not_recommended
,
BuildConfig
.
RECOMMENDED_SERVER_VERSION
)
)
.
setPositiveButton
(
android
.
R
.
string
.
ok
,
null
)
.
create
()
.
show
()
}
override
fun
blockAndAlertNotRequiredVersion
()
{
AlertDialog
.
Builder
(
this
)
.
setMessage
(
getString
(
R
.
string
.
msg_ver_not_minimum
,
BuildConfig
.
REQUIRED_SERVER_VERSION
)
)
.
setOnDismissListener
{
presenter
.
logout
()
}
.
setPositiveButton
(
android
.
R
.
string
.
ok
,
null
)
.
create
()
.
show
()
}
override
fun
invalidateToken
(
token
:
String
)
=
invalidateFirebaseToken
(
token
)
override
fun
showMessage
(
resId
:
Int
)
=
showToast
(
resId
)
override
fun
showMessage
(
message
:
String
)
=
showToast
(
message
)
override
fun
showGenericErrorMessage
()
=
showMessage
(
getString
(
R
.
string
.
msg_generic_error
))
private
fun
setupToolbar
()
{
setSupportActionBar
(
toolbar
)
}
fun
setupNavigationView
()
{
with
(
view_navigation
.
menu
)
{
clear
()
setupMenu
(
this
)
}
view_navigation
.
setNavigationItemSelectedListener
{
it
.
isChecked
=
true
closeDrawer
()
onNavDrawerItemSelected
(
it
)
true
}
toolbar
.
setNavigationIcon
(
R
.
drawable
.
ic_menu_white_24dp
)
toolbar
.
setNavigationOnClickListener
{
openDrawer
()
}
}
fun
showLogoutDialog
()
{
val
builder
=
AlertDialog
.
Builder
(
this
)
builder
.
setTitle
(
R
.
string
.
title_are_you_sure
)
.
setPositiveButton
(
R
.
string
.
action_logout
)
{
_
,
_
->
presenter
.
logout
()}
.
setNegativeButton
(
android
.
R
.
string
.
no
)
{
dialog
,
_
->
dialog
.
cancel
()
}
.
create
()
.
show
()
}
fun
setAvatar
(
avatarUrl
:
String
)
{
headerLayout
.
image_avatar
.
setImageURI
(
avatarUrl
)
}
fun
getDrawerLayout
():
DrawerLayout
=
drawer_layout
fun
openDrawer
()
=
drawer_layout
.
openDrawer
(
GravityCompat
.
START
)
fun
closeDrawer
()
=
drawer_layout
.
closeDrawer
(
GravityCompat
.
START
)
fun
setCheckedNavDrawerItem
(
@IdRes
item
:
Int
)
=
view_navigation
.
setCheckedItem
(
item
)
override
fun
showProgress
()
{
progressDialog
=
ProgressDialog
.
show
(
this
,
getString
(
R
.
string
.
app_name
),
getString
(
R
.
string
.
msg_log_out
),
true
,
false
)
}
override
fun
hideProgress
()
{
progressDialog
?.
dismiss
()
progressDialog
=
null
}
private
fun
clearAppNotifications
()
=
(
getSystemService
(
Context
.
NOTIFICATION_SERVICE
)
as
NotificationManager
).
cancelAll
()
}
app/src/main/java/chat/rocket/android/main/ui/Menu.kt
deleted
100644 → 0
View file @
ab24ba31
package
chat.rocket.android.main.ui
import
android.view.Menu
import
android.view.MenuItem
import
chat.rocket.android.R
internal
fun
MainActivity
.
setupMenu
(
menu
:
Menu
)
{
with
(
menu
)
{
add
(
R
.
id
.
menu_section_one
,
R
.
id
.
menu_action_chats
,
Menu
.
NONE
,
R
.
string
.
title_chats
).
setIcon
(
R
.
drawable
.
ic_chat_bubble_black_24dp
)
.
isChecked
=
true
add
(
R
.
id
.
menu_section_one
,
R
.
id
.
menu_action_create_channel
,
Menu
.
NONE
,
R
.
string
.
action_create_channel
).
setIcon
(
R
.
drawable
.
ic_create_black_24dp
)
add
(
R
.
id
.
menu_section_two
,
R
.
id
.
menu_action_profile
,
Menu
.
NONE
,
R
.
string
.
title_profile
).
setIcon
(
R
.
drawable
.
ic_person_black_20dp
)
add
(
R
.
id
.
menu_section_two
,
R
.
id
.
menu_action_settings
,
Menu
.
NONE
,
R
.
string
.
title_settings
).
setIcon
(
R
.
drawable
.
ic_settings_black_24dp
)
if
(
permissions
.
canSeeTheAdminPanel
())
{
add
(
R
.
id
.
menu_section_two
,
R
.
id
.
menu_action_admin_panel
,
Menu
.
NONE
,
R
.
string
.
title_admin_panel
).
setIcon
(
R
.
drawable
.
ic_settings_black_24dp
)
}
add
(
R
.
id
.
menu_section_three
,
R
.
id
.
menu_action_logout
,
Menu
.
NONE
,
R
.
string
.
action_logout
).
setIcon
(
R
.
drawable
.
ic_logout_black_24dp
)
setGroupCheckable
(
R
.
id
.
menu_section_one
,
true
,
true
)
setGroupCheckable
(
R
.
id
.
menu_section_two
,
true
,
true
)
setGroupCheckable
(
R
.
id
.
menu_section_three
,
true
,
true
)
}
}
internal
fun
MainActivity
.
onNavDrawerItemSelected
(
menuItem
:
MenuItem
)
{
when
(
menuItem
.
itemId
)
{
R
.
id
.
menu_action_chats
->
presenter
.
toChatList
()
R
.
id
.
menu_action_create_channel
->
presenter
.
toCreateChannel
()
R
.
id
.
menu_action_profile
->
presenter
.
toUserProfile
()
R
.
id
.
menu_action_settings
->
presenter
.
toSettings
()
R
.
id
.
menu_action_admin_panel
->
presenter
.
toAdminPanel
()
R
.
id
.
menu_action_logout
->
showLogoutDialog
()
}
}
app/src/main/java/chat/rocket/android/main/uimodel/NavHeaderUiModel.kt
deleted
100644 → 0
View file @
ab24ba31
package
chat.rocket.android.main.uimodel
import
chat.rocket.common.model.UserStatus
data class
NavHeaderUiModel
(
val
userDisplayName
:
String
?,
val
userStatus
:
UserStatus
?,
val
userAvatar
:
String
?,
val
serverUrl
:
String
,
val
serverLogo
:
String
?
)
\ No newline at end of file
app/src/main/java/chat/rocket/android/main/uimodel/NavHeaderUiModelMapper.kt
deleted
100644 → 0
View file @
ab24ba31
package
chat.rocket.android.main.uimodel
import
chat.rocket.android.server.domain.*
import
chat.rocket.android.util.extensions.avatarUrl
import
chat.rocket.android.util.extensions.serverLogoUrl
import
chat.rocket.core.model.Myself
import
javax.inject.Inject
class
NavHeaderUiModelMapper
@Inject
constructor
(
serverInteractor
:
GetCurrentServerInteractor
,
getSettingsInteractor
:
GetSettingsInteractor
)
{
private
val
currentServer
=
serverInteractor
.
get
()
!!
private
var
settings
:
PublicSettings
=
getSettingsInteractor
.
get
(
currentServer
)
fun
mapToUiModel
(
me
:
Myself
):
NavHeaderUiModel
{
val
displayName
=
mapDisplayName
(
me
)
val
status
=
me
.
status
val
avatar
=
me
.
username
?.
let
{
currentServer
.
avatarUrl
(
it
)
}
val
image
=
settings
.
wideTile
()
?:
settings
.
faviconLarge
()
val
logo
=
image
?.
let
{
currentServer
.
serverLogoUrl
(
it
)
}
return
NavHeaderUiModel
(
displayName
,
status
,
avatar
,
currentServer
,
logo
)
}
private
fun
mapDisplayName
(
me
:
Myself
):
String
?
{
val
username
=
me
.
username
val
realName
=
me
.
name
val
senderName
=
if
(
settings
.
useRealName
())
realName
else
username
return
senderName
?:
username
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/members/presentation/MembersPresenter.kt
View file @
f4efa770
...
...
@@ -27,7 +27,7 @@ class MembersPresenter @Inject constructor(
val
factory
:
RocketChatClientFactory
,
private
val
userHelper
:
UserHelper
)
{
private
val
client
:
RocketChatClient
=
factory
.
create
(
currentServer
)
private
val
client
:
RocketChatClient
=
factory
.
get
(
currentServer
)
private
var
offset
:
Long
=
0
/**
...
...
app/src/main/java/chat/rocket/android/mentions/presentention/MentionsPresenter.kt
View file @
f4efa770
...
...
@@ -18,7 +18,7 @@ class MentionsPresenter @Inject constructor(
private
val
mapper
:
UiModelMapper
,
val
factory
:
RocketChatClientFactory
)
{
private
val
client
=
factory
.
create
(
currentServer
)
private
val
client
=
factory
.
get
(
currentServer
)
private
var
offset
:
Long
=
0
/**
...
...
app/src/main/java/chat/rocket/android/pinnedmessages/presentation/PinnedMessagesPresenter.kt
View file @
f4efa770
...
...
@@ -5,7 +5,6 @@ import chat.rocket.android.core.lifecycle.CancelStrategy
import
chat.rocket.android.db.DatabaseManager
import
chat.rocket.android.server.infraestructure.RocketChatClientFactory
import
chat.rocket.android.util.extension.launchUI
import
chat.rocket.android.util.retryDB
import
chat.rocket.common.RocketChatException
import
chat.rocket.common.model.roomTypeOf
import
chat.rocket.common.util.ifNull
...
...
@@ -23,7 +22,7 @@ class PinnedMessagesPresenter @Inject constructor(
private
val
mapper
:
UiModelMapper
,
val
factory
:
RocketChatClientFactory
)
{
private
val
client
:
RocketChatClient
=
factory
.
create
(
currentServer
)
private
val
client
:
RocketChatClient
=
factory
.
get
(
currentServer
)
private
var
offset
:
Int
=
0
/**
...
...
app/src/main/java/chat/rocket/android/preferences/presentation/PreferencesPresenter.kt
deleted
100644 → 0
View file @
ab24ba31
package
chat.rocket.android.preferences.presentation
import
chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import
javax.inject.Inject
class
PreferencesPresenter
@Inject
constructor
(
private
val
view
:
PreferencesView
,
private
val
analyticsTrackingInteractor
:
AnalyticsTrackingInteractor
)
{
fun
loadAnalyticsTrackingInformation
()
{
view
.
setupAnalyticsTrackingView
(
analyticsTrackingInteractor
.
get
())
}
fun
enableAnalyticsTracking
()
{
analyticsTrackingInteractor
.
save
(
true
)
}
fun
disableAnalyticsTracking
()
{
analyticsTrackingInteractor
.
save
(
false
)
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/preferences/presentation/PreferencesView.kt
deleted
100644 → 0
View file @
ab24ba31
package
chat.rocket.android.preferences.presentation
interface
PreferencesView
{
/**
* Setups the analytics tracking view.
*
* @param isAnalyticsTrackingEnabled Whether the analytics tracking is enabled
*/
fun
setupAnalyticsTrackingView
(
isAnalyticsTrackingEnabled
:
Boolean
)
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/preferences/ui/PreferencesFragment.kt
deleted
100644 → 0
View file @
ab24ba31
package
chat.rocket.android.preferences.ui
import
android.os.Bundle
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
androidx.fragment.app.Fragment
import
chat.rocket.android.BuildConfig
import
chat.rocket.android.R
import
chat.rocket.android.analytics.AnalyticsManager
import
chat.rocket.android.analytics.event.ScreenViewEvent
import
chat.rocket.android.main.ui.MainActivity
import
chat.rocket.android.preferences.presentation.PreferencesPresenter
import
chat.rocket.android.preferences.presentation.PreferencesView
import
dagger.android.support.AndroidSupportInjection
import
kotlinx.android.synthetic.main.app_bar.*
import
kotlinx.android.synthetic.main.fragment_preferences.*
import
javax.inject.Inject
internal
const
val
TAG_PREFERENCES_FRAGMENT
=
"PreferencesFragment"
class
PreferencesFragment
:
Fragment
(),
PreferencesView
{
@Inject
lateinit
var
presenter
:
PreferencesPresenter
@Inject
lateinit
var
analyticsManager
:
AnalyticsManager
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
AndroidSupportInjection
.
inject
(
this
)
}
override
fun
onCreateView
(
inflater
:
LayoutInflater
,
container
:
ViewGroup
?,
savedInstanceState
:
Bundle
?
):
View
?
=
inflater
.
inflate
(
R
.
layout
.
fragment_preferences
,
container
,
false
)
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
super
.
onViewCreated
(
view
,
savedInstanceState
)
setupListeners
()
presenter
.
loadAnalyticsTrackingInformation
()
analyticsManager
.
logScreenView
(
ScreenViewEvent
.
Preferences
)
}
override
fun
onResume
()
{
setupToolbar
()
super
.
onResume
()
}
override
fun
setupAnalyticsTrackingView
(
isAnalyticsTrackingEnabled
:
Boolean
)
{
if
(
BuildConfig
.
FLAVOR
==
"foss"
)
{
switch_analytics_tracking
.
isChecked
=
false
switch_analytics_tracking
.
isEnabled
=
false
text_analytics_tracking_description
.
text
=
getString
(
R
.
string
.
msg_not_applicable_since_it_is_a_foss_version
)
return
}
if
(
isAnalyticsTrackingEnabled
)
{
text_analytics_tracking_description
.
text
=
getString
(
R
.
string
.
msg_send_analytics_tracking
)
}
else
{
text_analytics_tracking_description
.
text
=
getString
(
R
.
string
.
msg_do_not_send_analytics_tracking
)
}
switch_analytics_tracking
.
isChecked
=
isAnalyticsTrackingEnabled
}
private
fun
setupToolbar
()
{
with
((
activity
as
MainActivity
).
toolbar
)
{
title
=
getString
(
R
.
string
.
title_preferences
)
setNavigationIcon
(
R
.
drawable
.
ic_arrow_back_white_24dp
)
setNavigationOnClickListener
{
activity
?.
onBackPressed
()
}
}
}
private
fun
setupListeners
()
{
switch_analytics_tracking
.
setOnCheckedChangeListener
{
_
,
isChecked
->
if
(
isChecked
)
{
text_analytics_tracking_description
.
text
=
getString
(
R
.
string
.
msg_send_analytics_tracking
)
presenter
.
enableAnalyticsTracking
()
}
else
{
text_analytics_tracking_description
.
text
=
getString
(
R
.
string
.
msg_do_not_send_analytics_tracking
)
presenter
.
disableAnalyticsTracking
()
}
}
}
companion
object
{
fun
newInstance
()
=
PreferencesFragment
()
}
}
app/src/main/java/chat/rocket/android/profile/presentation/ProfilePresenter.kt
View file @
f4efa770
...
...
@@ -15,20 +15,19 @@ import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import
chat.rocket.android.server.infraestructure.RocketChatClientFactory
import
chat.rocket.android.server.presentation.CheckServerPresenter
import
chat.rocket.android.util.extension.compressImageAndGetByteArray
import
chat.rocket.android.util.extension.gethash
import
chat.rocket.android.util.extension.launchUI
import
chat.rocket.android.util.extension.toHex
import
chat.rocket.android.util.extensions.avatarUrl
import
chat.rocket.android.util.retryIO
import
chat.rocket.common.RocketChatException
import
chat.rocket.common.model.UserStatus
import
chat.rocket.common.model.userStatusOf
import
chat.rocket.common.util.ifNull
import
chat.rocket.core.RocketChatClient
import
chat.rocket.core.internal.rest.deleteOwnAccount
import
chat.rocket.core.internal.realtime.setDefaultStatus
import
chat.rocket.core.internal.rest.me
import
chat.rocket.core.internal.rest.resetAvatar
import
chat.rocket.core.internal.rest.setAvatar
import
chat.rocket.core.internal.rest.updateProfile
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.withContext
import
java.util.*
import
javax.inject.Inject
...
...
@@ -56,18 +55,23 @@ class ProfilePresenter @Inject constructor(
navigator
=
navigator
)
{
private
val
serverUrl
=
serverInteractor
.
get
()
!!
private
val
client
:
RocketChatClient
=
factory
.
create
(
serverUrl
)
private
val
client
:
RocketChatClient
=
factory
.
get
(
serverUrl
)
private
val
user
=
userHelper
.
user
()
fun
loadUserProfile
()
{
launchUI
(
strategy
)
{
view
.
showLoading
()
try
{
val
me
=
retryIO
(
description
=
"serverInfo"
,
times
=
5
)
{
client
.
me
()
}
view
.
showProfile
(
serverUrl
.
avatarUrl
(
user
?.
username
?:
""
),
user
?.
name
?:
""
,
user
?.
username
?:
""
,
user
?.
emails
?.
getOrNull
(
0
)
?.
address
?:
""
me
.
status
.
toString
(),
serverUrl
.
avatarUrl
(
me
.
username
?:
""
),
me
.
name
?:
""
,
me
.
username
?:
""
,
me
.
emails
?.
getOrNull
(
0
)
?.
address
?:
""
)
}
catch
(
exception
:
RocketChatException
)
{
view
.
showMessage
(
exception
)
...
...
@@ -82,9 +86,17 @@ class ProfilePresenter @Inject constructor(
view
.
showLoading
()
try
{
user
?.
id
?.
let
{
id
->
retryIO
{
client
.
updateProfile
(
userId
=
id
,
email
=
email
,
name
=
name
,
username
=
username
)
}
retryIO
{
client
.
updateProfile
(
userId
=
id
,
email
=
email
,
name
=
name
,
username
=
username
)
}
view
.
showProfileUpdateSuccessfullyMessage
()
view
.
showProfile
(
user
.
status
.
toString
(),
serverUrl
.
avatarUrl
(
user
.
username
?:
""
),
name
,
username
,
...
...
@@ -176,25 +188,16 @@ class ProfilePresenter @Inject constructor(
}
}
fun
deleteAccount
(
password
:
String
)
{
fun
updateStatus
(
status
:
UserStatus
)
{
launchUI
(
strategy
)
{
view
.
showLoading
()
try
{
withContext
(
Dispatchers
.
Default
)
{
// REMARK: Backend API is only working with a lowercase hash.
// https://github.com/RocketChat/Rocket.Chat/issues/12573
retryIO
{
client
.
deleteOwnAccount
(
password
.
gethash
().
toHex
().
toLowerCase
())
}
setupConnectionInfo
(
serverUrl
)
logout
(
null
)
}
}
catch
(
exception
:
Exception
)
{
client
.
setDefaultStatus
(
status
)
}
catch
(
exception
:
RocketChatException
)
{
exception
.
message
?.
let
{
view
.
showMessage
(
it
)
}.
ifNull
{
view
.
showGenericErrorMessage
()
}
}
finally
{
view
.
hideLoading
()
}
}
}
...
...
app/src/main/java/chat/rocket/android/profile/presentation/ProfileView.kt
View file @
f4efa770
...
...
@@ -9,12 +9,19 @@ interface ProfileView : TokenView, LoadingView, MessageView {
/**
* Shows the user profile.
*
* @param status The user status.
* @param avatarUrl The user avatar URL.
* @param name The user display name.
* @param username The user username.
* @param email The user email.
*/
fun
showProfile
(
avatarUrl
:
String
,
name
:
String
,
username
:
String
,
email
:
String
?)
fun
showProfile
(
status
:
String
,
avatarUrl
:
String
,
name
:
String
,
username
:
String
,
email
:
String
?
)
/**
* Reloads the user avatar (after successfully updating it).
...
...
app/src/main/java/chat/rocket/android/profile/ui/ProfileFragment.kt
View file @
f4efa770
...
...
@@ -2,7 +2,6 @@ package chat.rocket.android.profile.ui
import
DrawableHelper
import
android.app.Activity
import
androidx.appcompat.app.AlertDialog
import
android.content.Intent
import
android.graphics.Bitmap
import
android.os.Build
...
...
@@ -12,8 +11,8 @@ import android.view.Menu
import
android.view.MenuItem
import
android.view.View
import
android.view.ViewGroup
import
android.
view.MenuInflater
import
android
.widget.EditText
import
android.
widget.RadioGroup
import
android
x.appcompat.app.AlertDialog
import
androidx.appcompat.app.AppCompatActivity
import
androidx.appcompat.view.ActionMode
import
androidx.core.net.toUri
...
...
@@ -33,10 +32,13 @@ import chat.rocket.android.util.extensions.showToast
import
chat.rocket.android.util.extensions.textContent
import
chat.rocket.android.util.extensions.ui
import
chat.rocket.android.util.invalidateFirebaseToken
import
chat.rocket.common.model.UserStatus
import
chat.rocket.common.model.userStatusOf
import
com.facebook.drawee.backends.pipeline.Fresco
import
dagger.android.support.AndroidSupportInjection
import
io.reactivex.disposables.CompositeDisposable
import
io.reactivex.rxkotlin.Observables
import
kotlinx.android.synthetic.main.app_bar.*
import
kotlinx.android.synthetic.main.avatar_profile.*
import
kotlinx.android.synthetic.main.fragment_profile.*
import
kotlinx.android.synthetic.main.update_avatar_options.*
...
...
@@ -47,24 +49,21 @@ internal const val TAG_PROFILE_FRAGMENT = "ProfileFragment"
private
const
val
REQUEST_CODE_FOR_PERFORM_SAF
=
1
private
const
val
REQUEST_CODE_FOR_PERFORM_CAMERA
=
2
fun
newInstance
()
=
ProfileFragment
()
class
ProfileFragment
:
Fragment
(),
ProfileView
,
ActionMode
.
Callback
{
@Inject
lateinit
var
presenter
:
ProfilePresenter
@Inject
lateinit
var
analyticsManager
:
AnalyticsManager
@Inject
lateinit
var
presenter
:
ProfilePresenter
@Inject
lateinit
var
analyticsManager
:
AnalyticsManager
private
var
currentStatus
=
""
private
var
currentName
=
""
private
var
currentUsername
=
""
private
var
currentEmail
=
""
private
var
actionMode
:
ActionMode
?
=
null
private
val
editTextsDisposable
=
CompositeDisposable
()
companion
object
{
fun
newInstance
()
=
ProfileFragment
()
}
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
AndroidSupportInjection
.
inject
(
this
)
super
.
onCreate
(
savedInstanceState
)
AndroidSupportInjection
.
inject
(
this
)
setHasOptionsMenu
(
true
)
}
...
...
@@ -78,11 +77,12 @@ class ProfileFragment : Fragment(), ProfileView, ActionMode.Callback {
super
.
onViewCreated
(
view
,
savedInstanceState
)
setupToolbar
()
setupListeners
()
if
(
Build
.
VERSION
.
SDK_INT
<=
Build
.
VERSION_CODES
.
M
)
{
tintEditTextDrawableStart
()
}
presenter
.
loadUserProfile
()
setupListeners
()
subscribeEditTexts
()
analyticsManager
.
logScreenView
(
ScreenViewEvent
.
Profile
)
...
...
@@ -112,25 +112,21 @@ class ProfileFragment : Fragment(), ProfileView, ActionMode.Callback {
super
.
onPrepareOptionsMenu
(
menu
)
}
override
fun
onCreateOptionsMenu
(
menu
:
Menu
,
inflater
:
MenuInflater
)
{
super
.
onCreateOptionsMenu
(
menu
,
inflater
)
inflater
.
inflate
(
R
.
menu
.
profile
,
menu
)
}
override
fun
onOptionsItemSelected
(
item
:
MenuItem
):
Boolean
{
when
(
item
.
itemId
)
{
R
.
id
.
action_delete_account
->
showDeleteAccountDialog
()
}
return
true
}
override
fun
showProfile
(
avatarUrl
:
String
,
name
:
String
,
username
:
String
,
email
:
String
?)
{
override
fun
showProfile
(
status
:
String
,
avatarUrl
:
String
,
name
:
String
,
username
:
String
,
email
:
String
?
)
{
ui
{
text_status
.
text
=
getString
(
R
.
string
.
status
,
status
.
capitalize
())
image_avatar
.
setImageURI
(
avatarUrl
)
text_name
.
textContent
=
name
text_username
.
textContent
=
username
text_email
.
textContent
=
email
?:
""
currentStatus
=
status
currentName
=
name
currentUsername
=
username
currentEmail
=
email
?:
""
...
...
@@ -142,7 +138,6 @@ class ProfileFragment : Fragment(), ProfileView, ActionMode.Callback {
override
fun
reloadUserAvatar
(
avatarUrl
:
String
)
{
Fresco
.
getImagePipeline
().
evictFromCache
(
avatarUrl
.
toUri
())
image_avatar
.
setImageURI
(
avatarUrl
)
(
activity
as
MainActivity
).
setAvatar
(
avatarUrl
)
}
override
fun
showProfileUpdateSuccessfullyMessage
()
{
...
...
@@ -205,10 +200,19 @@ class ProfileFragment : Fragment(), ProfileView, ActionMode.Callback {
}
private
fun
setupToolbar
()
{
(
activity
as
AppCompatActivity
?)
?.
supportActionBar
?.
title
=
getString
(
R
.
string
.
title_profile
)
with
((
activity
as
AppCompatActivity
))
{
with
(
toolbar
)
{
setSupportActionBar
(
this
)
title
=
getString
(
R
.
string
.
title_profile
)
setNavigationIcon
(
R
.
drawable
.
ic_arrow_back_white_24dp
)
setNavigationOnClickListener
{
activity
?.
onBackPressed
()
}
}
}
}
private
fun
setupListeners
()
{
text_status
.
setOnClickListener
{
showStatusDialog
(
currentStatus
)
}
image_avatar
.
setOnClickListener
{
showUpdateAvatarOptions
()
}
view_dim
.
setOnClickListener
{
hideUpdateAvatarOptions
()
}
...
...
@@ -293,15 +297,38 @@ class ProfileFragment : Fragment(), ProfileView, ActionMode.Callback {
}
}
fun
showDeleteAccountDialog
()
{
context
?.
let
{
val
passwordEText
=
EditText
(
context
);
val
mDialogView
=
LayoutInflater
.
from
(
it
).
inflate
(
R
.
layout
.
item_account_delete
,
null
)
val
mBuilder
=
AlertDialog
.
Builder
(
it
)
private
fun
showStatusDialog
(
currentStatus
:
String
)
{
val
dialogLayout
=
layoutInflater
.
inflate
(
R
.
layout
.
dialog_status
,
null
)
val
radioGroup
=
dialogLayout
.
findViewById
<
RadioGroup
>(
R
.
id
.
radio_group_status
)
mBuilder
.
setView
(
mDialogView
).
setPositiveButton
(
R
.
string
.
action_delete_account
)
{
_
,
_
->
presenter
.
deleteAccount
(
passwordEText
.
text
.
toString
())
}.
setNegativeButton
(
android
.
R
.
string
.
no
)
{
dialog
,
_
->
dialog
.
cancel
()
}.
create
().
show
()
radioGroup
.
check
(
when
(
userStatusOf
(
currentStatus
))
{
is
UserStatus
.
Online
->
R
.
id
.
radio_button_online
is
UserStatus
.
Away
->
R
.
id
.
radio_button_away
is
UserStatus
.
Busy
->
R
.
id
.
radio_button_busy
else
->
R
.
id
.
radio_button_invisible
}
)
var
newStatus
:
UserStatus
=
userStatusOf
(
currentStatus
)
radioGroup
.
setOnCheckedChangeListener
{
_
,
checkId
->
when
(
checkId
)
{
R
.
id
.
radio_button_online
->
newStatus
=
UserStatus
.
Online
()
R
.
id
.
radio_button_away
->
newStatus
=
UserStatus
.
Away
()
R
.
id
.
radio_button_busy
->
newStatus
=
UserStatus
.
Busy
()
else
->
newStatus
=
UserStatus
.
Offline
()
}
}
context
?.
let
{
AlertDialog
.
Builder
(
it
)
.
setView
(
dialogLayout
)
.
setPositiveButton
(
R
.
string
.
msg_change_status
)
{
dialog
,
_
->
presenter
.
updateStatus
(
newStatus
)
text_status
.
text
=
getString
(
R
.
string
.
status
,
newStatus
.
toString
().
capitalize
())
this
.
currentStatus
=
newStatus
.
toString
()
dialog
.
dismiss
()
}.
show
()
}
}
}
app/src/main/java/chat/rocket/android/server/domain/PermissionsInteractor.kt
View file @
f4efa770
...
...
@@ -69,7 +69,7 @@ class PermissionsInteractor @Inject constructor(
}
fun
canSeeTheAdminPanel
():
Boolean
{
fun
isAdministrationEnabled
():
Boolean
{
currentServerUrl
()
?.
let
{
serverUrl
->
val
viewStatistics
=
permissionsRepository
.
get
(
serverUrl
,
VIEW_STATISTICS
)
...
...
app/src/main/java/chat/rocket/android/server/domain/RefreshPermissionsInteractor.kt
View file @
f4efa770
...
...
@@ -20,7 +20,7 @@ class RefreshPermissionsInteractor @Inject constructor(
fun
refreshAsync
(
server
:
String
)
{
GlobalScope
.
launch
(
Dispatchers
.
IO
)
{
try
{
factory
.
create
(
server
).
let
{
client
->
factory
.
get
(
server
).
let
{
client
->
val
permissions
=
retryIO
(
description
=
"permissions"
,
times
=
5
,
...
...
app/src/main/java/chat/rocket/android/server/domain/RefreshSettingsInteractor.kt
View file @
f4efa770
...
...
@@ -74,7 +74,7 @@ class RefreshSettingsInteractor @Inject constructor(
suspend
fun
refresh
(
server
:
String
)
{
withContext
(
Dispatchers
.
IO
)
{
factory
.
create
(
server
).
let
{
client
->
factory
.
get
(
server
).
let
{
client
->
val
settings
=
retryIO
(
description
=
"settings"
,
times
=
5
,
...
...
app/src/main/java/chat/rocket/android/server/domain/SortingAndGroupingInteractor.kt
0 → 100644
View file @
f4efa770
package
chat.rocket.android.server.domain
import
javax.inject.Inject
class
SortingAndGroupingInteractor
@Inject
constructor
(
val
repository
:
SortingAndGroupingRepository
)
{
fun
save
(
currentServerUrl
:
String
,
isSortByName
:
Boolean
,
isUnreadOnTop
:
Boolean
,
isGroupByType
:
Boolean
,
isGroupByFavorites
:
Boolean
)
=
repository
.
save
(
currentServerUrl
,
isSortByName
,
isUnreadOnTop
,
isGroupByType
,
isGroupByFavorites
)
fun
getSortByName
(
currentServerUrl
:
String
):
Boolean
=
repository
.
getSortByName
(
currentServerUrl
)
fun
getUnreadOnTop
(
currentServerUrl
:
String
):
Boolean
=
repository
.
getUnreadOnTop
(
currentServerUrl
)
fun
getGroupByType
(
currentServerUrl
:
String
):
Boolean
=
repository
.
getGroupByType
(
currentServerUrl
)
fun
getGroupByFavorites
(
currentServerUrl
:
String
):
Boolean
=
repository
.
getGroupByFavorites
(
currentServerUrl
)
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/server/domain/SortingAndGroupingRepository.kt
0 → 100644
View file @
f4efa770
package
chat.rocket.android.server.domain
interface
SortingAndGroupingRepository
{
fun
save
(
currentServerUrl
:
String
,
isSortByName
:
Boolean
,
isUnreadOnTop
:
Boolean
,
isGroupByType
:
Boolean
,
isGroupByFavorites
:
Boolean
)
fun
getSortByName
(
currentServerUrl
:
String
):
Boolean
fun
getUnreadOnTop
(
currentServerUrl
:
String
):
Boolean
fun
getGroupByType
(
currentServerUrl
:
String
):
Boolean
fun
getGroupByFavorites
(
currentServerUrl
:
String
):
Boolean
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/server/infraestructure/ConnectionManagerFactory.kt
View file @
f4efa770
package
chat.rocket.android.server.infraestructure
import
chat.rocket.android.db.DatabaseManagerFactory
import
chat.rocket.android.infrastructure.LocalRepository
import
timber.log.Timber
import
javax.inject.Inject
import
javax.inject.Singleton
...
...
@@ -20,7 +19,7 @@ class ConnectionManagerFactory @Inject constructor(
}
Timber
.
d
(
"Returning FRESH Manager for: $url"
)
val
manager
=
ConnectionManager
(
factory
.
create
(
url
),
dbFactory
.
create
(
url
))
val
manager
=
ConnectionManager
(
factory
.
get
(
url
),
dbFactory
.
create
(
url
))
cache
[
url
]
=
manager
return
manager
}
...
...
app/src/main/java/chat/rocket/android/server/infraestructure/RocketChatClientFactory.kt
View file @
f4efa770
...
...
@@ -18,7 +18,7 @@ class RocketChatClientFactory @Inject constructor(
)
{
private
val
cache
=
HashMap
<
String
,
RocketChatClient
>()
fun
create
(
url
:
String
):
RocketChatClient
{
fun
get
(
url
:
String
):
RocketChatClient
{
cache
[
url
]
?.
let
{
Timber
.
d
(
"Returning CACHED client for: $url"
)
return
it
...
...
app/src/main/java/chat/rocket/android/server/infraestructure/SharedPrefsSortingAndGroupingRepository.kt
0 → 100644
View file @
f4efa770
package
chat.rocket.android.server.infraestructure
import
android.content.SharedPreferences
import
chat.rocket.android.server.domain.SortingAndGroupingRepository
private
const
val
SORT_BY_NAME_KEY
=
"SORT_BY_NAME_KEY"
private
const
val
UNREAD_ON_TOP_KEY
=
"UNREAD_ON_TOP_KEY"
private
const
val
GROUP_BY_TYPE_KEY
=
"GROUP_BY_TYPE_KEY"
private
const
val
GROUP_BY_FAVORITES_KEY
=
"GROUP_BY_FAVORITES_KEY"
class
SharedPrefsSortingAndGroupingRepository
(
private
val
preferences
:
SharedPreferences
)
:
SortingAndGroupingRepository
{
override
fun
save
(
currentServerUrl
:
String
,
isSortByName
:
Boolean
,
isUnreadOnTop
:
Boolean
,
isGroupByType
:
Boolean
,
isGroupByFavorites
:
Boolean
)
{
preferences
.
edit
().
putBoolean
(
SORT_BY_NAME_KEY
+
currentServerUrl
,
isSortByName
).
apply
()
preferences
.
edit
().
putBoolean
(
UNREAD_ON_TOP_KEY
+
currentServerUrl
,
isUnreadOnTop
).
apply
()
preferences
.
edit
().
putBoolean
(
GROUP_BY_TYPE_KEY
+
currentServerUrl
,
isGroupByType
).
apply
()
preferences
.
edit
().
putBoolean
(
GROUP_BY_FAVORITES_KEY
+
currentServerUrl
,
isGroupByFavorites
)
.
apply
()
}
override
fun
getSortByName
(
currentServerUrl
:
String
):
Boolean
=
preferences
.
getBoolean
(
SORT_BY_NAME_KEY
+
currentServerUrl
,
false
)
override
fun
getUnreadOnTop
(
currentServerUrl
:
String
):
Boolean
=
preferences
.
getBoolean
(
UNREAD_ON_TOP_KEY
+
currentServerUrl
,
false
)
override
fun
getGroupByType
(
currentServerUrl
:
String
):
Boolean
=
preferences
.
getBoolean
(
GROUP_BY_TYPE_KEY
+
currentServerUrl
,
false
)
override
fun
getGroupByFavorites
(
currentServerUrl
:
String
):
Boolean
=
preferences
.
getBoolean
(
GROUP_BY_FAVORITES_KEY
+
currentServerUrl
,
false
)
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/server/presentation/CheckServerPresenter.kt
View file @
f4efa770
...
...
@@ -105,7 +105,7 @@ abstract class CheckServerPresenter constructor(
internal
fun
setupConnectionInfo
(
serverUrl
:
String
)
{
currentServer
=
serverUrl
client
=
factory
.
create
(
serverUrl
)
client
=
factory
.
get
(
serverUrl
)
managerFactory
?.
create
(
serverUrl
)
?.
let
{
manager
=
it
}
...
...
app/src/main/java/chat/rocket/android/
main/adapter/AddAccount
ViewHolder.kt
→
app/src/main/java/chat/rocket/android/
servers/adapter/AddNewServer
ViewHolder.kt
View file @
f4efa770
package
chat.rocket.android.
main
.adapter
package
chat.rocket.android.
servers
.adapter
import
androidx.recyclerview.widget.RecyclerView
import
android.view.View
import
androidx.recyclerview.widget.RecyclerView
class
AddAccountViewHolder
(
itemView
:
View
)
:
RecyclerView
.
ViewHolder
(
itemView
)
\ No newline at end of file
class
AddNewServerViewHolder
(
itemView
:
View
)
:
RecyclerView
.
ViewHolder
(
itemView
)
\ No newline at end of file
app/src/main/java/chat/rocket/android/
main/adapter/Account
ViewHolder.kt
→
app/src/main/java/chat/rocket/android/
servers/adapter/Server
ViewHolder.kt
View file @
f4efa770
package
chat.rocket.android.
main
.adapter
package
chat.rocket.android.
servers
.adapter
import
androidx.recyclerview.widget.RecyclerView
import
android.view.View
import
androidx.core.view.isInvisible
import
androidx.recyclerview.widget.RecyclerView
import
chat.rocket.android.server.domain.model.Account
import
kotlinx.android.synthetic.main.item_account.view.*
import
com.bumptech.glide.Glide
import
kotlinx.android.synthetic.main.item_server.view.*
class
AccountViewHolder
(
itemView
:
View
)
:
RecyclerView
.
ViewHolder
(
itemView
)
{
class
ServerViewHolder
(
itemView
:
View
,
private
val
currentServerUrl
:
String
)
:
RecyclerView
.
ViewHolder
(
itemView
)
{
fun
bind
(
account
:
Account
)
{
with
(
itemView
)
{
server_logo
.
setImageURI
(
account
.
serverLogo
)
Glide
.
with
(
context
).
load
(
account
.
serverLogo
).
into
(
image_server
)
text_server_name
.
text
=
account
.
serverUrl
text_server_url
.
text
=
account
.
serverUrl
text_username
.
text
=
account
.
userName
image_check
.
isInvisible
=
currentServerUrl
!=
account
.
serverUrl
}
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/
main/adapter/Account
sAdapter.kt
→
app/src/main/java/chat/rocket/android/
servers/adapter/Server
sAdapter.kt
View file @
f4efa770
package
chat.rocket.android.
main
.adapter
package
chat.rocket.android.
servers
.adapter
import
androidx.recyclerview.widget.RecyclerView
import
android.view.ViewGroup
import
androidx.recyclerview.widget.RecyclerView
import
chat.rocket.android.R
import
chat.rocket.android.server.domain.model.Account
import
chat.rocket.android.util.extensions.inflate
import
chat.rocket.common.model.UserStatus
private
const
val
VIEW_TYPE_CHANGE_STATUS
=
0
private
const
val
VIEW_TYPE_ACCOUNT
=
1
private
const
val
VIEW_TYPE_ADD_ACCOUNT
=
2
private
const
val
VIEW_TYPE_SERVER
=
0
private
const
val
VIEW_TYPE_ADD_NEW_SERVER
=
1
class
AccountsAdapter
(
private
val
accounts
:
List
<
Account
>,
class
ServersAdapter
(
private
val
servers
:
List
<
Account
>,
private
val
currentServerUrl
:
String
,
private
val
selector
:
Selector
)
:
RecyclerView
.
Adapter
<
RecyclerView
.
ViewHolder
>()
{
override
fun
onCreateViewHolder
(
parent
:
ViewGroup
,
viewType
:
Int
):
RecyclerView
.
ViewHolder
{
return
when
(
viewType
)
{
VIEW_TYPE_CHANGE_STATUS
->
StatusViewHolder
(
parent
.
inflate
(
R
.
layout
.
item_change_status
))
VIEW_TYPE_ACCOUNT
->
AccountViewHolder
(
parent
.
inflate
(
R
.
layout
.
item_account
))
else
->
AddAccountViewHolder
(
parent
.
inflate
(
R
.
layout
.
item_add_account
))
VIEW_TYPE_SERVER
->
ServerViewHolder
(
parent
.
inflate
(
R
.
layout
.
item_server
),
currentServerUrl
)
else
->
AddNewServerViewHolder
(
parent
.
inflate
(
R
.
layout
.
item_add_new_server
))
}
}
override
fun
getItemCount
()
=
accounts
.
size
+
2
override
fun
getItemCount
()
=
servers
.
size
+
1
override
fun
getItemViewType
(
position
:
Int
):
Int
{
return
when
{
position
==
0
->
VIEW_TYPE_CHANGE_STATUS
position
<=
accounts
.
size
->
VIEW_TYPE_ACCOUNT
else
->
VIEW_TYPE_ADD_ACCOUNT
position
<
servers
.
size
->
VIEW_TYPE_SERVER
else
->
VIEW_TYPE_ADD_NEW_SERVER
}
}
override
fun
onBindViewHolder
(
holder
:
RecyclerView
.
ViewHolder
,
position
:
Int
)
{
when
(
holder
)
{
is
StatusViewHolder
->
bindStatusViewHolder
(
holder
)
is
AccountViewHolder
->
bindAccountViewHolder
(
holder
,
position
)
is
AddAccountViewHolder
->
bindAddAccountViewHolder
(
holder
)
is
ServerViewHolder
->
bindServerViewHolder
(
holder
,
position
)
is
AddNewServerViewHolder
->
bindAddNewServerViewHolder
(
holder
)
}
}
private
fun
bindStatusViewHolder
(
holder
:
StatusViewHolder
)
{
holder
.
bind
{
userStatus
->
selector
.
onStatusSelected
(
userStatus
)
}
}
private
fun
bind
AccountViewHolder
(
holder
:
Account
ViewHolder
,
position
:
Int
)
{
val
account
=
accounts
[
position
-
1
]
private
fun
bind
ServerViewHolder
(
holder
:
Server
ViewHolder
,
position
:
Int
)
{
val
account
=
servers
[
position
]
holder
.
bind
(
account
)
holder
.
itemView
.
setOnClickListener
{
selector
.
onAccountSelected
(
account
.
serverUrl
)
}
holder
.
itemView
.
setOnClickListener
{
selector
.
onServerSelected
(
account
.
serverUrl
)
}
}
private
fun
bindAddAccountViewHolder
(
holder
:
AddAccountViewHolder
)
{
holder
.
itemView
.
setOnClickListener
{
selector
.
onAddedAccountSelected
()
}
private
fun
bindAddNewServerViewHolder
(
holder
:
AddNewServerViewHolder
)
{
holder
.
itemView
.
setOnClickListener
{
selector
.
onAddNewServerSelected
()
}
}
}
interface
Selector
{
fun
onStatusSelected
(
userStatus
:
UserStatus
)
fun
onAccountSelected
(
serverUrl
:
String
)
fun
onAddedAccountSelected
()
fun
onServerSelected
(
serverUrl
:
String
)
fun
onAddNewServerSelected
()
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/
preferences/di/Preferences
FragmentModule.kt
→
app/src/main/java/chat/rocket/android/
servers/di/ServersBottomSheet
FragmentModule.kt
View file @
f4efa770
package
chat.rocket.android.
preference
s.di
package
chat.rocket.android.
server
s.di
import
chat.rocket.android.dagger.scope.PerFragment
import
chat.rocket.android.
preferences.presentation.Preference
sView
import
chat.rocket.android.
preferences.ui.Preferences
Fragment
import
chat.rocket.android.
servers.presentation.Server
sView
import
chat.rocket.android.
servers.ui.ServersBottomSheet
Fragment
import
dagger.Module
import
dagger.Provides
@Module
class
Preferences
FragmentModule
{
class
ServersBottomSheet
FragmentModule
{
@Provides
@PerFragment
fun
preferencesView
(
frag
:
PreferencesFragment
):
PreferencesView
{
return
frag
}
fun
serversView
(
frag
:
ServersBottomSheetFragment
):
ServersView
=
frag
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/
preferences/di/Preferences
FragmentProvider.kt
→
app/src/main/java/chat/rocket/android/
servers/di/ServersBottomSheet
FragmentProvider.kt
View file @
f4efa770
package
chat.rocket.android.
preference
s.di
package
chat.rocket.android.
server
s.di
import
chat.rocket.android.dagger.scope.PerFragment
import
chat.rocket.android.
preferences.ui.Preferences
Fragment
import
chat.rocket.android.
servers.ui.ServersBottomSheet
Fragment
import
dagger.Module
import
dagger.android.ContributesAndroidInjector
@Module
abstract
class
Preferences
FragmentProvider
{
abstract
class
ServersBottomSheet
FragmentProvider
{
@ContributesAndroidInjector
(
modules
=
[
Preferences
FragmentModule
::
class
])
@ContributesAndroidInjector
(
modules
=
[
ServersBottomSheet
FragmentModule
::
class
])
@PerFragment
abstract
fun
provide
PreferencesFragment
():
Preferences
Fragment
abstract
fun
provide
ServersBottomSheetFragment
():
ServersBottomSheet
Fragment
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/servers/presentation/ServersPresenter.kt
0 → 100644
View file @
f4efa770
package
chat.rocket.android.servers.presentation
import
chat.rocket.android.core.lifecycle.CancelStrategy
import
chat.rocket.android.main.presentation.MainNavigator
import
chat.rocket.android.server.domain.GetAccountsInteractor
import
chat.rocket.android.util.extension.launchUI
import
chat.rocket.common.util.ifNull
import
timber.log.Timber
import
javax.inject.Inject
import
javax.inject.Named
class
ServersPresenter
@Inject
constructor
(
private
val
view
:
ServersView
,
private
val
navigator
:
MainNavigator
,
private
val
strategy
:
CancelStrategy
,
private
val
getAccountsInteractor
:
GetAccountsInteractor
,
@Named
(
"currentServer"
)
private
val
currentServerUrl
:
String
)
{
fun
getAllServers
()
{
launchUI
(
strategy
)
{
try
{
view
.
showServerList
(
getAccountsInteractor
.
get
(),
currentServerUrl
)
}
catch
(
exception
:
Exception
)
{
Timber
.
e
(
exception
,
"Error loading servers"
)
exception
.
message
?.
let
{
view
.
showMessage
(
it
)
}.
ifNull
{
view
.
showGenericErrorMessage
()
}
}
}
}
fun
changeServer
(
serverUrl
:
String
)
{
if
(
currentServerUrl
!=
serverUrl
)
{
navigator
.
switchOrAddNewServer
(
serverUrl
)
}
else
{
view
.
hideServerView
()
}
}
fun
addNewServer
()
{
view
.
hideServerView
()
navigator
.
toServerScreen
()
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/servers/presentation/ServersView.kt
0 → 100644
View file @
f4efa770
package
chat.rocket.android.servers.presentation
import
chat.rocket.android.core.behaviours.MessageView
import
chat.rocket.android.server.domain.model.Account
interface
ServersView
:
MessageView
{
/**
* Shows the server list.
*
* @param serverList The list of server to show.
* @param currentServerUrl The current logged in server url.
*/
fun
showServerList
(
serverList
:
List
<
Account
>,
currentServerUrl
:
String
)
/**
* Hides the servers view.
*/
fun
hideServerView
()
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/servers/ui/ServersBottomSheetFragment.kt
0 → 100644
View file @
f4efa770
package
chat.rocket.android.servers.ui
import
android.os.Bundle
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
androidx.recyclerview.widget.LinearLayoutManager
import
chat.rocket.android.R
import
chat.rocket.android.server.domain.model.Account
import
chat.rocket.android.servers.adapter.Selector
import
chat.rocket.android.servers.adapter.ServersAdapter
import
chat.rocket.android.servers.presentation.ServersPresenter
import
chat.rocket.android.servers.presentation.ServersView
import
chat.rocket.android.util.extensions.showToast
import
com.google.android.material.bottomsheet.BottomSheetDialogFragment
import
dagger.android.support.AndroidSupportInjection
import
kotlinx.android.synthetic.main.bottom_sheet_fragment_servers.*
import
javax.inject.Inject
const
val
TAG
=
"ServersBottomSheetFragment"
class
ServersBottomSheetFragment
:
BottomSheetDialogFragment
(),
ServersView
{
@Inject
lateinit
var
presenter
:
ServersPresenter
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
AndroidSupportInjection
.
inject
(
this
)
}
override
fun
onCreateView
(
inflater
:
LayoutInflater
,
container
:
ViewGroup
?,
savedInstanceState
:
Bundle
?
):
View
?
=
inflater
.
inflate
(
R
.
layout
.
bottom_sheet_fragment_servers
,
container
,
false
)
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
super
.
onViewCreated
(
view
,
savedInstanceState
)
presenter
.
getAllServers
()
}
override
fun
showServerList
(
serverList
:
List
<
Account
>,
currentServerUrl
:
String
)
{
recycler_view
.
layoutManager
=
LinearLayoutManager
(
context
)
recycler_view
.
adapter
=
ServersAdapter
(
serverList
,
currentServerUrl
,
object
:
Selector
{
override
fun
onServerSelected
(
serverUrl
:
String
)
{
presenter
.
changeServer
(
serverUrl
)
}
override
fun
onAddNewServerSelected
()
{
presenter
.
addNewServer
()
}
})
}
override
fun
hideServerView
()
=
dismiss
()
override
fun
showMessage
(
resId
:
Int
)
{
showToast
(
resId
)
}
override
fun
showMessage
(
message
:
String
)
{
showToast
(
message
)
}
override
fun
showGenericErrorMessage
()
=
showMessage
(
getString
(
R
.
string
.
msg_generic_error
))
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/settings/di/SettingsFragmentModule.kt
View file @
f4efa770
package
chat.rocket.android.settings.di
import
androidx.lifecycle.LifecycleOwner
import
chat.rocket.android.core.lifecycle.CancelStrategy
import
chat.rocket.android.dagger.scope.PerFragment
import
chat.rocket.android.settings.presentation.SettingsView
import
chat.rocket.android.settings.ui.SettingsFragment
import
dagger.Module
import
dagger.Provides
import
kotlinx.coroutines.Job
@Module
class
SettingsFragmentModule
{
...
...
@@ -20,13 +18,7 @@ class SettingsFragmentModule {
@Provides
@PerFragment
fun
settingsLifecycleOwner
(
frag
:
SettingsFragment
):
LifecycleOwner
{
return
frag
}
@Provides
@PerFragment
fun
provideCancelStrategy
(
owner
:
LifecycleOwner
,
jobs
:
Job
):
CancelStrategy
{
return
CancelStrategy
(
owner
,
jobs
)
fun
settingsLifecycleOwner
(
fragment
:
SettingsFragment
):
LifecycleOwner
{
return
fragment
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/settings/di/SettingsFragmentProvider.kt
View file @
f4efa770
package
chat.rocket.android.settings.di
import
chat.rocket.android.dagger.scope.PerFragment
import
chat.rocket.android.settings.ui.SettingsFragment
import
dagger.Module
import
dagger.android.ContributesAndroidInjector
...
...
@@ -8,5 +9,6 @@ import dagger.android.ContributesAndroidInjector
abstract
class
SettingsFragmentProvider
{
@ContributesAndroidInjector
(
modules
=
[
SettingsFragmentModule
::
class
])
@PerFragment
abstract
fun
provideSettingsFragment
():
SettingsFragment
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/settings/password/presentation/PasswordPresenter.kt
View file @
f4efa770
...
...
@@ -8,7 +8,6 @@ import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import
chat.rocket.android.util.extension.launchUI
import
chat.rocket.android.util.retryIO
import
chat.rocket.common.RocketChatException
import
chat.rocket.common.util.ifNull
import
chat.rocket.core.RocketChatClient
import
chat.rocket.core.internal.rest.updateProfile
import
javax.inject.Inject
...
...
@@ -22,7 +21,7 @@ class PasswordPresenter @Inject constructor(
factory
:
RocketChatClientFactory
)
{
private
val
serverUrl
=
serverInteractor
.
get
()
!!
private
val
client
:
RocketChatClient
=
factory
.
create
(
serverUrl
)
private
val
client
:
RocketChatClient
=
factory
.
get
(
serverUrl
)
fun
updatePassword
(
password
:
String
)
{
launchUI
(
strategy
)
{
...
...
app/src/main/java/chat/rocket/android/settings/presentation/SettingsPresenter.kt
0 → 100644
View file @
f4efa770
package
chat.rocket.android.settings.presentation
import
chat.rocket.android.core.lifecycle.CancelStrategy
import
chat.rocket.android.db.DatabaseManagerFactory
import
chat.rocket.android.helper.UserHelper
import
chat.rocket.android.main.presentation.MainNavigator
import
chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import
chat.rocket.android.server.domain.GetCurrentServerInteractor
import
chat.rocket.android.server.domain.PermissionsInteractor
import
chat.rocket.android.server.domain.RemoveAccountInteractor
import
chat.rocket.android.server.domain.TokenRepository
import
chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import
chat.rocket.android.server.infraestructure.RocketChatClientFactory
import
chat.rocket.android.server.presentation.CheckServerPresenter
import
chat.rocket.android.util.extension.gethash
import
chat.rocket.android.util.extension.launchUI
import
chat.rocket.android.util.extension.toHex
import
chat.rocket.android.util.extensions.adminPanelUrl
import
chat.rocket.android.util.extensions.avatarUrl
import
chat.rocket.android.util.retryIO
import
chat.rocket.common.util.ifNull
import
chat.rocket.core.internal.rest.deleteOwnAccount
import
chat.rocket.core.internal.rest.me
import
chat.rocket.core.internal.rest.serverInfo
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.withContext
import
timber.log.Timber
import
javax.inject.Inject
import
javax.inject.Named
class
SettingsPresenter
@Inject
constructor
(
private
val
view
:
SettingsView
,
private
val
strategy
:
CancelStrategy
,
private
val
navigator
:
MainNavigator
,
@Named
(
"currentServer"
)
private
val
currentServer
:
String
,
private
val
userHelper
:
UserHelper
,
private
val
analyticsTrackingInteractor
:
AnalyticsTrackingInteractor
,
private
val
tokenRepository
:
TokenRepository
,
private
val
permissions
:
PermissionsInteractor
,
private
val
rocketChatClientFactory
:
RocketChatClientFactory
,
getCurrentServerInteractor
:
GetCurrentServerInteractor
,
removeAccountInteractor
:
RemoveAccountInteractor
,
databaseManagerFactory
:
DatabaseManagerFactory
,
connectionManagerFactory
:
ConnectionManagerFactory
)
:
CheckServerPresenter
(
strategy
=
strategy
,
factory
=
rocketChatClientFactory
,
serverInteractor
=
getCurrentServerInteractor
,
removeAccountInteractor
=
removeAccountInteractor
,
tokenRepository
=
tokenRepository
,
dbManagerFactory
=
databaseManagerFactory
,
managerFactory
=
connectionManagerFactory
,
tokenView
=
view
,
navigator
=
navigator
)
{
fun
setupView
()
{
launchUI
(
strategy
)
{
try
{
val
serverInfo
=
retryIO
(
description
=
"serverInfo"
,
times
=
5
)
{
rocketChatClientFactory
.
get
(
currentServer
).
serverInfo
()
}
val
me
=
retryIO
(
description
=
"serverInfo"
,
times
=
5
)
{
rocketChatClientFactory
.
get
(
currentServer
).
me
()
}
userHelper
.
user
()
?.
let
{
user
->
view
.
setupSettingsView
(
currentServer
.
avatarUrl
(
me
.
username
?:
""
),
userHelper
.
displayName
(
user
)
?:
me
.
username
?:
""
,
me
.
status
.
toString
(),
permissions
.
isAdministrationEnabled
(),
analyticsTrackingInteractor
.
get
(),
true
,
serverInfo
.
version
)
}
}
catch
(
exception
:
Exception
)
{
Timber
.
d
(
exception
,
"Error getting server info"
)
exception
.
message
?.
let
{
view
.
showMessage
(
it
)
}.
ifNull
{
view
.
showGenericErrorMessage
()
}
}
}
}
fun
enableAnalyticsTracking
(
isEnabled
:
Boolean
)
{
analyticsTrackingInteractor
.
save
(
isEnabled
)
}
fun
logout
()
{
setupConnectionInfo
(
currentServer
)
super
.
logout
(
null
)
// TODO null?
}
fun
deleteAccount
(
password
:
String
)
{
launchUI
(
strategy
)
{
view
.
showLoading
()
try
{
withContext
(
Dispatchers
.
Default
)
{
// REMARK: Backend API is only working with a lowercase hash.
// https://github.com/RocketChat/Rocket.Chat/issues/12573
retryIO
{
rocketChatClientFactory
.
get
(
currentServer
)
.
deleteOwnAccount
(
password
.
gethash
().
toHex
().
toLowerCase
())
}
setupConnectionInfo
(
currentServer
)
logout
(
null
)
}
}
catch
(
exception
:
Exception
)
{
exception
.
message
?.
let
{
view
.
showMessage
(
it
)
}.
ifNull
{
view
.
showGenericErrorMessage
()
}
}
finally
{
view
.
hideLoading
()
}
}
}
fun
toProfile
()
=
navigator
.
toProfile
()
fun
toAdmin
()
=
tokenRepository
.
get
(
currentServer
)
?.
let
{
navigator
.
toAdminPanel
(
currentServer
.
adminPanelUrl
(),
it
.
authToken
)
}
fun
toLicense
(
licenseUrl
:
String
,
licenseTitle
:
String
)
=
navigator
.
toLicense
(
licenseUrl
,
licenseTitle
)
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/settings/presentation/SettingsView.kt
View file @
f4efa770
package
chat.rocket.android.settings.presentation
interface
SettingsView
import
chat.rocket.android.core.behaviours.LoadingView
import
chat.rocket.android.core.behaviours.MessageView
import
chat.rocket.android.server.presentation.TokenView
interface
SettingsView
:
TokenView
,
LoadingView
,
MessageView
{
/**
* Setups the settings view.
*
* @param avatar The user avatar.
* @param displayName The user display name.
* @param status The user status.
* @param isAdministrationEnabled True if the administration is enabled, false otherwise.
* @param isAnalyticsTrackingEnabled True if the analytics tracking is enabled, false otherwise.
* @param isDeleteAccountEnabled True if the delete account is enabled, false otherwise.
* @param serverVersion The version of the current logged in server.
*/
fun
setupSettingsView
(
avatar
:
String
,
displayName
:
String
,
status
:
String
,
isAdministrationEnabled
:
Boolean
,
isAnalyticsTrackingEnabled
:
Boolean
,
isDeleteAccountEnabled
:
Boolean
,
serverVersion
:
String
)
}
app/src/main/java/chat/rocket/android/settings/ui/SettingsFragment.kt
View file @
f4efa770
...
...
@@ -7,35 +7,36 @@ import android.os.Bundle
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
android.widget.AdapterView
import
android.widget.EditText
import
androidx.appcompat.app.AlertDialog
import
androidx.appcompat.app.AppCompatActivity
import
androidx.core.net.toUri
import
androidx.core.view.isVisible
import
androidx.fragment.app.Fragment
import
chat.rocket.android.BuildConfig
import
chat.rocket.android.R
import
chat.rocket.android.about.ui.AboutFragment
import
chat.rocket.android.about.ui.TAG_ABOUT_FRAGMENT
import
chat.rocket.android.analytics.AnalyticsManager
import
chat.rocket.android.analytics.event.ScreenViewEvent
import
chat.rocket.android.helper.TextHelper.getDeviceAndAppInformation
import
chat.rocket.android.main.ui.MainActivity
import
chat.rocket.android.preferences.ui.PreferencesFragment
import
chat.rocket.android.preferences.ui.TAG_PREFERENCES_FRAGMENT
import
chat.rocket.android.settings.password.ui.PasswordActivity
import
chat.rocket.android.settings.presentation.SettingsPresenter
import
chat.rocket.android.settings.presentation.SettingsView
import
chat.rocket.android.util.extensions.addFragmentBackStack
import
chat.rocket.android.util.extensions.inflate
import
chat.rocket.android.util.extensions.showToast
import
chat.rocket.android.webview.ui.webViewIntent
import
chat.rocket.android.util.invalidateFirebaseToken
import
com.bumptech.glide.Glide
import
dagger.android.support.AndroidSupportInjection
import
kotlinx.android.synthetic.main.app_bar.*
import
kotlinx.android.synthetic.main.fragment_settings.*
import
timber.log.Timber
import
javax.inject.Inject
internal
const
val
TAG_SETTINGS_FRAGMENT
=
"SettingsFragment"
class
SettingsFragment
:
Fragment
(),
SettingsView
,
AdapterView
.
OnItemClickListener
{
@Inject
lateinit
var
analyticsManager
:
AnalyticsManager
fun
newInstance
():
Fragment
=
SettingsFragment
()
class
SettingsFragment
:
Fragment
(),
SettingsView
{
@Inject
lateinit
var
analyticsManager
:
AnalyticsManager
@Inject
lateinit
var
presenter
:
SettingsPresenter
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
...
...
@@ -51,79 +52,92 @@ class SettingsFragment : Fragment(), SettingsView, AdapterView.OnItemClickListen
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
super
.
onViewCreated
(
view
,
savedInstanceState
)
setupToolbar
()
setupList
View
()
presenter
.
setup
View
()
analyticsManager
.
logScreenView
(
ScreenViewEvent
.
Settings
)
}
override
fun
onResume
()
{
// FIXME - gambiarra ahead. will fix when moving to new androidx Navigation
(
activity
as
?
MainActivity
)
?.
setupNavigationView
()
super
.
onResume
()
}
override
fun
onItemClick
(
parent
:
AdapterView
<
*
>?,
view
:
View
?,
position
:
Int
,
id
:
Long
)
{
when
(
parent
?.
getItemAtPosition
(
position
).
toString
())
{
resources
.
getStringArray
(
R
.
array
.
settings_actions
)[
0
]
->
{
(
activity
as
AppCompatActivity
).
addFragmentBackStack
(
TAG_PREFERENCES_FRAGMENT
,
R
.
id
.
fragment_container
override
fun
setupSettingsView
(
avatar
:
String
,
displayName
:
String
,
status
:
String
,
isAdministrationEnabled
:
Boolean
,
isAnalyticsTrackingEnabled
:
Boolean
,
isDeleteAccountEnabled
:
Boolean
,
serverVersion
:
String
)
{
PreferencesFragment
.
newInstance
()
}
}
context
?.
let
{
Glide
.
with
(
it
).
load
(
avatar
).
into
(
image_avatar
)
}
resources
.
getStringArray
(
R
.
array
.
settings_actions
)[
1
]
->
activity
?.
startActivity
(
Intent
(
activity
,
PasswordActivity
::
class
.
java
))
text_display_name
.
text
=
displayName
// TODO (https://github.com/RocketChat/Rocket.Chat.Android/pull/1918)
resources
.
getStringArray
(
R
.
array
.
settings_actions
)[
2
]
->
showToast
(
"Coming soon"
)
text_status
.
text
=
status
resources
.
getStringArray
(
R
.
array
.
settings_actions
)[
3
]
->
shareApp
()
profile_container
.
setOnClickListener
{
presenter
.
toProfile
()
}
resources
.
getStringArray
(
R
.
array
.
settings_actions
)[
4
]
->
showAppOnStore
()
text_contact_us
.
setOnClickListener
{
contactSupport
()
}
resources
.
getStringArray
(
R
.
array
.
settings_actions
)[
5
]
->
contactSupport
()
text_language
.
setOnClickListener
{}
resources
.
getStringArray
(
R
.
array
.
settings_actions
)[
6
]
->
activity
?.
startActivity
(
context
?.
webViewIntent
(
getString
(
R
.
string
.
license_url
),
getString
(
R
.
string
.
title_license
)
)
)
text_review_this_app
.
setOnClickListener
{
showAppOnStore
()
}
resources
.
getStringArray
(
R
.
array
.
settings_actions
)[
7
]
->
{
(
activity
as
AppCompatActivity
).
addFragmentBackStack
(
TAG_ABOUT_FRAGMENT
,
R
.
id
.
fragment_container
)
{
AboutFragment
.
newInstance
()
text_share_this_app
.
setOnClickListener
{
shareApp
()
}
text_license
.
setOnClickListener
{
presenter
.
toLicense
(
getString
(
R
.
string
.
license_url
),
getString
(
R
.
string
.
title_licence
))
}
text_app_version
.
text
=
getString
(
R
.
string
.
msg_app_version
,
BuildConfig
.
VERSION_NAME
,
BuildConfig
.
VERSION_CODE
)
text_server_version
.
text
=
getString
(
R
.
string
.
msg_server_version
,
serverVersion
)
text_logout
.
setOnClickListener
{
showLogoutDialog
()}
with
(
text_administration
)
{
isVisible
=
isAdministrationEnabled
setOnClickListener
{
presenter
.
toAdmin
()
}
}
with
(
switch_crash_report
)
{
isChecked
=
isAnalyticsTrackingEnabled
isEnabled
=
BuildConfig
.
FLAVOR
==
"play"
setOnCheckedChangeListener
{
_
,
isChecked
->
presenter
.
enableAnalyticsTracking
(
isChecked
)
}
}
private
fun
showAppOnStore
()
{
try
{
startActivity
(
Intent
(
Intent
.
ACTION_VIEW
,
getString
(
R
.
string
.
market_link
).
toUri
()))
}
catch
(
error
:
ActivityNotFoundException
)
{
startActivity
(
Intent
(
Intent
.
ACTION_VIEW
,
getString
(
R
.
string
.
play_store_link
).
toUri
()))
with
(
text_delete_account
)
{
isVisible
=
isDeleteAccountEnabled
setOnClickListener
{
showDeleteAccountDialog
()
}
}
}
private
fun
setupListView
()
{
settings_list
.
onItemClickListener
=
this
override
fun
invalidateToken
(
token
:
String
)
=
invalidateFirebaseToken
(
token
)
override
fun
showLoading
()
{
view_loading
.
isVisible
=
true
}
private
fun
setupToolbar
()
{
(
activity
as
AppCompatActivity
?)
?.
supportActionBar
?.
title
=
getString
(
R
.
string
.
title_settings
)
override
fun
hideLoading
()
{
view_loading
.
isVisible
=
false
}
private
fun
shareApp
()
{
with
(
Intent
(
Intent
.
ACTION_SEND
))
{
type
=
"text/plain"
putExtra
(
Intent
.
EXTRA_SUBJECT
,
getString
(
R
.
string
.
msg_check_this_out
))
putExtra
(
Intent
.
EXTRA_TEXT
,
getString
(
R
.
string
.
play_store_link
))
startActivity
(
Intent
.
createChooser
(
this
,
getString
(
R
.
string
.
msg_share_using
)))
override
fun
showMessage
(
resId
:
Int
)
{
showToast
(
resId
)
}
override
fun
showMessage
(
message
:
String
)
{
showToast
(
message
)
}
override
fun
showGenericErrorMessage
()
=
showMessage
(
getString
(
R
.
string
.
msg_generic_error
))
private
fun
setupToolbar
()
{
with
((
activity
as
AppCompatActivity
))
{
with
(
toolbar
)
{
setSupportActionBar
(
this
)
title
=
getString
(
R
.
string
.
title_settings
)
setNavigationIcon
(
R
.
drawable
.
ic_arrow_back_white_24dp
)
setNavigationOnClickListener
{
activity
?.
onBackPressed
()
}
}
}
}
...
...
@@ -142,7 +156,42 @@ class SettingsFragment : Fragment(), SettingsView, AdapterView.OnItemClickListen
}
}
companion
object
{
fun
newInstance
()
=
SettingsFragment
()
private
fun
showAppOnStore
()
{
try
{
startActivity
(
Intent
(
Intent
.
ACTION_VIEW
,
getString
(
R
.
string
.
market_link
).
toUri
()))
}
catch
(
error
:
ActivityNotFoundException
)
{
startActivity
(
Intent
(
Intent
.
ACTION_VIEW
,
getString
(
R
.
string
.
play_store_link
).
toUri
()))
}
}
private
fun
shareApp
()
{
with
(
Intent
(
Intent
.
ACTION_SEND
))
{
type
=
"text/plain"
putExtra
(
Intent
.
EXTRA_SUBJECT
,
getString
(
R
.
string
.
msg_check_this_out
))
putExtra
(
Intent
.
EXTRA_TEXT
,
getString
(
R
.
string
.
play_store_link
))
startActivity
(
Intent
.
createChooser
(
this
,
getString
(
R
.
string
.
msg_share_using
)))
}
}
private
fun
showLogoutDialog
()
{
context
?.
let
{
val
builder
=
AlertDialog
.
Builder
(
it
)
builder
.
setTitle
(
R
.
string
.
title_are_you_sure
)
.
setPositiveButton
(
R
.
string
.
action_logout
)
{
_
,
_
->
presenter
.
logout
()}
.
setNegativeButton
(
android
.
R
.
string
.
no
)
{
dialog
,
_
->
dialog
.
cancel
()
}
.
create
()
.
show
()
}
}
private
fun
showDeleteAccountDialog
()
{
context
?.
let
{
AlertDialog
.
Builder
(
it
)
.
setView
(
LayoutInflater
.
from
(
it
).
inflate
(
R
.
layout
.
dialog_delete_account
,
null
))
.
setPositiveButton
(
R
.
string
.
msg_delete_account
)
{
_
,
_
->
presenter
.
deleteAccount
(
EditText
(
context
).
text
.
toString
())
}.
setNegativeButton
(
android
.
R
.
string
.
no
)
{
dialog
,
_
->
dialog
.
cancel
()
}.
create
()
.
show
()
}
}
}
app/src/main/java/chat/rocket/android/sortingandgrouping/di/SortingAndGroupingBottomSheetFragmentModule.kt
0 → 100644
View file @
f4efa770
package
chat.rocket.android.sortingandgrouping.di
import
chat.rocket.android.dagger.scope.PerFragment
import
chat.rocket.android.sortingandgrouping.presentation.SortingAndGroupingView
import
chat.rocket.android.sortingandgrouping.ui.SortingAndGroupingBottomSheetFragment
import
dagger.Module
import
dagger.Provides
@Module
class
SortingAndGroupingBottomSheetFragmentModule
{
@Provides
@PerFragment
fun
sortingAndGroupingView
(
frag
:
SortingAndGroupingBottomSheetFragment
):
SortingAndGroupingView
=
frag
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/sortingandgrouping/di/SortingAndGroupingBottomSheetFragmentProvider.kt
0 → 100644
View file @
f4efa770
package
chat.rocket.android.sortingandgrouping.di
import
chat.rocket.android.dagger.scope.PerFragment
import
chat.rocket.android.sortingandgrouping.ui.SortingAndGroupingBottomSheetFragment
import
dagger.Module
import
dagger.android.ContributesAndroidInjector
@Module
abstract
class
SortingAndGroupingBottomSheetFragmentProvider
{
@ContributesAndroidInjector
(
modules
=
[
SortingAndGroupingBottomSheetFragmentModule
::
class
])
@PerFragment
abstract
fun
provideSortingAndGroupingBottomSheetFragment
():
SortingAndGroupingBottomSheetFragment
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/sortingandgrouping/presentation/SortingAndGroupingPresenter.kt
0 → 100644
View file @
f4efa770
package
chat.rocket.android.sortingandgrouping.presentation
import
chat.rocket.android.server.domain.SortingAndGroupingInteractor
import
javax.inject.Inject
import
javax.inject.Named
class
SortingAndGroupingPresenter
@Inject
constructor
(
private
val
view
:
SortingAndGroupingView
,
private
val
sortingAndGroupingInteractor
:
SortingAndGroupingInteractor
,
@Named
(
"currentServer"
)
private
val
currentServerUrl
:
String
)
{
fun
getSortingAndGroupingPreferences
()
{
with
(
sortingAndGroupingInteractor
)
{
view
.
showSortingAndGroupingPreferences
(
getSortByName
(
currentServerUrl
),
getUnreadOnTop
(
currentServerUrl
),
getGroupByType
(
currentServerUrl
),
getGroupByFavorites
(
currentServerUrl
)
)
}
}
fun
saveSortingAndGroupingPreferences
(
isSortByName
:
Boolean
,
isUnreadOnTop
:
Boolean
,
isGroupByType
:
Boolean
,
isGroupByFavorites
:
Boolean
)
{
sortingAndGroupingInteractor
.
save
(
currentServerUrl
,
isSortByName
,
isUnreadOnTop
,
isGroupByType
,
isGroupByFavorites
)
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/sortingandgrouping/presentation/SortingAndGroupingView.kt
0 → 100644
View file @
f4efa770
package
chat.rocket.android.sortingandgrouping.presentation
interface
SortingAndGroupingView
{
/**
* Shows the sorting and grouping preferences for the current logged in server.
*
* @param isSortByName True if sorting by name, false otherwise.
* @param isUnreadOnTop True if grouping by unread on top, false otherwise.
* @param isGroupByType True if grouping by type , false otherwise.
* @param isGroupByFavorites True if grouping by favorites, false otherwise.
*/
fun
showSortingAndGroupingPreferences
(
isSortByName
:
Boolean
,
isUnreadOnTop
:
Boolean
,
isGroupByType
:
Boolean
,
isGroupByFavorites
:
Boolean
)
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/sortingandgrouping/ui/SortingAndGroupingBottomSheetFragment.kt
0 → 100644
View file @
f4efa770
package
chat.rocket.android.sortingandgrouping.ui
import
DrawableHelper
import
android.content.DialogInterface
import
android.os.Bundle
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
android.widget.TextView
import
androidx.annotation.DrawableRes
import
chat.rocket.android.R
import
chat.rocket.android.chatrooms.ui.ChatRoomsFragment
import
chat.rocket.android.chatrooms.ui.TAG_CHAT_ROOMS_FRAGMENT
import
chat.rocket.android.sortingandgrouping.presentation.SortingAndGroupingPresenter
import
chat.rocket.android.sortingandgrouping.presentation.SortingAndGroupingView
import
com.google.android.material.bottomsheet.BottomSheetDialogFragment
import
dagger.android.support.AndroidSupportInjection
import
kotlinx.android.synthetic.main.bottom_sheet_fragment_sort_by.*
import
javax.inject.Inject
const
val
TAG
=
"SortingAndGroupingBottomSheetFragment"
class
SortingAndGroupingBottomSheetFragment
:
BottomSheetDialogFragment
(),
SortingAndGroupingView
{
@Inject
lateinit
var
presenter
:
SortingAndGroupingPresenter
private
var
isSortByName
=
false
private
var
isUnreadOnTop
=
false
private
var
isGroupByType
=
false
private
var
isGroupByFavorites
=
false
private
val
chatRoomFragment
by
lazy
{
activity
?.
supportFragmentManager
?.
findFragmentByTag
(
TAG_CHAT_ROOMS_FRAGMENT
)
as
ChatRoomsFragment
}
private
val
filterDrawable
by
lazy
{
R
.
drawable
.
ic_filter_20dp
}
private
val
activityDrawable
by
lazy
{
R
.
drawable
.
ic_activity_20dp
}
private
val
unreadOnTopDrawable
by
lazy
{
R
.
drawable
.
ic_unread_20dp
}
private
val
groupByTypeDrawable
by
lazy
{
R
.
drawable
.
ic_group_by_type_20dp
}
private
val
groupByFavoritesDrawable
by
lazy
{
R
.
drawable
.
ic_favorites_20dp
}
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
AndroidSupportInjection
.
inject
(
this
)
}
override
fun
onCreateView
(
inflater
:
LayoutInflater
,
container
:
ViewGroup
?,
savedInstanceState
:
Bundle
?
):
View
?
=
inflater
.
inflate
(
R
.
layout
.
bottom_sheet_fragment_sort_by
,
container
,
false
)
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
super
.
onViewCreated
(
view
,
savedInstanceState
)
presenter
.
getSortingAndGroupingPreferences
()
setupListeners
()
}
override
fun
onCancel
(
dialog
:
DialogInterface
?)
{
super
.
onCancel
(
dialog
)
presenter
.
saveSortingAndGroupingPreferences
(
isSortByName
,
isUnreadOnTop
,
isGroupByType
,
isGroupByFavorites
)
}
override
fun
showSortingAndGroupingPreferences
(
isSortByName
:
Boolean
,
isUnreadOnTop
:
Boolean
,
isGroupByType
:
Boolean
,
isGroupByFavorites
:
Boolean
)
{
this
.
isSortByName
=
isSortByName
this
.
isUnreadOnTop
=
isUnreadOnTop
this
.
isGroupByType
=
isGroupByType
this
.
isGroupByFavorites
=
isGroupByFavorites
if
(
isSortByName
)
{
changeSortByTitle
(
getString
(
R
.
string
.
msg_sort_by_name
))
checkSelection
(
text_name
,
filterDrawable
)
}
else
{
changeSortByTitle
(
getString
(
R
.
string
.
msg_sort_by_activity
))
checkSelection
(
text_activity
,
activityDrawable
)
}
if
(
isUnreadOnTop
)
checkSelection
(
text_unread_on_top
,
unreadOnTopDrawable
)
if
(
isGroupByType
)
checkSelection
(
text_group_by_type
,
groupByTypeDrawable
)
if
(
isGroupByFavorites
)
checkSelection
(
text_group_by_favorites
,
groupByFavoritesDrawable
)
}
private
fun
setupListeners
()
{
text_name
.
setOnClickListener
{
changeSortByTitle
(
getString
(
R
.
string
.
msg_sort_by_name
))
checkSelection
(
text_name
,
filterDrawable
)
uncheckSelection
(
text_activity
,
activityDrawable
)
isSortByName
=
true
sortChatRoomsList
()
}
text_activity
.
setOnClickListener
{
changeSortByTitle
(
getString
(
R
.
string
.
msg_sort_by_activity
))
checkSelection
(
text_activity
,
activityDrawable
)
uncheckSelection
(
text_name
,
filterDrawable
)
isSortByName
=
false
sortChatRoomsList
()
}
text_unread_on_top
.
setOnClickListener
{
isUnreadOnTop
=
if
(
isUnreadOnTop
)
{
uncheckSelection
(
text_unread_on_top
,
unreadOnTopDrawable
)
false
}
else
{
checkSelection
(
text_unread_on_top
,
unreadOnTopDrawable
)
true
}
sortChatRoomsList
()
}
text_group_by_type
.
setOnClickListener
{
isGroupByType
=
if
(
isGroupByType
)
{
uncheckSelection
(
text_group_by_type
,
groupByTypeDrawable
)
false
}
else
{
checkSelection
(
text_group_by_type
,
groupByTypeDrawable
)
true
}
sortChatRoomsList
()
}
text_group_by_favorites
.
setOnClickListener
{
isGroupByFavorites
=
if
(
isGroupByFavorites
)
{
uncheckSelection
(
text_group_by_favorites
,
groupByFavoritesDrawable
)
false
}
else
{
checkSelection
(
text_group_by_favorites
,
groupByFavoritesDrawable
)
true
}
sortChatRoomsList
()
}
}
private
fun
changeSortByTitle
(
text
:
String
)
{
text_sort_by
.
text
=
getString
(
R
.
string
.
msg_sort_by
,
text
.
toLowerCase
())
}
private
fun
checkSelection
(
textView
:
TextView
,
@DrawableRes
leftDrawable
:
Int
)
{
context
?.
let
{
DrawableHelper
.
compoundLeftAndRightDrawable
(
textView
,
DrawableHelper
.
getDrawableFromId
(
leftDrawable
,
it
),
DrawableHelper
.
getDrawableFromId
(
R
.
drawable
.
ic_check
,
it
)
)
}
}
private
fun
uncheckSelection
(
textView
:
TextView
,
@DrawableRes
leftDrawable
:
Int
)
{
context
?.
let
{
DrawableHelper
.
compoundLeftDrawable
(
textView
,
DrawableHelper
.
getDrawableFromId
(
leftDrawable
,
it
)
)
}
}
private
fun
sortChatRoomsList
()
{
chatRoomFragment
.
sortChatRoomsList
(
isSortByName
,
isUnreadOnTop
,
isGroupByType
,
isGroupByFavorites
)
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/util/extensions/RocketChatClient.kt
View file @
f4efa770
...
...
@@ -19,7 +19,7 @@ suspend fun RocketChatClientFactory.registerPushToken(
accounts
.
forEach
{
account
->
try
{
retryIO
(
description
=
"register push token: ${account.serverUrl}"
)
{
create
(
account
.
serverUrl
).
registerPushToken
(
token
)
get
(
account
.
serverUrl
).
registerPushToken
(
token
)
}
}
catch
(
ex
:
Exception
)
{
Timber
.
d
(
ex
,
"Error registering Push token for ${account.serverUrl}"
)
...
...
app/src/main/java/chat/rocket/android/webview/adminpanel/ui/AdminPanelWebViewFragment.kt
View file @
f4efa770
...
...
@@ -16,9 +16,17 @@ import dagger.android.support.DaggerFragment
import
kotlinx.android.synthetic.main.fragment_admin_panel_web_view.*
import
javax.inject.Inject
internal
const
val
TAG_ADMIN_PANEL_WEB_VIEW_FRAGMENT
=
"AdminPanelWebViewFragment"
private
const
val
BUNDLE_WEB_PAGE_URL
=
"web_page_url"
private
const
val
BUNDLE_USER_TOKEN
=
"user_token"
fun
newInstance
(
webPageUrl
:
String
,
userToken
:
String
)
=
AdminPanelWebViewFragment
().
apply
{
arguments
=
Bundle
(
2
).
apply
{
putString
(
BUNDLE_WEB_PAGE_URL
,
webPageUrl
)
putString
(
BUNDLE_USER_TOKEN
,
userToken
)
}
}
class
AdminPanelWebViewFragment
:
DaggerFragment
()
{
private
lateinit
var
webPageUrl
:
String
private
lateinit
var
userToken
:
String
...
...
@@ -30,7 +38,8 @@ class AdminPanelWebViewFragment : DaggerFragment() {
arguments
?.
run
{
webPageUrl
=
getString
(
BUNDLE_WEB_PAGE_URL
,
""
)
userToken
=
getString
(
BUNDLE_USER_TOKEN
,
""
)
}
?:
requireNotNull
(
arguments
)
{
"no arguments supplied when the fragment was instantiated"
}
}
?:
requireNotNull
(
arguments
)
{
"no arguments supplied when the fragment was instantiated"
}
}
override
fun
onCreateView
(
...
...
@@ -70,13 +79,4 @@ class AdminPanelWebViewFragment : DaggerFragment() {
}
web_view
.
loadUrl
(
webPageUrl
)
}
companion
object
{
fun
newInstance
(
webPageUrl
:
String
,
userToken
:
String
)
=
AdminPanelWebViewFragment
().
apply
{
arguments
=
Bundle
(
2
).
apply
{
putString
(
BUNDLE_WEB_PAGE_URL
,
webPageUrl
)
putString
(
BUNDLE_USER_TOKEN
,
userToken
)
}
}
}
}
\ No newline at end of file
app/src/main/res/drawable/black_gradient.xml
deleted
100644 → 0
View file @
ab24ba31
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:shape=
"rectangle"
>
<gradient
android:angle=
"90"
android:centerColor=
"#30000000"
android:endColor=
"#00000000"
android:startColor=
"#C0000000"
android:type=
"linear"
/>
</shape>
\ No newline at end of file
app/src/main/res/drawable/ic_activity_20dp.xml
0 → 100644
View file @
f4efa770
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"20dp"
android:height=
"20dp"
android:viewportWidth=
"20"
android:viewportHeight=
"20"
>
<path
android:fillColor=
"#00000000"
android:fillType=
"evenOdd"
android:pathData=
"M10,10m-9.25,0a9.25,9.25 0,1 1,18.5 0a9.25,9.25 0,1 1,-18.5 0"
android:strokeWidth=
"1.5"
android:strokeColor=
"#9EA2A8"
/>
<path
android:fillColor=
"#00000000"
android:fillType=
"evenOdd"
android:pathData=
"M10,4.004V10l4,4"
android:strokeWidth=
"1.5"
android:strokeColor=
"#9EA2A8"
/>
</vector>
app/src/main/res/drawable/ic_add_new_server_48dp.xml
0 → 100644
View file @
f4efa770
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"48dp"
android:height=
"48dp"
android:viewportWidth=
"48"
android:viewportHeight=
"48"
>
<path
android:fillColor=
"#00000000"
android:fillType=
"evenOdd"
android:pathData=
"M4.5,0.5L43.5,0.5A4,4 0,0 1,47.5 4.5L47.5,43.5A4,4 0,0 1,43.5 47.5L4.5,47.5A4,4 0,0 1,0.5 43.5L0.5,4.5A4,4 0,0 1,4.5 0.5z"
android:strokeWidth=
"1"
android:strokeColor=
"#CBCED1"
/>
<path
android:fillColor=
"#00000000"
android:fillType=
"evenOdd"
android:pathData=
"M33.0625,23.5625L24.4375,23.5625L24.4375,14.9375C24.4375,14.6959 24.2416,14.5 24,14.5C23.7584,14.5 23.5625,14.6959 23.5625,14.9375L23.5625,23.5625L14.9375,23.5625C14.6959,23.5625 14.5,23.7584 14.5,24C14.5,24.2416 14.6959,24.4375 14.9375,24.4375L23.5625,24.4375L23.5625,33.0625C23.5625,33.3041 23.7584,33.5 24,33.5C24.2416,33.5 24.4375,33.3041 24.4375,33.0625L24.4375,24.4375L33.0625,24.4375C33.3041,24.4375 33.5,24.2416 33.5,24C33.5,23.7584 33.3041,23.5625 33.0625,23.5625Z"
android:strokeWidth=
"1"
android:strokeColor=
"#9EA2A8"
/>
</vector>
app/src/main/res/drawable/ic_arrow_expand_20dp.xml
0 → 100644
View file @
f4efa770
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"8dp"
android:height=
"4dp"
android:viewportWidth=
"8"
android:viewportHeight=
"4"
>
<path
android:fillColor=
"#FFFFFF"
android:fillType=
"evenOdd"
android:pathData=
"M1.20711,0L6.79289,0C7.06904,0 7.29289,0.22386 7.29289,0.5C7.29289,0.63261 7.24021,0.75979 7.14645,0.85355L4.35355,3.64645C4.15829,3.84171 3.84171,3.84171 3.64645,3.64645L0.85355,0.85355C0.65829,0.65829 0.65829,0.34171 0.85355,0.14645C0.94732,0.05268 1.0745,0 1.20711,0Z"
android:strokeWidth=
"1"
android:strokeColor=
"#00000000"
/>
</vector>
app/src/main/res/drawable/ic_chat_bubble_black_24dp.xml
deleted
100644 → 0
View file @
ab24ba31
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"24dp"
android:height=
"24dp"
android:viewportWidth=
"24.0"
android:viewportHeight=
"24.0"
>
<path
android:fillColor=
"#FF000000"
android:pathData=
"M20,2H4c-1.1,0 -2,0.9 -2,2v18l4,-4h14c1.1,0 2,-0.9 2,-2V4c0,-1.1 -0.9,-2 -2,-2z"
/>
</vector>
app/src/main/res/drawable/ic_check.xml
0 → 100644
View file @
f4efa770
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"17dp"
android:height=
"12dp"
android:viewportWidth=
"17"
android:viewportHeight=
"12"
>
<path
android:fillColor=
"#1D74F5"
android:fillType=
"nonZero"
android:pathData=
"M5.5875,9.7331L14.7078,0.6128C15.0463,0.2744 15.595,0.2744 15.9335,0.6128L15.9335,0.6128C16.2719,0.9513 16.2719,1.5 15.9335,1.8385L6.2225,11.5494C5.832,11.9399 5.1989,11.9399 4.8083,11.5494L0.6489,7.39C0.2905,7.0316 0.2905,6.4506 0.6489,6.0922L0.6489,6.0922C1.0072,5.7338 1.5883,5.7338 1.9466,6.0922L5.5875,9.7331Z"
android:strokeWidth=
"1"
android:strokeColor=
"#00000000"
/>
</vector>
app/src/main/res/drawable/ic_check_read_24dp.xml
View file @
f4efa770
...
...
@@ -2,8 +2,9 @@
android:width=
"24dp"
android:height=
"24dp"
android:tint=
"#1D74F5"
android:viewportHeight=
"24.0"
android:viewportWidth=
"24.0"
>
android:viewportWidth=
"24"
android:viewportHeight=
"24"
>
<path
android:fillColor=
"#FF1D74F5"
android:pathData=
"M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"
/>
...
...
app/src/main/res/drawable/ic_create_black_24dp.xml
deleted
100644 → 0
View file @
ab24ba31
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"24dp"
android:height=
"24dp"
android:viewportWidth=
"24.0"
android:viewportHeight=
"24.0"
>
<path
android:fillColor=
"#FF000000"
android:pathData=
"M3,17.25V21h3.75L17.81,9.94l-3.75,-3.75L3,17.25zM20.71,7.04c0.39,-0.39 0.39,-1.02 0,-1.41l-2.34,-2.34c-0.39,-0.39 -1.02,-0.39 -1.41,0l-1.83,1.83 3.75,3.75 1.83,-1.83z"
/>
</vector>
app/src/main/res/drawable/ic_favorites_20dp.xml
0 → 100644
View file @
f4efa770
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"20dp"
android:height=
"20dp"
android:viewportWidth=
"20"
android:viewportHeight=
"19"
>
<path
android:fillColor=
"#00000000"
android:fillType=
"evenOdd"
android:pathData=
"M14.882,16.72l-0.933,-5.437 3.95,-3.85 -5.458,-0.793L10,1.695 7.56,6.64 2.1,7.434l3.95,3.85 -0.933,5.435L10,14.153l4.882,2.566z"
android:strokeWidth=
"1.5"
android:strokeColor=
"#9EA2A8"
/>
</vector>
app/src/main/res/drawable/ic_filter_20dp.xml
0 → 100644
View file @
f4efa770
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"20dp"
android:height=
"20dp"
android:viewportWidth=
"24"
android:viewportHeight=
"24"
>
<path
android:fillColor=
"#00000000"
android:fillType=
"evenOdd"
android:pathData=
"M5,4L5,18"
android:strokeWidth=
"1.5"
android:strokeColor=
"#9EA2A8"
android:strokeLineCap=
"round"
/>
<path
android:fillColor=
"#00000000"
android:fillType=
"evenOdd"
android:pathData=
"M2,16L5,19"
android:strokeWidth=
"1.5"
android:strokeColor=
"#9EA2A8"
android:strokeLineCap=
"round"
/>
<path
android:fillColor=
"#00000000"
android:fillType=
"evenOdd"
android:pathData=
"M8,16L5,19"
android:strokeWidth=
"1.5"
android:strokeColor=
"#9EA2A8"
android:strokeLineCap=
"round"
/>
<path
android:fillColor=
"#9EA2A8"
android:fillType=
"evenOdd"
android:pathData=
"M17.4434,7.0605L16.3545,3.8916L15.1973,7.0605L17.4434,7.0605ZM15.8467,2.8271L16.9453,2.8271L19.5479,10L18.4834,10L17.7559,7.8516L14.9189,7.8516L14.1426,10L13.1465,10L15.8467,2.8271Z"
android:strokeWidth=
"1"
android:strokeColor=
"#00000000"
/>
<path
android:fillColor=
"#9EA2A8"
android:fillType=
"evenOdd"
android:pathData=
"M13.2295,19.1943l4.3994,-5.5127l-4.0771,0l0,-0.8545l5.3271,0l0,0.835l-4.4238,5.4834l4.4238,0l0,0.8545l-5.6494,0z"
android:strokeWidth=
"1"
android:strokeColor=
"#00000000"
/>
</vector>
app/src/main/res/drawable/ic_group_by_type_20dp.xml
0 → 100644
View file @
f4efa770
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"20dp"
android:height=
"20dp"
android:viewportWidth=
"24"
android:viewportHeight=
"24"
>
<path
android:fillColor=
"#00000000"
android:fillType=
"evenOdd"
android:pathData=
"M5,4v14M12,5h10.88M12,10h8.88M12,15h5.88M2,16l3,3M8,16l-3,3"
android:strokeWidth=
"1.5"
android:strokeColor=
"#9EA2A8"
android:strokeLineCap=
"round"
/>
</vector>
app/src/main/res/drawable/ic_logout_black_24dp.xml
deleted
100644 → 0
View file @
ab24ba31
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"24dp"
android:height=
"24dp"
android:viewportWidth=
"24.0"
android:viewportHeight=
"24.0"
>
<path
android:fillColor=
"#FF000000"
android:pathData=
"M10.09,15.59L11.5,17l5,-5 -5,-5 -1.41,1.41L12.67,11H3v2h9.67l-2.58,2.59zM19,3H5c-1.11,0 -2,0.9 -2,2v4h2V5h14v14H5v-4H3v4c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2V5c0,-1.1 -0.9,-2 -2,-2z"
/>
</vector>
app/src/main/res/drawable/ic_menu_white_24dp.xml
deleted
100644 → 0
View file @
ab24ba31
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"24dp"
android:height=
"24dp"
android:viewportWidth=
"24.0"
android:viewportHeight=
"24.0"
>
<path
android:fillColor=
"#FFFFFFFF"
android:pathData=
"M3,18h18v-2L3,16v2zM3,13h18v-2L3,11v2zM3,6v2h18L21,6L3,6z"
/>
</vector>
app/src/main/res/drawable/ic_navigation_24dp.xml
0 → 100644
View file @
f4efa770
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"24dp"
android:height=
"24dp"
android:viewportWidth=
"24"
android:viewportHeight=
"24"
>
<path
android:fillColor=
"#FFFFFF"
android:fillType=
"nonZero"
android:pathData=
"M12.0455,10.4052C12.5308,8.6894 14.1082,7.4323 15.9794,7.4323C17.8505,7.4323 19.428,8.6894 19.9132,10.4052L22.04,10.4052C22.5923,10.4052 23.04,10.8529 23.04,11.4052L23.04,11.6348C23.04,12.1871 22.5923,12.6348 22.04,12.6348L19.9132,12.6348C19.428,14.3506 17.8505,15.6077 15.9794,15.6077C14.1082,15.6077 12.5308,14.3506 12.0455,12.6348L1,12.6348C0.4477,12.6348 0,12.1871 0,11.6348L0,11.4052C0,10.8529 0.4477,10.4052 1,10.4052L12.0455,10.4052ZM15.9794,13.3781C17.0055,13.3781 17.8374,12.5462 17.8374,11.52C17.8374,10.4938 17.0055,9.6619 15.9794,9.6619C14.9532,9.6619 14.1213,10.4938 14.1213,11.52C14.1213,12.5462 14.9532,13.3781 15.9794,13.3781ZM8.5471,14.8645C10.4182,14.8645 11.9957,16.1217 12.481,17.8374L22.04,17.8374C22.5923,17.8374 23.04,18.2851 23.04,18.8374L23.04,19.0671C23.04,19.6194 22.5923,20.0671 22.04,20.0671L12.481,20.0671C11.9957,21.7828 10.4182,23.04 8.5471,23.04C6.676,23.04 5.0985,21.7828 4.6132,20.0671L1,20.0671C0.4477,20.0671 0,19.6194 0,19.0671L0,18.8374C-0,18.2851 0.4477,17.8374 1,17.8374L4.6132,17.8374C5.0985,16.1217 6.676,14.8645 8.5471,14.8645ZM8.5471,20.8103C9.5733,20.8103 10.4052,19.9784 10.4052,18.9523C10.4052,17.9261 9.5733,17.0942 8.5471,17.0942C7.5209,17.0942 6.689,17.9261 6.689,18.9523C6.689,19.9784 7.5209,20.8103 8.5471,20.8103ZM7.0606,0C8.9318,0 10.5092,1.2572 10.9945,2.9729L22.04,2.9729C22.5923,2.9729 23.04,3.4206 23.04,3.9729L23.04,4.2026C23.04,4.7549 22.5923,5.2026 22.04,5.2026L10.9945,5.2026C10.5092,6.9183 8.9318,8.1755 7.0606,8.1755C5.1895,8.1755 3.612,6.9183 3.1268,5.2026L1,5.2026C0.4477,5.2026 0,4.7549 0,4.2026L0,3.9729C-0,3.4206 0.4477,2.9729 1,2.9729L3.1268,2.9729C3.612,1.2572 5.1895,0 7.0606,0ZM7.0606,5.9458C8.0868,5.9458 8.9187,5.1139 8.9187,4.0877C8.9187,3.0616 8.0868,2.2297 7.0606,2.2297C6.0345,2.2297 5.2026,3.0616 5.2026,4.0877C5.2026,5.1139 6.0345,5.9458 7.0606,5.9458Z"
android:strokeWidth=
"1"
android:strokeColor=
"#00000000"
/>
</vector>
app/src/main/res/drawable/ic_new_channel_24dp.xml
0 → 100644
View file @
f4efa770
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"24dp"
android:height=
"24dp"
android:viewportWidth=
"20"
android:viewportHeight=
"20"
>
<path
android:fillColor=
"#FFFFFF"
android:fillType=
"evenOdd"
android:pathData=
"M16.523,11.0833C16.907,11.0833 17.218,11.3942 17.218,11.7782L17.218,16.6582C17.218,17.9513 16.169,19.0002 14.876,19.0002L3.343,19.0002C2.049,19.0002 1,17.9513 1,16.6582L1,5.1263C1,3.8333 2.049,2.7843 3.343,2.7843L8.149,2.7843C8.533,2.7843 8.845,3.0953 8.845,3.4792C8.845,3.8623 8.533,4.1743 8.149,4.1743L3.343,4.1743C2.816,4.1743 2.39,4.6003 2.39,5.1263L2.39,16.6582C2.39,17.1842 2.816,17.6103 3.343,17.6103L14.876,17.6103C15.401,17.6103 15.828,17.1842 15.828,16.6582L15.828,11.7782C15.828,11.3942 16.139,11.0833 16.523,11.0833ZM18.256,2.1318C19.25,3.1248 19.247,4.7428 18.256,5.7337L9.501,14.4877L5.5647,15.6828C5.0363,15.8432 4.4778,15.5449 4.3173,15.0164C4.2598,14.8269 4.2598,14.6246 4.3174,14.4352L5.513,10.5007L14.268,1.7468C15.263,0.7518 16.876,0.7508 17.87,1.7458L18.256,2.1318ZM17.273,4.7508C17.722,4.3028 17.723,3.5638 17.273,3.1147L16.887,2.7288C16.436,2.2768 15.703,2.2768 15.251,2.7298L14.599,3.3808L16.656,5.3678L17.273,4.7508ZM8.764,13.2587L15.673,6.3507L13.616,4.3637L6.742,11.2367L5.86,14.1407L8.764,13.2587Z"
android:strokeWidth=
"0.1"
android:strokeColor=
"#FFFFFF"
/>
</vector>
app/src/main/res/drawable/ic_settings_black_24dp.xml
deleted
100644 → 0
View file @
ab24ba31
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"24dp"
android:height=
"24dp"
android:viewportWidth=
"24.0"
android:viewportHeight=
"24.0"
>
<path
android:fillColor=
"#FF000000"
android:pathData=
"M19.43,12.98c0.04,-0.32 0.07,-0.64 0.07,-0.98s-0.03,-0.66 -0.07,-0.98l2.11,-1.65c0.19,-0.15 0.24,-0.42 0.12,-0.64l-2,-3.46c-0.12,-0.22 -0.39,-0.3 -0.61,-0.22l-2.49,1c-0.52,-0.4 -1.08,-0.73 -1.69,-0.98l-0.38,-2.65C14.46,2.18 14.25,2 14,2h-4c-0.25,0 -0.46,0.18 -0.49,0.42l-0.38,2.65c-0.61,0.25 -1.17,0.59 -1.69,0.98l-2.49,-1c-0.23,-0.09 -0.49,0 -0.61,0.22l-2,3.46c-0.13,0.22 -0.07,0.49 0.12,0.64l2.11,1.65c-0.04,0.32 -0.07,0.65 -0.07,0.98s0.03,0.66 0.07,0.98l-2.11,1.65c-0.19,0.15 -0.24,0.42 -0.12,0.64l2,3.46c0.12,0.22 0.39,0.3 0.61,0.22l2.49,-1c0.52,0.4 1.08,0.73 1.69,0.98l0.38,2.65c0.03,0.24 0.24,0.42 0.49,0.42h4c0.25,0 0.46,-0.18 0.49,-0.42l0.38,-2.65c0.61,-0.25 1.17,-0.59 1.69,-0.98l2.49,1c0.23,0.09 0.49,0 0.61,-0.22l2,-3.46c0.12,-0.22 0.07,-0.49 -0.12,-0.64l-2.11,-1.65zM12,15.5c-1.93,0 -3.5,-1.57 -3.5,-3.5s1.57,-3.5 3.5,-3.5 3.5,1.57 3.5,3.5 -1.57,3.5 -3.5,3.5z"
/>
</vector>
app/src/main/res/drawable/ic_sort.xml
deleted
100644 → 0
View file @
ab24ba31
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"24dp"
android:height=
"24dp"
android:viewportHeight=
"24.0"
android:viewportWidth=
"24.0"
>
<path
android:fillColor=
"#FFFFFFFF"
android:pathData=
"M3,18h6v-2L3,16v2zM3,6v2h18L21,6L3,6zM3,13h12v-2L3,11v2z"
/>
</vector>
app/src/main/res/drawable/ic_unread_20dp.xml
0 → 100644
View file @
f4efa770
<vector
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:width=
"20dp"
android:height=
"20dp"
android:viewportWidth=
"20"
android:viewportHeight=
"20"
>
<path
android:pathData=
"M18.976,9.783C15.808,6.408 12.812,4.75 10,4.75c-2.812,0 -5.808,1.658 -8.976,5.033C4.28,13.166 7.278,14.829 10,14.829c2.722,0 5.72,-1.663 8.976,-5.046z"
android:strokeWidth=
"1.5"
android:fillColor=
"#00000000"
android:fillType=
"evenOdd"
android:strokeColor=
"#9EA2A8"
/>
<path
android:pathData=
"M7.965,11.783a2.75,2.75 0,0 0,3.915 -3.661l-3.915,3.66z"
android:strokeWidth=
"1.5"
android:fillColor=
"#00000000"
android:fillType=
"evenOdd"
android:strokeColor=
"#9EA2A8"
/>
<path
android:pathData=
"M3.025,15.047L16.105,3.14"
android:strokeWidth=
"1.5"
android:fillColor=
"#00000000"
android:fillType=
"evenOdd"
android:strokeColor=
"#9EA2A8"
android:strokeLineCap=
"round"
/>
</vector>
app/src/main/res/layout/activity_add_members.xml
deleted
100644 → 0
View file @
ab24ba31
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
<include
android:id=
"@+id/toolbar_layout"
layout=
"@layout/layout_toolbar"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<androidx.constraintlayout.widget.ConstraintLayout
android:id=
"@+id/layout_container"
android:layout_width=
"0dp"
android:layout_height=
"0dp"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/toolbar_layout"
>
<com.google.android.material.chip.ChipGroup
android:id=
"@+id/members_chips"
style=
"@style/Widget.MaterialComponents.Chip.Entry"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_margin=
"8dp"
android:visibility=
"gone"
app:chipSpacing=
"3dp"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
>
</com.google.android.material.chip.ChipGroup>
<com.wang.avi.AVLoadingIndicatorView
android:id=
"@+id/view_loading"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:visibility=
"gone"
app:indicatorColor=
"@color/colorPrimary"
app:indicatorName=
"BallPulseIndicator"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<EditText
android:id=
"@+id/text_search_member"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:backgroundTint=
"@android:color/transparent"
android:hint=
"@string/msg_search"
android:paddingStart=
"8dp"
android:paddingEnd=
"8dp"
android:paddingBottom=
"8dp"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/members_chips"
/>
<View
android:id=
"@+id/separator_1"
android:layout_width=
"match_parent"
android:layout_height=
"0.2dp"
android:background=
"@color/colorDividerMessageComposer"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/text_search_member"
/>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/recycler_view"
android:layout_width=
"match_parent"
android:layout_height=
"0dp"
android:scrollbars=
"vertical"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/separator_1"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/layout/activity_main.xml
View file @
f4efa770
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:id=
"@+id/drawer_layout"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:context=
".main.ui.MainActivity"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
>
<include
android:id=
"@+id/layout_app_bar"
layout=
"@layout/app_bar"
/>
<FrameLayout
android:id=
"@+id/fragment_container"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
/>
</LinearLayout>
<FrameLayout
android:id=
"@+id/navigation_container"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:layout_gravity=
"start"
>
<com.google.android.material.navigation.NavigationView
android:id=
"@+id/view_navigation"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
app:headerLayout=
"@layout/nav_header"
/>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/accounts_list"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginTop=
"@dimen/nav_header_height"
android:alpha=
"0"
android:background=
"@color/colorWhite"
android:elevation=
"20dp"
android:visibility=
"gone"
/>
</FrameLayout>
</androidx.drawerlayout.widget.DrawerLayout>
\ No newline at end of file
tools:context=
".main.ui.MainActivity"
/>
\ No newline at end of file
app/src/main/res/layout/app_bar.xml
View file @
f4efa770
...
...
@@ -3,13 +3,13 @@
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@color/colorPrimary"
>
android:background=
"@color/colorPrimary"
android:theme=
"@style/Theme.AppCompat.Light.NoActionBar"
>
<androidx.appcompat.widget.Toolbar
android:id=
"@+id/toolbar"
android:layout_width=
"match_parent"
android:layout_height=
"?attr/actionBarSize"
app:layout_scrollFlags=
"scroll|enterAlways"
app:popupTheme=
"@style/ThemeOverlay.AppCompat.Light"
app:theme=
"@style/ThemeOverlay.AppCompat.Dark.ActionBar"
/>
...
...
app/src/main/res/layout/app_bar_chat_rooms.xml
0 → 100644
View file @
f4efa770
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.appbar.AppBarLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@color/colorPrimary"
android:theme=
"@style/Theme.AppCompat.Light.NoActionBar"
>
<androidx.appcompat.widget.Toolbar
android:id=
"@+id/toolbar"
android:layout_width=
"match_parent"
android:layout_height=
"?attr/actionBarSize"
app:navigationIcon=
"@drawable/ic_navigation_24dp"
app:popupTheme=
"@style/ThemeOverlay.AppCompat.Light"
app:theme=
"@style/ThemeOverlay.AppCompat.Dark.ActionBar"
>
<TextView
android:id=
"@+id/text_server_name"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:drawableEnd=
"@drawable/ic_arrow_expand_20dp"
android:drawablePadding=
"10dp"
android:fontFamily=
"sans-serif-medium"
android:maxLines=
"1"
android:textColor=
"#FFFFFF"
android:textSize=
"20sp"
android:textStyle=
"normal"
tools:text=
"Server Name"
/>
</androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.AppBarLayout>
\ No newline at end of file
app/src/main/res/layout/bottom_sheet_fragment_servers.xml
0 → 100644
View file @
f4efa770
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
tools:context=
".servers.ui.ServersBottomSheetFragment"
>
<TextView
android:id=
"@+id/text_server"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"16dp"
android:layout_marginTop=
"16dp"
android:layout_marginEnd=
"16dp"
android:text=
"@string/msg_server"
android:textColor=
"#9EA2A8"
android:textSize=
"17sp"
android:textStyle=
"normal"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<View
android:id=
"@+id/view_divider"
android:layout_width=
"match_parent"
android:layout_height=
"1dp"
android:layout_marginTop=
"16dp"
android:background=
"#1F000000"
app:layout_constraintTop_toBottomOf=
"@+id/text_server"
/>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/recycler_view"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginTop=
"16dp"
app:layout_constraintTop_toBottomOf=
"@+id/view_divider"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/layout/bottom_sheet_fragment_sort_by.xml
0 → 100644
View file @
f4efa770
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
tools:context=
".sortingandgrouping.ui.SortingAndGroupingBottomSheetFragment"
>
<TextView
android:id=
"@+id/text_sort_by"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"16dp"
android:layout_marginTop=
"16dp"
android:layout_marginEnd=
"16dp"
android:text=
"@string/msg_sort_by"
android:textColor=
"#9EA2A8"
android:textSize=
"17sp"
android:textStyle=
"normal"
/>
<View
android:layout_width=
"match_parent"
android:layout_height=
"1dp"
android:layout_marginTop=
"16dp"
android:background=
"#1F000000"
/>
<TextView
android:id=
"@+id/text_name"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:drawableStart=
"@drawable/ic_filter_20dp"
android:drawablePadding=
"16dp"
android:paddingStart=
"16dp"
android:paddingTop=
"16dp"
android:paddingEnd=
"16dp"
android:paddingBottom=
"16dp"
android:text=
"@string/msg_sort_by_name"
android:textColor=
"#2F343D"
android:textSize=
"16sp"
android:textStyle=
"normal"
/>
<TextView
android:id=
"@+id/text_activity"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:drawableStart=
"@drawable/ic_activity_20dp"
android:drawablePadding=
"16dp"
android:paddingStart=
"16dp"
android:paddingTop=
"16dp"
android:paddingEnd=
"16dp"
android:paddingBottom=
"16dp"
android:text=
"@string/msg_sort_by_activity"
android:textColor=
"#2F343D"
android:textSize=
"16sp"
android:textStyle=
"normal"
/>
<View
android:id=
"@+id/view_divider"
android:layout_width=
"match_parent"
android:layout_height=
"1dp"
android:layout_marginStart=
"16dp"
android:layout_marginEnd=
"16dp"
android:background=
"#1F000000"
/>
<TextView
android:id=
"@+id/text_unread_on_top"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:drawableStart=
"@drawable/ic_unread_20dp"
android:drawablePadding=
"16dp"
android:paddingStart=
"16dp"
android:paddingTop=
"16dp"
android:paddingEnd=
"16dp"
android:paddingBottom=
"16dp"
android:text=
"@string/msg_group_by_unread_on_top"
android:textColor=
"#2F343D"
android:textSize=
"16sp"
android:textStyle=
"normal"
/>
<TextView
android:id=
"@+id/text_group_by_type"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:drawableStart=
"@drawable/ic_group_by_type_20dp"
android:drawablePadding=
"16dp"
android:paddingStart=
"16dp"
android:paddingTop=
"16dp"
android:paddingEnd=
"16dp"
android:paddingBottom=
"16dp"
android:text=
"@string/msg_group_by_type"
android:textColor=
"#2F343D"
android:textSize=
"16sp"
android:textStyle=
"normal"
/>
<TextView
android:id=
"@+id/text_group_by_favorites"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:drawableStart=
"@drawable/ic_favorites_20dp"
android:drawablePadding=
"16dp"
android:paddingStart=
"16dp"
android:paddingTop=
"16dp"
android:paddingEnd=
"16dp"
android:paddingBottom=
"16dp"
android:text=
"@string/msg_group_by_favorites"
android:textColor=
"#2F343D"
android:textSize=
"16sp"
android:textStyle=
"normal"
/>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/
item_account_delete
.xml
→
app/src/main/res/layout/
dialog_delete_account
.xml
View file @
f4efa770
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:padding=
"@dimen/screen_edge_left_and_right_margins"
>
...
...
app/src/main/res/layout/
chatroom_sort_dialog
.xml
→
app/src/main/res/layout/
dialog_status
.xml
View file @
f4efa770
...
...
@@ -6,35 +6,40 @@
android:padding=
"24dp"
>
<RadioGroup
android:id=
"@+id/radio_group_s
ort
"
android:id=
"@+id/radio_group_s
tatus
"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
>
<RadioButton
android:id=
"@+id/radio_
sort_alphabetical
"
android:id=
"@+id/radio_
button_online
"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:padding=
"8dp"
android:text=
"@string/
dialog_sort_by_alphabet
"
android:text=
"@string/
msg_online
"
android:textSize=
"18sp"
/>
<RadioButton
android:id=
"@+id/radio_
sort_activit
y"
android:id=
"@+id/radio_
button_awa
y"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:padding=
"8dp"
android:text=
"@string/
dialog_sort_by_activit
y"
android:text=
"@string/
msg_awa
y"
android:textSize=
"18sp"
/>
</RadioGroup>
<CheckBox
android:id=
"@+id/checkbox_group_by_type
"
<RadioButton
android:id=
"@+id/radio_button_busy
"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"6dp"
android:padding=
"8dp"
android:text=
"@string/dialog_group_by_type
"
android:text=
"@string/msg_busy
"
android:textSize=
"18sp"
/>
<!--TODO Add checkbox for "Group favourites after sdk support"-->
<RadioButton
android:id=
"@+id/radio_button_invisible"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:padding=
"8dp"
android:text=
"@string/msg_invisible"
android:textSize=
"18sp"
/>
</RadioGroup>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/fragment_about.xml
deleted
100644 → 0
View file @
ab24ba31
<ScrollView
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
tools:context=
"chat.rocket.android.about.ui.AboutFragment"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:paddingTop=
"50dp"
android:layout_gravity=
"center"
>
<ImageView
android:id=
"@+id/image_app_name"
android:layout_width=
"wrap_content"
android:layout_height=
"60dp"
android:src=
"@drawable/ic_app_name"
app:layout_constraintTop_toTopOf=
"parent"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
/>
<ImageView
android:layout_width=
"160dp"
android:layout_height=
"160dp"
android:adjustViewBounds=
"true"
android:scaleX=
"1.5"
android:scaleY=
"1.5"
android:src=
"@drawable/ic_launcher_foreground"
app:layout_constraintBottom_toTopOf=
"@id/image_app_name"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<TextView
android:id=
"@+id/text_version_name"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
tools:text=
"Version alpha2.0.1"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/image_app_name"
android:layout_marginTop=
"16dp"
android:textColor=
"@color/colorSecondaryText"
android:textAppearance=
"@style/TextAppearance.AppCompat.Medium"
/>
<TextView
android:id=
"@+id/text_build_number"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
tools:text=
"Build # 2000"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/text_version_name"
android:layout_marginTop=
"8dp"
android:textColor=
"@color/colorSecondaryText"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
\ No newline at end of file
app/src/main/res/layout/fragment_chat_rooms.xml
View file @
f4efa770
<?xml version="1.0" encoding="utf-8"?>
<
Relative
Layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<
androidx.constraintlayout.widget.Constraint
Layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:context=
".chatrooms.ui.ChatRoomsFragment"
>
<include
android:id=
"@+id/layout_app_bar_chat_room"
layout=
"@layout/app_bar_chat_rooms"
app:layout_constraintTop_toTopOf=
"parent"
/>
<TextView
android:id=
"@+id/text_sort_by"
android:layout_width=
"match_parent"
android:layout_height=
"42dp"
android:background=
"#54585E"
android:drawableEnd=
"@drawable/ic_group_by_type_20dp"
android:fontFamily=
"sans-serif-medium"
android:gravity=
"center_vertical"
android:paddingStart=
"@dimen/screen_edge_left_and_right_margins"
android:paddingEnd=
"@dimen/screen_edge_left_and_right_margins"
android:text=
"@string/msg_sort_by"
android:textColor=
"#CBCED1"
android:textSize=
"14sp"
android:textStyle=
"normal"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/layout_app_bar_chat_room"
/>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/recycler_view"
android:layout_below=
"@+id/text_connection_status"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
/>
android:layout_height=
"0dp"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/text_sort_by"
/>
<com.wang.avi.AVLoadingIndicatorView
android:id=
"@+id/view_loading"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_centerInParent=
"true"
android:visibility=
"gone"
app:indicatorColor=
"@color/colorBlack"
app:indicatorName=
"BallPulseIndicator"
/>
<TextView
android:id=
"@+id/text_no_data_to_display"
style=
"@style/TextAppearance.AppCompat.Subhead"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_centerInParent=
"true"
android:text=
"@string/msg_no_data_to_display"
android:visibility=
"gone"
app:indicatorName=
"BallPulseIndicator"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/text_sort_by"
tools:visibility=
"visible"
/>
<TextView
android:id=
"@+id/text_connection_status"
android:layout_width=
"match_parent"
android:layout_height=
"32dp"
android:alpha=
"0"
android:background=
"@color/colorPrimary"
android:elevation=
"4dp"
android:gravity=
"center"
android:textAppearance=
"@style/TextAppearance.AppCompat.Body2"
android:textColor=
"@color/colorWhite"
android:visibility=
"gone"
tools:alpha=
"1"
tools:text=
"connected"
tools:visibility=
"visible"
/>
<TextView
android:id=
"@+id/text_no_result_found"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_centerHorizontal=
"true"
android:layout_marginTop=
"56dp"
android:text=
"@string/msg_no_search_found"
android:textSize=
"20sp"
android:visibility=
"gone"
tools:visibility=
"visible"
/>
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/fragment_create_channel.xml
View file @
f4efa770
...
...
@@ -4,10 +4,13 @@
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_margin=
"16dp"
android:focusableInTouchMode=
"true"
tools:context=
"createchannel.ui.CreateChannelFragment"
>
<include
android:id=
"@+id/layout_app_bar"
layout=
"@layout/app_bar"
app:layout_constraintTop_toTopOf=
"parent"
/>
<com.wang.avi.AVLoadingIndicatorView
android:id=
"@+id/view_loading"
android:layout_width=
"wrap_content"
...
...
@@ -18,23 +21,26 @@
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_to
TopOf=
"parent
"
app:layout_constraintTop_to
BottomOf=
"@+id/layout_app_bar
"
tools:visibility=
"visible"
/>
<TextView
android:id=
"@+id/text_channel_type"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"16dp"
android:layout_marginTop=
"16dp"
android:text=
"@string/msg_public_channel"
android:textColor=
"@color/colorPrimaryText"
android:textSize=
"16sp"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_to
TopOf=
"parent
"
/>
app:layout_constraintTop_to
BottomOf=
"@+id/layout_app_bar
"
/>
<TextView
android:id=
"@+id/text_channel_type_description"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"16dp"
android:text=
"@string/msg_public_channel_description"
android:textColor=
"@color/colorSecondaryText"
android:textSize=
"12sp"
...
...
@@ -45,6 +51,7 @@
android:id=
"@+id/switch_channel_type"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginEnd=
"16dp"
app:layout_constraintBottom_toBottomOf=
"@+id/text_channel_type_description"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toTopOf=
"@+id/text_channel_type"
/>
...
...
@@ -53,6 +60,8 @@
android:id=
"@+id/text_read_only"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"16dp"
android:layout_marginTop=
"16dp"
android:text=
"@string/msg_ready_only_channel"
android:textColor=
"@color/colorPrimaryText"
...
...
@@ -64,6 +73,8 @@
android:id=
"@+id/text_read_only_description"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"16dp"
android:text=
"@string/msg_ready_only_channel_description"
android:textColor=
"@color/colorSecondaryText"
android:textSize=
"12sp"
...
...
@@ -74,6 +85,8 @@
android:id=
"@+id/switch_read_only"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginEnd=
"16dp"
app:layout_constraintBottom_toBottomOf=
"@+id/text_read_only_description"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toTopOf=
"@+id/text_read_only"
/>
...
...
@@ -81,7 +94,9 @@
<ImageView
android:id=
"@+id/image_channel_icon"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"16dp"
android:layout_marginTop=
"22dp"
android:src=
"@drawable/ic_hashtag_black_12dp"
app:layout_constraintStart_toStartOf=
"parent"
...
...
@@ -91,6 +106,8 @@
android:id=
"@+id/text_channel_name"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"16dp"
android:layout_marginEnd=
"16dp"
android:backgroundTint=
"@color/colorDim"
android:hint=
"@string/msg_channel_name"
android:inputType=
"text"
...
...
@@ -107,6 +124,7 @@
android:id=
"@+id/image_invite_member"
android:layout_width=
"14dp"
android:layout_height=
"14dp"
android:layout_marginStart=
"16dp"
android:layout_marginTop=
"16dp"
android:src=
"@drawable/ic_at_black_20dp"
app:layout_constraintStart_toStartOf=
"parent"
...
...
@@ -116,6 +134,8 @@
android:id=
"@+id/text_invite_members"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"16dp"
android:layout_marginEnd=
"16dp"
android:backgroundTint=
"@color/colorDim"
android:hint=
"@string/msg_invite_members"
android:inputType=
"text"
...
...
app/src/main/res/layout/fragment_profile.xml
View file @
f4efa770
...
...
@@ -8,9 +8,15 @@
android:focusableInTouchMode=
"true"
tools:context=
".profile.ui.ProfileFragment"
>
<include
android:id=
"@+id/layout_app_bar"
layout=
"@layout/app_bar"
app:layout_constraintTop_toTopOf=
"parent"
/>
<ScrollView
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
>
android:layout_height=
"wrap_content"
android:layout_below=
"@+id/layout_app_bar"
>
<LinearLayout
android:id=
"@+id/profile_container"
...
...
@@ -29,12 +35,24 @@
android:layout_height=
"wrap_content"
android:layout_marginTop=
"32dp"
/>
<TextView
android:id=
"@+id/text_status"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"32dp"
android:paddingTop=
"10dp"
android:paddingBottom=
"10dp"
android:text=
"@string/status"
android:textColor=
"#DE000000"
android:textSize=
"18sp"
android:textStyle=
"normal"
/>
<EditText
android:id=
"@+id/text_name"
style=
"@style/Profile.EditText"
android:layout_width=
"match_parent"
android:layout_height=
"48dp"
android:layout_marginTop=
"
32
dp"
android:layout_marginTop=
"
16
dp"
android:drawableStart=
"@drawable/ic_person_black_20dp"
android:hint=
"@string/msg_name"
android:inputType=
"textCapWords"
/>
...
...
app/src/main/res/layout/fragment_settings.xml
View file @
f4efa770
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:context=
".settings.ui.SettingsFragment"
>
<ListView
android:id=
"@+id/settings_list"
<include
android:id=
"@+id/layout_app_bar"
layout=
"@layout/app_bar"
app:layout_constraintTop_toTopOf=
"parent"
/>
<ScrollView
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:entries=
"@array/settings_actions"
/>
</RelativeLayout>
android:layout_height=
"wrap_content"
android:layout_below=
"@+id/layout_app_bar"
app:layout_constraintTop_toBottomOf=
"@+id/layout_app_bar"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"20dp"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id=
"@+id/profile_container"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@color/colorLightGrey"
android:foreground=
"?selectableItemBackground"
android:paddingStart=
"16dp"
android:paddingTop=
"5dp"
android:paddingEnd=
"16dp"
android:paddingBottom=
"5dp"
app:layout_constraintTop_toTopOf=
"parent"
>
<ImageView
android:id=
"@+id/image_avatar"
android:layout_width=
"48dp"
android:layout_height=
"48dp"
android:background=
"@drawable/bg_border_user_details_avatar"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
tools:srcCompat=
"@tools:sample/avatars[6]"
/>
<TextView
android:id=
"@+id/text_display_name"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"12dp"
android:fontFamily=
"sans-serif-medium"
android:textColor=
"#DE000000"
android:textSize=
"14sp"
android:textStyle=
"normal"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toEndOf=
"@+id/image_avatar"
app:layout_constraintTop_toTopOf=
"@+id/image_avatar"
tools:text=
"user.name"
/>
<TextView
android:id=
"@+id/text_status"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"12dp"
android:fontFamily=
"sans-serif"
android:textColor=
"#99000000"
android:textSize=
"14sp"
android:textStyle=
"normal"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toEndOf=
"@+id/image_avatar"
app:layout_constraintTop_toBottomOf=
"@+id/text_display_name"
tools:text=
"visible"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id=
"@+id/text_contact_us"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"20dp"
android:background=
"@color/colorLightGrey"
android:fontFamily=
"sans-serif-medium"
android:foreground=
"?selectableItemBackground"
android:paddingStart=
"16dp"
android:paddingTop=
"8dp"
android:paddingEnd=
"16dp"
android:paddingBottom=
"8dp"
android:text=
"@string/msg_contact_us"
android:textColor=
"#DE000000"
android:textSize=
"16sp"
android:textStyle=
"normal"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/profile_container"
/>
<TextView
android:id=
"@+id/text_language"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:background=
"@color/colorLightGrey"
android:fontFamily=
"sans-serif-medium"
android:foreground=
"?selectableItemBackground"
android:paddingStart=
"16dp"
android:paddingTop=
"8dp"
android:paddingEnd=
"16dp"
android:paddingBottom=
"8dp"
android:text=
"@string/msg_language"
android:textColor=
"#DE000000"
android:textSize=
"16sp"
android:textStyle=
"normal"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/text_contact_us"
/>
<TextView
android:id=
"@+id/text_review_this_app"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:background=
"@color/colorLightGrey"
android:fontFamily=
"sans-serif-medium"
android:foreground=
"?selectableItemBackground"
android:paddingStart=
"16dp"
android:paddingTop=
"8dp"
android:paddingEnd=
"16dp"
android:paddingBottom=
"8dp"
android:text=
"@string/msg_review_this_app"
android:textColor=
"#DE000000"
android:textSize=
"16sp"
android:textStyle=
"normal"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/text_language"
/>
<TextView
android:id=
"@+id/text_share_this_app"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:background=
"@color/colorLightGrey"
android:fontFamily=
"sans-serif-medium"
android:foreground=
"?selectableItemBackground"
android:paddingStart=
"16dp"
android:paddingTop=
"8dp"
android:paddingEnd=
"16dp"
android:paddingBottom=
"8dp"
android:text=
"@string/msg_share_this_app"
android:textColor=
"#DE000000"
android:textSize=
"16sp"
android:textStyle=
"normal"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/text_review_this_app"
/>
<TextView
android:id=
"@+id/text_administration"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"20dp"
android:background=
"@color/colorLightGrey"
android:fontFamily=
"sans-serif-medium"
android:foreground=
"?selectableItemBackground"
android:paddingStart=
"16dp"
android:paddingTop=
"8dp"
android:paddingEnd=
"16dp"
android:paddingBottom=
"8dp"
android:text=
"@string/msg_administration"
android:textColor=
"#DE000000"
android:textSize=
"16sp"
android:textStyle=
"normal"
android:visibility=
"gone"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/text_share_this_app"
tools:visibility=
"visible"
/>
<TextView
android:id=
"@+id/text_license"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"20dp"
android:background=
"@color/colorLightGrey"
android:fontFamily=
"sans-serif-medium"
android:foreground=
"?selectableItemBackground"
android:paddingStart=
"16dp"
android:paddingTop=
"8dp"
android:paddingEnd=
"16dp"
android:paddingBottom=
"8dp"
android:text=
"@string/msg_licence"
android:textColor=
"#DE000000"
android:textSize=
"16sp"
android:textStyle=
"normal"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/text_administration"
/>
<TextView
android:id=
"@+id/text_app_version"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:background=
"@color/colorLightGrey"
android:fontFamily=
"sans-serif-medium"
android:paddingStart=
"16dp"
android:paddingTop=
"8dp"
android:paddingEnd=
"16dp"
android:paddingBottom=
"8dp"
android:text=
"@string/msg_app_version"
android:textColor=
"#DE000000"
android:textSize=
"16sp"
android:textStyle=
"normal"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/text_license"
/>
<TextView
android:id=
"@+id/text_server_version"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:background=
"@color/colorLightGrey"
android:fontFamily=
"sans-serif-medium"
android:paddingStart=
"16dp"
android:paddingTop=
"8dp"
android:paddingEnd=
"16dp"
android:paddingBottom=
"8dp"
android:text=
"@string/msg_server_version"
android:textColor=
"#DE000000"
android:textSize=
"16sp"
android:textStyle=
"normal"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/text_app_version"
/>
<androidx.constraintlayout.widget.ConstraintLayout
android:id=
"@+id/send_analytics_container"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"20dp"
android:background=
"@color/colorLightGrey"
android:paddingStart=
"16dp"
android:paddingTop=
"5dp"
android:paddingEnd=
"16dp"
android:paddingBottom=
"5dp"
app:layout_constraintTop_toBottomOf=
"@+id/text_server_version"
>
<TextView
android:id=
"@+id/text_send_crash_report"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:fontFamily=
"sans-serif-medium"
android:text=
"@string/msg_send_analytics"
android:textColor=
"#DE000000"
android:textSize=
"16sp"
android:textStyle=
"normal"
app:layout_constraintEnd_toStartOf=
"@id/switch_analytics_tracking"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<Switch
android:id=
"@+id/switch_crash_report"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:checked=
"false"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toTopOf=
"@+id/text_send_crash_report"
/>
<TextView
android:id=
"@+id/text_send_crash_report_description"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:fontFamily=
"sans-serif"
android:text=
"@string/msg_send_analytics_tracking"
android:textColor=
"#99000000"
android:textSize=
"14sp"
android:textStyle=
"normal"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/text_send_crash_report"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id=
"@+id/text_logout"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"16dp"
android:fontFamily=
"sans-serif-medium"
android:foreground=
"?selectableItemBackground"
android:paddingStart=
"16dp"
android:paddingTop=
"8dp"
android:paddingEnd=
"16dp"
android:paddingBottom=
"8dp"
android:text=
"@string/msg_logout_from_rocket_chat"
android:textColor=
"@color/colorRed"
android:textSize=
"16sp"
android:textStyle=
"normal"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/send_analytics_container"
/>
<TextView
android:id=
"@+id/text_delete_account"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:fontFamily=
"sans-serif-medium"
android:foreground=
"?selectableItemBackground"
android:paddingStart=
"16dp"
android:paddingTop=
"8dp"
android:paddingEnd=
"16dp"
android:paddingBottom=
"8dp"
android:text=
"@string/msg_delete_account"
android:textColor=
"@color/colorRed"
android:textSize=
"16sp"
android:textStyle=
"normal"
android:visibility=
"gone"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/text_logout"
tools:visibility=
"visible"
/>
<com.wang.avi.AVLoadingIndicatorView
android:id=
"@+id/view_loading"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:visibility=
"gone"
app:indicatorColor=
"@color/colorBlack"
app:indicatorName=
"BallPulseIndicator"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
tools:visibility=
"visible"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/item_add_
account
.xml
→
app/src/main/res/layout/item_add_
new_server
.xml
View file @
f4efa770
<?xml version="1.0" encoding="utf-8"?>
<
androidx.constraintlayout.widget.Constraint
Layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<
Linear
Layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"?selectableItemBackground"
android:orientation=
"vertical"
android:padding=
"16dp"
>
<ImageView
android:id=
"@+id/server_logo"
android:layout_width=
"40dp"
android:layout_height=
"40dp"
android:src=
"@drawable/ic_add_24dp"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<TextView
android:layout_width=
"0dp"
android:id=
"@+id/text_add_new_server"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"8dp"
android:text=
"@string/action_add_account"
android:textAppearance=
"@style/TextAppearance.AppCompat.Body2"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toEndOf=
"@id/server_logo"
app:layout_constraintTop_toTopOf=
"parent"
/>
android:drawableStart=
"@drawable/ic_add_new_server_48dp"
android:drawablePadding=
"12dp"
android:fontFamily=
"sans-serif"
android:gravity=
"center"
android:text=
"@string/msg_add_new_server"
android:textColor=
"#9ea2a8"
android:textSize=
"16sp"
android:textStyle=
"bold"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/recycler_view"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/item_change_status.xml
deleted
100644 → 0
View file @
ab24ba31
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:divider=
"?android:dividerHorizontal"
android:orientation=
"vertical"
android:showDividers=
"end"
>
<TextView
android:id=
"@+id/text_online"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:paddingBottom=
"8dp"
android:paddingEnd=
"16dp"
android:paddingStart=
"16dp"
android:paddingTop=
"8dp"
android:drawablePadding=
"10dp"
android:drawableStart=
"@drawable/ic_status_online_12dp"
android:text=
"@string/action_online"
android:background=
"?selectableItemBackground"
/>
<TextView
android:id=
"@+id/text_away"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:paddingBottom=
"8dp"
android:paddingEnd=
"16dp"
android:paddingStart=
"16dp"
android:paddingTop=
"8dp"
android:drawablePadding=
"10dp"
android:drawableStart=
"@drawable/ic_status_away_12dp"
android:text=
"@string/action_away"
android:background=
"?selectableItemBackground"
/>
<TextView
android:id=
"@+id/text_busy"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:paddingBottom=
"8dp"
android:paddingEnd=
"16dp"
android:paddingStart=
"16dp"
android:paddingTop=
"8dp"
android:drawablePadding=
"10dp"
android:drawableStart=
"@drawable/ic_status_busy_12dp"
android:text=
"@string/action_busy"
android:background=
"?selectableItemBackground"
/>
<TextView
android:id=
"@+id/text_invisible"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:paddingBottom=
"8dp"
android:paddingEnd=
"16dp"
android:paddingStart=
"16dp"
android:paddingTop=
"8dp"
android:drawablePadding=
"10dp"
android:drawableStart=
"@drawable/ic_status_invisible_12dp"
android:text=
"@string/action_invisible"
android:background=
"?selectableItemBackground"
/>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/item_chatroom_header.xml
View file @
f4efa770
...
...
@@ -10,8 +10,7 @@
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:padding=
"16dp"
android:paddingEnd=
"@dimen/screen_edge_left_and_right_padding"
android:paddingStart=
"@dimen/screen_edge_left_and_right_padding"
android:
text=
"@string/chatroom_header
"
/>
android:
paddingEnd=
"@dimen/screen_edge_left_and_right_padding
"
/>
</LinearLayout>
\ No newline at end of file
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/item_message_attachment_old.xml
deleted
100644 → 0
View file @
ab24ba31
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:id=
"@+id/attachment_container"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:animateLayoutChanges=
"true"
android:background=
"?android:attr/selectableItemBackground"
android:clickable=
"true"
android:focusable=
"true"
android:paddingStart=
"@dimen/screen_edge_left_and_right_padding"
android:paddingTop=
"@dimen/message_item_top_and_bottom_padding"
android:paddingEnd=
"@dimen/screen_edge_left_and_right_padding"
android:paddingBottom=
"@dimen/message_item_top_and_bottom_padding"
>
<View
android:id=
"@+id/quote_bar"
android:layout_width=
"4dp"
android:layout_height=
"0dp"
android:layout_marginStart=
"56dp"
android:background=
"@drawable/quote_vertical_gray_bar"
app:layout_constraintBottom_toTopOf=
"@+id/text_view_more"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
<TextView
android:id=
"@+id/text_sender"
style=
"@style/Sender.Name.TextView"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"8dp"
android:textColor=
"@color/colorPrimary"
app:layout_constraintStart_toEndOf=
"@+id/quote_bar"
app:layout_constraintTop_toTopOf=
"parent"
tools:text=
"Ronald Perkins"
/>
<TextView
android:id=
"@+id/text_message_time"
style=
"@style/ChatList.Timestamp.TextView"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"10dp"
app:layout_constraintBottom_toBottomOf=
"@+id/text_sender"
app:layout_constraintStart_toEndOf=
"@+id/text_sender"
app:layout_constraintTop_toTopOf=
"@+id/text_sender"
tools:text=
"11:45 PM"
/>
<TextView
android:id=
"@+id/text_content"
style=
"@style/Message.Quote.TextView"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
app:layout_constraintBottom_toTopOf=
"@id/text_view_more"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"@+id/text_sender"
app:layout_constraintTop_toBottomOf=
"@+id/text_sender"
tools:text=
"This is a multiline chat message from Bertie that will take more than just one line of text. I have sure that everything is amazing!"
/>
<TextView
android:id=
"@+id/text_view_more"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:gravity=
"end"
android:textColor=
"@color/darkGray"
android:textSize=
"14sp"
app:layout_constraintEnd_toEndOf=
"@+id/text_content"
app:layout_constraintStart_toStartOf=
"@+id/quote_bar"
app:layout_constraintTop_toBottomOf=
"@+id/text_content"
tools:text=
"Visualizar mais"
/>
<include
layout=
"@layout/layout_reactions"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
app:layout_constraintStart_toStartOf=
"@+id/quote_bar"
app:layout_constraintTop_toBottomOf=
"@+id/text_view_more"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
app/src/main/res/layout/item_
account
.xml
→
app/src/main/res/layout/item_
server
.xml
View file @
f4efa770
...
...
@@ -4,43 +4,58 @@
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:
paddingEnd=
"16dp
"
android:
background=
"?selectableItemBackground
"
android:paddingStart=
"16dp"
android:paddingTop=
"16dp"
android:
background=
"?selectableItemBackground
"
>
android:
paddingEnd=
"16dp
"
>
<com.facebook.drawee.view.SimpleDraweeView
android:id=
"@+id/server_logo"
android:layout_width=
"40dp"
android:layout_height=
"40dp"
app:actualImageScaleType=
"centerInside"
app:layout_constraintBottom_toBottomOf=
"parent"
<ImageView
android:id=
"@+id/image_server"
android:layout_width=
"48dp"
android:layout_height=
"48dp"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
app:layout_constraintTop_toTopOf=
"parent"
tools:src=
"@tools:sample/avatars"
/>
<TextView
android:id=
"@+id/text_server_
url
"
android:layout_width=
"
0dp
"
android:id=
"@+id/text_server_
name
"
android:layout_width=
"
wrap_content
"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"8dp"
android:ellipsize=
"end"
android:layout_marginStart=
"12dp"
android:layout_marginEnd=
"12dp"
android:fontFamily=
"sans-serif-medium"
android:maxLines=
"1"
android:textStyle=
"bold"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toEndOf=
"@id/server_logo"
app:layout_constraintTop_toTopOf=
"@id/server_logo"
tools:text=
"https://open.rocket.chat"
/>
android:textColor=
"#DE000000"
android:textSize=
"16sp"
android:textStyle=
"normal"
app:layout_constraintStart_toEndOf=
"@+id/image_server"
app:layout_constraintTop_toTopOf=
"@+id/image_server"
tools:text=
"Hyper Ledger"
/>
<TextView
android:id=
"@+id/text_
username
"
android:layout_width=
"
0dp
"
android:id=
"@+id/text_
server_url
"
android:layout_width=
"
wrap_content
"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"8dp"
android:ellipsize=
"end"
android:layout_marginStart=
"12dp"
android:layout_marginEnd=
"12dp"
android:fontFamily=
"sans-serif"
android:maxLines=
"1"
app:layout_constraintBottom_toBottomOf=
"@id/server_logo"
android:textColor=
"#99000000"
android:textSize=
"14sp"
android:textStyle=
"normal"
app:layout_constraintStart_toEndOf=
"@+id/image_server"
app:layout_constraintTop_toBottomOf=
"@+id/text_server_name"
tools:text=
"chat.hyperledger.org"
/>
<ImageView
android:id=
"@+id/image_check"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:src=
"@drawable/ic_check"
android:visibility=
"invisible"
app:layout_constraintBottom_toBottomOf=
"@+id/image_server"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraint
Start_toEndOf=
"@id/server_logo
"
tools:
text=
"Lucio Maciel
"
/>
app:layout_constraint
Top_toTopOf=
"@+id/image_server
"
tools:
visibility=
"visible
"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/layout/nav_header.xml
deleted
100644 → 0
View file @
ab24ba31
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/nav_header_height"
>
<com.facebook.drawee.view.SimpleDraweeView
android:id=
"@+id/server_logo"
android:layout_width=
"0dp"
android:layout_height=
"0dp"
android:foreground=
"@drawable/black_gradient"
app:actualImageScaleType=
"centerCrop"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
tools:src=
"@tools:sample/backgrounds/scenic"
/>
<com.facebook.drawee.view.SimpleDraweeView
android:id=
"@+id/image_avatar"
android:layout_width=
"60dp"
android:layout_height=
"60dp"
android:background=
"@drawable/bg_empty_user_avatar"
android:layout_marginStart=
"16dp"
android:layout_marginTop=
"16dp"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
app:roundedCornerRadius=
"3dp"
tools:src=
"@tools:sample/avatars"
/>
<androidx.constraintlayout.widget.ConstraintLayout
android:id=
"@+id/account_container"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"16dp"
android:background=
"?selectableItemBackground"
android:elevation=
"2dp"
android:paddingStart=
"12dp"
android:paddingTop=
"4dp"
android:paddingEnd=
"12dp"
android:paddingBottom=
"4dp"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/image_avatar"
>
<ImageView
android:id=
"@+id/image_user_status"
android:layout_width=
"12dp"
android:layout_height=
"12dp"
app:layout_constraintBottom_toTopOf=
"@+id/text_user_name"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintEnd_toStartOf=
"@+id/text_user_name"
app:layout_constraintTop_toTopOf=
"parent"
/>
<TextView
android:id=
"@+id/text_user_name"
style=
"@style/Sender.Name.TextView"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"10dp"
android:layout_marginEnd=
"10dp"
android:textColor=
"@color/colorWhite"
app:layout_constraintBottom_toBottomOf=
"@+id/image_user_status"
app:layout_constraintEnd_toStartOf=
"@+id/image_account_expand"
app:layout_constraintStart_toEndOf=
"@+id/image_user_status"
app:layout_constraintTop_toTopOf=
"@+id/image_user_status"
tools:text=
"Lucio Maciel"
/>
<TextView
android:id=
"@+id/text_server_url"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginEnd=
"10dp"
android:ellipsize=
"end"
android:maxLines=
"1"
android:textAppearance=
"@style/TextAppearance.AppCompat.Small"
android:textColor=
"@color/colorWhite"
app:layout_constraintEnd_toStartOf=
"@+id/image_account_expand"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/text_user_name"
tools:text=
"https://open.rocket.chat"
/>
<ImageView
android:id=
"@+id/image_account_expand"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:src=
"@drawable/ic_expand_more_black_24dp"
android:tint=
"@color/colorWhite"
app:layout_constraintBottom_toBottomOf=
"@+id/text_server_url"
app:layout_constraintEnd_toEndOf=
"parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/menu/chatrooms.xml
View file @
f4efa770
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
tools:ignore=
"AppCompatResource"
>
xmlns:app=
"http://schemas.android.com/apk/res-auto"
>
<item
android:id=
"@+id/action_new_channel"
android:icon=
"@drawable/ic_new_channel_24dp"
android:title=
"@string/action_new_channel"
app:showAsAction=
"ifRoom"
/>
<item
android:id=
"@+id/action_search"
...
...
@@ -10,11 +14,4 @@
android:title=
"@string/action_search"
app:actionViewClass=
"androidx.appcompat.widget.SearchView"
app:showAsAction=
"ifRoom|collapseActionView"
/>
<item
android:id=
"@+id/action_sort"
android:icon=
"@drawable/ic_sort"
android:title=
"@string/msg_sort"
app:showAsAction=
"ifRoom"
/>
</menu>
app/src/main/res/menu/profile.xml
deleted
100644 → 0
View file @
ab24ba31
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
>
<item
android:id=
"@+id/action_delete_account"
android:title=
"@string/action_delete_account"
app:showAsAction=
"never"
/>
</menu>
\ No newline at end of file
app/src/main/res/values-ar/strings.xml
View file @
f4efa770
...
...
@@ -4,7 +4,6 @@
<!-- Titles -->
<string
name=
"title_sign_in_your_server"
>
تسجيل الدخول إلى خادمك
</string>
<string
name=
"title_log_in"
>
تسجيل الدخول
</string>
<string
name=
"title_share_the_app"
>
انشر البرنامج
</string>
<string
name=
"title_register_username"
>
اسم المستخدم
</string>
<string
name=
"title_reset_password"
>
إعادة تعيين كلمة السر
</string>
<string
name=
"title_sign_up"
>
سجل
</string>
...
...
@@ -21,7 +20,6 @@
<string
name=
"title_admin_panel"
>
لوحة الإدارة
</string>
<string
name=
"title_password"
>
تغيير كلمة السر
</string>
<string
name=
"title_update_profile"
>
تحديث الملف الشخصي
</string>
<string
name=
"title_about"
>
عنا
</string>
<string
name=
"title_create_channel"
>
إنشاء قناة
</string>
<string
name=
"title_license"
>
الترخيص
</string>
<string
name=
"title_are_you_sure"
>
هل أنت متأكد؟
</string>
...
...
@@ -35,6 +33,7 @@
<string
name=
"action_use_this_username"
>
استخدم هذا الاسم
</string>
<string
name=
"action_terms_of_service"
>
شروط الخدمة
</string>
<string
name=
"action_privacy_policy"
>
شروط الخدمة
</string>
<string
name=
"action_new_channel"
>
New channel
</string>
<!-- TODO Translate -->
<string
name=
"action_search"
>
بحث
</string>
<string
name=
"action_update"
>
تحديث
</string>
<string
name=
"action_settings"
>
الإعدادات
</string>
...
...
@@ -44,11 +43,10 @@
<string
name=
"action_attach_a_files"
>
إضافة ملف
</string>
<string
name=
"action_confirm_password"
>
تأكيد تغيير كلمة السر
</string>
<string
name=
"action_join_chat"
>
إنضم للمحادثة
</string>
<string
name=
"action_add_account"
>
إضافة حساب
</string>
<string
name=
"action_online"
>
متصل
</string>
<string
name=
"action_away"
>
بعيد
</string>
<string
name=
"action_busy"
>
مشغول
</string>
<string
name=
"action_invisible"
>
مخفي
</string>
<string
name=
"msg_online"
>
متصل
</string>
<string
name=
"msg_away"
>
بعيد
</string>
<string
name=
"msg_busy"
>
مشغول
</string>
<string
name=
"msg_invisible"
>
مخفي
</string>
<string
name=
"action_drawing"
>
رسم
</string>
<string
name=
"action_save_to_gallery"
>
حفظ في المعرض
</string>
<string
name=
"action_select_photo_from_gallery"
>
اختيار صورة من المعرض
</string>
...
...
@@ -59,21 +57,22 @@
<string
name=
"action_create_server"
>
إنشاء خادم جديد
</string>
<string
name=
"action_register"
>
تسجيل
</string>
<string
name=
"action_confirm"
>
تأكيد
</string>
<string
name=
"action_delete_account"
>
حذف حساب
</string>
<string
name=
"action_favorite"
>
Favorite
</string>
<!-- TODO Translate -->
<string
name=
"action_remove_favorite"
>
Remove favorite
</string>
<!-- TODO Translate -->
<!-- Settings List -->
<string-array
name=
"settings_actions"
>
<item
name=
"item_preferences"
>
التفضيلات
</item>
<item
name=
"item_password"
>
تغيير كلمة السر
</item>
<item
name=
"change_language"
>
نغيير اللغة
</item>
<item
name=
"item_share_app"
>
نشر البرنامج
</item>
<item
name=
"item_rate_us"
>
قيمنا
</item>
<item
name=
"item_contact_us"
>
اتصل بنا
</item>
<item
name=
"item_license"
>
الترخيص
</item>
<item
name=
"item_about"
>
عنا
</item>
</string-array>
<!-- Settings messages -->
<string
name=
"msg_contact_us"
>
Contact us
</string>
<!-- TODO Translate -->
<string
name=
"msg_language"
>
Language
</string>
<!-- TODO Translate -->
<string
name=
"msg_review_this_app"
>
Review this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_share_this_app"
>
Share this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_administration"
>
Administration
</string>
<!-- TODO Translate -->
<string
name=
"msg_license"
>
License
</string>
<!-- TODO Translate -->
<string
name=
"msg_app_version"
>
Version: %1$s (%2$d)
</string>
<!-- TODO Translate -->
<string
name=
"msg_server_version"
>
Server version: %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_send_analytics"
>
Send analytics
</string>
<!-- TODO Translate -->
<string
name=
"msg_logout_from_rocket_chat"
>
Logout from Rocket.Chat
</string>
<!-- TODO Translate -->
<string
name=
"msg_delete_account"
>
Delete account
</string>
<!-- TODO Translate -->
<string
name=
"msg_change_status"
>
Change status
</string>
<!-- TODO Translate -->
<!-- Regular information messages -->
<string
name=
"msg_generic_error"
>
نأسف حدث خطأ ما حاول مرة أخرى
</string>
...
...
@@ -130,11 +129,8 @@
<string
name=
"msg_no_messages_yet"
>
ليس هناك رسائل بعد
</string>
<string
name=
"msg_build"
>
Build %1$d - %2$s - %3$s
</string>
<string
name=
"msg_update_app_version_in_order_to_continue"
>
خادم منتهي برجاء التواصل مع مدير الخادم للاستمرار
</string>
<string
name=
"msg_ver_not_recommended"
>
يبدو أن خادمك قديم %1$s يمكنك الاستمرار لكن ليس بكامل الفعالية
</string>
<string
name=
"msg_ver_not_minimum"
>
يبدو أن خادمك قديم %1$s من فضلك حدث الخادم للاستمرار
</string>
<string
name=
"msg_ver_not_recommended"
>
يبدو أن خادمك قديم %1$s يمكنك الاستمرار لكن ليس بكامل الفعالية
</string>
<string
name=
"msg_ver_not_minimum"
>
يبدو أن خادمك قديم %1$s من فضلك حدث الخادم للاستمرار
</string>
<string
name=
"msg_no_chat_title"
>
لا توجد رسائل
</string>
<string
name=
"msg_no_chat_description"
>
إبدأ المحادثة لترى الرسائل هنا
</string>
<string
name=
"msg_http_insecure"
>
أنت تستخدم HTTP وهو غير آمن ونحن لا نحبذ ذلك.
</string>
...
...
@@ -164,7 +160,7 @@
<string
name=
"msg_continue_with_gitlab"
>
استمرار ب
<b>
GitLab
</b></string>
<string
name=
"msg_continue_with_wordpress"
>
استمرار ب
<b>
WordPress
</b></string>
<string
name=
"msg_two_factor_authentication"
>
مصادقة مزدوجة
</string>
<string
name=
"msg_
_
your_2fa_code"
>
ما هو رمز 2FA؟
</string>
<string
name=
"msg_your_2fa_code"
>
ما هو رمز 2FA؟
</string>
<string
name=
"msg_permalink_copied"
>
الرابط الثابت المنسوخ
</string>
<string
name=
"msg_no_topic"
>
لا يوجد موضوع مضاف
</string>
<string
name=
"msg_no_announcement"
>
لا يوجد ملف مضاف
</string>
...
...
@@ -182,6 +178,8 @@
<item
quantity=
"two"
>
%1$s reacted with %2$s
</item>
</plurals>
<string
name=
"msg_credentials_saved_successfully"
>
Credentials saved successfully
</string>
<!-- TODO Translate -->
<string
name=
"msg_server"
>
Server
</string>
<!-- TODO Translate -->
<string
name=
"msg_add_new_server"
>
Add New Server
</string>
<!-- TODO Translate -->
<!-- Create channel messages -->
<string
name=
"msg_private_channel"
>
خاص
</string>
...
...
@@ -314,14 +312,13 @@
<string
name=
"msg_no_recent_emoji"
>
لا يوجد ايموجيز
</string>
<string
name=
"alert_title_default_skin_tone"
>
نغمة الجلد الافتراضية
</string>
<!-- Sorting and grouping-->
<string
name=
"msg_sort"
>
ترتيب
</string>
<string
name=
"dialog_sort_title"
>
ترتيب حسب
</string>
<string
name=
"dialog_sort_by_alphabet"
>
أبجدي
</string>
<string
name=
"dialog_sort_by_activity"
>
النشاط
</string>
<string
name=
"dialog_group_by_type"
>
تجميع حسب النوع
</string>
<string
name=
"dialog_group_favourites"
>
تجميع المفصلات
</string>
<string
name=
"chatroom_header"
>
العناوين
</string>
<!-- Sort and group -->
<string
name=
"msg_sort_by"
>
Sort by %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_activity"
>
Activity
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_name"
>
Name
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_unread_on_top"
>
Unread on top
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_type"
>
Group by type
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_favorites"
>
Group by favorites
</string>
<!-- TODO Translate -->
<!--ChatRooms Headers-->
<string
name=
"header_favorite"
>
Favorites
</string>
<!-- TODO Translate -->
...
...
@@ -342,7 +339,6 @@
<!-- User Details -->
<string
name=
"timezone"
>
المنظقة الزمنية
</string>
<string
name=
"status"
translatable=
"false"
>
Status
</string>
<!-- Report -->
<string
name=
"submit"
>
تأكيد
</string>
...
...
app/src/main/res/values-de/strings.xml
View file @
f4efa770
...
...
@@ -3,7 +3,6 @@
<!-- Titles -->
<string
name=
"title_sign_in_your_server"
>
Anmelden am Server
</string>
<string
name=
"title_log_in"
>
Anmelden
</string>
<string
name=
"title_share_the_app"
>
App teilen
</string>
<string
name=
"title_register_username"
>
Registriere Benutzernamen
</string>
<string
name=
"title_reset_password"
>
Passwort zurücksetzen
</string>
<string
name=
"title_sign_up"
>
registrieren
</string>
...
...
@@ -14,17 +13,13 @@
<string
name=
"title_members"
>
Benutzer
</string>
<string
name=
"title_counted_members"
>
Benutzer (%d)
</string>
<string
name=
"title_settings"
>
Einstellungen
</string>
<string
name=
"title_preferences"
>
Eigenschaften
</string>
<string
name=
"title_change_password"
>
Ändere Passwort
</string>
<string
name=
"title_rate_us"
>
Bewerten Sie uns
</string>
<string
name=
"title_admin_panel"
>
Administrationsmenü
</string>
<string
name=
"title_password"
>
Ändere Passwort
</string>
<string
name=
"title_update_profile"
>
Update Profil
</string>
<string
name=
"title_about"
>
Über
</string>
<string
name=
"title_create_channel"
>
Erstelle Raum
</string>
<string
name=
"title_are_you_sure"
>
Sind Sie sicher?
</string>
<string
name=
"title_channel_details"
>
Channel-Details
</string>
<string
name=
"title_topic"
>
Thema
</string>
...
...
@@ -37,6 +32,7 @@
<string
name=
"action_use_this_username"
>
Benutze den Benutzernamen
</string>
<string
name=
"action_terms_of_service"
>
Nutzungsbedingungen
</string>
<string
name=
"action_privacy_policy"
>
Datenschutz
</string>
<string
name=
"action_new_channel"
>
New channel
</string>
<!-- TODO Translate -->
<string
name=
"action_search"
>
Suche
</string>
<string
name=
"action_update"
>
Updaten
</string>
<string
name=
"action_settings"
>
Einstellungen
</string>
...
...
@@ -46,11 +42,10 @@
<string
name=
"action_attach_a_files"
>
Eine Datei anhängen
</string>
<string
name=
"action_confirm_password"
>
Bestätige Passwort Änderung
</string>
<string
name=
"action_join_chat"
>
Trete Chat bei
</string>
<string
name=
"action_add_account"
>
Erstelle Account
</string>
<string
name=
"action_online"
>
Online
</string>
<string
name=
"action_away"
>
Abwesend
</string>
<string
name=
"action_busy"
>
Beschäftigt
</string>
<string
name=
"action_invisible"
>
Unsichtbar
</string>
<string
name=
"msg_online"
>
Online
</string>
<string
name=
"msg_away"
>
Abwesend
</string>
<string
name=
"msg_busy"
>
Beschäftigt
</string>
<string
name=
"msg_invisible"
>
Unsichtbar
</string>
<string
name=
"action_drawing"
>
Zeichnung
</string>
<string
name=
"action_save_to_gallery"
>
Sichern in Galerie
</string>
<string
name=
"action_select_photo_from_gallery"
>
Foto aus der Galerie auswählen
</string>
...
...
@@ -61,21 +56,22 @@
<string
name=
"action_create_server"
>
Einen eigenen Server erstellen
</string>
<string
name=
"action_register"
>
Registrieren
</string>
<string
name=
"action_confirm"
>
Bestätigen
</string>
<string
name=
"action_delete_account"
>
Konto löschen
</string>
<string
name=
"action_favorite"
>
Favoriten
</string>
<string
name=
"action_remove_favorite"
>
Favoriten entfernen
</string>
<!-- Settings List -->
<string-array
name=
"settings_actions"
>
<item
name=
"item_preferences"
>
Eigenschaften
</item>
<item
name=
"item_password"
>
Passwort ändern
</item>
<item
name=
"change_language"
>
Sprache ändern
</item>
<item
name=
"item_share_app"
>
Link zur App teilen
</item>
<item
name=
"item_rate_us"
>
Bewerten Sie uns
</item>
<item
name=
"item_contact_us"
>
Kontaktieren Sie uns
</item>
<item
name=
"item_license"
>
Lizenz
</item>
<item
name=
"item_about"
>
Über
</item>
</string-array>
<!-- Settings messages -->
<string
name=
"msg_contact_us"
>
Contact us
</string>
<!-- TODO Translate -->
<string
name=
"msg_language"
>
Language
</string>
<!-- TODO Translate -->
<string
name=
"msg_review_this_app"
>
Review this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_share_this_app"
>
Share this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_administration"
>
Administration
</string>
<!-- TODO Translate -->
<string
name=
"msg_license"
>
License
</string>
<!-- TODO Translate -->
<string
name=
"msg_app_version"
>
Version: %1$s (%2$d)
</string>
<!-- TODO Translate -->
<string
name=
"msg_server_version"
>
Server version: %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_send_analytics"
>
Send analytics
</string>
<!-- TODO Translate -->
<string
name=
"msg_logout_from_rocket_chat"
>
Logout from Rocket.Chat
</string>
<!-- TODO Translate -->
<string
name=
"msg_delete_account"
>
Delete account
</string>
<!-- TODO Translate -->
<string
name=
"msg_change_status"
>
Change status
</string>
<!-- TODO Translate -->
<!-- Regular information messages -->
<string
name=
"msg_generic_error"
>
Entschuldigung, ein Fehler ist aufgetreten, bitte versuchen Sie es noch einmal.
</string>
...
...
@@ -114,9 +110,7 @@
<string
name=
"msg_content_description_log_in_using_gitlab"
>
Login mit GitLab
</string>
<string
name=
"msg_content_description_log_in_using_wordpress"
>
Login mit WordPress
</string>
<string
name=
"msg_content_description_send_message"
>
Sende Nachricht
</string>
<string
name=
"msg_content_description_show_more_login_options"
>
Zeige mehr Login-Optionen
</string>
<string
name=
"msg_content_description_show_attachment_options"
>
Zeige Anhang Optionen
</string>
<string
name=
"msg_you"
>
Du
</string>
<string
name=
"msg_unknown"
>
Unbekannt
</string>
...
...
@@ -166,7 +160,7 @@
<string
name=
"msg_continue_with_gitlab"
>
Mit
<b>
GitLab
</b>
einloggen
</string>
<string
name=
"msg_continue_with_wordpress"
>
Mit
<b>
WordPress
</b>
einloggen
</string>
<string
name=
"msg_two_factor_authentication"
>
Zwei-Faktor-Authentifizierung
</string>
<string
name=
"msg_
_
your_2fa_code"
>
Wie lautet Ihr F2A Code?
</string>
<string
name=
"msg_your_2fa_code"
>
Wie lautet Ihr F2A Code?
</string>
<string
name=
"msg_muted_on_this_channel"
>
Sie sind auf diesem Kanal stummgeschaltet
</string>
<string
name=
"msg_no_topic"
>
Keine Überschrift
</string>
<string
name=
"msg_no_announcement"
>
Keine Ankündigung
</string>
...
...
@@ -178,7 +172,8 @@
<item
quantity=
"other"
>
%1$s reagierte mit %2$s
</item>
</plurals>
<string
name=
"msg_credentials_saved_successfully"
>
Login-Daten erfolgreich gespeichert
</string>
<string
name=
"msg_server"
>
Server
</string>
<!-- TODO Translate -->
<string
name=
"msg_add_new_server"
>
Add New Server
</string>
<!-- TODO Translate -->
<!-- Create channel messages -->
<string
name=
"msg_private_channel"
>
Privat
</string>
...
...
@@ -315,14 +310,13 @@
<string
name=
"msg_no_recent_emoji"
>
Keine letzten Emojis
</string>
<string
name=
"alert_title_default_skin_tone"
>
Standard Hautton
</string>
<!-- Sorting and grouping-->
<string
name=
"msg_sort"
>
Sortiere
</string>
<string
name=
"dialog_sort_title"
>
Sortieren nach
</string>
<string
name=
"dialog_sort_by_alphabet"
>
Alphabetisch
</string>
<string
name=
"dialog_sort_by_activity"
>
Aktivität
</string>
<string
name=
"dialog_group_by_type"
>
Räume nach Typ
</string>
<string
name=
"dialog_group_favourites"
>
Räume nach Favoriten
</string>
<string
name=
"chatroom_header"
>
Kopf
</string>
<!-- Sort and group -->
<string
name=
"msg_sort_by"
>
Sort by %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_activity"
>
Activity
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_name"
>
Name
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_unread_on_top"
>
Unread on top
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_type"
>
Group by type
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_favorites"
>
Group by favorites
</string>
<!-- TODO Translate -->
<!--ChatRooms Headers-->
<string
name=
"header_favorite"
>
Favoriten
</string>
...
...
app/src/main/res/values-es/strings.xml
View file @
f4efa770
...
...
@@ -3,7 +3,6 @@
<!-- Titles -->
<string
name=
"title_sign_in_your_server"
>
Inicia sesión en tu servidor
</string>
<string
name=
"title_log_in"
>
Iniciar sesión
</string>
<string
name=
"title_share_the_app"
>
Compartir aplicación
</string>
<string
name=
"title_register_username"
>
Registrar nombre de usuario
</string>
<string
name=
"title_reset_password"
>
Restablecer la contraseña
</string>
<string
name=
"title_sign_up"
>
Regístrate
</string>
...
...
@@ -20,7 +19,6 @@
<string
name=
"title_admin_panel"
>
Admin panel
</string>
<!-- TODO Add translation -->
<string
name=
"title_password"
>
Cambia la contraseña
</string>
<string
name=
"title_update_profile"
>
Actualización del perfil
</string>
<string
name=
"title_about"
>
Acerca de
</string>
<string
name=
"title_create_channel"
>
Crear canal
</string>
<string
name=
"title_license"
>
License
</string>
<!-- TODO Add translation -->
<string
name=
"title_are_you_sure"
>
Are you sure?
</string>
<!-- TODO Add translation -->
...
...
@@ -34,6 +32,7 @@
<string
name=
"action_use_this_username"
>
Usa este nombre de usuario
</string>
<string
name=
"action_terms_of_service"
>
Términos de Servicio
</string>
<string
name=
"action_privacy_policy"
>
Política de Privacidad
</string>
<string
name=
"action_new_channel"
>
New channel
</string>
<!-- TODO Translate -->
<string
name=
"action_search"
>
Buscar
</string>
<string
name=
"action_update"
>
Actualizar
</string>
<string
name=
"action_settings"
>
Configuraciones
</string>
...
...
@@ -43,11 +42,10 @@
<string
name=
"action_attach_a_files"
>
Attach a file
</string>
<!-- TODO Add translation -->
<string
name=
"action_confirm_password"
>
Confirmar cambio de contraseña
</string>
<string
name=
"action_join_chat"
>
Unirse al chat
</string>
<string
name=
"action_add_account"
>
Añadir cuenta
</string>
<string
name=
"action_online"
>
Conectado(s)
</string>
<string
name=
"action_away"
>
Ausente
</string>
<string
name=
"action_busy"
>
Ocupado
</string>
<string
name=
"action_invisible"
>
Invisible
</string>
<string
name=
"msg_online"
>
Conectado(s)
</string>
<string
name=
"msg_away"
>
Ausente
</string>
<string
name=
"msg_busy"
>
Ocupado
</string>
<string
name=
"msg_invisible"
>
Invisible
</string>
<string
name=
"action_drawing"
>
Dibujo
</string>
<string
name=
"action_save_to_gallery"
>
Guardar en la galería
</string>
<string
name=
"action_select_photo_from_gallery"
>
Select photo from gallery
</string>
<!-- TODO Add translation -->
...
...
@@ -58,21 +56,22 @@
<string
name=
"action_create_server"
>
Create a new server
</string>
<!-- TODO Add translation -->
<string
name=
"action_register"
>
Register
</string>
<!-- TODO Add translation -->
<string
name=
"action_confirm"
>
Confirm
</string>
<!-- TODO Add translation -->
<string
name=
"action_delete_account"
>
Delete account
</string>
<!-- TODO Add translation -->
<string
name=
"action_favorite"
>
Favorite
</string>
<!-- TODO Add translation -->
<string
name=
"action_remove_favorite"
>
Remove favorite
</string>
<!-- TODO Add translation -->
<!-- Settings List -->
<string-array
name=
"settings_actions"
>
<item
name=
"item_preferences"
>
Preferences
</item>
<!-- TODO Add translation -->
<item
name=
"item_password"
>
Change password
</item>
<!-- TODO Add translation -->
<item
name=
"change_language"
>
Change language
</item>
<!-- TODO Add translation -->
<item
name=
"item_share_app"
>
Share app
</item>
<!-- TODO Add translation -->
<item
name=
"item_rate_us"
>
Rate us
</item>
<!-- TODO Add translation -->
<item
name=
"item_contact_us"
>
Contact us
</item>
<!-- TODO Add translation -->
<item
name=
"item_license"
>
License
</item>
<!-- TODO Add translation -->
<item
name=
"item_about"
>
About
</item>
<!-- TODO Add translation -->
</string-array>
<!-- Settings messages -->
<string
name=
"msg_contact_us"
>
Contact us
</string>
<!-- TODO Translate -->
<string
name=
"msg_language"
>
Language
</string>
<!-- TODO Translate -->
<string
name=
"msg_review_this_app"
>
Review this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_share_this_app"
>
Share this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_administration"
>
Administration
</string>
<!-- TODO Translate -->
<string
name=
"msg_license"
>
License
</string>
<!-- TODO Translate -->
<string
name=
"msg_app_version"
>
Version: %1$s (%2$d)
</string>
<!-- TODO Translate -->
<string
name=
"msg_server_version"
>
Server version: %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_send_analytics"
>
Send analytics
</string>
<!-- TODO Translate -->
<string
name=
"msg_logout_from_rocket_chat"
>
Logout from Rocket.Chat
</string>
<!-- TODO Translate -->
<string
name=
"msg_delete_account"
>
Delete account
</string>
<!-- TODO Translate -->
<string
name=
"msg_change_status"
>
Change status
</string>
<!-- TODO Translate -->
<!-- Regular information messages -->
<string
name=
"msg_generic_error"
>
Lo sentimos, ha ocurrido un error, por favor intente de nuevo
</string>
...
...
@@ -161,7 +160,9 @@
<string
name=
"msg_continue_with_gitlab"
>
Continue with
<b>
GitLab
</b></string>
<!-- TODO Add translation -->
<string
name=
"msg_continue_with_wordpress"
>
Continue with
<b>
WordPress
</b></string>
<!-- TODO Add translation -->
<string
name=
"msg_two_factor_authentication"
>
Two-factor Authentication
</string>
<!-- TODO Add translation -->
<string
name=
"msg__your_2fa_code"
>
What’s your 2FA code?
</string>
<!-- TODO Add translation -->
<string
name=
"msg_your_2fa_code"
>
What’s your 2FA code?
</string>
<!-- TODO Add translation -->
<string
name=
"msg_server"
>
Server
</string>
<!-- TODO Translate -->
<string
name=
"msg_add_new_server"
>
Add New Server
</string>
<!-- TODO Translate -->
<!-- Create channel messages -->
<string
name=
"msg_private_channel"
>
Privado
</string>
...
...
@@ -306,14 +307,13 @@
<string
name=
"msg_no_recent_emoji"
>
Sin emojis recientes
</string>
<string
name=
"alert_title_default_skin_tone"
>
Tono de piel predeterminado
</string>
<!-- Sorting and grouping-->
<string
name=
"msg_sort"
>
Ordenar
</string>
<string
name=
"dialog_sort_title"
>
Ordenar por
</string>
<string
name=
"dialog_sort_by_alphabet"
>
Alfabético
</string>
<string
name=
"dialog_sort_by_activity"
>
Actividad
</string>
<string
name=
"dialog_group_by_type"
>
Agrupar por tipo
</string>
<string
name=
"dialog_group_favourites"
>
Agrupar favoritos
</string>
<string
name=
"chatroom_header"
>
Cabezazo
</string>
<!-- Sort and group -->
<string
name=
"msg_sort_by"
>
Sort by %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_activity"
>
Activity
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_name"
>
Name
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_unread_on_top"
>
Unread on top
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_type"
>
Group by type
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_favorites"
>
Group by favorites
</string>
<!-- TODO Translate -->
<!--ChatRooms Headers-->
<string
name=
"header_favorite"
>
Favorites
</string>
<!-- TODO - Add proper translation -->
...
...
app/src/main/res/values-fa/strings.xml
View file @
f4efa770
...
...
@@ -3,7 +3,6 @@
<!-- Titles -->
<string
name=
"title_sign_in_your_server"
>
به سرور خود متصل شوید
</string>
<string
name=
"title_log_in"
>
ورود
</string>
<string
name=
"title_share_the_app"
>
به اشتراکگذاری اپلیکیشن
</string>
<string
name=
"title_register_username"
>
ثبت شناسهی کاربری
</string>
<string
name=
"title_reset_password"
>
تعویض گذرواژه
</string>
<string
name=
"title_sign_up"
>
ثبتنام کنید
</string>
...
...
@@ -20,7 +19,6 @@
<string
name=
"title_admin_panel"
>
Admin panel
</string>
<!-- TODO Add translation -->
<string
name=
"title_password"
>
تغییر گذرواژه
</string>
<string
name=
"title_update_profile"
>
به روزرسانی نمایه
</string>
<string
name=
"title_about"
>
درباره
</string>
<string
name=
"title_create_channel"
>
ایجاد کانال
</string>
<string
name=
"title_license"
>
مجوز
</string>
<string
name=
"title_are_you_sure"
>
آیا مطمئن هستید؟
</string>
...
...
@@ -34,6 +32,7 @@
<string
name=
"action_use_this_username"
>
از این شناسهی کاربری استفاده کنید
</string>
<string
name=
"action_terms_of_service"
>
شرایط خدمات رسانی
</string>
<string
name=
"action_privacy_policy"
>
سیاست حفظ جریم خصوصی
</string>
<string
name=
"action_new_channel"
>
New channel
</string>
<!-- TODO Translate -->
<string
name=
"action_search"
>
جستوجو
</string>
<string
name=
"action_update"
>
به روزرسانی
</string>
<string
name=
"action_settings"
>
تنظیمات
</string>
...
...
@@ -43,11 +42,10 @@
<string
name=
"action_attach_a_files"
>
ضمیمه کردن پرونده
</string>
<string
name=
"action_confirm_password"
>
موافقت با تغییر گذرواژه
</string>
<string
name=
"action_join_chat"
>
به گفتوگو بپیوندید
</string>
<string
name=
"action_add_account"
>
اضافه کردن حساب کاربری
</string>
<string
name=
"action_online"
>
آنلاین
</string>
<string
name=
"action_away"
>
Away
</string>
<!-- TODO Add translation -->
<string
name=
"action_busy"
>
مشغول
</string>
<string
name=
"action_invisible"
>
نامرئی
</string>
<string
name=
"msg_online"
>
آنلاین
</string>
<string
name=
"msg_away"
>
Away
</string>
<!-- TODO Add translation -->
<string
name=
"msg_busy"
>
مشغول
</string>
<string
name=
"msg_invisible"
>
نامرئی
</string>
<string
name=
"action_drawing"
>
کشیدن
</string>
<string
name=
"action_save_to_gallery"
>
ذخیره در آلبوم
</string>
<string
name=
"action_select_photo_from_gallery"
>
انتخاب عکس از آلبوم
</string>
...
...
@@ -58,21 +56,22 @@
<string
name=
"action_create_server"
>
ایجاد سرور جدید
</string>
<string
name=
"action_register"
>
ثبتنام
</string>
<string
name=
"action_confirm"
>
تایید
</string>
<string
name=
"action_delete_account"
>
حذف حساب کاربری
</string>
<string
name=
"action_favorite"
>
Favorite
</string>
<!-- TODO Add translation -->
<string
name=
"action_remove_favorite"
>
Remove favorite
</string>
<!-- TODO Add translation -->
<!-- Settings List -->
<string-array
name=
"settings_actions"
>
<item
name=
"item_preferences"
>
ترجیحات
</item>
<item
name=
"item_password"
>
تغییر گذرواژه
</item>
<item
name=
"item_share_app"
>
به اشتراکگذاری اپلیکیشن
</item>
<item
name=
"change_language"
>
Change language
</item>
<!-- TODO Add translation -->
<item
name=
"item_rate_us"
>
به ما امتیاز دهید
</item>
<item
name=
"item_contact_us"
>
تماس با ما
</item>
<item
name=
"item_license"
>
مجوز
</item>
<item
name=
"item_about"
>
درباره
</item>
</string-array>
<!-- Settings messages -->
<string
name=
"msg_contact_us"
>
Contact us
</string>
<!-- TODO Translate -->
<string
name=
"msg_language"
>
Language
</string>
<!-- TODO Translate -->
<string
name=
"msg_review_this_app"
>
Review this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_share_this_app"
>
Share this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_administration"
>
Administration
</string>
<!-- TODO Translate -->
<string
name=
"msg_license"
>
License
</string>
<!-- TODO Translate -->
<string
name=
"msg_app_version"
>
Version: %1$s (%2$d)
</string>
<!-- TODO Translate -->
<string
name=
"msg_server_version"
>
Server version: %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_send_analytics"
>
Send analytics
</string>
<!-- TODO Translate -->
<string
name=
"msg_logout_from_rocket_chat"
>
Logout from Rocket.Chat
</string>
<!-- TODO Translate -->
<string
name=
"msg_delete_account"
>
Delete account
</string>
<!-- TODO Translate -->
<string
name=
"msg_change_status"
>
Change status
</string>
<!-- TODO Translate -->
<!-- Regular information messages -->
<string
name=
"msg_generic_error"
>
متاسفانه مشکلی رخ داد، لطفا دوباره تلاش کنید
</string>
...
...
@@ -163,7 +162,7 @@
<string
name=
"msg_continue_with_gitlab"
>
ادامه دادن با
<b>
گیتلب
</b></string>
<string
name=
"msg_continue_with_wordpress"
>
ادامه دادن با
<b>
وردپرس
</b></string>
<string
name=
"msg_two_factor_authentication"
>
تایید هویت دو فاکتوره
</string>
<string
name=
"msg_
_
your_2fa_code"
>
کد 2FA تان چیست؟
</string>
<string
name=
"msg_your_2fa_code"
>
کد 2FA تان چیست؟
</string>
<string
name=
"msg_permalink_copied"
>
پیوند کپی شد
</string>
<string
name=
"msg_no_topic"
>
No topic
</string>
<!-- TODO Add translation -->
<string
name=
"msg_no_announcement"
>
No announcement
</string>
<!-- TODO Add translation -->
...
...
@@ -177,6 +176,8 @@
<item
quantity=
"other"
>
%1$s reacted with %2$s
</item>
</plurals>
<!-- TODO Add translation -->
<string
name=
"msg_credentials_saved_successfully"
>
اختیارها با موفقیت ذخیره شد
</string>
<string
name=
"msg_server"
>
Server
</string>
<!-- TODO Translate -->
<string
name=
"msg_add_new_server"
>
Add New Server
</string>
<!-- TODO Translate -->
<!-- Create channel messages -->
<string
name=
"msg_private_channel"
>
خصوصی
</string>
...
...
@@ -309,14 +310,13 @@
<string
name=
"msg_no_recent_emoji"
>
هیچ ایموجی اخیری موجود نیست
</string>
<string
name=
"alert_title_default_skin_tone"
>
مدل پوستهی پیشفرض
</string>
<!-- Sorting and grouping-->
<string
name=
"msg_sort"
>
دسته بندی
</string>
<string
name=
"dialog_sort_title"
>
دسته بندی بر اساس
</string>
<string
name=
"dialog_sort_by_alphabet"
>
الفبا
</string>
<string
name=
"dialog_sort_by_activity"
>
فعالیت
</string>
<string
name=
"dialog_group_by_type"
>
گروه کردن بر اساس نوع
</string>
<string
name=
"dialog_group_favourites"
>
گروه کردن موردعلاقهها
</string>
<string
name=
"chatroom_header"
>
سرپیام
</string>
<!-- Sort and group -->
<string
name=
"msg_sort_by"
>
Sort by %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_activity"
>
Activity
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_name"
>
Name
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_unread_on_top"
>
Unread on top
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_type"
>
Group by type
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_favorites"
>
Group by favorites
</string>
<!-- TODO Translate -->
<!--ChatRooms Headers-->
<string
name=
"header_favorite"
>
Favorites
</string>
<!-- TODO - Add proper translation -->
...
...
app/src/main/res/values-fr/strings.xml
View file @
f4efa770
...
...
@@ -3,7 +3,6 @@
<!-- Titles -->
<string
name=
"title_sign_in_your_server"
>
Connectez-vous sur votre serveur
</string>
<string
name=
"title_log_in"
>
S\'identifier
</string>
<string
name=
"title_share_the_app"
>
Partager l\'application
</string>
<string
name=
"title_register_username"
>
Enregistrer le nom d\'utilisateur
</string>
<string
name=
"title_reset_password"
>
Réinitialiser mot de passe
</string>
<string
name=
"title_sign_up"
>
S\'inscrire
</string>
...
...
@@ -20,7 +19,6 @@
<string
name=
"title_admin_panel"
>
l\' administration
</string>
<string
name=
"title_password"
>
Changer le mot de passe
</string>
<string
name=
"title_update_profile"
>
Mettre à jour le profil
</string>
<string
name=
"title_about"
>
À propos
</string>
<string
name=
"title_create_channel"
>
Créer salon
</string>
<string
name=
"title_license"
>
les permis
</string>
<string
name=
"title_are_you_sure"
>
Êtes-vous sûr?
</string>
...
...
@@ -34,6 +32,7 @@
<string
name=
"action_use_this_username"
>
Utilisez ce nom d\'utilisateur
</string>
<string
name=
"action_terms_of_service"
>
Conditions d\'utilisation
</string>
<string
name=
"action_privacy_policy"
>
Politique de confidentialité
</string>
<string
name=
"action_new_channel"
>
New channel
</string>
<!-- TODO Translate -->
<string
name=
"action_search"
>
Chercher
</string>
<string
name=
"action_update"
>
Mettre à jour
</string>
<string
name=
"action_settings"
>
Paramètres
</string>
...
...
@@ -43,11 +42,10 @@
<string
name=
"action_attach_a_files"
>
Joindre un fichier
</string>
<string
name=
"action_confirm_password"
>
Confirmer le mot de passe
</string>
<string
name=
"action_join_chat"
>
Rejoignez le chat
</string>
<string
name=
"action_add_account"
>
Ajouter un compte
</string>
<string
name=
"action_online"
>
En ligne
</string>
<string
name=
"action_away"
>
Loin
</string>
<string
name=
"action_busy"
>
Occupé
</string>
<string
name=
"action_invisible"
>
Invisible
</string>
<string
name=
"msg_online"
>
En ligne
</string>
<string
name=
"msg_away"
>
Loin
</string>
<string
name=
"msg_busy"
>
Occupé
</string>
<string
name=
"msg_invisible"
>
Invisible
</string>
<string
name=
"action_drawing"
>
Dessin
</string>
<string
name=
"action_save_to_gallery"
>
Sauvegarder vers la gallerie
</string>
<string
name=
"action_select_photo_from_gallery"
>
Sélectionner depuis la gallerie
</string>
...
...
@@ -58,21 +56,22 @@
<string
name=
"action_create_server"
>
Créer un nouveau serveur
</string>
<string
name=
"action_register"
>
registre
</string>
<string
name=
"action_confirm"
>
Confirmer
</string>
<string
name=
"action_delete_account"
>
Effacer le compte
</string>
<string
name=
"action_favorite"
>
Favorite
</string>
<!-- TODO Add translation -->
<string
name=
"action_remove_favorite"
>
Remove favorite
</string>
<!-- TODO Add translation -->
<!-- Settings List -->
<string-array
name=
"settings_actions"
>
<item
name=
"item_preferences"
>
Préférences
</item>
<item
name=
"item_password"
>
Changer le mot de passe
</item>
<item
name=
"change_language"
>
Changer de langue
</item>
<item
name=
"item_share_app"
>
Partager l\'application
</item>
<item
name=
"item_rate_us"
>
Évaluez nous
</item>
<item
name=
"item_contact_us"
>
Contactez nous
</item>
<item
name=
"item_license"
>
les permis
</item>
<item
name=
"item_about"
>
Sur
</item>
</string-array>
<!-- Settings messages -->
<string
name=
"msg_contact_us"
>
Contact us
</string>
<!-- TODO Translate -->
<string
name=
"msg_language"
>
Language
</string>
<!-- TODO Translate -->
<string
name=
"msg_review_this_app"
>
Review this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_share_this_app"
>
Share this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_administration"
>
Administration
</string>
<!-- TODO Translate -->
<string
name=
"msg_license"
>
License
</string>
<!-- TODO Translate -->
<string
name=
"msg_app_version"
>
Version: %1$s (%2$d)
</string>
<!-- TODO Translate -->
<string
name=
"msg_server_version"
>
Server version: %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_send_analytics"
>
Send analytics
</string>
<!-- TODO Translate -->
<string
name=
"msg_logout_from_rocket_chat"
>
Logout from Rocket.Chat
</string>
<!-- TODO Translate -->
<string
name=
"msg_delete_account"
>
Delete account
</string>
<!-- TODO Translate -->
<string
name=
"msg_change_status"
>
Change status
</string>
<!-- TODO Translate -->
<!-- Regular information messages -->
<string
name=
"msg_generic_error"
>
Désolé, une erreur s\'est produite. Veuillez réessayer
</string>
...
...
@@ -164,7 +163,7 @@
<string
name=
"msg_continue_with_gitlab"
>
Continuer avec
<b>
GitLab
</b></string>
<string
name=
"msg_continue_with_wordpress"
>
Continuer avec
<b>
WordPress
</b></string>
<string
name=
"msg_two_factor_authentication"
>
authentification à deux facteurs
</string>
<string
name=
"msg_
_
your_2fa_code"
>
Quel est votre code 2FA?
</string>
<string
name=
"msg_your_2fa_code"
>
Quel est votre code 2FA?
</string>
<string
name=
"msg_view_more"
>
voir de plus
</string>
<string
name=
"msg_view_less"
>
voir de plus
</string>
<string
name=
"msg_permalink_copied"
>
Permalink copié
</string>
...
...
@@ -181,6 +180,8 @@
<item
quantity=
"other"
>
%1$s a réagi avec %2$s
</item>
</plurals>
<string
name=
"msg_credentials_saved_successfully"
>
Certificats sauvegardés
</string>
<string
name=
"msg_server"
>
Server
</string>
<!-- TODO Translate -->
<string
name=
"msg_add_new_server"
>
Add New Server
</string>
<!-- TODO Translate -->
<!-- Create channel messages -->
<string
name=
"msg_private_channel"
>
Privé
</string>
...
...
@@ -307,14 +308,13 @@
<string
name=
"msg_no_recent_emoji"
>
Aucun emoji récent
</string>
<string
name=
"alert_title_default_skin_tone"
>
Tonalité de peau par défaut
</string>
<!-- Sorting and grouping-->
<string
name=
"msg_sort"
>
Trier
</string>
<string
name=
"dialog_sort_title"
>
Trier par
</string>
<string
name=
"dialog_sort_by_alphabet"
>
Alphabétique
</string>
<string
name=
"dialog_sort_by_activity"
>
Activité
</string>
<string
name=
"dialog_group_by_type"
>
Grouper par type
</string>
<string
name=
"dialog_group_favourites"
>
Grouper favoris
</string>
<string
name=
"chatroom_header"
>
Entête
</string>
<!-- Sort and group -->
<string
name=
"msg_sort_by"
>
Sort by %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_activity"
>
Activity
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_name"
>
Name
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_unread_on_top"
>
Unread on top
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_type"
>
Group by type
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_favorites"
>
Group by favorites
</string>
<!-- TODO Translate -->
<!--ChatRooms Headers-->
<string
name=
"header_favorite"
>
Favoris
</string>
...
...
app/src/main/res/values-hi-rIN/strings.xml
View file @
f4efa770
...
...
@@ -3,7 +3,6 @@
<!-- Titles -->
<string
name=
"title_sign_in_your_server"
>
अपने सर्वर में साइन इन करें
</string>
<string
name=
"title_log_in"
>
लॉग इन करें
</string>
<string
name=
"title_share_the_app"
>
ऐप शेयर करे
</string>
<string
name=
"title_register_username"
>
रजिस्टर उपयोगकर्ता नाम
</string>
<string
name=
"title_reset_password"
>
पासवर्ड रीसेट करें
</string>
<string
name=
"title_sign_up"
>
साइन अप करें
</string>
...
...
@@ -20,7 +19,6 @@
<string
name=
"title_admin_panel"
>
एडमिन पैनल
</string>
<string
name=
"title_password"
>
पासवर्ड बदलें
</string>
<string
name=
"title_update_profile"
>
प्रोफ़ाइल अपडेट करें
</string>
<string
name=
"title_about"
>
परिचय
</string>
<string
name=
"title_create_channel"
>
चैनल बनाएं
</string>
<string
name=
"title_license"
>
लाइसेंस
</string>
<string
name=
"title_are_you_sure"
>
क्या आपको यकीन है?
</string>
...
...
@@ -34,6 +32,7 @@
<string
name=
"action_use_this_username"
>
इस उपयोगकर्ता नाम का उपयोग करें
</string>
<string
name=
"action_terms_of_service"
>
सेवा की शर्तें
</string>
<string
name=
"action_privacy_policy"
>
गोपनीयता नीति
</string>
<string
name=
"action_new_channel"
>
New channel
</string>
<!-- TODO Translate -->
<string
name=
"action_search"
>
खोजें
</string>
<string
name=
"action_update"
>
अद्यतन करें
</string>
<string
name=
"action_settings"
>
सेटिंग्स
</string>
...
...
@@ -43,11 +42,10 @@
<string
name=
"action_attach_a_files"
>
एक फ़ाइल जोडो
</string>
<string
name=
"action_confirm_password"
>
पासवर्ड परिवर्तन की पुष्टि करें
</string>
<string
name=
"action_join_chat"
>
चैट में शामिल हों
</string>
<string
name=
"action_add_account"
>
खाता जोड़ो
</string>
<string
name=
"action_online"
>
ऑनलाइन
</string>
<string
name=
"action_away"
>
दूर
</string>
<string
name=
"action_busy"
>
व्यस्त
</string>
<string
name=
"action_invisible"
>
अदृश्य
</string>
<string
name=
"msg_online"
>
ऑनलाइन
</string>
<string
name=
"msg_away"
>
दूर
</string>
<string
name=
"msg_busy"
>
व्यस्त
</string>
<string
name=
"msg_invisible"
>
अदृश्य
</string>
<string
name=
"action_save_to_gallery"
>
गैलरी में सहेजें
</string>
<string
name=
"action_drawing"
>
चित्रकारी
</string>
<string
name=
"action_select_photo_from_gallery"
>
गैलरी से फोटो का चयन करें
</string>
...
...
@@ -58,21 +56,22 @@
<string
name=
"action_create_server"
>
नया सर्वर बनाएं
</string>
<string
name=
"action_register"
>
रजिस्टर
</string>
<string
name=
"action_confirm"
>
पुष्टि करें
</string>
<string
name=
"action_delete_account"
>
खाता हटा दो
</string>
<string
name=
"action_favorite"
>
Favorite
</string>
<!-- TODO Add translation -->
<string
name=
"action_remove_favorite"
>
Remove favorite
</string>
<!-- TODO Add translation -->
<!-- Settings List -->
<string-array
name=
"settings_actions"
>
<item
name=
"item_preferences"
>
पसंद
</item>
<item
name=
"item_password"
>
पासवर्ड बदलें
</item>
<item
name=
"change_language"
>
भाषा बदलें
</item>
<item
name=
"item_share_app"
>
ऐप शेयर करें
</item>
<item
name=
"item_rate_us"
>
हमें रेटिंग दें
</item>
<item
name=
"item_contact_us"
>
हमसे संपर्क करें
</item>
<item
name=
"item_license"
>
लाइसेंस
</item>
<item
name=
"item_about"
>
के बारे में
</item>
</string-array>
<!-- Settings messages -->
<string
name=
"msg_contact_us"
>
Contact us
</string>
<!-- TODO Translate -->
<string
name=
"msg_language"
>
Language
</string>
<!-- TODO Translate -->
<string
name=
"msg_review_this_app"
>
Review this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_share_this_app"
>
Share this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_administration"
>
Administration
</string>
<!-- TODO Translate -->
<string
name=
"msg_license"
>
License
</string>
<!-- TODO Translate -->
<string
name=
"msg_app_version"
>
Version: %1$s (%2$d)
</string>
<!-- TODO Translate -->
<string
name=
"msg_server_version"
>
Server version: %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_send_analytics"
>
Send analytics
</string>
<!-- TODO Translate -->
<string
name=
"msg_logout_from_rocket_chat"
>
Logout from Rocket.Chat
</string>
<!-- TODO Translate -->
<string
name=
"msg_delete_account"
>
Delete account
</string>
<!-- TODO Translate -->
<string
name=
"msg_change_status"
>
Change status
</string>
<!-- TODO Translate -->
<!-- Regular information messages -->
<string
name=
"msg_generic_error"
>
क्षमा करें, एक त्रुटि हुई है, कृपया पुनः प्रयास करें
</string>
...
...
@@ -166,7 +165,7 @@
<string
name=
"msg_continue_with_gitlab"
><b>
GitLab
</b>
के साथ जारी रखें
</string>
<string
name=
"msg_continue_with_wordpress"
><b>
WordPress
</b>
के साथ जारी रखें
</string>
<string
name=
"msg_two_factor_authentication"
>
दो तरीकों से प्रमाणीकरण
</string>
<string
name=
"msg_
_
your_2fa_code"
>
आपका 2FA कोड क्या है?
</string>
<string
name=
"msg_your_2fa_code"
>
आपका 2FA कोड क्या है?
</string>
<!-- Create channel messages -->
<string
name=
"msg_private_channel"
>
प्राइवेट
</string>
...
...
@@ -196,6 +195,8 @@
<item
quantity=
"many"
>
%1$s ने %2$s के साथ प्रतिक्रिया व्यक्त की
</item>
</plurals>
<string
name=
"msg_credentials_saved_successfully"
>
प्रमाण पत्र सफलतापूर्वक सहेजे गए
</string>
<string
name=
"msg_server"
>
Server
</string>
<!-- TODO Translate -->
<string
name=
"msg_add_new_server"
>
Add New Server
</string>
<!-- TODO Translate -->
<!-- Preferences messages -->
<string
name=
"msg_analytics_tracking"
>
एनालिटिक्स ट्रैकिंग
</string>
...
...
@@ -310,14 +311,13 @@
<string
name=
"msg_no_recent_emoji"
>
कोई नया इमोजी नहीं
</string>
<string
name=
"alert_title_default_skin_tone"
>
डिफ़ॉल्ट त्वचा टोन
</string>
<!-- Sorting and grouping-->
<string
name=
"msg_sort"
>
क्रम
</string>
<string
name=
"dialog_sort_title"
>
द्वारा सॉर्ट करें
</string>
<string
name=
"dialog_sort_by_alphabet"
>
वर्णानुक्रम
</string>
<string
name=
"dialog_sort_by_activity"
>
गतिविधि
</string>
<string
name=
"dialog_group_by_type"
>
प्रकार के आधार पर समूह
</string>
<string
name=
"dialog_group_favourites"
>
पसंदीदा समूह
</string>
<string
name=
"chatroom_header"
>
हैडर
</string>
<!-- Sort and group -->
<string
name=
"msg_sort_by"
>
Sort by %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_activity"
>
Activity
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_name"
>
Name
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_unread_on_top"
>
Unread on top
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_type"
>
Group by type
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_favorites"
>
Group by favorites
</string>
<!-- TODO Translate -->
<!--ChatRooms Headers-->
<string
name=
"header_favorite"
>
पसंदीदा
</string>
...
...
app/src/main/res/values-it/strings.xml
View file @
f4efa770
...
...
@@ -3,7 +3,6 @@
<!-- Titles -->
<string
name=
"title_sign_in_your_server"
>
Accedi al tuo server
</string>
<string
name=
"title_log_in"
>
Accesso
</string>
<string
name=
"title_share_the_app"
>
Condividi la App
</string>
<string
name=
"title_register_username"
>
Registra nome utente
</string>
<string
name=
"title_reset_password"
>
Annullare password
</string>
<string
name=
"title_sign_up"
>
Iscrizione
</string>
...
...
@@ -20,7 +19,6 @@
<string
name=
"title_admin_panel"
>
Pannello di Amministrazione
</string>
<string
name=
"title_password"
>
Password
</string>
<string
name=
"title_update_profile"
>
Aggiorna Profilo
</string>
<string
name=
"title_about"
>
Informazioni
</string>
<string
name=
"title_create_channel"
>
Crea Canale
</string>
<string
name=
"title_license"
>
licenza
</string>
<string
name=
"title_are_you_sure"
>
Sei sicuro che vuoi uscire?
</string>
...
...
@@ -34,6 +32,7 @@
<string
name=
"action_use_this_username"
>
Usa questo nome utente
</string>
<string
name=
"action_terms_of_service"
>
Termini di Servizio
</string>
<string
name=
"action_privacy_policy"
>
Politica sulla Riservatezza
</string>
<string
name=
"action_new_channel"
>
New channel
</string>
<!-- TODO Translate -->
<string
name=
"action_search"
>
Cerca
</string>
<string
name=
"action_update"
>
Aggiorna
</string>
<string
name=
"action_settings"
>
Parametri
</string>
...
...
@@ -43,11 +42,10 @@
<string
name=
"action_attach_a_files"
>
Ceangail comhad
</string>
<string
name=
"action_confirm_password"
>
Conferma Cambio Password
</string>
<string
name=
"action_join_chat"
>
Iscriviti alla stanza
</string>
<string
name=
"action_add_account"
>
Aggiungi utente
</string>
<string
name=
"action_online"
>
In linea
</string>
<string
name=
"action_away"
>
Lontano
</string>
<string
name=
"action_busy"
>
Occupato
</string>
<string
name=
"action_invisible"
>
Invisibile
</string>
<string
name=
"msg_online"
>
In linea
</string>
<string
name=
"msg_away"
>
Lontano
</string>
<string
name=
"msg_busy"
>
Occupato
</string>
<string
name=
"msg_invisible"
>
Invisibile
</string>
<string
name=
"action_drawing"
>
Disegno
</string>
<string
name=
"action_save_to_gallery"
>
Salva in galleria
</string>
<string
name=
"action_select_photo_from_gallery"
>
Seleziona foto dalla galleria
</string>
...
...
@@ -58,21 +56,22 @@
<string
name=
"action_create_server"
>
Crea un nuovo server
</string>
<string
name=
"action_register"
>
Registra
</string>
<string
name=
"action_confirm"
>
Conferma
</string>
<string
name=
"action_delete_account"
>
Elimina utente
</string>
<string
name=
"action_favorite"
>
Favorite
</string>
<!-- TODO Add translation -->
<string
name=
"action_remove_favorite"
>
Remove favorite
</string>
<!-- TODO Add translation -->
<!-- Settings List -->
<string-array
name=
"settings_actions"
>
<item
name=
"item_preferences"
>
Preferenze
</item>
<item
name=
"item_password"
>
Cambia password
</item>
<item
name=
"change_language"
>
Cambia lingua
</item>
<item
name=
"item_share_app"
>
Condividi app
</item>
<item
name=
"item_rate_us"
>
Votaci
</item>
<item
name=
"item_contact_us"
>
Contattaci
</item>
<item
name=
"item_license"
>
Licenza
</item>
<item
name=
"item_about"
>
Di
</item>
</string-array>
<!-- Settings messages -->
<string
name=
"msg_contact_us"
>
Contact us
</string>
<!-- TODO Translate -->
<string
name=
"msg_language"
>
Language
</string>
<!-- TODO Translate -->
<string
name=
"msg_review_this_app"
>
Review this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_share_this_app"
>
Share this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_administration"
>
Administration
</string>
<!-- TODO Translate -->
<string
name=
"msg_license"
>
License
</string>
<!-- TODO Translate -->
<string
name=
"msg_app_version"
>
Version: %1$s (%2$d)
</string>
<!-- TODO Translate -->
<string
name=
"msg_server_version"
>
Server version: %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_send_analytics"
>
Send analytics
</string>
<!-- TODO Translate -->
<string
name=
"msg_logout_from_rocket_chat"
>
Logout from Rocket.Chat
</string>
<!-- TODO Translate -->
<string
name=
"msg_delete_account"
>
Delete account
</string>
<!-- TODO Translate -->
<string
name=
"msg_change_status"
>
Change status
</string>
<!-- TODO Translate -->
<!-- Regular information messages -->
<string
name=
"msg_generic_error"
>
Mi dispiace, si è verificato un errore, per favore riprova
</string>
...
...
@@ -160,7 +159,7 @@
<string
name=
"msg_continue_with_gitlab"
>
Continua con
<b>
GitLab
</b></string>
<string
name=
"msg_continue_with_wordpress"
>
Continua con
<b>
WordPress
</b></string>
<string
name=
"msg_two_factor_authentication"
>
Autenticazione a 2 fattori (2FA)
</string>
<string
name=
"msg_
_
your_2fa_code"
>
Qual è il tuo codice 2FA?
</string>
<string
name=
"msg_your_2fa_code"
>
Qual è il tuo codice 2FA?
</string>
<string
name=
"msg_permalink_copied"
>
Permalink copiato
</string>
<string
name=
"msg_no_topic"
>
No topic
</string>
<!-- TODO Add translation -->
<string
name=
"msg_no_announcement"
>
No announcement
</string>
<!-- TODO Add translation -->
...
...
@@ -174,6 +173,8 @@
<item
quantity=
"other"
>
%1$s ha reagito con %2$s
</item>
</plurals>
<string
name=
"msg_credentials_saved_successfully"
>
Credenziali salvate con successo
</string>
<string
name=
"msg_server"
>
Server
</string>
<!-- TODO Translate -->
<string
name=
"msg_add_new_server"
>
Add New Server
</string>
<!-- TODO Translate -->
<!-- Create channel messages -->
<string
name=
"msg_private_channel"
>
Privato
</string>
...
...
@@ -306,14 +307,13 @@
<string
name=
"msg_no_recent_emoji"
>
No recent emojis
</string>
<string
name=
"alert_title_default_skin_tone"
>
Default skin tone
</string>
<!-- Sorting and grouping-->
<string
name=
"msg_sort"
>
Ordinare
</string>
<string
name=
"dialog_sort_title"
>
Ordinare per
</string>
<string
name=
"dialog_sort_by_alphabet"
>
Alfabeto
</string>
<string
name=
"dialog_sort_by_activity"
>
Attività
</string>
<string
name=
"dialog_group_by_type"
>
Raggruppa per tipo
</string>
<string
name=
"dialog_group_favourites"
>
Raggruppa preferiti
</string>
<string
name=
"chatroom_header"
>
Intestazione
</string>
<!-- Sort and group -->
<string
name=
"msg_sort_by"
>
Sort by %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_activity"
>
Activity
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_name"
>
Name
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_unread_on_top"
>
Unread on top
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_type"
>
Group by type
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_favorites"
>
Group by favorites
</string>
<!-- TODO Translate -->
<!--ChatRooms Headers-->
<string
name=
"header_favorite"
>
Favorites
</string>
<!-- TODO - Add proper translation -->
...
...
app/src/main/res/values-ja/strings.xml
View file @
f4efa770
...
...
@@ -3,7 +3,6 @@
<!-- Titles -->
<string
name=
"title_sign_in_your_server"
>
サーバーに接続
</string>
<string
name=
"title_log_in"
>
ログイン
</string>
<string
name=
"title_share_the_app"
>
アプリを共有する
</string>
<string
name=
"title_register_username"
>
ユーザー名を登録する
</string>
<string
name=
"title_reset_password"
>
パスワードリセット
</string>
<string
name=
"title_sign_up"
>
サインアップ
</string>
...
...
@@ -20,7 +19,6 @@
<string
name=
"title_admin_panel"
>
管理パネル
</string>
<string
name=
"title_password"
>
パスワードの変更
</string>
<string
name=
"title_update_profile"
>
プロフィールの更新
</string>
<string
name=
"title_about"
>
About
</string>
<!-- TODO Add translation -->
<string
name=
"title_license"
>
License
</string>
<!-- TODO Add translation -->
<string
name=
"title_create_channel"
>
新しいチャネルを作成
</string>
<string
name=
"title_are_you_sure"
>
本気ですか?
</string>
...
...
@@ -34,6 +32,7 @@
<string
name=
"action_use_this_username"
>
このユーザー名を使用する
</string>
<string
name=
"action_terms_of_service"
>
サービス利用規約
</string>
<string
name=
"action_privacy_policy"
>
プライバシーポリシー
</string>
<string
name=
"action_new_channel"
>
New channel
</string>
<!-- TODO Translate -->
<string
name=
"action_search"
>
検索
</string>
<string
name=
"action_update"
>
更新
</string>
<string
name=
"action_settings"
>
設定
</string>
...
...
@@ -43,11 +42,10 @@
<string
name=
"action_attach_a_files"
>
Attach a file
</string>
<!-- TODO Add translation -->
<string
name=
"action_confirm_password"
>
変更したパスワードの確認
</string>
<string
name=
"action_join_chat"
>
チャットに参加
</string>
<string
name=
"action_add_account"
>
サーバーの追加
</string>
<string
name=
"action_online"
>
オンライン
</string>
<string
name=
"action_away"
>
離席中
</string>
<string
name=
"action_busy"
>
取り込み中
</string>
<string
name=
"action_invisible"
>
状態を隠す
</string>
<string
name=
"msg_online"
>
オンライン
</string>
<string
name=
"msg_away"
>
離席中
</string>
<string
name=
"msg_busy"
>
取り込み中
</string>
<string
name=
"msg_invisible"
>
状態を隠す
</string>
<string
name=
"action_drawing"
>
絵を描く
</string>
<string
name=
"action_save_to_gallery"
>
ギャラリーに保存
</string>
<string
name=
"action_select_photo_from_gallery"
>
ギャラリーの写真を選択
</string>
...
...
@@ -58,21 +56,22 @@
<string
name=
"action_create_server"
>
新規サーバーを作成
</string>
<string
name=
"action_register"
>
登録
</string>
<string
name=
"action_confirm"
>
確認
</string>
<string
name=
"action_delete_account"
>
アカウントを削除する
</string>
<string
name=
"action_favorite"
>
Favorite
</string>
<!-- TODO Add translation -->
<string
name=
"action_remove_favorite"
>
Remove favorite
</string>
<!-- TODO Add translation -->
<!-- Settings List -->
<string-array
name=
"settings_actions"
>
<item
name=
"item_preferences"
>
Preferences
</item>
<!-- TODO Add translation -->
<item
name=
"item_password"
>
Change password
</item>
<!-- TODO Add translation -->
<item
name=
"change_language"
>
Change language
</item>
<!-- TODO Add translation -->
<item
name=
"item_share_app"
>
Share app
</item>
<!-- TODO Add translation -->
<item
name=
"item_rate_us"
>
Rate us
</item>
<!-- TODO Add translation -->
<item
name=
"item_contact_us"
>
Contact us
</item>
<!-- TODO Add translation -->
<item
name=
"item_license"
>
License
</item>
<!-- TODO Add translation -->
<item
name=
"item_about"
>
About
</item>
<!-- TODO Add translation -->
</string-array>
<!-- Settings messages -->
<string
name=
"msg_contact_us"
>
Contact us
</string>
<!-- TODO Translate -->
<string
name=
"msg_language"
>
Language
</string>
<!-- TODO Translate -->
<string
name=
"msg_review_this_app"
>
Review this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_share_this_app"
>
Share this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_administration"
>
Administration
</string>
<!-- TODO Translate -->
<string
name=
"msg_license"
>
License
</string>
<!-- TODO Translate -->
<string
name=
"msg_app_version"
>
Version: %1$s (%2$d)
</string>
<!-- TODO Translate -->
<string
name=
"msg_server_version"
>
Server version: %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_send_analytics"
>
Send analytics
</string>
<!-- TODO Translate -->
<string
name=
"msg_logout_from_rocket_chat"
>
Logout from Rocket.Chat
</string>
<!-- TODO Translate -->
<string
name=
"msg_delete_account"
>
Delete account
</string>
<!-- TODO Translate -->
<string
name=
"msg_change_status"
>
Change status
</string>
<!-- TODO Translate -->
<!-- Regular information messages -->
<string
name=
"msg_generic_error"
>
エラーが発生しました。もう一度お試しください。
</string>
...
...
@@ -163,7 +162,7 @@
<string
name=
"msg_continue_with_gitlab"
><b>
GitLab
</b>
でログイン
</string>
<string
name=
"msg_continue_with_wordpress"
><b>
WordPress
</b>
でログイン
</string>
<string
name=
"msg_two_factor_authentication"
>
二要素認証
</string>
<string
name=
"msg_
_
your_2fa_code"
>
あなたの 2FA コードは何ですか?
</string>
<string
name=
"msg_your_2fa_code"
>
あなたの 2FA コードは何ですか?
</string>
<string
name=
"msg_view_more"
>
更に表示
</string>
<string
name=
"msg_view_less"
>
隠す
</string>
<string
name=
"msg_muted_on_this_channel"
>
あなたはこのチャンネルでミュートされています
</string>
...
...
@@ -177,6 +176,8 @@
<item
quantity=
"other"
>
%1$s reacted with %2$s
</item>
<!-- TODO - Add proper translation -->
</plurals>
<string
name=
"msg_credentials_saved_successfully"
>
資格情報を正常に保存しました
</string>
<string
name=
"msg_server"
>
Server
</string>
<!-- TODO Translate -->
<string
name=
"msg_add_new_server"
>
Add New Server
</string>
<!-- TODO Translate -->
<!-- Create channel messages -->
<string
name=
"msg_private_channel"
>
プライベート
</string>
...
...
@@ -309,15 +310,13 @@
<string
name=
"msg_no_recent_emoji"
>
最近の絵文字はありません
</string>
<string
name=
"alert_title_default_skin_tone"
>
デフォルトスキントークン
</string>
<!-- Sorting and grouping-->
<string
name=
"msg_sort"
>
ソート
</string>
<string
name=
"dialog_sort_title"
>
ソート
</string>
<string
name=
"dialog_sort_by_alphabet"
>
アルファベット順
</string>
<string
name=
"dialog_sort_by_activity"
>
アクティビティ順
</string>
<string
name=
"dialog_group_by_type"
>
グループ別
</string>
<string
name=
"dialog_group_favourites"
>
お気に入りのグループ
</string>
<string
name=
"chatroom_header"
>
ヘッダ
</string>
<!-- Sort and group -->
<string
name=
"msg_sort_by"
>
Sort by %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_activity"
>
Activity
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_name"
>
Name
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_unread_on_top"
>
Unread on top
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_type"
>
Group by type
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_favorites"
>
Group by favorites
</string>
<!-- TODO Translate -->
<!--ChatRooms Headers-->
<string
name=
"header_favorite"
>
Favorites
</string>
<!-- TODO - Add proper translation -->
...
...
app/src/main/res/values-pt-rBR/strings.xml
View file @
f4efa770
...
...
@@ -3,7 +3,6 @@
<!-- Titles -->
<string
name=
"title_sign_in_your_server"
>
Faça login no seu servidor
</string>
<string
name=
"title_log_in"
>
Entrar
</string>
<string
name=
"title_share_the_app"
>
Compartilhe o aplicativo
</string>
<string
name=
"title_register_username"
>
Registre o nome de usuário
</string>
<string
name=
"title_reset_password"
>
Redefinir senha
</string>
<string
name=
"title_sign_up"
>
Inscreva-se
</string>
...
...
@@ -20,7 +19,6 @@
<string
name=
"title_admin_panel"
>
Painel administrativo
</string>
<string
name=
"title_password"
>
Alterar senha
</string>
<string
name=
"title_update_profile"
>
Editar perfil
</string>
<string
name=
"title_about"
>
Sobre
</string>
<string
name=
"title_create_channel"
>
Criar chat
</string>
<string
name=
"title_license"
>
Licença
</string>
<string
name=
"title_are_you_sure"
>
Você tem certeza?
</string>
...
...
@@ -34,6 +32,7 @@
<string
name=
"action_use_this_username"
>
Usar este nome de usuário
</string>
<string
name=
"action_terms_of_service"
>
Termos de Serviço
</string>
<string
name=
"action_privacy_policy"
>
Política de Privacidade
</string>
<string
name=
"action_new_channel"
>
Novo canal
</string>
<string
name=
"action_search"
>
Pesquisar
</string>
<string
name=
"action_update"
>
Atualizar
</string>
<string
name=
"action_settings"
>
Configurações
</string>
...
...
@@ -43,11 +42,10 @@
<string
name=
"action_attach_a_files"
>
Anexar um arquivo
</string>
<string
name=
"action_confirm_password"
>
Confirme a nova senha
</string>
<string
name=
"action_join_chat"
>
Entrar no Chat
</string>
<string
name=
"action_add_account"
>
Adicionar conta
</string>
<string
name=
"action_online"
>
Online
</string>
<string
name=
"action_away"
>
Ausente
</string>
<string
name=
"action_busy"
>
Ocupado
</string>
<string
name=
"action_invisible"
>
Invisível
</string>
<string
name=
"msg_online"
>
Online
</string>
<string
name=
"msg_away"
>
Ausente
</string>
<string
name=
"msg_busy"
>
Ocupado
</string>
<string
name=
"msg_invisible"
>
Invisível
</string>
<string
name=
"action_drawing"
>
Desenhando
</string>
<string
name=
"action_save_to_gallery"
>
Salvar na galeria
</string>
<string
name=
"action_select_photo_from_gallery"
>
Escolher foto da galeria
</string>
...
...
@@ -58,21 +56,22 @@
<string
name=
"action_create_server"
>
Criar um novo servidor
</string>
<string
name=
"action_register"
>
Registrar
</string>
<string
name=
"action_confirm"
>
Confirmar
</string>
<string
name=
"action_delete_account"
>
Deletar conta
</string>
<string
name=
"action_favorite"
>
Favoritar
</string>
<string
name=
"action_remove_favorite"
>
Remover favorito
</string>
<!-- Settings List -->
<string-array
name=
"settings_actions"
>
<item
name=
"item_preferences"
>
Preferências
</item>
<item
name=
"item_password"
>
Alterar senha
</item>
<item
name=
"change_language"
>
Alterar idioma
</item>
<item
name=
"item_share_app"
>
Compartilhar app
</item>
<item
name=
"item_rate_us"
>
Classifique-nos
</item>
<item
name=
"item_contact_us"
>
Contate-nos
</item>
<item
name=
"item_license"
>
Licença
</item>
<item
name=
"item_about"
>
Sobre
</item>
</string-array>
<!-- Settings messages -->
<string
name=
"msg_contact_us"
>
Contact us
</string>
<!-- TODO Translate -->
<string
name=
"msg_language"
>
Language
</string>
<!-- TODO Translate -->
<string
name=
"msg_review_this_app"
>
Review this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_share_this_app"
>
Share this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_administration"
>
Administration
</string>
<!-- TODO Translate -->
<string
name=
"msg_license"
>
License
</string>
<!-- TODO Translate -->
<string
name=
"msg_app_version"
>
Version: %1$s (%2$d)
</string>
<!-- TODO Translate -->
<string
name=
"msg_server_version"
>
Server version: %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_send_analytics"
>
Send analytics
</string>
<!-- TODO Translate -->
<string
name=
"msg_logout_from_rocket_chat"
>
Logout from Rocket.Chat
</string>
<!-- TODO Translate -->
<string
name=
"msg_delete_account"
>
Delete account
</string>
<!-- TODO Translate -->
<string
name=
"msg_change_status"
>
Change status
</string>
<!-- TODO Translate -->
<!-- Regular information messages -->
<string
name=
"msg_generic_error"
>
Desculpe, ocorreu um erro, tente novamente
</string>
...
...
@@ -165,7 +164,7 @@
<string
name=
"msg_continue_with_gitlab"
>
Continuar com
<b>
GitLab
</b></string>
<string
name=
"msg_continue_with_wordpress"
>
Continuar com
<b>
WordPress
</b></string>
<string
name=
"msg_two_factor_authentication"
>
Autenticação de dois fatores
</string>
<string
name=
"msg_
_
your_2fa_code"
>
Qual é o seu código da autenticação de dois fatores?
</string>
<string
name=
"msg_your_2fa_code"
>
Qual é o seu código da autenticação de dois fatores?
</string>
<string
name=
"msg_view_more"
>
visualizar mais
</string>
<string
name=
"msg_view_less"
>
visualizar menos
</string>
<string
name=
"msg_permalink_copied"
>
Permalink copiado
</string>
...
...
@@ -177,12 +176,13 @@
<string
name=
"msg_no_description"
>
Nenhuma descrição
</string>
<string
name=
"msg_unable_to_update_password"
>
Não foi possível atualizar a senha. Mensagem de erro: %1$s
</string>
<string
name=
"msg_password_updated_successfully"
>
Senha alterada com sucesso
</string>
<string
name=
"msg_sort"
>
Ordenar
</string>
<plurals
name=
"msg_reacted_with_"
>
<item
quantity=
"one"
>
%1$s reagiu com %2$s
</item>
<item
quantity=
"other"
>
%1$s reagiram com %2$s
</item>
</plurals>
<string
name=
"msg_credentials_saved_successfully"
>
Credenciais salvas com sucesso
</string>
<string
name=
"msg_server"
>
Server
</string>
<!-- TODO Translate -->
<string
name=
"msg_add_new_server"
>
Add New Server
</string>
<!-- TODO Translate -->
<!-- Create channel messages -->
<string
name=
"msg_private_channel"
>
Privado
</string>
...
...
@@ -309,13 +309,13 @@
<string
name=
"msg_no_recent_emoji"
>
Nenhum emoji recente
</string>
<string
name=
"alert_title_default_skin_tone"
>
Tom de pele padrão
</string>
<!-- Sort
ing and grouping
-->
<string
name=
"
dialog_sort_title"
>
Ordenar por
</string>
<string
name=
"
dialog_sort_by_alphabet"
>
Alfabeticament
e
</string>
<string
name=
"
dialog_sort_by_activity"
>
Atividad
e
</string>
<string
name=
"
dialog_group_by_type"
>
Agrupar por ti
po
</string>
<string
name=
"
dialog_group_favourites"
>
Grupos favoritos
</string>
<string
name=
"
chatroom_header"
>
Cabeçalho
</string>
<!-- Sort
and group
-->
<string
name=
"
msg_sort_by"
>
Ordenar por %1$s
</string>
<string
name=
"
msg_sort_by_activity"
>
Atividad
e
</string>
<string
name=
"
msg_sort_by_name"
>
Nom
e
</string>
<string
name=
"
msg_group_by_unread_on_top"
>
Não lidas no to
po
</string>
<string
name=
"
msg_group_by_type"
>
Agrupar por tipo
</string>
<string
name=
"
msg_group_by_favorites"
>
Agrupar por favoritos
</string>
<!--ChatRooms Headers-->
<string
name=
"header_favorite"
>
Favoritos
</string>
...
...
app/src/main/res/values-pt-rPT/strings.xml
View file @
f4efa770
...
...
@@ -3,7 +3,6 @@
<!-- Titles -->
<string
name=
"title_sign_in_your_server"
>
Entre no seu servidor
</string>
<string
name=
"title_log_in"
>
Entrar
</string>
<string
name=
"title_share_the_app"
>
Partilhe a Aplicação
</string>
<string
name=
"title_register_username"
>
Registe um utilizador
</string>
<string
name=
"title_reset_password"
>
Reponha a palavra-passe
</string>
<string
name=
"title_sign_up"
>
Inscreva-se
</string>
...
...
@@ -20,7 +19,6 @@
<string
name=
"title_admin_panel"
>
Painel de Administração
</string>
<string
name=
"title_password"
>
Alterar palavra-passe
</string>
<string
name=
"title_update_profile"
>
Actualizar perfil
</string>
<string
name=
"title_about"
>
Acerca
</string>
<string
name=
"title_create_channel"
>
Criar Canal
</string>
<string
name=
"title_license"
>
Licença
</string>
<string
name=
"title_are_you_sure"
>
Tem a certeza?
</string>
...
...
@@ -35,6 +33,7 @@
<string
name=
"action_terms_of_service"
>
Termos do Serviço
</string>
<string
name=
"action_privacy_policy"
>
Política de Privacidade
</string>
<string
name=
"action_search"
>
Pesquisar
</string>
<string
name=
"action_new_channel"
>
New channel
</string>
<!-- TODO Translate -->
<string
name=
"action_update"
>
Actualizar
</string>
<string
name=
"action_settings"
>
Definições
</string>
<string
name=
"action_create_channel"
>
Criar canal
</string>
...
...
@@ -43,11 +42,10 @@
<string
name=
"action_attach_a_files"
>
Enviar um ficheiro
</string>
<string
name=
"action_confirm_password"
>
Confirme a alteração da palavra-passe
</string>
<string
name=
"action_join_chat"
>
Entre no chat
</string>
<string
name=
"action_add_account"
>
Adicionar conta
</string>
<string
name=
"action_online"
>
Online
</string>
<string
name=
"action_away"
>
Ausente
</string>
<string
name=
"action_busy"
>
Ocupado
</string>
<string
name=
"action_invisible"
>
Invisível
</string>
<string
name=
"msg_online"
>
Online
</string>
<string
name=
"msg_away"
>
Ausente
</string>
<string
name=
"msg_busy"
>
Ocupado
</string>
<string
name=
"msg_invisible"
>
Invisível
</string>
<string
name=
"action_drawing"
>
A desenhar
</string>
<string
name=
"action_save_to_gallery"
>
Guardar na galeria
</string>
<string
name=
"action_select_photo_from_gallery"
>
Selecione a foto da galeria
</string>
...
...
@@ -58,19 +56,20 @@
<string
name=
"action_create_server"
>
Crie um novo servidor
</string>
<string
name=
"action_register"
>
Registar
</string>
<string
name=
"action_confirm"
>
Confirmar
</string>
<string
name=
"action_delete_account"
>
Apagar conta
</string>
<!-- Settings List -->
<string-array
name=
"settings_actions"
>
<item
name=
"item_preferences"
>
Preferências
</item>
<item
name=
"item_password"
>
Alterar palavra-passe
</item>
<item
name=
"change_language"
>
Alterar idioma
</item>
<item
name=
"item_share_app"
>
Partilhe a aplicação
</item>
<item
name=
"item_rate_us"
>
Avalie-nos
</item>
<item
name=
"item_contact_us"
>
Contacte-nos
</item>
<item
name=
"item_license"
>
Licença
</item>
<item
name=
"item_about"
>
Acerca
</item>
</string-array>
<!-- Settings messages -->
<string
name=
"msg_contact_us"
>
Contact us
</string>
<!-- TODO Translate -->
<string
name=
"msg_language"
>
Language
</string>
<!-- TODO Translate -->
<string
name=
"msg_review_this_app"
>
Review this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_share_this_app"
>
Share this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_administration"
>
Administration
</string>
<!-- TODO Translate -->
<string
name=
"msg_license"
>
License
</string>
<!-- TODO Translate -->
<string
name=
"msg_app_version"
>
Version: %1$s (%2$d)
</string>
<!-- TODO Translate -->
<string
name=
"msg_server_version"
>
Server version: %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_send_analytics"
>
Send analytics
</string>
<!-- TODO Translate -->
<string
name=
"msg_logout_from_rocket_chat"
>
Logout from Rocket.Chat
</string>
<!-- TODO Translate -->
<string
name=
"msg_delete_account"
>
Delete account
</string>
<!-- TODO Translate -->
<string
name=
"msg_change_status"
>
Change status
</string>
<!-- TODO Translate -->
<!-- Regular information messages -->
<string
name=
"msg_generic_error"
>
Lamentamos, ocorreu um erro, tente novamente
</string>
...
...
@@ -160,7 +159,7 @@
<string
name=
"msg_continue_with_gitlab"
>
Continue com
<b>
GitLab
</b></string>
<string
name=
"msg_continue_with_wordpress"
>
Continue com
<b>
WordPress
</b></string>
<string
name=
"msg_two_factor_authentication"
>
Autenticação 2FA
</string>
<string
name=
"msg_
_
your_2fa_code"
>
Qual é o seu código 2FA?
</string>
<string
name=
"msg_your_2fa_code"
>
Qual é o seu código 2FA?
</string>
<string
name=
"msg_permalink_copied"
>
Link permanente copiado
</string>
<string
name=
"msg_no_topic"
>
Nenhum tópico adicionado
</string>
<string
name=
"msg_no_announcement"
>
Nenhum anúncio adicionado
</string>
...
...
@@ -173,6 +172,8 @@
<item
quantity=
"one"
>
%1$s reagiu com %2$s
</item>
<item
quantity=
"other"
>
%1$s reagiram com %2$s
</item>
</plurals>
<string
name=
"msg_server"
>
Server
</string>
<!-- TODO Translate -->
<string
name=
"msg_add_new_server"
>
Add New Server
</string>
<!-- TODO Translate -->
<!-- Create channel messages -->
<string
name=
"msg_private_channel"
>
Privado
</string>
...
...
@@ -306,14 +307,13 @@
<string
name=
"msg_no_recent_emoji"
>
Nenhum emojis recente
</string>
<string
name=
"alert_title_default_skin_tone"
>
Tom de pele padrão
</string>
<!-- Sorting and grouping-->
<string
name=
"msg_sort"
>
Ordenar
</string>
<string
name=
"dialog_sort_title"
>
Ordenar por
</string>
<string
name=
"dialog_sort_by_alphabet"
>
Alfabeticamente
</string>
<string
name=
"dialog_sort_by_activity"
>
Actividade
</string>
<string
name=
"dialog_group_by_type"
>
Agrupar por tipo
</string>
<string
name=
"dialog_group_favourites"
>
Agrupar favoritos
</string>
<string
name=
"chatroom_header"
>
Cabeçalho
</string>
<!-- Sort and group -->
<string
name=
"msg_sort_by"
>
Sort by %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_activity"
>
Activity
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_name"
>
Name
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_unread_on_top"
>
Unread on top
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_type"
>
Group by type
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_favorites"
>
Group by favorites
</string>
<!-- TODO Translate -->
<!--ChatRooms Headers-->
<string
name=
"header_favorite"
>
Favoritos
</string>
...
...
@@ -336,7 +336,7 @@
<!-- User Details -->
<string
name=
"timezone"
>
Fuso Horário
</string>
<string
name=
"status"
>
Estado
</string>
<string
name=
"status"
>
Estado
: %1$s
</string>
<!-- Report -->
<string
name=
"submit"
>
Enviar
</string>
...
...
app/src/main/res/values-ru-rRU/strings.xml
View file @
f4efa770
...
...
@@ -3,7 +3,6 @@
<!-- Titles -->
<string
name=
"title_sign_in_your_server"
>
Ваш сервер
</string>
<string
name=
"title_log_in"
>
Войти
</string>
<string
name=
"title_share_the_app"
>
добавить приложение
</string>
<string
name=
"title_register_username"
>
Зарегистрировать имя
</string>
<string
name=
"title_reset_password"
>
Сброс пароля
</string>
<string
name=
"title_sign_up"
>
Зарегистрироваться
</string>
...
...
@@ -20,7 +19,6 @@
<string
name=
"title_admin_panel"
>
Панель админа
</string>
<string
name=
"title_password"
>
Изменить пароль
</string>
<string
name=
"title_update_profile"
>
Обновить профиль
</string>
<string
name=
"title_about"
>
О программе
</string>
<string
name=
"title_create_channel"
>
Создать новый канал
</string>
<string
name=
"title_channel_details"
>
О канале
</string>
<string
name=
"title_topic"
>
Тема
</string>
...
...
@@ -34,6 +32,7 @@
<string
name=
"action_use_this_username"
>
Использовать это имя
</string>
<string
name=
"action_terms_of_service"
>
Условия использования
</string>
<string
name=
"action_privacy_policy"
>
Политика конфиденциальности
</string>
<string
name=
"action_new_channel"
>
New channel
</string>
<!-- TODO Translate -->
<string
name=
"action_search"
>
Поиск
</string>
<string
name=
"action_update"
>
Обновить
</string>
<string
name=
"action_settings"
>
Настройки
</string>
...
...
@@ -43,11 +42,10 @@
<string
name=
"action_attach_a_files"
>
Прикрепить файл
</string>
<string
name=
"action_confirm_password"
>
Подтверждение изменения пароля
</string>
<string
name=
"action_join_chat"
>
Присоединиться к чату
</string>
<string
name=
"action_add_account"
>
Добавить аккаунт
</string>
<string
name=
"action_online"
>
Онлайн
</string>
<string
name=
"action_away"
>
Отошел
</string>
<string
name=
"action_busy"
>
Занят
</string>
<string
name=
"action_invisible"
>
Невидимый
</string>
<string
name=
"msg_online"
>
Онлайн
</string>
<string
name=
"msg_away"
>
Отошел
</string>
<string
name=
"msg_busy"
>
Занят
</string>
<string
name=
"msg_invisible"
>
Невидимый
</string>
<string
name=
"action_drawing"
>
Рисунок
</string>
<string
name=
"action_save_to_gallery"
>
Сохранить в галерею
</string>
<string
name=
"action_select_photo_from_gallery"
>
Выбрать из галереи
</string>
...
...
@@ -58,21 +56,22 @@
<string
name=
"action_create_server"
>
Создать новый сервер
</string>
<string
name=
"action_register"
>
Зарегистрировать
</string>
<string
name=
"action_confirm"
>
Подтвердить
</string>
<string
name=
"action_delete_account"
>
Удалить аккаунт
</string>
<string
name=
"action_favorite"
>
В избранное
</string>
<string
name=
"action_remove_favorite"
>
Удалить из избранного
</string>
<!-- Settings List -->
<string-array
name=
"settings_actions"
>
<item
name=
"item_preferences"
>
Персональные
</item>
<item
name=
"item_password"
>
Изменить пароль
</item>
<item
name=
"change_language"
>
Изменить язык
</item>
<item
name=
"item_share_app"
>
Поделиться приложением
</item>
<item
name=
"item_rate_us"
>
Оцените нас
</item>
<item
name=
"item_contact_us"
>
Связаться с нами
</item>
<item
name=
"item_license"
>
Лицензия
</item>
<item
name=
"item_about"
>
О программе
</item>
</string-array>
<!-- Settings messages -->
<string
name=
"msg_contact_us"
>
Contact us
</string>
<!-- TODO Translate -->
<string
name=
"msg_language"
>
Language
</string>
<!-- TODO Translate -->
<string
name=
"msg_review_this_app"
>
Review this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_share_this_app"
>
Share this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_administration"
>
Administration
</string>
<!-- TODO Translate -->
<string
name=
"msg_license"
>
License
</string>
<!-- TODO Translate -->
<string
name=
"msg_app_version"
>
Version: %1$s (%2$d)
</string>
<!-- TODO Translate -->
<string
name=
"msg_server_version"
>
Server version: %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_send_analytics"
>
Send analytics
</string>
<!-- TODO Translate -->
<string
name=
"msg_logout_from_rocket_chat"
>
Logout from Rocket.Chat
</string>
<!-- TODO Translate -->
<string
name=
"msg_delete_account"
>
Delete account
</string>
<!-- TODO Translate -->
<string
name=
"msg_change_status"
>
Change status
</string>
<!-- TODO Translate -->
<!-- Regular information messages -->
<string
name=
"msg_generic_error"
>
Произошла ошибка, повторите попытку.
</string>
...
...
@@ -162,7 +161,7 @@
<string
name=
"msg_continue_with_gitlab"
>
Войти с помощью
<b>
GitLab
</b></string>
<string
name=
"msg_continue_with_wordpress"
>
Войти с помощью
<b>
WordPress
</b></string>
<string
name=
"msg_two_factor_authentication"
>
Двухфакторная аутентификация
</string>
<string
name=
"msg_
_
your_2fa_code"
>
Ваш код 2FA?
</string>
<string
name=
"msg_your_2fa_code"
>
Ваш код 2FA?
</string>
<string
name=
"msg_view_more"
>
больше
</string>
<string
name=
"msg_view_less"
>
меньше
</string>
<string
name=
"msg_permalink_copied"
>
Ссылка скопирована
</string>
...
...
@@ -180,6 +179,8 @@
<item
quantity=
"many"
>
%1$s реагируют с %2$s
</item>
</plurals>
<string
name=
"msg_credentials_saved_successfully"
>
Учетные данные успешно сохранены
</string>
<string
name=
"msg_server"
>
Server
</string>
<!-- TODO Translate -->
<string
name=
"msg_add_new_server"
>
Add New Server
</string>
<!-- TODO Translate -->
<!-- Create channel messages -->
<string
name=
"msg_private_channel"
>
Приватный
</string>
...
...
@@ -306,14 +307,13 @@
<string
name=
"msg_no_recent_emoji"
>
Пусто
</string>
<string
name=
"alert_title_default_skin_tone"
>
Тон кожи по умолчанию
</string>
<!-- Sorting and grouping-->
<string
name=
"msg_sort"
>
Сортировать
</string>
<string
name=
"dialog_sort_title"
>
Сортировать по
</string>
<string
name=
"dialog_sort_by_alphabet"
>
По алфавиту
</string>
<string
name=
"dialog_sort_by_activity"
>
По активности
</string>
<string
name=
"dialog_group_by_type"
>
Группировать по типу
</string>
<string
name=
"dialog_group_favourites"
>
Группировать избранное
</string>
<string
name=
"chatroom_header"
>
Заголовок
</string>
<!-- Sort and group -->
<string
name=
"msg_sort_by"
>
Sort by %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_activity"
>
Activity
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_name"
>
Name
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_unread_on_top"
>
Unread on top
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_type"
>
Group by type
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_favorites"
>
Group by favorites
</string>
<!-- TODO Translate -->
<!--ChatRooms Headers-->
<string
name=
"header_favorite"
>
Избранные
</string>
...
...
app/src/main/res/values-tr/strings.xml
View file @
f4efa770
...
...
@@ -3,7 +3,6 @@
<!-- Titles -->
<string
name=
"title_sign_in_your_server"
>
Sunucunuza Bağlantı Kurun
</string>
<string
name=
"title_log_in"
>
Giriş Yapın
</string>
<string
name=
"title_share_the_app"
>
uygulamayı Paylaş
</string>
<string
name=
"title_register_username"
>
Kullanıcı Adıyla Kaydolun
</string>
<string
name=
"title_reset_password"
>
Şifre Sıfırlama
</string>
<string
name=
"title_sign_up"
>
Kayıt Olun
</string>
...
...
@@ -20,7 +19,6 @@
<string
name=
"title_admin_panel"
>
Yönetici Paneli
</string>
<string
name=
"title_password"
>
Şifrenizi Değiştirin
</string>
<string
name=
"title_update_profile"
>
Profilinizi Düzenleyin
</string>
<string
name=
"title_about"
>
Hakkında
</string>
<string
name=
"title_create_channel"
>
Yeni Kanal Oluştur
</string>
<string
name=
"title_license"
>
License
</string>
<!-- TODO Add translation -->
<string
name=
"title_are_you_sure"
>
Are you sure?
</string>
<!-- TODO Add translation -->
...
...
@@ -34,6 +32,7 @@
<string
name=
"action_use_this_username"
>
Bu kullanıcı adını kullan
</string>
<string
name=
"action_terms_of_service"
>
Kullanım Şartları
</string>
<string
name=
"action_privacy_policy"
>
Gizlilik Sözleşmesi
</string>
<string
name=
"action_new_channel"
>
New channel
</string>
<!-- TODO Translate -->
<string
name=
"action_search"
>
Ara
</string>
<string
name=
"action_update"
>
Güncelle
</string>
<string
name=
"action_settings"
>
Ayarlar
</string>
...
...
@@ -43,11 +42,10 @@
<string
name=
"action_attach_a_files"
>
Attach a file
</string>
<!-- TODO Add translation -->
<string
name=
"action_confirm_password"
>
Şifre Değişikliğini Onaylayın
</string>
<string
name=
"action_join_chat"
>
Sohbete Bağlan
</string>
<string
name=
"action_add_account"
>
Hesap Ekle
</string>
<string
name=
"action_online"
>
Çevrimiçi
</string>
<string
name=
"action_away"
>
Uzakta
</string>
<string
name=
"action_busy"
>
Meşgul
</string>
<string
name=
"action_invisible"
>
Görünmez
</string>
<string
name=
"msg_online"
>
Çevrimiçi
</string>
<string
name=
"msg_away"
>
Uzakta
</string>
<string
name=
"msg_busy"
>
Meşgul
</string>
<string
name=
"msg_invisible"
>
Görünmez
</string>
<string
name=
"action_drawing"
>
Çizim
</string>
<string
name=
"action_save_to_gallery"
>
Galeriye kaydet
</string>
<string
name=
"action_select_photo_from_gallery"
>
Galeriden resim seç
</string>
...
...
@@ -58,21 +56,22 @@
<string
name=
"action_create_server"
>
Create a new server
</string>
<!-- TODO Add translation -->
<string
name=
"action_register"
>
Register
</string>
<!-- TODO Add translation -->
<string
name=
"action_confirm"
>
Confirm
</string>
<!-- TODO Add translation -->
<string
name=
"action_delete_account"
>
Delete account
</string>
<!-- TODO Add translation -->
<string
name=
"action_favorite"
>
Favorite
</string>
<!-- TODO Add translation -->
<string
name=
"action_remove_favorite"
>
Remove favorite
</string>
<!-- TODO Add translation -->
<!-- Settings List -->
<string-array
name=
"settings_actions"
>
<item
name=
"item_preferences"
>
Preferences
</item>
<!-- TODO Add translation -->
<item
name=
"item_password"
>
Change password
</item>
<!-- TODO Add translation -->
<item
name=
"change_language"
>
Change language
</item>
<!-- TODO Add translation -->
<item
name=
"item_share_app"
>
Share app
</item>
<!-- TODO Add translation -->
<item
name=
"item_rate_us"
>
Rate us
</item>
<!-- TODO Add translation -->
<item
name=
"item_contact_us"
>
Contact us
</item>
<!-- TODO Add translation -->
<item
name=
"item_license"
>
License
</item>
<!-- TODO Add translation -->
<item
name=
"item_about"
>
About
</item>
<!-- TODO Add translation -->
</string-array>
<!-- Settings messages -->
<string
name=
"msg_contact_us"
>
Contact us
</string>
<!-- TODO Translate -->
<string
name=
"msg_language"
>
Language
</string>
<!-- TODO Translate -->
<string
name=
"msg_review_this_app"
>
Review this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_share_this_app"
>
Share this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_administration"
>
Administration
</string>
<!-- TODO Translate -->
<string
name=
"msg_license"
>
License
</string>
<!-- TODO Translate -->
<string
name=
"msg_app_version"
>
Version: %1$s (%2$d)
</string>
<!-- TODO Translate -->
<string
name=
"msg_server_version"
>
Server version: %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_send_analytics"
>
Send analytics
</string>
<!-- TODO Translate -->
<string
name=
"msg_logout_from_rocket_chat"
>
Logout from Rocket.Chat
</string>
<!-- TODO Translate -->
<string
name=
"msg_delete_account"
>
Delete account
</string>
<!-- TODO Translate -->
<string
name=
"msg_change_status"
>
Change status
</string>
<!-- TODO Translate -->
<!-- Regular information messages -->
<string
name=
"msg_generic_error"
>
Üzgünüz! bir hata oluştu. Lütfen daha sonra tekrar deneyiniz.
</string>
...
...
@@ -163,7 +162,7 @@
<string
name=
"msg_continue_with_gitlab"
>
Continue with
<b>
GitLab
</b></string>
<!-- TODO Add translation -->
<string
name=
"msg_continue_with_wordpress"
>
Continue with
<b>
WordPress
</b></string>
<!-- TODO Add translation -->
<string
name=
"msg_two_factor_authentication"
>
Two-factor Authentication
</string>
<!-- TODO Add translation -->
<string
name=
"msg_
_
your_2fa_code"
>
What’s your 2FA code?
</string>
<!-- TODO Add translation -->
<string
name=
"msg_your_2fa_code"
>
What’s your 2FA code?
</string>
<!-- TODO Add translation -->
<!-- Create channel messages -->
<string
name=
"msg_private_channel"
>
Özel
</string>
...
...
@@ -195,6 +194,8 @@
<item
quantity=
"other"
>
%1$s reacted with %2$s
</item>
<!-- TODO - Add proper translation -->
</plurals>
<string
name=
"msg_credentials_saved_successfully"
>
Kimlik bilgileri başarıyla kaydedildi
</string>
<string
name=
"msg_server"
>
Server
</string>
<!-- TODO Translate -->
<string
name=
"msg_add_new_server"
>
Add New Server
</string>
<!-- TODO Translate -->
<!-- Preferences messages -->
<string
name=
"msg_analytics_tracking"
>
İstatistik takibi
</string>
...
...
@@ -310,14 +311,13 @@
<string
name=
"msg_no_recent_emoji"
>
Son kullanılan emoji bulunmamaktadır
</string>
<string
name=
"alert_title_default_skin_tone"
>
Varsayılan tasarım tonu
</string>
<!-- Sorting and grouping-->
<string
name=
"msg_sort"
>
Sırala
</string>
<string
name=
"dialog_sort_title"
>
Sırala
</string>
<string
name=
"dialog_sort_by_alphabet"
>
Alfabetik
</string>
<string
name=
"dialog_sort_by_activity"
>
Aktiviteye Göre
</string>
<string
name=
"dialog_group_by_type"
>
Türüne göre grupla
</string>
<string
name=
"dialog_group_favourites"
>
Favorileri grupla
</string>
<string
name=
"chatroom_header"
>
Başlık
</string>
<!-- Sort and group -->
<string
name=
"msg_sort_by"
>
Sort by %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_activity"
>
Activity
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_name"
>
Name
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_unread_on_top"
>
Unread on top
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_type"
>
Group by type
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_favorites"
>
Group by favorites
</string>
<!-- TODO Translate -->
<!--ChatRooms Headers-->
<string
name=
"header_favorite"
>
Favorites
</string>
<!-- TODO - Add proper translation -->
...
...
app/src/main/res/values-uk/strings.xml
View file @
f4efa770
...
...
@@ -3,7 +3,6 @@
<!-- Titles -->
<string
name=
"title_sign_in_your_server"
>
Ваш сервер
</string>
<string
name=
"title_log_in"
>
Увійти
</string>
<string
name=
"title_share_the_app"
>
поділитися прикладом
</string>
<string
name=
"title_register_username"
>
Зареєструвати ім\'я
</string>
<string
name=
"title_reset_password"
>
Відновлення паролю
</string>
<string
name=
"title_sign_up"
>
Зареєструватися
</string>
...
...
@@ -20,7 +19,6 @@
<string
name=
"title_admin_panel"
>
Панель адміністратора
</string>
<string
name=
"title_password"
>
Змінити пароль
</string>
<string
name=
"title_update_profile"
>
Оновити профіль
</string>
<string
name=
"title_about"
>
"Про програму"
</string>
<string
name=
"title_create_channel"
>
Створити новий канал
</string>
<string
name=
"title_license"
>
License
</string>
<!-- TODO Add translation -->
<string
name=
"title_are_you_sure"
>
Are you sure?
</string>
<!-- TODO Add translation -->
...
...
@@ -34,6 +32,7 @@
<string
name=
"action_use_this_username"
>
Використати це ім\'я
</string>
<string
name=
"action_terms_of_service"
>
Умови використання
</string>
<string
name=
"action_privacy_policy"
>
Політика конфіденційності
</string>
<string
name=
"action_new_channel"
>
New channel
</string>
<!-- TODO Translate -->
<string
name=
"action_search"
>
Пошук
</string>
<string
name=
"action_update"
>
Оновити
</string>
<string
name=
"action_settings"
>
Налаштування
</string>
...
...
@@ -43,11 +42,10 @@
<string
name=
"action_attach_a_files"
>
Attach a file
</string>
<!-- TODO Add translation -->
<string
name=
"action_confirm_password"
>
Підтвердження зміни пароля
</string>
<string
name=
"action_join_chat"
>
Приєднатися до чату
</string>
<string
name=
"action_add_account"
>
Додати аккаунт
</string>
<string
name=
"action_online"
>
Онлайн
</string>
<string
name=
"action_away"
>
Відійшов
</string>
<string
name=
"action_busy"
>
Зайнятий
</string>
<string
name=
"action_invisible"
>
Невидимий
</string>
<string
name=
"msg_online"
>
Онлайн
</string>
<string
name=
"msg_away"
>
Відійшов
</string>
<string
name=
"msg_busy"
>
Зайнятий
</string>
<string
name=
"msg_invisible"
>
Невидимий
</string>
<string
name=
"action_drawing"
>
Малюнок
</string>
<string
name=
"action_save_to_gallery"
>
Зберегти до галереї
</string>
<string
name=
"action_select_photo_from_gallery"
>
Вибрати з галереї
</string>
...
...
@@ -58,21 +56,22 @@
<string
name=
"action_create_server"
>
Create a new server
</string>
<!-- TODO Add translation -->
<string
name=
"action_register"
>
Register
</string>
<!-- TODO Add translation -->
<string
name=
"action_confirm"
>
Confirm
</string>
<!-- TODO Add translation -->
<string
name=
"action_delete_account"
>
Delete account
</string>
<!-- TODO Add translation -->
<string
name=
"action_favorite"
>
Favorite
</string>
<!-- TODO Add translation -->
<string
name=
"action_remove_favorite"
>
Remove favorite
</string>
<!-- TODO Add translation -->
<!-- Settings List -->
<string-array
name=
"settings_actions"
>
<item
name=
"item_preferences"
>
Preferences
</item>
<!-- TODO Add translation -->
<item
name=
"item_password"
>
Change password
</item>
<!-- TODO Add translation -->
<item
name=
"change_language"
>
Change language
</item>
<!-- TODO Add translation -->
<item
name=
"item_share_app"
>
Share app
</item>
<!-- TODO Add translation -->
<item
name=
"item_rate_us"
>
Rate us
</item>
<!-- TODO Add translation -->
<item
name=
"item_contact_us"
>
Contact us
</item>
<!-- TODO Add translation -->
<item
name=
"item_license"
>
License
</item>
<!-- TODO Add translation -->
<item
name=
"item_about"
>
About
</item>
<!-- TODO Add translation -->
</string-array>
<!-- Settings messages -->
<string
name=
"msg_contact_us"
>
Contact us
</string>
<!-- TODO Translate -->
<string
name=
"msg_language"
>
Language
</string>
<!-- TODO Translate -->
<string
name=
"msg_review_this_app"
>
Review this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_share_this_app"
>
Share this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_administration"
>
Administration
</string>
<!-- TODO Translate -->
<string
name=
"msg_license"
>
License
</string>
<!-- TODO Translate -->
<string
name=
"msg_app_version"
>
Version: %1$s (%2$d)
</string>
<!-- TODO Translate -->
<string
name=
"msg_server_version"
>
Server version: %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_send_analytics"
>
Send analytics
</string>
<!-- TODO Translate -->
<string
name=
"msg_logout_from_rocket_chat"
>
Logout from Rocket.Chat
</string>
<!-- TODO Translate -->
<string
name=
"msg_delete_account"
>
Delete account
</string>
<!-- TODO Translate -->
<string
name=
"msg_change_status"
>
Change status
</string>
<!-- TODO Translate -->
<!-- Regular information messages -->
<string
name=
"msg_generic_error"
>
Сталася помилка, спробуйте ще раз.
</string>
...
...
@@ -161,7 +160,7 @@
<string
name=
"msg_continue_with_gitlab"
>
Continue with
<b>
GitLab
</b></string>
<!-- TODO Add translation -->
<string
name=
"msg_continue_with_wordpress"
>
Continue with
<b>
WordPress
</b></string>
<!-- TODO Add translation -->
<string
name=
"msg_two_factor_authentication"
>
Two-factor Authentication
</string>
<!-- TODO Add translation -->
<string
name=
"msg_
_
your_2fa_code"
>
What’s your 2FA code?
</string>
<!-- TODO Add translation -->
<string
name=
"msg_your_2fa_code"
>
What’s your 2FA code?
</string>
<!-- TODO Add translation -->
<string
name=
"msg_view_more"
>
view more
</string>
<!-- TODO - Add proper translation -->
<string
name=
"msg_view_less"
>
view less
</string>
<!-- TODO - Add proper translation -->
<string
name=
"msg_permalink_copied"
>
Permalink copied
</string>
<!-- TODO - Add proper translation -->
...
...
@@ -179,6 +178,8 @@
<item
quantity=
"many"
>
%1$s reacted with %2$s
</item>
<!-- TODO - Add proper translation -->
</plurals>
<string
name=
"msg_credentials_saved_successfully"
>
Облікові дані було успішно збережено
</string>
<string
name=
"msg_server"
>
Server
</string>
<!-- TODO Translate -->
<string
name=
"msg_add_new_server"
>
Add New Server
</string>
<!-- TODO Translate -->
<!-- Create channel messages -->
<string
name=
"msg_private_channel"
>
Приватний
</string>
...
...
@@ -305,14 +306,13 @@
<string
name=
"msg_no_recent_emoji"
>
Пусто
</string>
<string
name=
"alert_title_default_skin_tone"
>
Тон шкіри за замовчуванням
</string>
<!-- Sorting and grouping-->
<string
name=
"msg_sort"
>
Сортувати
</string>
<string
name=
"dialog_sort_title"
>
Сортувати за
</string>
<string
name=
"dialog_sort_by_alphabet"
>
За алфавітом
</string>
<string
name=
"dialog_sort_by_activity"
>
За активністю
</string>
<string
name=
"dialog_group_by_type"
>
Групувати за типом
</string>
<string
name=
"dialog_group_favourites"
>
Групувати обране
</string>
<string
name=
"chatroom_header"
>
Заголовок
</string>
<!-- Sort and group -->
<string
name=
"msg_sort_by"
>
Sort by %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_activity"
>
Activity
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_name"
>
Name
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_unread_on_top"
>
Unread on top
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_type"
>
Group by type
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_favorites"
>
Group by favorites
</string>
<!-- TODO Translate -->
<!--ChatRooms Headers-->
<string
name=
"header_favorite"
>
Favorites
</string>
<!-- TODO - Add proper translation -->
...
...
app/src/main/res/values-zh-rCN/strings.xml
View file @
f4efa770
...
...
@@ -3,7 +3,6 @@
<!-- Titles -->
<string
name=
"title_sign_in_your_server"
>
登录您的服务器
</string>
<string
name=
"title_log_in"
>
登录
</string>
<string
name=
"title_share_the_app"
>
分享App
</string>
<string
name=
"title_register_username"
>
注册用户
</string>
<string
name=
"title_reset_password"
>
重置密码
</string>
<string
name=
"title_sign_up"
>
登录
</string>
...
...
@@ -20,7 +19,6 @@
<string
name=
"title_admin_panel"
>
管理面板
</string>
<string
name=
"title_password"
>
修改密码
</string>
<string
name=
"title_update_profile"
>
更新资料
</string>
<string
name=
"title_about"
>
关于
</string>
<string
name=
"title_create_channel"
>
新建频道
</string>
<string
name=
"title_license"
>
许可证
</string>
<string
name=
"title_are_you_sure"
>
你确定?
</string>
...
...
@@ -34,6 +32,7 @@
<string
name=
"action_use_this_username"
>
使用这个用户名
</string>
<string
name=
"action_terms_of_service"
>
服务条款
</string>
<string
name=
"action_privacy_policy"
>
隐私政策
</string>
<string
name=
"action_new_channel"
>
New channel
</string>
<!-- TODO Translate -->
<string
name=
"action_search"
>
搜索
</string>
<string
name=
"action_update"
>
更新
</string>
<string
name=
"action_settings"
>
设置
</string>
...
...
@@ -43,11 +42,10 @@
<string
name=
"action_attach_a_files"
>
添加附件
</string>
<string
name=
"action_confirm_password"
>
确认修改密码
</string>
<string
name=
"action_join_chat"
>
加入聊天
</string>
<string
name=
"action_add_account"
>
添加账户
</string>
<string
name=
"action_online"
>
在线
</string>
<string
name=
"action_away"
>
离开
</string>
<string
name=
"action_busy"
>
忙碌
</string>
<string
name=
"action_invisible"
>
隐身
</string>
<string
name=
"msg_online"
>
在线
</string>
<string
name=
"msg_away"
>
离开
</string>
<string
name=
"msg_busy"
>
忙碌
</string>
<string
name=
"msg_invisible"
>
隐身
</string>
<string
name=
"action_drawing"
>
绘画
</string>
<string
name=
"action_save_to_gallery"
>
保存到图库
</string>
<string
name=
"action_select_photo_from_gallery"
>
从图库选照片
</string>
...
...
@@ -58,21 +56,22 @@
<string
name=
"action_create_server"
>
新建一个新服务器
</string>
<string
name=
"action_register"
>
注册
</string>
<string
name=
"action_confirm"
>
确定
</string>
<string
name=
"action_delete_account"
>
删除账户
</string>
<string
name=
"action_favorite"
>
Favorite
</string>
<!-- TODO Add translation -->
<string
name=
"action_remove_favorite"
>
Remove favorite
</string>
<!-- TODO Add translation -->
<!-- Settings List -->
<string-array
name=
"settings_actions"
>
<item
name=
"item_preferences"
>
首选项
</item>
<item
name=
"item_password"
>
修改密码
</item>
<item
name=
"change_language"
>
更改语言
</item>
<item
name=
"item_share_app"
>
分享app
</item>
<item
name=
"item_rate_us"
>
给我们打分
</item>
<item
name=
"item_contact_us"
>
联系我们
</item>
<item
name=
"item_license"
>
许可证
</item>
<item
name=
"item_about"
>
关于
</item>
</string-array>
<!-- Settings messages -->
<string
name=
"msg_contact_us"
>
Contact us
</string>
<!-- TODO Translate -->
<string
name=
"msg_language"
>
Language
</string>
<!-- TODO Translate -->
<string
name=
"msg_review_this_app"
>
Review this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_share_this_app"
>
Share this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_administration"
>
Administration
</string>
<!-- TODO Translate -->
<string
name=
"msg_license"
>
License
</string>
<!-- TODO Translate -->
<string
name=
"msg_app_version"
>
Version: %1$s (%2$d)
</string>
<!-- TODO Translate -->
<string
name=
"msg_server_version"
>
Server version: %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_send_analytics"
>
Send analytics
</string>
<!-- TODO Translate -->
<string
name=
"msg_logout_from_rocket_chat"
>
Logout from Rocket.Chat
</string>
<!-- TODO Translate -->
<string
name=
"msg_delete_account"
>
Delete account
</string>
<!-- TODO Translate -->
<string
name=
"msg_change_status"
>
Change status
</string>
<!-- TODO Translate -->
<!-- Regular information messages -->
<string
name=
"msg_generic_error"
>
对不起发生了错误,请重试
</string>
...
...
@@ -160,7 +159,7 @@
<string
name=
"msg_continue_with_gitlab"
>
使用
<b>
GitLab
</b>
账号继续
</string>
<string
name=
"msg_continue_with_wordpress"
>
使用
<b>
WordPress
</b>
账号继续
</string>
<string
name=
"msg_two_factor_authentication"
>
两步认证
</string>
<string
name=
"msg_
_
your_2fa_code"
>
什么是2FA 码?
</string>
<string
name=
"msg_your_2fa_code"
>
什么是2FA 码?
</string>
<string
name=
"msg_permalink_copied"
>
永久链接已拷贝
</string>
<string
name=
"msg_no_topic"
>
No topic
</string>
<!-- TODO Add translation -->
<string
name=
"msg_no_announcement"
>
No announcement
</string>
<!-- TODO Add translation -->
...
...
@@ -174,6 +173,8 @@
<item
quantity=
"other"
>
%1$s 使用了 %2$s
</item>
</plurals>
<string
name=
"msg_credentials_saved_successfully"
>
凭证成功保存
</string>
<string
name=
"msg_server"
>
Server
</string>
<!-- TODO Translate -->
<string
name=
"msg_add_new_server"
>
Add New Server
</string>
<!-- TODO Translate -->
<!-- Create channel messages -->
<string
name=
"msg_private_channel"
>
隐私
</string>
...
...
@@ -306,14 +307,13 @@
<string
name=
"msg_no_recent_emoji"
>
没有最近的emojis
</string>
<string
name=
"alert_title_default_skin_tone"
>
默认皮肤颜色
</string>
<!-- Sorting and grouping-->
<string
name=
"msg_sort"
>
排序
</string>
<string
name=
"dialog_sort_title"
>
排序按
</string>
<string
name=
"dialog_sort_by_alphabet"
>
字母
</string>
<string
name=
"dialog_sort_by_activity"
>
活跃
</string>
<string
name=
"dialog_group_by_type"
>
按类型分组
</string>
<string
name=
"dialog_group_favourites"
>
收藏分组
</string>
<string
name=
"chatroom_header"
>
头部
</string>
<!-- Sort and group -->
<string
name=
"msg_sort_by"
>
Sort by %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_activity"
>
Activity
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_name"
>
Name
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_unread_on_top"
>
Unread on top
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_type"
>
Group by type
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_favorites"
>
Group by favorites
</string>
<!-- TODO Translate -->
<!--ChatRooms Headers-->
<string
name=
"header_favorite"
>
Favorites
</string>
<!-- TODO - Add proper translation -->
...
...
@@ -336,7 +336,7 @@
<!-- User Details -->
<string
name=
"timezone"
>
时区
</string>
<string
name=
"status"
translatable=
"false"
>
状态
</string>
<string
name=
"status"
translatable=
"false"
>
状态
: %1$s
</string>
<!-- Report -->
<string
name=
"submit"
>
提交
</string>
...
...
app/src/main/res/values-zh-rTW/strings.xml
View file @
f4efa770
...
...
@@ -3,7 +3,6 @@
<!-- Titles -->
<string
name=
"title_sign_in_your_server"
>
登入您的伺服器
</string>
<string
name=
"title_log_in"
>
登入
</string>
<string
name=
"title_share_the_app"
>
分享App
</string>
<string
name=
"title_register_username"
>
註冊使用者
</string>
<string
name=
"title_reset_password"
>
重置密碼
</string>
<string
name=
"title_sign_up"
>
登入
</string>
...
...
@@ -20,7 +19,6 @@
<string
name=
"title_admin_panel"
>
管理面板
</string>
<string
name=
"title_password"
>
修改密碼
</string>
<string
name=
"title_update_profile"
>
更新資料
</string>
<string
name=
"title_about"
>
關於
</string>
<string
name=
"title_create_channel"
>
建立新頻道
</string>
<string
name=
"title_license"
>
許可
</string>
<string
name=
"title_are_you_sure"
>
確定嗎?
</string>
...
...
@@ -34,6 +32,7 @@
<string
name=
"action_use_this_username"
>
使用這個名稱
</string>
<string
name=
"action_terms_of_service"
>
服務條款
</string>
<string
name=
"action_privacy_policy"
>
隱私政策
</string>
<string
name=
"action_new_channel"
>
New channel
</string>
<!-- TODO Translate -->
<string
name=
"action_search"
>
搜尋
</string>
<string
name=
"action_update"
>
更新
</string>
<string
name=
"action_settings"
>
設定
</string>
...
...
@@ -43,11 +42,10 @@
<string
name=
"action_attach_a_files"
>
添加檔案
</string>
<string
name=
"action_confirm_password"
>
確認修改密碼
</string>
<string
name=
"action_join_chat"
>
加入聊天
</string>
<string
name=
"action_add_account"
>
新增帳戶
</string>
<string
name=
"action_online"
>
線上
</string>
<string
name=
"action_away"
>
離線
</string>
<string
name=
"action_busy"
>
忙碌
</string>
<string
name=
"action_invisible"
>
隱藏
</string>
<string
name=
"msg_online"
>
線上
</string>
<string
name=
"msg_away"
>
離線
</string>
<string
name=
"msg_busy"
>
忙碌
</string>
<string
name=
"msg_invisible"
>
隱藏
</string>
<string
name=
"action_drawing"
>
畫畫中...
</string>
<string
name=
"action_save_to_gallery"
>
保存到相簿
</string>
<string
name=
"action_select_photo_from_gallery"
>
從相簿中選取照片
</string>
...
...
@@ -58,21 +56,22 @@
<string
name=
"action_create_server"
>
建立一個新的伺服器
</string>
<string
name=
"action_register"
>
註冊
</string>
<string
name=
"action_confirm"
>
確定
</string>
<string
name=
"action_delete_account"
>
刪除帳戶
</string>
<string
name=
"action_favorite"
>
加入蒐藏
</string>
<string
name=
"action_remove_favorite"
>
從蒐藏中移除
</string>
<!-- Settings List -->
<string-array
name=
"settings_actions"
>
<item
name=
"item_preferences"
>
首选项
</item>
<item
name=
"item_password"
>
修改密碼
</item>
<item
name=
"change_language"
>
更換語言
</item>
<item
name=
"item_share_app"
>
分享這個App
</item>
<item
name=
"item_rate_us"
>
給我們一個評價
</item>
<item
name=
"item_contact_us"
>
聯絡我們
</item>
<item
name=
"item_license"
>
許可證
</item>
<item
name=
"item_about"
>
關於
</item>
</string-array>
<!-- Settings messages -->
<string
name=
"msg_contact_us"
>
Contact us
</string>
<!-- TODO Translate -->
<string
name=
"msg_language"
>
Language
</string>
<!-- TODO Translate -->
<string
name=
"msg_review_this_app"
>
Review this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_share_this_app"
>
Share this app
</string>
<!-- TODO Translate -->
<string
name=
"msg_administration"
>
Administration
</string>
<!-- TODO Translate -->
<string
name=
"msg_license"
>
License
</string>
<!-- TODO Translate -->
<string
name=
"msg_app_version"
>
Version: %1$s (%2$d)
</string>
<!-- TODO Translate -->
<string
name=
"msg_server_version"
>
Server version: %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_send_analytics"
>
Send analytics
</string>
<!-- TODO Translate -->
<string
name=
"msg_logout_from_rocket_chat"
>
Logout from Rocket.Chat
</string>
<!-- TODO Translate -->
<string
name=
"msg_delete_account"
>
Delete account
</string>
<!-- TODO Translate -->
<string
name=
"msg_change_status"
>
Change status
</string>
<!-- TODO Translate -->
<!-- Regular information messages -->
<string
name=
"msg_generic_error"
>
發生了錯誤,請稍後試試
</string>
...
...
@@ -160,7 +159,7 @@
<string
name=
"msg_continue_with_gitlab"
>
使用
<b>
GitLab
</b>
帳號繼續
</string>
<string
name=
"msg_continue_with_wordpress"
>
使用
<b>
WordPress
</b>
帳號繼續
</string>
<string
name=
"msg_two_factor_authentication"
>
兩步驟認證(2FA)
</string>
<string
name=
"msg_
_
your_2fa_code"
>
什麼是2FA?
</string>
<string
name=
"msg_your_2fa_code"
>
什麼是2FA?
</string>
<string
name=
"msg_permalink_copied"
>
永久連結已經複製
</string>
<string
name=
"msg_no_topic"
>
沒有主題
</string>
<string
name=
"msg_no_announcement"
>
沒有公告
</string>
...
...
@@ -174,6 +173,8 @@
<item
quantity=
"other"
>
%1$s 使用了 %2$s
</item>
</plurals>
<string
name=
"msg_credentials_saved_successfully"
>
憑證保存成功
</string>
<string
name=
"msg_server"
>
Server
</string>
<!-- TODO Translate -->
<string
name=
"msg_add_new_server"
>
Add New Server
</string>
<!-- TODO Translate -->
<!-- Create channel messages -->
<string
name=
"msg_private_channel"
>
隱私
</string>
...
...
@@ -306,14 +307,13 @@
<string
name=
"msg_no_recent_emoji"
>
最近沒有使用emojis
</string>
<string
name=
"alert_title_default_skin_tone"
>
預設主題顏色
</string>
<!-- Sorting and grouping-->
<string
name=
"msg_sort"
>
排序
</string>
<string
name=
"dialog_sort_title"
>
根據開頭排序
</string>
<string
name=
"dialog_sort_by_alphabet"
>
根據字母排序
</string>
<string
name=
"dialog_sort_by_activity"
>
根據活躍度排序
</string>
<string
name=
"dialog_group_by_type"
>
根據類型分組
</string>
<string
name=
"dialog_group_favourites"
>
根據蒐藏分组
</string>
<string
name=
"chatroom_header"
>
聊天室頭貼
</string>
<!-- Sort and group -->
<string
name=
"msg_sort_by"
>
Sort by %1$s
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_activity"
>
Activity
</string>
<!-- TODO Translate -->
<string
name=
"msg_sort_by_name"
>
Name
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_unread_on_top"
>
Unread on top
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_type"
>
Group by type
</string>
<!-- TODO Translate -->
<string
name=
"msg_group_by_favorites"
>
Group by favorites
</string>
<!-- TODO Translate -->
<!--ChatRooms Headers-->
<string
name=
"header_favorite"
>
Favorites
</string>
<!-- TODO - Add proper translation -->
...
...
@@ -336,7 +336,7 @@
<!-- User Details -->
<string
name=
"timezone"
>
時區
</string>
<string
name=
"status"
translatable=
"false"
>
狀態
</string>
<string
name=
"status"
translatable=
"false"
>
狀態
: %1$s
</string>
<!-- Report -->
<string
name=
"submit"
>
提交
</string>
...
...
app/src/main/res/values/ids.xml
deleted
100644 → 0
View file @
ab24ba31
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item
name=
"menu_section_one"
type=
"id"
/>
<item
name=
"menu_section_two"
type=
"id"
/>
<item
name=
"menu_section_three"
type=
"id"
/>
<item
name=
"menu_action_chats"
type=
"id"
/>
<item
name=
"menu_action_create_channel"
type=
"id"
/>
<item
name=
"menu_action_profile"
type=
"id"
/>
<item
name=
"menu_action_settings"
type=
"id"
/>
<item
name=
"menu_action_admin_panel"
type=
"id"
/>
<item
name=
"menu_action_logout"
type=
"id"
/>
</resources>
\ No newline at end of file
app/src/main/res/values/strings.xml
View file @
f4efa770
...
...
@@ -15,7 +15,6 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<!-- Titles -->
<string
name=
"title_sign_in_your_server"
>
Sign in to your server
</string>
<string
name=
"title_log_in"
>
Login
</string>
<string
name=
"title_share_the_app"
>
Share App
</string>
<string
name=
"title_register_username"
>
Register username
</string>
<string
name=
"title_reset_password"
>
Reset password
</string>
<string
name=
"title_sign_up"
>
Sign up
</string>
...
...
@@ -32,7 +31,6 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<string
name=
"title_admin_panel"
>
Admin panel
</string>
<string
name=
"title_password"
>
Change Password
</string>
<string
name=
"title_update_profile"
>
Update profile
</string>
<string
name=
"title_about"
>
About
</string>
<string
name=
"title_create_channel"
>
Create Channel
</string>
<string
name=
"title_license"
>
License
</string>
<string
name=
"title_are_you_sure"
>
Are you sure?
</string>
...
...
@@ -46,6 +44,7 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<string
name=
"action_use_this_username"
>
Use this username
</string>
<string
name=
"action_terms_of_service"
>
Terms of Service
</string>
<string
name=
"action_privacy_policy"
>
Privacy Policy
</string>
<string
name=
"action_new_channel"
>
New channel
</string>
<string
name=
"action_search"
>
Search
</string>
<string
name=
"action_update"
>
Update
</string>
<string
name=
"action_settings"
>
Settings
</string>
...
...
@@ -55,11 +54,10 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<string
name=
"action_attach_a_files"
>
Attach a file
</string>
<string
name=
"action_confirm_password"
>
Confirm Password Change
</string>
<string
name=
"action_join_chat"
>
Join Chat
</string>
<string
name=
"action_add_account"
>
Add account
</string>
<string
name=
"action_online"
>
Online
</string>
<string
name=
"action_away"
>
Away
</string>
<string
name=
"action_busy"
>
Busy
</string>
<string
name=
"action_invisible"
>
Invisible
</string>
<string
name=
"msg_online"
>
Online
</string>
<string
name=
"msg_away"
>
Away
</string>
<string
name=
"msg_busy"
>
Busy
</string>
<string
name=
"msg_invisible"
>
Invisible
</string>
<string
name=
"action_drawing"
>
Drawing
</string>
<string
name=
"action_save_to_gallery"
>
Save to gallery
</string>
<string
name=
"action_select_photo_from_gallery"
>
Select photo from gallery
</string>
...
...
@@ -70,21 +68,22 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<string
name=
"action_create_server"
>
Create a new server
</string>
<string
name=
"action_register"
>
Register
</string>
<string
name=
"action_confirm"
>
Confirm
</string>
<string
name=
"action_delete_account"
>
Delete account
</string>
<string
name=
"action_favorite"
>
Favorite
</string>
<string
name=
"action_remove_favorite"
>
Remove favorite
</string>
<!-- Settings List -->
<string-array
name=
"settings_actions"
>
<item
name=
"item_preferences"
>
Preferences
</item>
<item
name=
"item_password"
>
Change password
</item>
<item
name=
"change_language"
>
Change language
</item>
<item
name=
"item_share_app"
>
Share app
</item>
<item
name=
"item_rate_us"
>
Rate us
</item>
<item
name=
"item_contact_us"
>
Contact us
</item>
<item
name=
"item_license"
>
License
</item>
<item
name=
"item_about"
>
About
</item>
</string-array>
<!-- Settings messages -->
<string
name=
"msg_contact_us"
>
Contact us
</string>
<string
name=
"msg_language"
>
Language
</string>
<string
name=
"msg_review_this_app"
>
Review this app
</string>
<string
name=
"msg_share_this_app"
>
Share this app
</string>
<string
name=
"msg_administration"
>
Administration
</string>
<string
name=
"msg_license"
>
License
</string>
<string
name=
"msg_app_version"
>
Version: %1$s (%2$d)
</string>
<string
name=
"msg_server_version"
>
Server version: %1$s
</string>
<string
name=
"msg_send_analytics"
>
Send analytics
</string>
<string
name=
"msg_logout_from_rocket_chat"
>
Logout from Rocket.Chat
</string>
<string
name=
"msg_delete_account"
>
Delete account
</string>
<string
name=
"msg_change_status"
>
Change status
</string>
<!-- Regular information messages -->
<string
name=
"msg_generic_error"
>
Sorry, an error has occurred, please try again
</string>
...
...
@@ -176,7 +175,7 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<string
name=
"msg_continue_with_gitlab"
>
Continue with
<b>
GitLab
</b></string>
<string
name=
"msg_continue_with_wordpress"
>
Continue with
<b>
WordPress
</b></string>
<string
name=
"msg_two_factor_authentication"
>
Two-factor Authentication
</string>
<string
name=
"msg_
_
your_2fa_code"
>
What’s your 2FA code?
</string>
<string
name=
"msg_your_2fa_code"
>
What’s your 2FA code?
</string>
<string
name=
"msg_permalink_copied"
>
Permalink copied
</string>
<string
name=
"msg_no_topic"
>
No topic
</string>
<string
name=
"msg_no_announcement"
>
No announcement
</string>
...
...
@@ -190,6 +189,8 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<item
quantity=
"other"
>
%1$s reacted with %2$s
</item>
</plurals>
<string
name=
"msg_credentials_saved_successfully"
>
Credentials saved successfully
</string>
<string
name=
"msg_server"
>
Server
</string>
<string
name=
"msg_add_new_server"
>
Add New Server
</string>
<!-- Create channel messages -->
<string
name=
"msg_private_channel"
>
Private
</string>
...
...
@@ -322,14 +323,13 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<string
name=
"msg_no_recent_emoji"
>
No recent emojis
</string>
<string
name=
"alert_title_default_skin_tone"
>
Default skin tone
</string>
<!-- Sorting and grouping-->
<string
name=
"msg_sort"
>
Sort
</string>
<string
name=
"dialog_sort_title"
>
Sort by
</string>
<string
name=
"dialog_sort_by_alphabet"
>
Alphabetical
</string>
<string
name=
"dialog_sort_by_activity"
>
Activity
</string>
<string
name=
"dialog_group_by_type"
>
Group by type
</string>
<string
name=
"dialog_group_favourites"
>
Group favourites
</string>
<string
name=
"chatroom_header"
>
Header
</string>
<!-- Sort and group -->
<string
name=
"msg_sort_by"
>
Sort by %1$s
</string>
<string
name=
"msg_sort_by_activity"
>
Activity
</string>
<string
name=
"msg_sort_by_name"
>
Name
</string>
<string
name=
"msg_group_by_unread_on_top"
>
Unread on top
</string>
<string
name=
"msg_group_by_type"
>
Group by type
</string>
<string
name=
"msg_group_by_favorites"
>
Group by favorites
</string>
<!--ChatRooms Headers-->
<string
name=
"header_favorite"
>
Favorites
</string>
...
...
@@ -352,7 +352,7 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<!-- User Details -->
<string
name=
"timezone"
>
Timezone
</string>
<string
name=
"status"
translatable=
"false"
>
Status
</string>
<string
name=
"status"
translatable=
"false"
>
Status
: %1$s
</string>
<!-- Report -->
<string
name=
"submit"
>
Submit
</string>
...
...
app/src/play/java/chat/rocket/android/analytics/AnswersAnalytics.kt
View file @
f4efa770
...
...
@@ -35,7 +35,7 @@ class AnswersAnalytics : Analytics {
override
fun
logMessageSent
(
event
:
SubscriptionTypeEvent
,
serverUrl
:
String
)
=
Answers
.
getInstance
()
.
logCustom
(
CustomEvent
(
"message_
action
sent"
)
CustomEvent
(
"message_sent"
)
.
putCustomAttribute
(
"subscription_type"
,
event
.
subscriptionTypeName
)
.
putCustomAttribute
(
"server"
,
serverUrl
)
)
...
...
dependencies.gradle
View file @
f4efa770
...
...
@@ -56,7 +56,7 @@ ext {
glide
:
'4.8.0'
,
glideTransformations
:
'4.0.0'
,
jitsi
:
'
+'
,
// TODO Avoid using + (https://github.com/jitsi/jitsi-meet/issues/3987)
jitsi
:
'
1.21.0'
,
// For testing
junit
:
'4.12'
,
...
...
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