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
7968c5f8
Unverified
Commit
7968c5f8
authored
Jun 12, 2018
by
divyanshu bhargava
Committed by
GitHub
Jun 12, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #22 from RocketChat/develop
merge
parents
f515a781
4d125818
Changes
35
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
35 changed files
with
600 additions
and
104 deletions
+600
-104
build.gradle
app/build.gradle
+2
-2
RocketChatApplication.kt
...ain/java/chat/rocket/android/app/RocketChatApplication.kt
+44
-34
AuthenticationModule.kt
.../rocket/android/authentication/di/AuthenticationModule.kt
+1
-0
LoginPresenter.kt
...droid/authentication/login/presentation/LoginPresenter.kt
+5
-2
RegisterUsernamePresenter.kt
...egisterusername/presentation/RegisterUsernamePresenter.kt
+3
-1
ResetPasswordPresenter.kt
...tion/resetpassword/presentation/ResetPasswordPresenter.kt
+2
-1
ServerPresenter.kt
...oid/authentication/server/presentation/ServerPresenter.kt
+2
-2
SignupPresenter.kt
...oid/authentication/signup/presentation/SignupPresenter.kt
+3
-1
TwoFAPresenter.kt
...d/authentication/twofactor/presentation/TwoFAPresenter.kt
+3
-1
AuthenticationActivity.kt
...ocket/android/authentication/ui/AuthenticationActivity.kt
+11
-8
ChatRoomFragmentModule.kt
...chat/rocket/android/chatroom/di/ChatRoomFragmentModule.kt
+3
-3
ChatRoomFragmentProvider.kt
...at/rocket/android/chatroom/di/ChatRoomFragmentProvider.kt
+2
-0
ChatRoomPresenter.kt
...rocket/android/chatroom/presentation/ChatRoomPresenter.kt
+1
-1
ChatRoomView.kt
...chat/rocket/android/chatroom/presentation/ChatRoomView.kt
+1
-1
ChatRoomFragment.kt
.../java/chat/rocket/android/chatroom/ui/ChatRoomFragment.kt
+3
-15
ViewModelMapper.kt
...chat/rocket/android/chatroom/viewmodel/ViewModelMapper.kt
+4
-2
ChatRoomsFragmentProvider.kt
.../rocket/android/chatrooms/di/ChatRoomsFragmentProvider.kt
+2
-0
ChatRoomsFragment.kt
...ava/chat/rocket/android/chatrooms/ui/ChatRoomsFragment.kt
+3
-0
AppModule.kt
.../main/java/chat/rocket/android/dagger/module/AppModule.kt
+17
-5
ForAuthentication.kt
...chat/rocket/android/dagger/qualifier/ForAuthentication.kt
+7
-0
ForMessages.kt
.../java/chat/rocket/android/dagger/qualifier/ForMessages.kt
+0
-4
FavoriteMessagesFragmentProvider.kt
...d/favoritemessages/di/FavoriteMessagesFragmentProvider.kt
+2
-0
CrashlyticsWrapper.kt
.../chat/rocket/android/infrastructure/CrashlyticsWrapper.kt
+66
-0
PinnedMessagesFragmentProvider.kt
...droid/pinnedmessages/di/PinnedMessagesFragmentProvider.kt
+2
-0
GetConnectingServerInteractor.kt
...et/android/server/domain/GetConnectingServerInteractor.kt
+14
-0
SaveConnectingServerInteractor.kt
...t/android/server/domain/SaveConnectingServerInteractor.kt
+10
-0
SettingsRepository.kt
...a/chat/rocket/android/server/domain/SettingsRepository.kt
+6
-6
SharedPreferencesSettingsRepository.kt
...er/infraestructure/SharedPreferencesSettingsRepository.kt
+19
-2
SharedPrefsConnectingServerRepository.kt
.../infraestructure/SharedPrefsConnectingServerRepository.kt
+23
-0
HttpLoggingInterceptor.kt
...n/java/chat/rocket/android/util/HttpLoggingInterceptor.kt
+307
-0
Ui.kt
app/src/main/java/chat/rocket/android/util/extensions/Ui.kt
+9
-4
View.kt
...src/main/java/chat/rocket/android/util/extensions/View.kt
+6
-1
OauthWebViewActivity.kt
...t/rocket/android/webview/oauth/ui/OauthWebViewActivity.kt
+4
-0
SsoWebViewActivity.kt
.../chat/rocket/android/webview/sso/ui/SsoWebViewActivity.kt
+3
-0
fragment_chat_room.xml
app/src/main/res/layout/fragment_chat_room.xml
+10
-8
No files found.
app/build.gradle
View file @
7968c5f8
...
...
@@ -13,8 +13,8 @@ android {
applicationId
"chat.rocket.android"
minSdkVersion
21
targetSdkVersion
versions
.
targetSdk
versionCode
202
4
versionName
"2.3.
0
"
versionCode
202
6
versionName
"2.3.
2
"
testInstrumentationRunner
"android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled
true
}
...
...
app/src/main/java/chat/rocket/android/app/RocketChatApplication.kt
View file @
7968c5f8
...
...
@@ -16,13 +16,22 @@ import chat.rocket.android.app.migration.model.RealmBasedServerInfo
import
chat.rocket.android.app.migration.model.RealmPublicSetting
import
chat.rocket.android.app.migration.model.RealmSession
import
chat.rocket.android.app.migration.model.RealmUser
import
chat.rocket.android.authentication.domain.model.toToken
import
chat.rocket.android.dagger.DaggerAppComponent
import
chat.rocket.android.dagger.qualifier.ForMessages
import
chat.rocket.android.helper.CrashlyticsTree
import
chat.rocket.android.infrastructure.LocalRepository
import
chat.rocket.android.server.domain.*
import
chat.rocket.android.infrastructure.installCrashlyticsWrapper
import
chat.rocket.android.server.domain.AccountsRepository
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.SITE_URL
import
chat.rocket.android.server.domain.SaveCurrentServerInteractor
import
chat.rocket.android.server.domain.SettingsRepository
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.wideTile
import
chat.rocket.android.util.extensions.avatarUrl
import
chat.rocket.android.util.extensions.serverLogoUrl
import
chat.rocket.android.widget.emoji.EmojiRepository
...
...
@@ -34,13 +43,16 @@ import com.facebook.drawee.backends.pipeline.DraweeConfig
import
com.facebook.drawee.backends.pipeline.Fresco
import
com.facebook.imagepipeline.core.ImagePipelineConfig
import
com.jakewharton.threetenabp.AndroidThreeTen
import
dagger.android.*
import
dagger.android.AndroidInjector
import
dagger.android.DispatchingAndroidInjector
import
dagger.android.HasActivityInjector
import
dagger.android.HasBroadcastReceiverInjector
import
dagger.android.HasServiceInjector
import
io.fabric.sdk.android.Fabric
import
io.realm.Realm
import
io.realm.RealmConfiguration
import
kotlinx.coroutines.experimental.CommonPool
import
kotlinx.coroutines.experimental.launch
import
kotlinx.coroutines.experimental.runBlocking
import
timber.log.Timber
import
java.lang.ref.WeakReference
import
javax.inject.Inject
...
...
@@ -69,7 +81,7 @@ class RocketChatApplication : Application(), HasActivityInjector, HasServiceInje
@Inject
lateinit
var
getCurrentServerInteractor
:
GetCurrentServerInteractor
@Inject
lateinit
var
multiServerRepository
:
MultiServerTokenRepository
lateinit
var
settingsInteractor
:
GetSettingsInteractor
@Inject
lateinit
var
settingsRepository
:
SettingsRepository
@Inject
...
...
@@ -81,8 +93,6 @@ class RocketChatApplication : Application(), HasActivityInjector, HasServiceInje
@Inject
lateinit
var
prefs
:
SharedPreferences
@Inject
lateinit
var
getAccountsInteractor
:
GetAccountsInteractor
@Inject
lateinit
var
localRepository
:
LocalRepository
@Inject
...
...
@@ -101,8 +111,6 @@ class RocketChatApplication : Application(), HasActivityInjector, HasServiceInje
.
lifecycle
.
addObserver
(
appLifecycleObserver
)
// TODO - remove this on the future, temporary migration stuff for pre-release versions.
migrateInternalTokens
()
context
=
WeakReference
(
applicationContext
)
AndroidThreeTen
.
init
(
this
)
...
...
@@ -127,6 +135,29 @@ class RocketChatApplication : Application(), HasActivityInjector, HasServiceInje
}
catch
(
ex
:
Exception
)
{
Timber
.
d
(
ex
,
"Error migrating old accounts"
)
}
// TODO - remove this
checkCurrentServer
()
}
private
fun
checkCurrentServer
()
{
val
currentServer
=
getCurrentServerInteractor
.
get
()
?:
"<unknown>"
if
(
currentServer
==
"<unknown>"
)
{
val
message
=
"null currentServer"
Timber
.
d
(
IllegalStateException
(
message
),
message
)
}
val
settings
=
settingsInteractor
.
get
(
currentServer
)
if
(
settings
.
isEmpty
())
{
val
message
=
"Empty settings for: $currentServer"
Timber
.
d
(
IllegalStateException
(
message
),
message
)
}
val
baseUrl
=
settings
[
SITE_URL
]
if
(
baseUrl
==
null
)
{
val
message
=
"Server $currentServer SITE_URL"
Timber
.
d
(
IllegalStateException
(
message
),
message
)
}
}
private
fun
migrateFromLegacy
()
{
...
...
@@ -233,32 +264,13 @@ class RocketChatApplication : Application(), HasActivityInjector, HasServiceInje
}
}
private
fun
migrateInternalTokens
()
{
if
(!
prefs
.
getBoolean
(
INTERNAL_TOKEN_MIGRATION_NEEDED
,
true
))
{
Timber
.
d
(
"Tokens already migrated"
)
return
}
getCurrentServerInteractor
.
get
()
?.
let
{
serverUrl
->
multiServerRepository
.
get
(
serverUrl
)
?.
let
{
token
->
tokenRepository
.
save
(
serverUrl
,
Token
(
token
.
userId
,
token
.
authToken
))
}
}
runBlocking
{
getAccountsInteractor
.
get
().
forEach
{
account
->
multiServerRepository
.
get
(
account
.
serverUrl
)
?.
let
{
token
->
tokenRepository
.
save
(
account
.
serverUrl
,
token
.
toToken
())
}
}
}
prefs
.
edit
{
putBoolean
(
INTERNAL_TOKEN_MIGRATION_NEEDED
,
false
)
}
}
private
fun
setupCrashlytics
()
{
val
core
=
CrashlyticsCore
.
Builder
().
disabled
(
BuildConfig
.
DEBUG
).
build
()
Fabric
.
with
(
this
,
Crashlytics
.
Builder
().
core
(
core
).
build
())
installCrashlyticsWrapper
(
this
@RocketChatApplication
,
getCurrentServerInteractor
,
settingsInteractor
,
accountRepository
,
localRepository
)
}
private
fun
setupFresco
()
{
...
...
@@ -301,6 +313,4 @@ private fun LocalRepository.hasMigrated() = getBoolean(LocalRepository.MIGRATION
private
fun
LocalRepository
.
needOldMessagesCleanUp
()
=
getBoolean
(
CLEANUP_OLD_MESSAGES_NEEDED
,
true
)
private
fun
LocalRepository
.
setOldMessagesCleanedUp
()
=
save
(
CLEANUP_OLD_MESSAGES_NEEDED
,
false
)
private
const
val
INTERNAL_TOKEN_MIGRATION_NEEDED
=
"INTERNAL_TOKEN_MIGRATION_NEEDED"
private
const
val
CLEANUP_OLD_MESSAGES_NEEDED
=
"CLEANUP_OLD_MESSAGES_NEEDED"
\ No newline at end of file
app/src/main/java/chat/rocket/android/authentication/di/AuthenticationModule.kt
View file @
7968c5f8
...
...
@@ -2,6 +2,7 @@ package chat.rocket.android.authentication.di
import
chat.rocket.android.authentication.presentation.AuthenticationNavigator
import
chat.rocket.android.authentication.ui.AuthenticationActivity
import
chat.rocket.android.dagger.qualifier.ForAuthentication
import
chat.rocket.android.dagger.scope.PerActivity
import
dagger.Module
import
dagger.Provides
...
...
app/src/main/java/chat/rocket/android/authentication/login/presentation/LoginPresenter.kt
View file @
7968c5f8
...
...
@@ -42,12 +42,13 @@ class LoginPresenter @Inject constructor(
private
val
localRepository
:
LocalRepository
,
private
val
getAccountsInteractor
:
GetAccountsInteractor
,
private
val
settingsInteractor
:
GetSettingsInteractor
,
serverInteractor
:
GetCurrentServerInteractor
,
serverInteractor
:
GetConnectingServerInteractor
,
private
val
saveCurrentServer
:
SaveCurrentServerInteractor
,
private
val
saveAccountInteractor
:
SaveAccountInteractor
,
private
val
factory
:
RocketChatClientFactory
)
{
// TODO - we should validate the current server when opening the app, and have a nonnull get()
private
va
l
currentServer
=
serverInteractor
.
get
()
!!
private
va
r
currentServer
=
serverInteractor
.
get
()
!!
private
lateinit
var
client
:
RocketChatClient
private
lateinit
var
settings
:
PublicSettings
private
lateinit
var
usernameOrEmail
:
String
...
...
@@ -108,6 +109,7 @@ class LoginPresenter @Inject constructor(
}
private
fun
setupConnectionInfo
(
serverUrl
:
String
)
{
currentServer
=
serverUrl
client
=
factory
.
create
(
serverUrl
)
settings
=
settingsInteractor
.
get
(
serverUrl
)
}
...
...
@@ -352,6 +354,7 @@ class LoginPresenter @Inject constructor(
val
username
=
retryIO
(
"me()"
)
{
client
.
me
().
username
}
if
(
username
!=
null
)
{
localRepository
.
save
(
LocalRepository
.
CURRENT_USERNAME_KEY
,
username
)
saveCurrentServer
.
save
(
currentServer
)
saveAccount
(
username
)
saveToken
(
token
)
registerPushToken
()
...
...
app/src/main/java/chat/rocket/android/authentication/registerusername/presentation/RegisterUsernamePresenter.kt
View file @
7968c5f8
...
...
@@ -27,7 +27,8 @@ class RegisterUsernamePresenter @Inject constructor(
private
val
factory
:
RocketChatClientFactory
,
private
val
saveAccountInteractor
:
SaveAccountInteractor
,
private
val
getAccountsInteractor
:
GetAccountsInteractor
,
serverInteractor
:
GetCurrentServerInteractor
,
serverInteractor
:
GetConnectingServerInteractor
,
private
val
saveCurrentServer
:
SaveCurrentServerInteractor
,
settingsInteractor
:
GetSettingsInteractor
)
{
private
val
currentServer
=
serverInteractor
.
get
()
!!
...
...
@@ -47,6 +48,7 @@ class RegisterUsernamePresenter @Inject constructor(
val
registeredUsername
=
me
.
username
if
(
registeredUsername
!=
null
)
{
saveAccount
(
registeredUsername
)
saveCurrentServer
.
save
(
currentServer
)
tokenRepository
.
save
(
currentServer
,
Token
(
userId
,
authToken
))
registerPushToken
()
navigator
.
toChatList
()
...
...
app/src/main/java/chat/rocket/android/authentication/resetpassword/presentation/ResetPasswordPresenter.kt
View file @
7968c5f8
...
...
@@ -2,6 +2,7 @@ package chat.rocket.android.authentication.resetpassword.presentation
import
chat.rocket.android.authentication.presentation.AuthenticationNavigator
import
chat.rocket.android.core.lifecycle.CancelStrategy
import
chat.rocket.android.server.domain.GetConnectingServerInteractor
import
chat.rocket.android.server.domain.GetCurrentServerInteractor
import
chat.rocket.android.server.infraestructure.RocketChatClientFactory
import
chat.rocket.android.util.extensions.isEmail
...
...
@@ -19,7 +20,7 @@ class ResetPasswordPresenter @Inject constructor(
private
val
strategy
:
CancelStrategy
,
private
val
navigator
:
AuthenticationNavigator
,
factory
:
RocketChatClientFactory
,
serverInteractor
:
GetC
urrent
ServerInteractor
serverInteractor
:
GetC
onnecting
ServerInteractor
)
{
private
val
currentServer
=
serverInteractor
.
get
()
!!
private
val
client
:
RocketChatClient
=
factory
.
create
(
currentServer
)
...
...
app/src/main/java/chat/rocket/android/authentication/server/presentation/ServerPresenter.kt
View file @
7968c5f8
...
...
@@ -6,7 +6,7 @@ import chat.rocket.android.core.behaviours.showMessage
import
chat.rocket.android.core.lifecycle.CancelStrategy
import
chat.rocket.android.server.domain.GetAccountsInteractor
import
chat.rocket.android.server.domain.RefreshSettingsInteractor
import
chat.rocket.android.server.domain.SaveC
urrent
ServerInteractor
import
chat.rocket.android.server.domain.SaveC
onnecting
ServerInteractor
import
chat.rocket.android.server.infraestructure.RocketChatClientFactory
import
chat.rocket.android.server.presentation.CheckServerPresenter
import
chat.rocket.android.util.extensions.isValidUrl
...
...
@@ -16,7 +16,7 @@ import javax.inject.Inject
class
ServerPresenter
@Inject
constructor
(
private
val
view
:
ServerView
,
private
val
strategy
:
CancelStrategy
,
private
val
navigator
:
AuthenticationNavigator
,
private
val
serverInteractor
:
SaveC
urrent
ServerInteractor
,
private
val
serverInteractor
:
SaveC
onnecting
ServerInteractor
,
private
val
refreshSettingsInteractor
:
RefreshSettingsInteractor
,
private
val
getAccountsInteractor
:
GetAccountsInteractor
,
factory
:
RocketChatClientFactory
...
...
app/src/main/java/chat/rocket/android/authentication/signup/presentation/SignupPresenter.kt
View file @
7968c5f8
...
...
@@ -22,7 +22,8 @@ class SignupPresenter @Inject constructor(
private
val
strategy
:
CancelStrategy
,
private
val
navigator
:
AuthenticationNavigator
,
private
val
localRepository
:
LocalRepository
,
private
val
serverInteractor
:
GetCurrentServerInteractor
,
private
val
serverInteractor
:
GetConnectingServerInteractor
,
private
val
saveCurrentServerInteractor
:
SaveCurrentServerInteractor
,
private
val
factory
:
RocketChatClientFactory
,
private
val
saveAccountInteractor
:
SaveAccountInteractor
,
private
val
getAccountsInteractor
:
GetAccountsInteractor
,
...
...
@@ -60,6 +61,7 @@ class SignupPresenter @Inject constructor(
// TODO This function returns a user token so should we save it?
retryIO
(
"login"
)
{
client
.
login
(
username
,
password
)
}
val
me
=
retryIO
(
"me"
)
{
client
.
me
()
}
saveCurrentServerInteractor
.
save
(
currentServer
)
localRepository
.
save
(
LocalRepository
.
CURRENT_USERNAME_KEY
,
me
.
username
)
saveAccount
(
me
)
registerPushToken
()
...
...
app/src/main/java/chat/rocket/android/authentication/twofactor/presentation/TwoFAPresenter.kt
View file @
7968c5f8
...
...
@@ -25,7 +25,8 @@ class TwoFAPresenter @Inject constructor(private val view: TwoFAView,
private
val
navigator
:
AuthenticationNavigator
,
private
val
tokenRepository
:
TokenRepository
,
private
val
localRepository
:
LocalRepository
,
private
val
serverInteractor
:
GetCurrentServerInteractor
,
private
val
serverInteractor
:
GetConnectingServerInteractor
,
private
val
saveCurrentServerInteractor
:
SaveCurrentServerInteractor
,
private
val
factory
:
RocketChatClientFactory
,
private
val
saveAccountInteractor
:
SaveAccountInteractor
,
private
val
getAccountsInteractor
:
GetAccountsInteractor
,
...
...
@@ -55,6 +56,7 @@ class TwoFAPresenter @Inject constructor(private val view: TwoFAView,
}
val
me
=
retryIO
(
"me"
)
{
client
.
me
()
}
saveAccount
(
me
)
saveCurrentServerInteractor
.
save
(
currentServer
)
tokenRepository
.
save
(
server
,
token
)
registerPushToken
()
navigator
.
toChatList
()
...
...
app/src/main/java/chat/rocket/android/authentication/ui/AuthenticationActivity.kt
View file @
7968c5f8
...
...
@@ -32,19 +32,27 @@ class AuthenticationActivity : AppCompatActivity(), HasSupportFragmentInjector {
setContentView
(
R
.
layout
.
activity_authentication
)
setTheme
(
R
.
style
.
AuthenticationTheme
)
super
.
onCreate
(
savedInstanceState
)
}
override
fun
onStart
()
{
super
.
onStart
()
val
deepLinkInfo
=
intent
.
getLoginDeepLinkInfo
()
launch
(
UI
+
job
)
{
val
newServer
=
intent
.
getBooleanExtra
(
INTENT_ADD_NEW_SERVER
,
false
)
// if we got authenticateWithDeepLink information, pass true to newServer also
presenter
.
loadCredentials
(
newServer
||
deepLinkInfo
!=
null
)
{
authenticated
->
if
(!
authenticated
)
{
showServerInput
(
savedInstanceState
,
deepLinkInfo
)
showServerInput
(
deepLinkInfo
)
}
}
}
}
override
fun
onStop
()
{
job
.
cancel
()
super
.
onStop
()
}
override
fun
onActivityResult
(
requestCode
:
Int
,
resultCode
:
Int
,
data
:
Intent
?)
{
super
.
onActivityResult
(
requestCode
,
resultCode
,
data
)
val
currentFragment
=
supportFragmentManager
.
findFragmentById
(
R
.
id
.
fragment_container
)
...
...
@@ -53,17 +61,12 @@ class AuthenticationActivity : AppCompatActivity(), HasSupportFragmentInjector {
}
}
override
fun
onDestroy
()
{
job
.
cancel
()
super
.
onDestroy
()
}
override
fun
supportFragmentInjector
():
AndroidInjector
<
Fragment
>
{
return
fragmentDispatchingAndroidInjector
}
fun
showServerInput
(
savedInstanceState
:
Bundle
?,
deepLinkInfo
:
LoginDeepLinkInfo
?)
{
addFragment
(
"ServerFragment"
,
R
.
id
.
fragment_container
)
{
fun
showServerInput
(
deepLinkInfo
:
LoginDeepLinkInfo
?)
{
addFragment
(
"ServerFragment"
,
R
.
id
.
fragment_container
,
allowStateLoss
=
true
)
{
ServerFragment
.
newInstance
(
deepLinkInfo
)
}
}
...
...
app/src/main/java/chat/rocket/android/chatroom/di/ChatRoomFragmentModule.kt
View file @
7968c5f8
package
chat.rocket.android.chatroom.di
import
android.arch.lifecycle.LifecycleOwner
import
chat.rocket.android.chatroom.presentation.ChatRoomNavigator
import
chat.rocket.android.chatroom.presentation.ChatRoomView
import
chat.rocket.android.chatroom.ui.ChatRoomActivity
import
chat.rocket.android.chatroom.ui.ChatRoomFragment
import
chat.rocket.android.core.lifecycle.CancelStrategy
import
chat.rocket.android.dagger.scope.PerFragment
...
...
@@ -12,20 +10,22 @@ import dagger.Provides
import
kotlinx.coroutines.experimental.Job
@Module
@PerFragment
class
ChatRoomFragmentModule
{
@Provides
@PerFragment
fun
chatRoomView
(
frag
:
ChatRoomFragment
):
ChatRoomView
{
return
frag
}
@Provides
@PerFragment
fun
provideLifecycleOwner
(
frag
:
ChatRoomFragment
):
LifecycleOwner
{
return
frag
}
@Provides
@PerFragment
fun
provideCancelStrategy
(
owner
:
LifecycleOwner
,
jobs
:
Job
):
CancelStrategy
{
return
CancelStrategy
(
owner
,
jobs
)
}
...
...
app/src/main/java/chat/rocket/android/chatroom/di/ChatRoomFragmentProvider.kt
View file @
7968c5f8
package
chat.rocket.android.chatroom.di
import
chat.rocket.android.chatroom.ui.ChatRoomFragment
import
chat.rocket.android.dagger.scope.PerFragment
import
dagger.Module
import
dagger.android.ContributesAndroidInjector
...
...
@@ -8,5 +9,6 @@ import dagger.android.ContributesAndroidInjector
abstract
class
ChatRoomFragmentProvider
{
@ContributesAndroidInjector
(
modules
=
[
ChatRoomFragmentModule
::
class
])
@PerFragment
abstract
fun
provideChatRoomFragment
():
ChatRoomFragment
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/chatroom/presentation/ChatRoomPresenter.kt
View file @
7968c5f8
...
...
@@ -812,7 +812,7 @@ class ChatRoomPresenter @Inject constructor(
}
}
if
(
typingStatusList
.
isNotEmpty
())
{
view
.
showTypingStatus
(
typingStatusList
)
view
.
showTypingStatus
(
typingStatusList
.
toList
())
// copy typingStatusList
}
else
{
view
.
hideTypingStatusView
()
}
...
...
app/src/main/java/chat/rocket/android/chatroom/presentation/ChatRoomView.kt
View file @
7968c5f8
...
...
@@ -31,7 +31,7 @@ interface ChatRoomView : LoadingView, MessageView {
*
* @param usernameList The list of username to show.
*/
fun
showTypingStatus
(
usernameList
:
Array
List
<
String
>)
fun
showTypingStatus
(
usernameList
:
List
<
String
>)
/**
* Hides the typing status view.
...
...
app/src/main/java/chat/rocket/android/chatroom/ui/ChatRoomFragment.kt
View file @
7968c5f8
...
...
@@ -265,7 +265,7 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
verticalScrollOffset
.
set
(
0
)
}
presenter
.
loadActiveMembers
(
chatRoomId
,
chatRoomType
,
filterSelfOut
=
true
)
toggleNoChatView
(
adapter
.
itemCount
)
empty_chat_view
.
isVisible
=
adapter
.
itemCount
==
0
}
}
...
...
@@ -287,18 +287,6 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
}
private
fun
toggleNoChatView
(
size
:
Int
)
{
if
(
size
==
0
)
{
image_chat_icon
.
setVisible
(
true
)
text_chat_title
.
setVisible
(
true
)
text_chat_description
.
setVisible
(
true
)
}
else
{
image_chat_icon
.
setVisible
(
false
)
text_chat_title
.
setVisible
(
false
)
text_chat_description
.
setVisible
(
false
)
}
}
private
val
layoutChangeListener
=
View
.
OnLayoutChangeListener
{
_
,
_
,
_
,
_
,
bottom
,
_
,
_
,
_
,
oldBottom
->
val
y
=
oldBottom
-
bottom
...
...
@@ -367,7 +355,7 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
}
}
override
fun
showTypingStatus
(
usernameList
:
Array
List
<
String
>)
{
override
fun
showTypingStatus
(
usernameList
:
List
<
String
>)
{
ui
{
when
(
usernameList
.
size
)
{
1
->
{
...
...
@@ -412,7 +400,7 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
adapter
.
prependData
(
message
)
recycler_view
.
scrollToPosition
(
0
)
verticalScrollOffset
.
set
(
0
)
toggleNoChatView
(
adapter
.
itemCount
)
empty_chat_view
.
isVisible
=
adapter
.
itemCount
==
0
}
}
...
...
app/src/main/java/chat/rocket/android/chatroom/viewmodel/ViewModelMapper.kt
View file @
7968c5f8
...
...
@@ -14,6 +14,7 @@ import androidx.core.text.color
import
androidx.core.text.scale
import
chat.rocket.android.R
import
chat.rocket.android.chatroom.domain.MessageReply
import
chat.rocket.android.dagger.scope.PerFragment
import
chat.rocket.android.helper.MessageHelper
import
chat.rocket.android.helper.MessageParser
import
chat.rocket.android.infrastructure.LocalRepository
...
...
@@ -47,6 +48,7 @@ import okhttp3.HttpUrl
import
java.security.InvalidParameterException
import
javax.inject.Inject
@PerFragment
class
ViewModelMapper
@Inject
constructor
(
private
val
context
:
Context
,
private
val
parser
:
MessageParser
,
...
...
@@ -59,8 +61,8 @@ class ViewModelMapper @Inject constructor(
)
{
private
val
currentServer
=
serverInteractor
.
get
()
!!
private
val
settings
:
Map
<
String
,
Value
<
Any
>>
=
getSettingsInteractor
.
get
(
currentServer
)
private
val
baseUrl
=
settings
.
baseUrl
()
private
val
settings
=
getSettingsInteractor
.
get
(
currentServer
)
private
val
baseUrl
=
currentServer
private
val
token
=
tokenRepository
.
get
(
currentServer
)
private
val
currentUsername
:
String
?
=
localRepository
.
get
(
LocalRepository
.
CURRENT_USERNAME_KEY
)
private
val
secondaryTextColor
=
ContextCompat
.
getColor
(
context
,
R
.
color
.
colorSecondaryText
)
...
...
app/src/main/java/chat/rocket/android/chatrooms/di/ChatRoomsFragmentProvider.kt
View file @
7968c5f8
package
chat.rocket.android.chatrooms.di
import
chat.rocket.android.chatrooms.ui.ChatRoomsFragment
import
chat.rocket.android.dagger.scope.PerFragment
import
dagger.Module
import
dagger.android.ContributesAndroidInjector
...
...
@@ -8,5 +9,6 @@ import dagger.android.ContributesAndroidInjector
abstract
class
ChatRoomsFragmentProvider
{
@ContributesAndroidInjector
(
modules
=
[
ChatRoomsFragmentModule
::
class
])
@PerFragment
abstract
fun
provideChatRoomsFragment
():
ChatRoomsFragment
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/chatrooms/ui/ChatRoomsFragment.kt
View file @
7968c5f8
...
...
@@ -3,6 +3,7 @@ package chat.rocket.android.chatrooms.ui
import
android.app.AlertDialog
import
android.os.Bundle
import
android.os.Handler
import
android.renderscript.RSInvalidStateException
import
android.support.v4.app.Fragment
import
android.support.v7.app.AppCompatActivity
import
android.support.v7.util.DiffUtil
...
...
@@ -37,11 +38,13 @@ import chat.rocket.android.widget.DividerItemDecoration
import
chat.rocket.common.model.RoomType
import
chat.rocket.core.internal.realtime.socket.model.State
import
chat.rocket.core.model.ChatRoom
import
com.crashlytics.android.Crashlytics
import
dagger.android.support.AndroidSupportInjection
import
kotlinx.android.synthetic.main.fragment_chat_rooms.*
import
kotlinx.coroutines.experimental.Job
import
kotlinx.coroutines.experimental.NonCancellable.isActive
import
timber.log.Timber
import
java.security.InvalidParameterException
import
javax.inject.Inject
private
const
val
BUNDLE_CHAT_ROOM_ID
=
"BUNDLE_CHAT_ROOM_ID"
...
...
app/src/main/java/chat/rocket/android/dagger/module/AppModule.kt
View file @
7968c5f8
...
...
@@ -14,6 +14,7 @@ import chat.rocket.android.app.RocketChatDatabase
import
chat.rocket.android.authentication.infraestructure.SharedPreferencesMultiServerTokenRepository
import
chat.rocket.android.authentication.infraestructure.SharedPreferencesTokenRepository
import
chat.rocket.android.chatroom.service.MessageService
import
chat.rocket.android.dagger.qualifier.ForAuthentication
import
chat.rocket.android.dagger.qualifier.ForMessages
import
chat.rocket.android.helper.MessageParser
import
chat.rocket.android.infrastructure.LocalRepository
...
...
@@ -23,6 +24,7 @@ import chat.rocket.android.push.PushManager
import
chat.rocket.android.server.domain.*
import
chat.rocket.android.server.infraestructure.*
import
chat.rocket.android.util.AppJsonAdapterFactory
import
chat.rocket.android.util.HttpLoggingInterceptor
import
chat.rocket.android.util.TimberLogger
import
chat.rocket.common.internal.FallbackSealedClassJsonAdapter
import
chat.rocket.common.internal.ISO8601Date
...
...
@@ -42,7 +44,6 @@ import dagger.Module
import
dagger.Provides
import
kotlinx.coroutines.experimental.Job
import
okhttp3.OkHttpClient
import
okhttp3.logging.HttpLoggingInterceptor
import
ru.noties.markwon.SpannableConfiguration
import
ru.noties.markwon.spans.SpannableTheme
import
timber.log.Timber
...
...
@@ -54,7 +55,9 @@ class AppModule {
@Provides
@Singleton
fun
provideRocketChatClient
(
okHttpClient
:
OkHttpClient
,
repository
:
TokenRepository
,
logger
:
PlatformLogger
):
RocketChatClient
{
fun
provideRocketChatClient
(
okHttpClient
:
OkHttpClient
,
repository
:
TokenRepository
,
logger
:
PlatformLogger
):
RocketChatClient
{
return
RocketChatClient
.
create
{
httpClient
=
okHttpClient
tokenRepository
=
repository
...
...
@@ -68,7 +71,8 @@ class AppModule {
@Provides
@Singleton
fun
provideRocketChatDatabase
(
context
:
Application
):
RocketChatDatabase
{
return
Room
.
databaseBuilder
(
context
.
applicationContext
,
RocketChatDatabase
::
class
.
java
,
"rocketchat-db"
).
build
()
return
Room
.
databaseBuilder
(
context
.
applicationContext
,
RocketChatDatabase
::
class
.
java
,
"rocketchat-db"
).
build
()
}
@Provides
...
...
@@ -91,8 +95,10 @@ class AppModule {
@Provides
@Singleton
fun
provideHttpLoggingInterceptor
():
HttpLoggingInterceptor
{
val
interceptor
=
HttpLoggingInterceptor
(
HttpLoggingInterceptor
.
Logger
{
message
->
Timber
.
d
(
message
)
val
interceptor
=
HttpLoggingInterceptor
(
object
:
HttpLoggingInterceptor
.
Logger
{
override
fun
log
(
message
:
String
)
{
Timber
.
d
(
message
)
}
})
if
(
BuildConfig
.
DEBUG
)
{
interceptor
.
level
=
HttpLoggingInterceptor
.
Level
.
BODY
...
...
@@ -168,6 +174,12 @@ class AppModule {
return
SharedPrefsCurrentServerRepository
(
prefs
)
}
@Provides
@ForAuthentication
fun
provideConnectingServerRepository
(
prefs
:
SharedPreferences
):
CurrentServerRepository
{
return
SharedPrefsConnectingServerRepository
(
prefs
)
}
@Provides
@Singleton
fun
provideSettingsRepository
(
localRepository
:
LocalRepository
):
SettingsRepository
{
...
...
app/src/main/java/chat/rocket/android/dagger/qualifier/ForAuthentication.kt
0 → 100644
View file @
7968c5f8
package
chat.rocket.android.dagger.qualifier
import
javax.inject.Qualifier
@Qualifier
@Retention
(
AnnotationRetention
.
RUNTIME
)
annotation
class
ForAuthentication
\ No newline at end of file
app/src/main/java/chat/rocket/android/dagger/qualifier/ForMessages.kt
View file @
7968c5f8
...
...
@@ -2,10 +2,6 @@ package chat.rocket.android.dagger.qualifier
import
javax.inject.Qualifier
/**
* Created by luciofm on 4/14/18.
*/
@Qualifier
@Retention
(
AnnotationRetention
.
RUNTIME
)
annotation
class
ForMessages
\ No newline at end of file
app/src/main/java/chat/rocket/android/favoritemessages/di/FavoriteMessagesFragmentProvider.kt
View file @
7968c5f8
package
chat.rocket.android.chatroom.di
import
chat.rocket.android.dagger.scope.PerFragment
import
chat.rocket.android.favoritemessages.ui.FavoriteMessagesFragment
import
dagger.Module
import
dagger.android.ContributesAndroidInjector
...
...
@@ -8,5 +9,6 @@ import dagger.android.ContributesAndroidInjector
abstract
class
FavoriteMessagesFragmentProvider
{
@ContributesAndroidInjector
(
modules
=
[
FavoriteMessagesFragmentModule
::
class
])
@PerFragment
abstract
fun
provideFavoriteMessageFragment
():
FavoriteMessagesFragment
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/infrastructure/CrashlyticsWrapper.kt
0 → 100644
View file @
7968c5f8
package
chat.rocket.android.infrastructure
import
android.app.Application
import
chat.rocket.android.BuildConfig
import
chat.rocket.android.server.domain.AccountsRepository
import
chat.rocket.android.server.domain.GetCurrentServerInteractor
import
chat.rocket.android.server.domain.GetSettingsInteractor
import
chat.rocket.android.server.domain.SITE_URL
import
com.crashlytics.android.Crashlytics
import
kotlinx.coroutines.experimental.runBlocking
fun
installCrashlyticsWrapper
(
context
:
Application
,
currentServerInteractor
:
GetCurrentServerInteractor
,
settingsInteractor
:
GetSettingsInteractor
,
accountRepository
:
AccountsRepository
,
localRepository
:
LocalRepository
)
{
if
(
isCrashlyticsEnabled
())
{
Thread
.
setDefaultUncaughtExceptionHandler
(
RocketChatUncaughtExceptionHandler
(
currentServerInteractor
,
settingsInteractor
,
accountRepository
,
localRepository
))
}
}
private
fun
isCrashlyticsEnabled
():
Boolean
{
return
!
BuildConfig
.
DEBUG
}
private
class
RocketChatUncaughtExceptionHandler
(
val
currentServerInteractor
:
GetCurrentServerInteractor
,
val
settingsInteractor
:
GetSettingsInteractor
,
val
accountRepository
:
AccountsRepository
,
val
localRepository
:
LocalRepository
)
:
Thread
.
UncaughtExceptionHandler
{
val
crashlyticsHandler
:
Thread
.
UncaughtExceptionHandler
?
=
Thread
.
getDefaultUncaughtExceptionHandler
()
override
fun
uncaughtException
(
t
:
Thread
,
e
:
Throwable
)
{
val
currentServer
=
currentServerInteractor
.
get
()
?:
"<unknown>"
Crashlytics
.
setString
(
KEY_CURRENT_SERVER
,
currentServer
)
runBlocking
{
val
accounts
=
accountRepository
.
load
()
Crashlytics
.
setString
(
KEY_ACCOUNTS
,
accounts
.
toString
())
}
val
settings
=
settingsInteractor
.
get
(
currentServer
)
Crashlytics
.
setInt
(
KEY_SETTINGS_SIZE
,
settings
.
size
)
val
baseUrl
=
settings
[
SITE_URL
]
?.
toString
()
Crashlytics
.
setString
(
KEY_SETTINGS_BASE_URL
,
baseUrl
)
val
user
=
localRepository
.
getCurrentUser
(
currentServer
)
Crashlytics
.
setString
(
KEY_CURRENT_USER
,
user
?.
toString
())
Crashlytics
.
setString
(
KEY_CURRENT_USERNAME
,
localRepository
.
username
())
if
(
crashlyticsHandler
!=
null
)
{
crashlyticsHandler
.
uncaughtException
(
t
,
e
)
}
else
{
throw
RuntimeException
(
"Missing default exception handler"
)
}
}
}
private
const
val
KEY_CURRENT_SERVER
=
"CURRENT_SERVER"
private
const
val
KEY_CURRENT_USER
=
"CURRENT_USER"
private
const
val
KEY_CURRENT_USERNAME
=
"CURRENT_USERNAME"
private
const
val
KEY_ACCOUNTS
=
"ACCOUNTS"
private
const
val
KEY_SETTINGS_SIZE
=
"SETTINGS_SIZE"
private
const
val
KEY_SETTINGS_BASE_URL
=
"SETTINGS_BASE_URL"
\ No newline at end of file
app/src/main/java/chat/rocket/android/pinnedmessages/di/PinnedMessagesFragmentProvider.kt
View file @
7968c5f8
package
chat.rocket.android.pinnedmessages.di
import
chat.rocket.android.chatroom.di.PinnedMessagesFragmentModule
import
chat.rocket.android.dagger.scope.PerFragment
import
chat.rocket.android.pinnedmessages.ui.PinnedMessagesFragment
import
dagger.Module
import
dagger.android.ContributesAndroidInjector
...
...
@@ -9,5 +10,6 @@ import dagger.android.ContributesAndroidInjector
abstract
class
PinnedMessagesFragmentProvider
{
@ContributesAndroidInjector
(
modules
=
[
PinnedMessagesFragmentModule
::
class
])
@PerFragment
abstract
fun
providePinnedMessageFragment
():
PinnedMessagesFragment
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/server/domain/GetConnectingServerInteractor.kt
0 → 100644
View file @
7968c5f8
package
chat.rocket.android.server.domain
import
chat.rocket.android.dagger.qualifier.ForAuthentication
import
javax.inject.Inject
class
GetConnectingServerInteractor
@Inject
constructor
(
@ForAuthentication
private
val
repository
:
CurrentServerRepository
)
{
fun
get
():
String
?
=
repository
.
get
()
fun
clear
()
{
repository
.
clear
()
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/server/domain/SaveConnectingServerInteractor.kt
0 → 100644
View file @
7968c5f8
package
chat.rocket.android.server.domain
import
chat.rocket.android.dagger.qualifier.ForAuthentication
import
javax.inject.Inject
class
SaveConnectingServerInteractor
@Inject
constructor
(
@ForAuthentication
private
val
repository
:
CurrentServerRepository
)
{
fun
save
(
url
:
String
)
=
repository
.
save
(
url
)
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/server/domain/SettingsRepository.kt
View file @
7968c5f8
...
...
@@ -5,11 +5,6 @@ import chat.rocket.core.model.Value
typealias
PublicSettings
=
Map
<
String
,
Value
<
Any
>>
interface
SettingsRepository
{
fun
save
(
url
:
String
,
settings
:
PublicSettings
)
fun
get
(
url
:
String
):
PublicSettings
}
// Authentication methods.
const
val
LDAP_ENABLE
=
"LDAP_Enable"
const
val
CAS_ENABLE
=
"CAS_enabled"
...
...
@@ -104,4 +99,9 @@ fun PublicSettings.uploadMaxFileSize(): Int {
}
fun
PublicSettings
.
baseUrl
():
String
=
this
[
SITE_URL
]
?.
value
as
String
fun
PublicSettings
.
siteName
():
String
?
=
this
[
SITE_NAME
]
?.
value
as
String
?
\ No newline at end of file
fun
PublicSettings
.
siteName
():
String
?
=
this
[
SITE_NAME
]
?.
value
as
String
?
interface
SettingsRepository
{
fun
save
(
url
:
String
,
settings
:
PublicSettings
)
fun
get
(
url
:
String
):
PublicSettings
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/server/infraestructure/SharedPreferencesSettingsRepository.kt
View file @
7968c5f8
...
...
@@ -5,6 +5,7 @@ import chat.rocket.android.infrastructure.LocalRepository.Companion.SETTINGS_KEY
import
chat.rocket.android.server.domain.PublicSettings
import
chat.rocket.android.server.domain.SettingsRepository
import
chat.rocket.core.internal.SettingsAdapter
import
timber.log.Timber
class
SharedPreferencesSettingsRepository
(
private
val
localRepository
:
LocalRepository
...
...
@@ -13,11 +14,27 @@ class SharedPreferencesSettingsRepository(
private
val
adapter
=
SettingsAdapter
().
lenient
()
override
fun
save
(
url
:
String
,
settings
:
PublicSettings
)
{
if
(
settings
.
isEmpty
())
{
val
message
=
"Saving empty settings for $SETTINGS_KEY$url"
Timber
.
d
(
IllegalStateException
(
message
),
message
)
}
localRepository
.
save
(
"$SETTINGS_KEY$url"
,
adapter
.
toJson
(
settings
))
}
override
fun
get
(
url
:
String
):
PublicSettings
{
val
settings
=
localRepository
.
get
(
"$SETTINGS_KEY$url"
)
return
if
(
settings
==
null
)
hashMapOf
()
else
adapter
.
fromJson
(
settings
)
?:
hashMapOf
()
val
settingsStr
=
localRepository
.
get
(
"$SETTINGS_KEY$url"
)
return
if
(
settingsStr
==
null
)
{
val
message
=
"NULL Settings for: $SETTINGS_KEY$url"
Timber
.
d
(
IllegalStateException
(
message
),
message
)
hashMapOf
()
}
else
{
val
settings
=
adapter
.
fromJson
(
settingsStr
)
if
(
settings
==
null
)
{
val
message
=
"NULL Settings for: $SETTINGS_KEY$url with saved settings: $settingsStr"
Timber
.
d
(
IllegalStateException
(
message
),
message
)
}
settings
?:
hashMapOf
()
}
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/server/infraestructure/SharedPrefsConnectingServerRepository.kt
0 → 100644
View file @
7968c5f8
package
chat.rocket.android.server.infraestructure
import
android.content.SharedPreferences
import
chat.rocket.android.server.domain.CurrentServerRepository
class
SharedPrefsConnectingServerRepository
(
private
val
preferences
:
SharedPreferences
)
:
CurrentServerRepository
{
override
fun
save
(
url
:
String
)
{
preferences
.
edit
().
putString
(
CONNECTING_SERVER_KEY
,
url
).
apply
()
}
override
fun
get
():
String
?
{
return
preferences
.
getString
(
CONNECTING_SERVER_KEY
,
null
)
}
companion
object
{
private
const
val
CONNECTING_SERVER_KEY
=
"connecting_server"
}
override
fun
clear
()
{
preferences
.
edit
().
remove
(
CONNECTING_SERVER_KEY
).
apply
()
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/util/HttpLoggingInterceptor.kt
0 → 100644
View file @
7968c5f8
This diff is collapsed.
Click to expand it.
app/src/main/java/chat/rocket/android/util/extensions/Ui.kt
View file @
7968c5f8
...
...
@@ -31,11 +31,16 @@ fun View.isVisible(): Boolean {
fun
ViewGroup
.
inflate
(
@LayoutRes
resource
:
Int
,
attachToRoot
:
Boolean
=
false
):
View
=
LayoutInflater
.
from
(
context
).
inflate
(
resource
,
this
,
attachToRoot
)
fun
AppCompatActivity
.
addFragment
(
tag
:
String
,
layoutId
:
Int
,
newInstance
:
()
->
Fragment
)
{
fun
AppCompatActivity
.
addFragment
(
tag
:
String
,
layoutId
:
Int
,
allowStateLoss
:
Boolean
=
false
,
newInstance
:
()
->
Fragment
)
{
val
fragment
=
supportFragmentManager
.
findFragmentByTag
(
tag
)
?:
newInstance
()
supportFragmentManager
.
beginTransaction
()
.
replace
(
layoutId
,
fragment
,
tag
)
.
commit
()
val
transaction
=
supportFragmentManager
.
beginTransaction
()
.
replace
(
layoutId
,
fragment
,
tag
)
if
(
allowStateLoss
)
{
transaction
.
commitAllowingStateLoss
()
}
else
{
transaction
.
commit
()
}
}
fun
AppCompatActivity
.
addFragmentBackStack
(
...
...
app/src/main/java/chat/rocket/android/util/extensions/View.kt
View file @
7968c5f8
...
...
@@ -5,12 +5,17 @@ import android.support.customtabs.CustomTabsIntent
import
android.support.v4.content.res.ResourcesCompat
import
android.view.View
import
chat.rocket.android.R
import
timber.log.Timber
fun
View
.
openTabbedUrl
(
url
:
Uri
)
{
with
(
this
)
{
val
tabsbuilder
=
CustomTabsIntent
.
Builder
()
tabsbuilder
.
setToolbarColor
(
ResourcesCompat
.
getColor
(
context
.
resources
,
R
.
color
.
colorPrimary
,
context
.
theme
))
val
customTabsIntent
=
tabsbuilder
.
build
()
customTabsIntent
.
launchUrl
(
context
,
url
)
try
{
customTabsIntent
.
launchUrl
(
context
,
url
)
}
catch
(
ex
:
Exception
)
{
Timber
.
d
(
ex
,
"Unable to launch URL"
)
}
}
}
\ No newline at end of file
app/src/main/java/chat/rocket/android/webview/oauth/ui/OauthWebViewActivity.kt
View file @
7968c5f8
...
...
@@ -6,6 +6,7 @@ import android.content.Context
import
android.content.Intent
import
android.os.Bundle
import
android.support.v7.app.AppCompatActivity
import
android.webkit.CookieManager
import
android.webkit.WebView
import
android.webkit.WebViewClient
import
androidx.core.net.toUri
...
...
@@ -39,12 +40,15 @@ class OauthWebViewActivity : AppCompatActivity() {
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
setContentView
(
R
.
layout
.
activity_web_view
)
webPageUrl
=
intent
.
getStringExtra
(
INTENT_WEB_PAGE_URL
)
requireNotNull
(
webPageUrl
)
{
"no web_page_url provided in Intent extras"
}
state
=
intent
.
getStringExtra
(
INTENT_STATE
)
requireNotNull
(
state
)
{
"no state provided in Intent extras"
}
// Ensures that the cookies is always removed when opening the webview.
CookieManager
.
getInstance
().
removeAllCookies
(
null
)
setupToolbar
()
}
...
...
app/src/main/java/chat/rocket/android/webview/sso/ui/SsoWebViewActivity.kt
View file @
7968c5f8
...
...
@@ -7,6 +7,7 @@ import android.content.Intent
import
android.graphics.Bitmap
import
android.os.Bundle
import
android.support.v7.app.AppCompatActivity
import
android.webkit.CookieManager
import
android.webkit.WebView
import
android.webkit.WebViewClient
import
chat.rocket.android.R
...
...
@@ -41,6 +42,8 @@ class SsoWebViewActivity : AppCompatActivity() {
casToken
=
intent
.
getStringExtra
(
INTENT_SSO_TOKEN
)
requireNotNull
(
casToken
)
{
"no cas_token provided in Intent extras"
}
// Ensures that the cookies is always removed when opening the webview.
CookieManager
.
getInstance
().
removeAllCookies
(
null
)
setupToolbar
()
}
...
...
app/src/main/res/layout/fragment_chat_room.xml
View file @
7968c5f8
...
...
@@ -30,13 +30,11 @@
android:layout_height=
"100dp"
android:src=
"@drawable/ic_chat_black_24dp"
android:tint=
"@color/icon_grey"
android:visibility=
"gone"
app:layout_constraintBottom_toTopOf=
"@id/text_chat_title"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
app:layout_constraintVertical_chainStyle=
"packed"
tools:visibility=
"visible"
/>
app:layout_constraintVertical_chainStyle=
"packed"
/>
<TextView
android:id=
"@+id/text_chat_title"
...
...
@@ -47,12 +45,10 @@
android:textColor=
"@color/colorSecondaryText"
android:textSize=
"20sp"
android:textStyle=
"bold"
android:visibility=
"gone"
app:layout_constraintBottom_toTopOf=
"@id/text_chat_description"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/image_chat_icon"
tools:visibility=
"visible"
/>
app:layout_constraintTop_toBottomOf=
"@id/image_chat_icon"
/>
<TextView
android:id=
"@+id/text_chat_description"
...
...
@@ -63,11 +59,17 @@
android:textAlignment=
"center"
android:textColor=
"@color/colorSecondaryTextLight"
android:textSize=
"16sp"
android:visibility=
"gone"
app:layout_constraintBottom_toTopOf=
"@id/layout_message_composer"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/text_chat_title"
app:layout_constraintTop_toBottomOf=
"@id/text_chat_title"
/>
<android.support.constraint.Group
android:id=
"@+id/empty_chat_view"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
app:constraint_referenced_ids=
"image_chat_icon, text_chat_title, text_chat_description"
android:visibility=
"gone"
tools:visibility=
"visible"
/>
<chat.rocket.android.widget.autocompletion.ui.SuggestionsView
...
...
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