Commit ad37af44 authored by Filipe de Lima Brito's avatar Filipe de Lima Brito

Taking care of not using Answers on FOSS version as well as only tracking if...

Taking care of not using Answers on FOSS version as well as only tracking if user has enabled the tracking.
parent a271000b
...@@ -155,7 +155,7 @@ dependencies { ...@@ -155,7 +155,7 @@ dependencies {
transitive = true transitive = true
} }
implementation('com.crashlytics.sdk.android:answers:1.4.2@aar') { playImplementation('com.crashlytics.sdk.android:answers:1.4.2@aar') {
transitive = true transitive = true
} }
......
...@@ -3,5 +3,5 @@ package chat.rocket.android.util ...@@ -3,5 +3,5 @@ package chat.rocket.android.util
import android.content.Context import android.content.Context
fun setupFabric(context: Context) { fun setupFabric(context: Context) {
//Do absolutely nothing //Do absolutely nothing
} }
...@@ -4,18 +4,21 @@ import android.os.Bundle ...@@ -4,18 +4,21 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import chat.rocket.android.BuildConfig import chat.rocket.android.BuildConfig
import chat.rocket.android.R import chat.rocket.android.R
import chat.rocket.android.main.ui.MainActivity import chat.rocket.android.main.ui.MainActivity
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.helper.AnswersEvent import chat.rocket.android.util.helper.AnswersEvent
import kotlinx.android.synthetic.main.app_bar.* import kotlinx.android.synthetic.main.app_bar.*
import kotlinx.android.synthetic.main.fragment_about.* import kotlinx.android.synthetic.main.fragment_about.*
import javax.inject.Inject
internal const val TAG_ABOUT_FRAGMENT = "AboutFragment" internal const val TAG_ABOUT_FRAGMENT = "AboutFragment"
class AboutFragment : Fragment() { class AboutFragment : Fragment() {
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
...@@ -27,7 +30,10 @@ class AboutFragment : Fragment() { ...@@ -27,7 +30,10 @@ class AboutFragment : Fragment() {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setupToolbar() setupToolbar()
setupViews() setupViews()
AnswersEvent.logScreenView(TAG_ABOUT_FRAGMENT)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_ABOUT_FRAGMENT)
}
} }
private fun setupViews() { private fun setupViews() {
......
...@@ -5,30 +5,8 @@ import chat.rocket.android.authentication.presentation.AuthenticationNavigator ...@@ -5,30 +5,8 @@ import chat.rocket.android.authentication.presentation.AuthenticationNavigator
import chat.rocket.android.core.lifecycle.CancelStrategy import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.helper.OauthHelper import chat.rocket.android.helper.OauthHelper
import chat.rocket.android.infrastructure.LocalRepository import chat.rocket.android.infrastructure.LocalRepository
import chat.rocket.android.server.domain.GetAccountsInteractor import chat.rocket.android.server.domain.*
import chat.rocket.android.server.domain.GetConnectingServerInteractor
import chat.rocket.android.server.domain.GetSettingsInteractor
import chat.rocket.android.server.domain.PublicSettings
import chat.rocket.android.server.domain.SaveAccountInteractor
import chat.rocket.android.server.domain.SaveCurrentServerInteractor
import chat.rocket.android.server.domain.TokenRepository
import chat.rocket.android.server.domain.casLoginUrl
import chat.rocket.android.server.domain.favicon
import chat.rocket.android.server.domain.gitlabUrl
import chat.rocket.android.server.domain.isCasAuthenticationEnabled
import chat.rocket.android.server.domain.isFacebookAuthenticationEnabled
import chat.rocket.android.server.domain.isGithubAuthenticationEnabled
import chat.rocket.android.server.domain.isGitlabAuthenticationEnabled
import chat.rocket.android.server.domain.isGoogleAuthenticationEnabled
import chat.rocket.android.server.domain.isLdapAuthenticationEnabled
import chat.rocket.android.server.domain.isLinkedinAuthenticationEnabled
import chat.rocket.android.server.domain.isLoginFormEnabled
import chat.rocket.android.server.domain.isWordpressAuthenticationEnabled
import chat.rocket.android.server.domain.isPasswordResetEnabled
import chat.rocket.android.server.domain.isRegistrationEnabledForNewUsers
import chat.rocket.android.server.domain.wordpressUrl
import chat.rocket.android.server.domain.model.Account import chat.rocket.android.server.domain.model.Account
import chat.rocket.android.server.domain.wideTile
import chat.rocket.android.server.infraestructure.RocketChatClientFactory import chat.rocket.android.server.infraestructure.RocketChatClientFactory
import chat.rocket.android.util.extension.launchUI import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extensions.avatarUrl import chat.rocket.android.util.extensions.avatarUrl
...@@ -83,6 +61,7 @@ class LoginPresenter @Inject constructor( ...@@ -83,6 +61,7 @@ class LoginPresenter @Inject constructor(
private val localRepository: LocalRepository, private val localRepository: LocalRepository,
private val getAccountsInteractor: GetAccountsInteractor, private val getAccountsInteractor: GetAccountsInteractor,
private val settingsInteractor: GetSettingsInteractor, private val settingsInteractor: GetSettingsInteractor,
private val analyticsTrackingInteractor: AnalyticsTrackingInteractor,
serverInteractor: GetConnectingServerInteractor, serverInteractor: GetConnectingServerInteractor,
private val saveCurrentServer: SaveCurrentServerInteractor, private val saveCurrentServer: SaveCurrentServerInteractor,
private val saveAccountInteractor: SaveAccountInteractor, private val saveAccountInteractor: SaveAccountInteractor,
...@@ -477,7 +456,9 @@ class LoginPresenter @Inject constructor( ...@@ -477,7 +456,9 @@ class LoginPresenter @Inject constructor(
saveAccount(myself.username!!) saveAccount(myself.username!!)
saveToken(token) saveToken(token)
registerPushToken() registerPushToken()
AnswersEvent.logLogin(loginMethod, true) if (analyticsTrackingInteractor.get()) {
AnswersEvent.logLogin(loginMethod, true)
}
if (loginType == TYPE_LOGIN_USER_EMAIL) { if (loginType == TYPE_LOGIN_USER_EMAIL) {
view.saveSmartLockCredentials(usernameOrEmail, password) view.saveSmartLockCredentials(usernameOrEmail, password)
} }
...@@ -491,7 +472,9 @@ class LoginPresenter @Inject constructor( ...@@ -491,7 +472,9 @@ class LoginPresenter @Inject constructor(
navigator.toTwoFA(usernameOrEmail, password) navigator.toTwoFA(usernameOrEmail, password)
} }
else -> { else -> {
AnswersEvent.logLogin(loginMethod, false) if (analyticsTrackingInteractor.get()) {
AnswersEvent.logLogin(loginMethod, false)
}
exception.message?.let { exception.message?.let {
view.showMessage(it) view.showMessage(it)
}.ifNull { }.ifNull {
......
...@@ -23,6 +23,7 @@ import chat.rocket.android.authentication.domain.model.LoginDeepLinkInfo ...@@ -23,6 +23,7 @@ import chat.rocket.android.authentication.domain.model.LoginDeepLinkInfo
import chat.rocket.android.authentication.login.presentation.LoginPresenter import chat.rocket.android.authentication.login.presentation.LoginPresenter
import chat.rocket.android.authentication.login.presentation.LoginView import chat.rocket.android.authentication.login.presentation.LoginView
import chat.rocket.android.helper.* import chat.rocket.android.helper.*
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extensions.* import chat.rocket.android.util.extensions.*
import chat.rocket.android.util.helper.AnswersEvent import chat.rocket.android.util.helper.AnswersEvent
import chat.rocket.android.webview.sso.ui.INTENT_SSO_TOKEN import chat.rocket.android.webview.sso.ui.INTENT_SSO_TOKEN
...@@ -46,6 +47,8 @@ internal const val REQUEST_CODE_FOR_OAUTH = 6 ...@@ -46,6 +47,8 @@ internal const val REQUEST_CODE_FOR_OAUTH = 6
class LoginFragment : Fragment(), LoginView { class LoginFragment : Fragment(), LoginView {
@Inject @Inject
lateinit var presenter: LoginPresenter lateinit var presenter: LoginPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private var isOauthViewEnable = false private var isOauthViewEnable = false
private val layoutListener = ViewTreeObserver.OnGlobalLayoutListener { private val layoutListener = ViewTreeObserver.OnGlobalLayoutListener {
areLoginOptionsNeeded() areLoginOptionsNeeded()
...@@ -93,7 +96,9 @@ class LoginFragment : Fragment(), LoginView { ...@@ -93,7 +96,9 @@ class LoginFragment : Fragment(), LoginView {
image_key.isVisible = false image_key.isVisible = false
} }
AnswersEvent.logScreenView(TAG_LOGIN_FRAGMENT) if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_LOGIN_FRAGMENT)
}
} }
override fun onDestroyView() { override fun onDestroyView() {
......
...@@ -28,6 +28,7 @@ class RegisterUsernamePresenter @Inject constructor( ...@@ -28,6 +28,7 @@ class RegisterUsernamePresenter @Inject constructor(
private val factory: RocketChatClientFactory, private val factory: RocketChatClientFactory,
private val saveAccountInteractor: SaveAccountInteractor, private val saveAccountInteractor: SaveAccountInteractor,
private val getAccountsInteractor: GetAccountsInteractor, private val getAccountsInteractor: GetAccountsInteractor,
private val analyticsTrackingInteractor: AnalyticsTrackingInteractor,
serverInteractor: GetConnectingServerInteractor, serverInteractor: GetConnectingServerInteractor,
private val saveCurrentServer: SaveCurrentServerInteractor, private val saveCurrentServer: SaveCurrentServerInteractor,
settingsInteractor: GetSettingsInteractor settingsInteractor: GetSettingsInteractor
...@@ -52,11 +53,15 @@ class RegisterUsernamePresenter @Inject constructor( ...@@ -52,11 +53,15 @@ class RegisterUsernamePresenter @Inject constructor(
saveCurrentServer.save(currentServer) saveCurrentServer.save(currentServer)
tokenRepository.save(currentServer, Token(userId, authToken)) tokenRepository.save(currentServer, Token(userId, authToken))
registerPushToken() registerPushToken()
AnswersEvent.logSignUp(AnswersEvent.LOGIN_OR_SIGN_UP_BY_OAUTH, true) if (analyticsTrackingInteractor.get()) {
AnswersEvent.logSignUp(AnswersEvent.LOGIN_OR_SIGN_UP_BY_OAUTH, true)
}
navigator.toChatList() navigator.toChatList()
} }
} catch (exception: RocketChatException) { } catch (exception: RocketChatException) {
AnswersEvent.logSignUp(AnswersEvent.LOGIN_OR_SIGN_UP_BY_OAUTH, false) if (analyticsTrackingInteractor.get()) {
AnswersEvent.logSignUp(AnswersEvent.LOGIN_OR_SIGN_UP_BY_OAUTH, false)
}
exception.message?.let { exception.message?.let {
view.showMessage(it) view.showMessage(it)
}.ifNull { }.ifNull {
......
...@@ -10,6 +10,7 @@ import android.view.ViewGroup ...@@ -10,6 +10,7 @@ import android.view.ViewGroup
import chat.rocket.android.R import chat.rocket.android.R
import chat.rocket.android.authentication.registerusername.presentation.RegisterUsernamePresenter import chat.rocket.android.authentication.registerusername.presentation.RegisterUsernamePresenter
import chat.rocket.android.authentication.registerusername.presentation.RegisterUsernameView import chat.rocket.android.authentication.registerusername.presentation.RegisterUsernameView
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extensions.* import chat.rocket.android.util.extensions.*
import chat.rocket.android.util.helper.AnswersEvent import chat.rocket.android.util.helper.AnswersEvent
import dagger.android.support.AndroidSupportInjection import dagger.android.support.AndroidSupportInjection
...@@ -21,6 +22,8 @@ internal const val TAG_REGISTER_USERNAME_FRAGMENT = "RegisterUsernameFragment" ...@@ -21,6 +22,8 @@ internal const val TAG_REGISTER_USERNAME_FRAGMENT = "RegisterUsernameFragment"
class RegisterUsernameFragment : Fragment(), RegisterUsernameView { class RegisterUsernameFragment : Fragment(), RegisterUsernameView {
@Inject @Inject
lateinit var presenter: RegisterUsernamePresenter lateinit var presenter: RegisterUsernamePresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private lateinit var userId: String private lateinit var userId: String
private lateinit var authToken: String private lateinit var authToken: String
...@@ -64,7 +67,10 @@ class RegisterUsernameFragment : Fragment(), RegisterUsernameView { ...@@ -64,7 +67,10 @@ class RegisterUsernameFragment : Fragment(), RegisterUsernameView {
} }
setupOnClickListener() setupOnClickListener()
AnswersEvent.logScreenView(TAG_REGISTER_USERNAME_FRAGMENT)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_REGISTER_USERNAME_FRAGMENT)
}
} }
override fun alertBlankUsername() { override fun alertBlankUsername() {
......
...@@ -11,6 +11,7 @@ import android.widget.Toast ...@@ -11,6 +11,7 @@ import android.widget.Toast
import chat.rocket.android.R import chat.rocket.android.R
import chat.rocket.android.authentication.resetpassword.presentation.ResetPasswordPresenter import chat.rocket.android.authentication.resetpassword.presentation.ResetPasswordPresenter
import chat.rocket.android.authentication.resetpassword.presentation.ResetPasswordView import chat.rocket.android.authentication.resetpassword.presentation.ResetPasswordView
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extensions.* import chat.rocket.android.util.extensions.*
import chat.rocket.android.util.helper.AnswersEvent import chat.rocket.android.util.helper.AnswersEvent
import dagger.android.support.AndroidSupportInjection import dagger.android.support.AndroidSupportInjection
...@@ -22,10 +23,8 @@ internal const val TAG_RESET_PASSWORD_FRAGMENT = "ResetPasswordFragment" ...@@ -22,10 +23,8 @@ internal const val TAG_RESET_PASSWORD_FRAGMENT = "ResetPasswordFragment"
class ResetPasswordFragment : Fragment(), ResetPasswordView { class ResetPasswordFragment : Fragment(), ResetPasswordView {
@Inject @Inject
lateinit var presenter: ResetPasswordPresenter lateinit var presenter: ResetPasswordPresenter
@Inject
companion object { lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
fun newInstance() = ResetPasswordFragment()
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
...@@ -51,7 +50,10 @@ class ResetPasswordFragment : Fragment(), ResetPasswordView { ...@@ -51,7 +50,10 @@ class ResetPasswordFragment : Fragment(), ResetPasswordView {
} }
setupOnClickListener() setupOnClickListener()
AnswersEvent.logScreenView(TAG_RESET_PASSWORD_FRAGMENT)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_RESET_PASSWORD_FRAGMENT)
}
} }
override fun alertBlankEmail() { override fun alertBlankEmail() {
...@@ -135,4 +137,8 @@ class ResetPasswordFragment : Fragment(), ResetPasswordView { ...@@ -135,4 +137,8 @@ class ResetPasswordFragment : Fragment(), ResetPasswordView {
presenter.resetPassword(text_email.textContent) presenter.resetPassword(text_email.textContent)
} }
} }
companion object {
fun newInstance() = ResetPasswordFragment()
}
} }
\ No newline at end of file
...@@ -16,6 +16,7 @@ import chat.rocket.android.authentication.domain.model.LoginDeepLinkInfo ...@@ -16,6 +16,7 @@ import chat.rocket.android.authentication.domain.model.LoginDeepLinkInfo
import chat.rocket.android.authentication.server.presentation.ServerPresenter import chat.rocket.android.authentication.server.presentation.ServerPresenter
import chat.rocket.android.authentication.server.presentation.ServerView import chat.rocket.android.authentication.server.presentation.ServerView
import chat.rocket.android.helper.KeyboardHelper import chat.rocket.android.helper.KeyboardHelper
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extensions.* import chat.rocket.android.util.extensions.*
import chat.rocket.android.util.helper.AnswersEvent import chat.rocket.android.util.helper.AnswersEvent
import chat.rocket.common.util.ifNull import chat.rocket.common.util.ifNull
...@@ -29,21 +30,12 @@ internal const val TAG_SERVER_FRAGMENT = "ServerFragment" ...@@ -29,21 +30,12 @@ internal const val TAG_SERVER_FRAGMENT = "ServerFragment"
class ServerFragment : Fragment(), ServerView { class ServerFragment : Fragment(), ServerView {
@Inject @Inject
lateinit var presenter: ServerPresenter lateinit var presenter: ServerPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private var deepLinkInfo: LoginDeepLinkInfo? = null private var deepLinkInfo: LoginDeepLinkInfo? = null
private val layoutListener = ViewTreeObserver.OnGlobalLayoutListener { private val layoutListener = ViewTreeObserver.OnGlobalLayoutListener {
text_server_url.isCursorVisible = KeyboardHelper.isSoftKeyboardShown(relative_layout.rootView) text_server_url.isCursorVisible = KeyboardHelper.isSoftKeyboardShown(relative_layout.rootView)
} }
companion object {
private const val DEEP_LINK_INFO = "DeepLinkInfo"
fun newInstance(deepLinkInfo: LoginDeepLinkInfo?) = ServerFragment().apply {
arguments = Bundle().apply {
putParcelable(DEEP_LINK_INFO, deepLinkInfo)
}
}
}
private var protocol = "https://" private var protocol = "https://"
private var ignoreChange = false private var ignoreChange = false
...@@ -104,7 +96,9 @@ class ServerFragment : Fragment(), ServerView { ...@@ -104,7 +96,9 @@ class ServerFragment : Fragment(), ServerView {
} }
} }
AnswersEvent.logScreenView(TAG_SERVER_FRAGMENT) if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_SERVER_FRAGMENT)
}
} }
override fun onDestroyView() { override fun onDestroyView() {
...@@ -222,4 +216,14 @@ class ServerFragment : Fragment(), ServerView { ...@@ -222,4 +216,14 @@ class ServerFragment : Fragment(), ServerView {
} }
} }
} }
companion object {
private const val DEEP_LINK_INFO = "DeepLinkInfo"
fun newInstance(deepLinkInfo: LoginDeepLinkInfo?) = ServerFragment().apply {
arguments = Bundle().apply {
putParcelable(DEEP_LINK_INFO, deepLinkInfo)
}
}
}
} }
\ No newline at end of file
...@@ -26,6 +26,7 @@ class SignupPresenter @Inject constructor( ...@@ -26,6 +26,7 @@ class SignupPresenter @Inject constructor(
private val localRepository: LocalRepository, private val localRepository: LocalRepository,
private val serverInteractor: GetConnectingServerInteractor, private val serverInteractor: GetConnectingServerInteractor,
private val saveCurrentServerInteractor: SaveCurrentServerInteractor, private val saveCurrentServerInteractor: SaveCurrentServerInteractor,
private val analyticsTrackingInteractor: AnalyticsTrackingInteractor,
private val factory: RocketChatClientFactory, private val factory: RocketChatClientFactory,
private val saveAccountInteractor: SaveAccountInteractor, private val saveAccountInteractor: SaveAccountInteractor,
private val getAccountsInteractor: GetAccountsInteractor, private val getAccountsInteractor: GetAccountsInteractor,
...@@ -67,11 +68,21 @@ class SignupPresenter @Inject constructor( ...@@ -67,11 +68,21 @@ class SignupPresenter @Inject constructor(
localRepository.save(LocalRepository.CURRENT_USERNAME_KEY, me.username) localRepository.save(LocalRepository.CURRENT_USERNAME_KEY, me.username)
saveAccount(me) saveAccount(me)
registerPushToken() registerPushToken()
AnswersEvent.logSignUp(AnswersEvent.LOGIN_OR_SIGN_UP_BY_USER_AND_PASSWORD, true) if (analyticsTrackingInteractor.get()) {
AnswersEvent.logSignUp(
AnswersEvent.LOGIN_OR_SIGN_UP_BY_USER_AND_PASSWORD,
true
)
}
view.saveSmartLockCredentials(username, password) view.saveSmartLockCredentials(username, password)
navigator.toChatList() navigator.toChatList()
} catch (exception: RocketChatException) { } catch (exception: RocketChatException) {
AnswersEvent.logSignUp(AnswersEvent.LOGIN_OR_SIGN_UP_BY_USER_AND_PASSWORD, false) if (analyticsTrackingInteractor.get()) {
AnswersEvent.logSignUp(
AnswersEvent.LOGIN_OR_SIGN_UP_BY_USER_AND_PASSWORD,
false
)
}
exception.message?.let { exception.message?.let {
view.showMessage(it) view.showMessage(it)
}.ifNull { }.ifNull {
......
...@@ -18,6 +18,7 @@ import chat.rocket.android.authentication.signup.presentation.SignupView ...@@ -18,6 +18,7 @@ import chat.rocket.android.authentication.signup.presentation.SignupView
import chat.rocket.android.helper.KeyboardHelper import chat.rocket.android.helper.KeyboardHelper
import chat.rocket.android.helper.TextHelper import chat.rocket.android.helper.TextHelper
import chat.rocket.android.helper.saveCredentials import chat.rocket.android.helper.saveCredentials
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extensions.* import chat.rocket.android.util.extensions.*
import chat.rocket.android.util.helper.AnswersEvent import chat.rocket.android.util.helper.AnswersEvent
import dagger.android.support.AndroidSupportInjection import dagger.android.support.AndroidSupportInjection
...@@ -30,6 +31,8 @@ internal const val SAVE_CREDENTIALS = 1 ...@@ -30,6 +31,8 @@ internal const val SAVE_CREDENTIALS = 1
class SignupFragment : Fragment(), SignupView { class SignupFragment : Fragment(), SignupView {
@Inject @Inject
lateinit var presenter: SignupPresenter lateinit var presenter: SignupPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private val layoutListener = ViewTreeObserver.OnGlobalLayoutListener { private val layoutListener = ViewTreeObserver.OnGlobalLayoutListener {
if (KeyboardHelper.isSoftKeyboardShown(relative_layout.rootView)) { if (KeyboardHelper.isSoftKeyboardShown(relative_layout.rootView)) {
bottom_container.setVisible(false) bottom_container.setVisible(false)
...@@ -42,10 +45,6 @@ class SignupFragment : Fragment(), SignupView { ...@@ -42,10 +45,6 @@ class SignupFragment : Fragment(), SignupView {
} }
} }
companion object {
fun newInstance() = SignupFragment()
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
AndroidSupportInjection.inject(this) AndroidSupportInjection.inject(this)
...@@ -77,7 +76,9 @@ class SignupFragment : Fragment(), SignupView { ...@@ -77,7 +76,9 @@ class SignupFragment : Fragment(), SignupView {
) )
} }
AnswersEvent.logScreenView(TAG_SIGNUP_FRAGMENT) if(analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_SIGNUP_FRAGMENT)
}
} }
override fun onDestroyView() { override fun onDestroyView() {
...@@ -217,4 +218,8 @@ class SignupFragment : Fragment(), SignupView { ...@@ -217,4 +218,8 @@ class SignupFragment : Fragment(), SignupView {
text_password.isEnabled = value text_password.isEnabled = value
text_email.isEnabled = value text_email.isEnabled = value
} }
companion object {
fun newInstance() = SignupFragment()
}
} }
...@@ -29,6 +29,7 @@ class TwoFAPresenter @Inject constructor( ...@@ -29,6 +29,7 @@ class TwoFAPresenter @Inject constructor(
private val localRepository: LocalRepository, private val localRepository: LocalRepository,
private val serverInteractor: GetConnectingServerInteractor, private val serverInteractor: GetConnectingServerInteractor,
private val saveCurrentServerInteractor: SaveCurrentServerInteractor, private val saveCurrentServerInteractor: SaveCurrentServerInteractor,
private val analyticsTrackingInteractor: AnalyticsTrackingInteractor,
private val factory: RocketChatClientFactory, private val factory: RocketChatClientFactory,
private val saveAccountInteractor: SaveAccountInteractor, private val saveAccountInteractor: SaveAccountInteractor,
private val getAccountsInteractor: GetAccountsInteractor, private val getAccountsInteractor: GetAccountsInteractor,
...@@ -66,13 +67,23 @@ class TwoFAPresenter @Inject constructor( ...@@ -66,13 +67,23 @@ class TwoFAPresenter @Inject constructor(
saveCurrentServerInteractor.save(currentServer) saveCurrentServerInteractor.save(currentServer)
tokenRepository.save(server, token) tokenRepository.save(server, token)
registerPushToken() registerPushToken()
AnswersEvent.logLogin(AnswersEvent.LOGIN_OR_SIGN_UP_BY_USER_AND_PASSWORD, true) if (analyticsTrackingInteractor.get()) {
AnswersEvent.logLogin(
AnswersEvent.LOGIN_OR_SIGN_UP_BY_USER_AND_PASSWORD,
true
)
}
navigator.toChatList() navigator.toChatList()
} catch (exception: RocketChatException) { } catch (exception: RocketChatException) {
if (exception is RocketChatAuthException) { if (exception is RocketChatAuthException) {
view.alertInvalidTwoFactorAuthenticationCode() view.alertInvalidTwoFactorAuthenticationCode()
} else { } else {
AnswersEvent.logLogin(AnswersEvent.LOGIN_OR_SIGN_UP_BY_USER_AND_PASSWORD, false) if (analyticsTrackingInteractor.get()) {
AnswersEvent.logLogin(
AnswersEvent.LOGIN_OR_SIGN_UP_BY_USER_AND_PASSWORD,
false
)
}
exception.message?.let { exception.message?.let {
view.showMessage(it) view.showMessage(it)
}.ifNull { }.ifNull {
......
...@@ -12,6 +12,7 @@ import android.view.inputmethod.InputMethodManager ...@@ -12,6 +12,7 @@ import android.view.inputmethod.InputMethodManager
import chat.rocket.android.R import chat.rocket.android.R
import chat.rocket.android.authentication.twofactor.presentation.TwoFAPresenter import chat.rocket.android.authentication.twofactor.presentation.TwoFAPresenter
import chat.rocket.android.authentication.twofactor.presentation.TwoFAView import chat.rocket.android.authentication.twofactor.presentation.TwoFAView
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extensions.* import chat.rocket.android.util.extensions.*
import chat.rocket.android.util.helper.AnswersEvent import chat.rocket.android.util.helper.AnswersEvent
import dagger.android.support.AndroidSupportInjection import dagger.android.support.AndroidSupportInjection
...@@ -21,23 +22,13 @@ import javax.inject.Inject ...@@ -21,23 +22,13 @@ import javax.inject.Inject
internal const val TAG_TWO_FA_FRAGMENT = "TwoFAFragment" internal const val TAG_TWO_FA_FRAGMENT = "TwoFAFragment"
class TwoFAFragment : Fragment(), TwoFAView { class TwoFAFragment : Fragment(), TwoFAView {
@Inject lateinit var presenter: TwoFAPresenter @Inject
lateinit var presenter: TwoFAPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
lateinit var username: String lateinit var username: String
lateinit var password: String lateinit var password: String
// TODO - we could create an in memory repository to save username and password.
companion object {
private const val USERNAME = "username"
private const val PASSWORD = "password"
fun newInstance(username: String, password: String) = TwoFAFragment().apply {
arguments = Bundle(2).apply {
putString(USERNAME, username)
putString(PASSWORD, password)
}
}
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
AndroidSupportInjection.inject(this) AndroidSupportInjection.inject(this)
...@@ -63,7 +54,10 @@ class TwoFAFragment : Fragment(), TwoFAView { ...@@ -63,7 +54,10 @@ class TwoFAFragment : Fragment(), TwoFAView {
} }
setupOnClickListener() setupOnClickListener()
AnswersEvent.logScreenView(TAG_TWO_FA_FRAGMENT)
if(analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_TWO_FA_FRAGMENT)
}
} }
override fun alertBlankTwoFactorAuthenticationCode() { override fun alertBlankTwoFactorAuthenticationCode() {
...@@ -124,4 +118,17 @@ class TwoFAFragment : Fragment(), TwoFAView { ...@@ -124,4 +118,17 @@ class TwoFAFragment : Fragment(), TwoFAView {
presenter.authenticate(username, password, text_two_factor_auth.textContent) presenter.authenticate(username, password, text_two_factor_auth.textContent)
} }
} }
// TODO - we could create an in memory repository to save username and password.
companion object {
private const val USERNAME = "username"
private const val PASSWORD = "password"
fun newInstance(username: String, password: String) = TwoFAFragment().apply {
arguments = Bundle(2).apply {
putString(USERNAME, username)
putString(PASSWORD, password)
}
}
}
} }
...@@ -14,6 +14,7 @@ import chat.rocket.android.chatinformation.presentation.MessageInfoPresenter ...@@ -14,6 +14,7 @@ import chat.rocket.android.chatinformation.presentation.MessageInfoPresenter
import chat.rocket.android.chatinformation.presentation.MessageInfoView import chat.rocket.android.chatinformation.presentation.MessageInfoView
import chat.rocket.android.chatinformation.viewmodel.ReadReceiptViewModel import chat.rocket.android.chatinformation.viewmodel.ReadReceiptViewModel
import chat.rocket.android.helper.EndlessRecyclerViewScrollListener import chat.rocket.android.helper.EndlessRecyclerViewScrollListener
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extensions.setVisible import chat.rocket.android.util.extensions.setVisible
import chat.rocket.android.util.extensions.showToast import chat.rocket.android.util.extensions.showToast
import chat.rocket.android.util.helper.AnswersEvent import chat.rocket.android.util.helper.AnswersEvent
...@@ -34,10 +35,10 @@ internal const val TAG_MESSAGE_INFO_FRAGMENT = "MessageInfoFragment" ...@@ -34,10 +35,10 @@ internal const val TAG_MESSAGE_INFO_FRAGMENT = "MessageInfoFragment"
private const val BUNDLE_MESSAGE_ID = "message_id" private const val BUNDLE_MESSAGE_ID = "message_id"
class MessageInfoFragment : Fragment(), MessageInfoView { class MessageInfoFragment : Fragment(), MessageInfoView {
@Inject @Inject
lateinit var presenter: MessageInfoPresenter lateinit var presenter: MessageInfoPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private lateinit var adapter: ReadReceiptAdapter private lateinit var adapter: ReadReceiptAdapter
private lateinit var messageId: String private lateinit var messageId: String
...@@ -66,7 +67,10 @@ class MessageInfoFragment : Fragment(), MessageInfoView { ...@@ -66,7 +67,10 @@ class MessageInfoFragment : Fragment(), MessageInfoView {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setupRecyclerView() setupRecyclerView()
presenter.loadReadReceipts(messageId = messageId) presenter.loadReadReceipts(messageId = messageId)
AnswersEvent.logScreenView(TAG_MESSAGE_INFO_FRAGMENT)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_MESSAGE_INFO_FRAGMENT)
}
} }
private fun setupRecyclerView() { private fun setupRecyclerView() {
......
...@@ -17,17 +17,7 @@ import chat.rocket.android.db.DatabaseManager ...@@ -17,17 +17,7 @@ import chat.rocket.android.db.DatabaseManager
import chat.rocket.android.helper.MessageHelper import chat.rocket.android.helper.MessageHelper
import chat.rocket.android.helper.UserHelper import chat.rocket.android.helper.UserHelper
import chat.rocket.android.infrastructure.LocalRepository import chat.rocket.android.infrastructure.LocalRepository
import chat.rocket.android.server.domain.GetCurrentServerInteractor import chat.rocket.android.server.domain.*
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.PermissionsInteractor
import chat.rocket.android.server.domain.PublicSettings
import chat.rocket.android.server.domain.RoomRepository
import chat.rocket.android.server.domain.UsersRepository
import chat.rocket.android.server.domain.uploadMaxFileSize
import chat.rocket.android.server.domain.uploadMimeTypeFilter
import chat.rocket.android.server.domain.useRealName
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import chat.rocket.android.server.infraestructure.state import chat.rocket.android.server.infraestructure.state
import chat.rocket.android.util.extension.compressImageAndGetInputStream import chat.rocket.android.util.extension.compressImageAndGetInputStream
...@@ -91,6 +81,7 @@ class ChatRoomPresenter @Inject constructor( ...@@ -91,6 +81,7 @@ class ChatRoomPresenter @Inject constructor(
private val usersRepository: UsersRepository, private val usersRepository: UsersRepository,
private val roomsRepository: RoomRepository, private val roomsRepository: RoomRepository,
private val localRepository: LocalRepository, private val localRepository: LocalRepository,
private val analyticsTrackingInteractor: AnalyticsTrackingInteractor,
private val userHelper: UserHelper, private val userHelper: UserHelper,
private val mapper: UiModelMapper, private val mapper: UiModelMapper,
private val jobSchedulerInteractor: JobSchedulerInteractor, private val jobSchedulerInteractor: JobSchedulerInteractor,
...@@ -292,12 +283,14 @@ class ChatRoomPresenter @Inject constructor( ...@@ -292,12 +283,14 @@ class ChatRoomPresenter @Inject constructor(
messagesRepository.save(newMessage) messagesRepository.save(newMessage)
view.showNewMessage( view.showNewMessage(
mapper.map( mapper.map(
newMessage, newMessage,
RoomUiModel(roles = chatRoles, isBroadcast = chatIsBroadcast) RoomUiModel(roles = chatRoles, isBroadcast = chatIsBroadcast)
), false ), false
) )
client.sendMessage(id, chatRoomId, text) client.sendMessage(id, chatRoomId, text)
AnswersEvent.logMessageSent(chatRoomType, currentServer) if (analyticsTrackingInteractor.get()) {
AnswersEvent.logMessageSent(chatRoomType, currentServer)
}
} catch (ex: Exception) { } catch (ex: Exception) {
// Ok, not very beautiful, but the backend sends us a not valid response // Ok, not very beautiful, but the backend sends us a not valid response
// When someone sends a message on a read-only channel, so we just ignore it // When someone sends a message on a read-only channel, so we just ignore it
...@@ -368,7 +361,9 @@ class ChatRoomPresenter @Inject constructor( ...@@ -368,7 +361,9 @@ class ChatRoomPresenter @Inject constructor(
inputStream inputStream
} }
} }
AnswersEvent.logMediaUploaded(chatRoomType, mimeType) if (analyticsTrackingInteractor.get()) {
AnswersEvent.logMediaUploaded(chatRoomType, mimeType)
}
} }
} }
} }
...@@ -941,7 +936,9 @@ class ChatRoomPresenter @Inject constructor( ...@@ -941,7 +936,9 @@ class ChatRoomPresenter @Inject constructor(
retryIO("toggleEmoji($messageId, $emoji)") { retryIO("toggleEmoji($messageId, $emoji)") {
client.toggleReaction(messageId, emoji.removeSurrounding(":")) client.toggleReaction(messageId, emoji.removeSurrounding(":"))
} }
AnswersEvent.logReaction(chatRoomType) if (analyticsTrackingInteractor.get()) {
AnswersEvent.logReaction(chatRoomType)
}
} catch (ex: RocketChatException) { } catch (ex: RocketChatException) {
Timber.e(ex) Timber.e(ex)
} }
......
...@@ -55,6 +55,7 @@ import chat.rocket.android.helper.EndlessRecyclerViewScrollListener ...@@ -55,6 +55,7 @@ import chat.rocket.android.helper.EndlessRecyclerViewScrollListener
import chat.rocket.android.helper.ImageHelper import chat.rocket.android.helper.ImageHelper
import chat.rocket.android.helper.KeyboardHelper import chat.rocket.android.helper.KeyboardHelper
import chat.rocket.android.helper.MessageParser import chat.rocket.android.helper.MessageParser
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extension.asObservable import chat.rocket.android.util.extension.asObservable
import chat.rocket.android.util.extensions.circularRevealOrUnreveal import chat.rocket.android.util.extensions.circularRevealOrUnreveal
import chat.rocket.android.util.extensions.fadeIn import chat.rocket.android.util.extensions.fadeIn
...@@ -135,6 +136,8 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR ...@@ -135,6 +136,8 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
lateinit var presenter: ChatRoomPresenter lateinit var presenter: ChatRoomPresenter
@Inject @Inject
lateinit var parser: MessageParser lateinit var parser: MessageParser
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private lateinit var adapter: ChatRoomAdapter private lateinit var adapter: ChatRoomAdapter
internal lateinit var chatRoomId: String internal lateinit var chatRoomId: String
private lateinit var chatRoomName: String private lateinit var chatRoomName: String
...@@ -232,7 +235,9 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR ...@@ -232,7 +235,9 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
it.showToolbarChatRoomIcon(chatRoomType) it.showToolbarChatRoomIcon(chatRoomType)
} }
AnswersEvent.logScreenView(TAG_CHAT_ROOM_FRAGMENT) if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_CHAT_ROOM_FRAGMENT)
}
} }
override fun onActivityCreated(savedInstanceState: Bundle?) { override fun onActivityCreated(savedInstanceState: Bundle?) {
......
...@@ -32,6 +32,7 @@ import chat.rocket.android.db.DatabaseManager ...@@ -32,6 +32,7 @@ import chat.rocket.android.db.DatabaseManager
import chat.rocket.android.helper.ChatRoomsSortOrder import chat.rocket.android.helper.ChatRoomsSortOrder
import chat.rocket.android.helper.Constants import chat.rocket.android.helper.Constants
import chat.rocket.android.helper.SharedPreferenceHelper import chat.rocket.android.helper.SharedPreferenceHelper
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extension.onQueryTextListener import chat.rocket.android.util.extension.onQueryTextListener
import chat.rocket.android.util.extensions.fadeIn import chat.rocket.android.util.extensions.fadeIn
import chat.rocket.android.util.extensions.fadeOut import chat.rocket.android.util.extensions.fadeOut
...@@ -57,14 +58,12 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView { ...@@ -57,14 +58,12 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView {
lateinit var factory: ChatRoomsViewModelFactory lateinit var factory: ChatRoomsViewModelFactory
@Inject @Inject
lateinit var dbManager: DatabaseManager // TODO - remove when moving ChatRoom screen to DB lateinit var dbManager: DatabaseManager // TODO - remove when moving ChatRoom screen to DB
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
lateinit var viewModel: ChatRoomsViewModel lateinit var viewModel: ChatRoomsViewModel
private var searchView: SearchView? = null private var searchView: SearchView? = null
private var sortView: MenuItem? = null private var sortView: MenuItem? = null
private val handler = Handler() private val handler = Handler()
private var chatRoomId: String? = null private var chatRoomId: String? = null
private var progressDialog: ProgressDialog? = null private var progressDialog: ProgressDialog? = null
...@@ -111,7 +110,10 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView { ...@@ -111,7 +110,10 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView {
subscribeUi() subscribeUi()
setupToolbar() setupToolbar()
AnswersEvent.logScreenView(TAG_CHAT_ROOMS_FRAGMENT)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_CHAT_ROOMS_FRAGMENT)
}
} }
private fun subscribeUi() { private fun subscribeUi() {
......
...@@ -20,6 +20,7 @@ import chat.rocket.android.createchannel.presentation.CreateChannelView ...@@ -20,6 +20,7 @@ import chat.rocket.android.createchannel.presentation.CreateChannelView
import chat.rocket.android.main.ui.MainActivity import chat.rocket.android.main.ui.MainActivity
import chat.rocket.android.members.adapter.MembersAdapter import chat.rocket.android.members.adapter.MembersAdapter
import chat.rocket.android.members.uimodel.MemberUiModel import chat.rocket.android.members.uimodel.MemberUiModel
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extension.asObservable import chat.rocket.android.util.extension.asObservable
import chat.rocket.android.util.extensions.inflate import chat.rocket.android.util.extensions.inflate
import chat.rocket.android.util.extensions.showToast import chat.rocket.android.util.extensions.showToast
...@@ -40,6 +41,8 @@ internal const val TAG_CREATE_CHANNEL_FRAGMENT = "CreateChannelFragment" ...@@ -40,6 +41,8 @@ internal const val TAG_CREATE_CHANNEL_FRAGMENT = "CreateChannelFragment"
class CreateChannelFragment : Fragment(), CreateChannelView, ActionMode.Callback { class CreateChannelFragment : Fragment(), CreateChannelView, ActionMode.Callback {
@Inject @Inject
lateinit var createChannelPresenter: CreateChannelPresenter lateinit var createChannelPresenter: CreateChannelPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private var actionMode: ActionMode? = null private var actionMode: ActionMode? = null
private val adapter: MembersAdapter = MembersAdapter { private val adapter: MembersAdapter = MembersAdapter {
if (it.username != null) { if (it.username != null) {
...@@ -72,7 +75,10 @@ class CreateChannelFragment : Fragment(), CreateChannelView, ActionMode.Callback ...@@ -72,7 +75,10 @@ class CreateChannelFragment : Fragment(), CreateChannelView, ActionMode.Callback
setupViewListeners() setupViewListeners()
setupRecyclerView() setupRecyclerView()
subscribeEditTexts() subscribeEditTexts()
AnswersEvent.logScreenView(TAG_CREATE_CHANNEL_FRAGMENT)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_CREATE_CHANNEL_FRAGMENT)
}
} }
override fun onDestroyView() { override fun onDestroyView() {
......
...@@ -16,6 +16,7 @@ import chat.rocket.android.chatroom.uimodel.BaseUiModel ...@@ -16,6 +16,7 @@ import chat.rocket.android.chatroom.uimodel.BaseUiModel
import chat.rocket.android.favoritemessages.presentation.FavoriteMessagesPresenter import chat.rocket.android.favoritemessages.presentation.FavoriteMessagesPresenter
import chat.rocket.android.favoritemessages.presentation.FavoriteMessagesView import chat.rocket.android.favoritemessages.presentation.FavoriteMessagesView
import chat.rocket.android.helper.EndlessRecyclerViewScrollListener import chat.rocket.android.helper.EndlessRecyclerViewScrollListener
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extensions.inflate import chat.rocket.android.util.extensions.inflate
import chat.rocket.android.util.extensions.showToast import chat.rocket.android.util.extensions.showToast
import chat.rocket.android.util.extensions.ui import chat.rocket.android.util.extensions.ui
...@@ -36,10 +37,12 @@ internal const val TAG_FAVORITE_MESSAGES_FRAGMENT = "FavoriteMessagesFragment" ...@@ -36,10 +37,12 @@ internal const val TAG_FAVORITE_MESSAGES_FRAGMENT = "FavoriteMessagesFragment"
private const val INTENT_CHAT_ROOM_ID = "chat_room_id" private const val INTENT_CHAT_ROOM_ID = "chat_room_id"
class FavoriteMessagesFragment : Fragment(), FavoriteMessagesView { class FavoriteMessagesFragment : Fragment(), FavoriteMessagesView {
private lateinit var chatRoomId: String
private val adapter = ChatRoomAdapter(enableActions = false)
@Inject @Inject
lateinit var presenter: FavoriteMessagesPresenter lateinit var presenter: FavoriteMessagesPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private lateinit var chatRoomId: String
private val adapter = ChatRoomAdapter(enableActions = false)
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
...@@ -63,7 +66,10 @@ class FavoriteMessagesFragment : Fragment(), FavoriteMessagesView { ...@@ -63,7 +66,10 @@ class FavoriteMessagesFragment : Fragment(), FavoriteMessagesView {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setupToolbar() setupToolbar()
presenter.loadFavoriteMessages(chatRoomId) presenter.loadFavoriteMessages(chatRoomId)
AnswersEvent.logScreenView(TAG_FAVORITE_MESSAGES_FRAGMENT)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_FAVORITE_MESSAGES_FRAGMENT)
}
} }
override fun showFavoriteMessages(favoriteMessages: List<BaseUiModel<*>>) { override fun showFavoriteMessages(favoriteMessages: List<BaseUiModel<*>>) {
......
...@@ -21,6 +21,7 @@ import chat.rocket.android.files.uimodel.FileUiModel ...@@ -21,6 +21,7 @@ import chat.rocket.android.files.uimodel.FileUiModel
import chat.rocket.android.helper.EndlessRecyclerViewScrollListener import chat.rocket.android.helper.EndlessRecyclerViewScrollListener
import chat.rocket.android.helper.ImageHelper import chat.rocket.android.helper.ImageHelper
import chat.rocket.android.player.PlayerActivity import chat.rocket.android.player.PlayerActivity
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extensions.inflate import chat.rocket.android.util.extensions.inflate
import chat.rocket.android.util.extensions.showToast import chat.rocket.android.util.extensions.showToast
import chat.rocket.android.util.extensions.ui import chat.rocket.android.util.extensions.ui
...@@ -43,6 +44,8 @@ private const val BUNDLE_CHAT_ROOM_ID = "chat_room_id" ...@@ -43,6 +44,8 @@ private const val BUNDLE_CHAT_ROOM_ID = "chat_room_id"
class FilesFragment : Fragment(), FilesView { class FilesFragment : Fragment(), FilesView {
@Inject @Inject
lateinit var presenter: FilesPresenter lateinit var presenter: FilesPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private val adapter: FilesAdapter = private val adapter: FilesAdapter =
FilesAdapter { fileUiModel -> presenter.openFile(fileUiModel) } FilesAdapter { fileUiModel -> presenter.openFile(fileUiModel) }
private val linearLayoutManager = LinearLayoutManager(context) private val linearLayoutManager = LinearLayoutManager(context)
...@@ -70,7 +73,10 @@ class FilesFragment : Fragment(), FilesView { ...@@ -70,7 +73,10 @@ class FilesFragment : Fragment(), FilesView {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setupRecyclerView() setupRecyclerView()
presenter.loadFiles(chatRoomId) presenter.loadFiles(chatRoomId)
AnswersEvent.logScreenView(TAG_FILES_FRAGMENT)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_FILES_FRAGMENT)
}
} }
override fun showFiles(dataSet: List<FileUiModel>, total: Long) { override fun showFiles(dataSet: List<FileUiModel>, total: Long) {
......
...@@ -7,10 +7,12 @@ import android.view.View ...@@ -7,10 +7,12 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.view.isVisible import androidx.core.view.isVisible
import chat.rocket.android.R import chat.rocket.android.R
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extensions.content import chat.rocket.android.util.extensions.content
import chat.rocket.android.util.extensions.textContent import chat.rocket.android.util.extensions.textContent
import chat.rocket.android.util.helper.AnswersEvent import chat.rocket.android.util.helper.AnswersEvent
import kotlinx.android.synthetic.main.fragment_member_bottom_sheet.* import kotlinx.android.synthetic.main.fragment_member_bottom_sheet.*
import javax.inject.Inject
fun newInstance(avatarUri: String, fun newInstance(avatarUri: String,
realName: String, realName: String,
...@@ -37,6 +39,8 @@ private const val BUNDLE_EMAIL = "email" ...@@ -37,6 +39,8 @@ private const val BUNDLE_EMAIL = "email"
private const val BUNDLE_UTC_OFFSET = "utc_offset" private const val BUNDLE_UTC_OFFSET = "utc_offset"
class MemberBottomSheetFragment: BottomSheetDialogFragment() { class MemberBottomSheetFragment: BottomSheetDialogFragment() {
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private lateinit var avatarUri: String private lateinit var avatarUri: String
private lateinit var realName: String private lateinit var realName: String
private lateinit var username: String private lateinit var username: String
...@@ -63,7 +67,10 @@ class MemberBottomSheetFragment: BottomSheetDialogFragment() { ...@@ -63,7 +67,10 @@ class MemberBottomSheetFragment: BottomSheetDialogFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
showMemberDetails() showMemberDetails()
AnswersEvent.logScreenView(TAG_MEMBER_BOTTOM_SHEET_FRAGMENT)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_MEMBER_BOTTOM_SHEET_FRAGMENT)
}
} }
private fun showMemberDetails() { private fun showMemberDetails() {
......
...@@ -16,6 +16,7 @@ import chat.rocket.android.members.adapter.MembersAdapter ...@@ -16,6 +16,7 @@ import chat.rocket.android.members.adapter.MembersAdapter
import chat.rocket.android.members.presentation.MembersPresenter import chat.rocket.android.members.presentation.MembersPresenter
import chat.rocket.android.members.presentation.MembersView import chat.rocket.android.members.presentation.MembersView
import chat.rocket.android.members.uimodel.MemberUiModel import chat.rocket.android.members.uimodel.MemberUiModel
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extensions.inflate import chat.rocket.android.util.extensions.inflate
import chat.rocket.android.util.extensions.showToast import chat.rocket.android.util.extensions.showToast
import chat.rocket.android.util.extensions.ui import chat.rocket.android.util.extensions.ui
...@@ -38,6 +39,8 @@ private const val BUNDLE_CHAT_ROOM_ID = "chat_room_id" ...@@ -38,6 +39,8 @@ private const val BUNDLE_CHAT_ROOM_ID = "chat_room_id"
class MembersFragment : Fragment(), MembersView { class MembersFragment : Fragment(), MembersView {
@Inject @Inject
lateinit var presenter: MembersPresenter lateinit var presenter: MembersPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private val adapter: MembersAdapter = private val adapter: MembersAdapter =
MembersAdapter { memberUiModel -> presenter.toMemberDetails(memberUiModel) } MembersAdapter { memberUiModel -> presenter.toMemberDetails(memberUiModel) }
private val linearLayoutManager = LinearLayoutManager(context) private val linearLayoutManager = LinearLayoutManager(context)
...@@ -65,7 +68,10 @@ class MembersFragment : Fragment(), MembersView { ...@@ -65,7 +68,10 @@ class MembersFragment : Fragment(), MembersView {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setupRecyclerView() setupRecyclerView()
presenter.loadChatRoomsMembers(chatRoomId) presenter.loadChatRoomsMembers(chatRoomId)
AnswersEvent.logScreenView(TAG_MEMBERS_FRAGMENT)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_MEMBERS_FRAGMENT)
}
} }
override fun showMembers(dataSet: List<MemberUiModel>, total: Long) { override fun showMembers(dataSet: List<MemberUiModel>, total: Long) {
......
...@@ -16,6 +16,7 @@ import chat.rocket.android.chatroom.uimodel.BaseUiModel ...@@ -16,6 +16,7 @@ import chat.rocket.android.chatroom.uimodel.BaseUiModel
import chat.rocket.android.helper.EndlessRecyclerViewScrollListener import chat.rocket.android.helper.EndlessRecyclerViewScrollListener
import chat.rocket.android.mentions.presentention.MentionsPresenter import chat.rocket.android.mentions.presentention.MentionsPresenter
import chat.rocket.android.mentions.presentention.MentionsView import chat.rocket.android.mentions.presentention.MentionsView
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extensions.inflate import chat.rocket.android.util.extensions.inflate
import chat.rocket.android.util.extensions.showToast import chat.rocket.android.util.extensions.showToast
import chat.rocket.android.util.extensions.ui import chat.rocket.android.util.extensions.ui
...@@ -41,6 +42,8 @@ class MentionsFragment : Fragment(), MentionsView { ...@@ -41,6 +42,8 @@ class MentionsFragment : Fragment(), MentionsView {
private val adapter = ChatRoomAdapter(enableActions = false) private val adapter = ChatRoomAdapter(enableActions = false)
@Inject @Inject
lateinit var presenter: MentionsPresenter lateinit var presenter: MentionsPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
...@@ -65,7 +68,10 @@ class MentionsFragment : Fragment(), MentionsView { ...@@ -65,7 +68,10 @@ class MentionsFragment : Fragment(), MentionsView {
setupToolbar() setupToolbar()
presenter.loadMentions(chatRoomId) presenter.loadMentions(chatRoomId)
AnswersEvent.logScreenView(TAG_MENTIONS_FRAGMENT)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_MENTIONS_FRAGMENT)
}
} }
override fun showMentions(mentions: List<BaseUiModel<*>>) { override fun showMentions(mentions: List<BaseUiModel<*>>) {
......
...@@ -16,6 +16,7 @@ import chat.rocket.android.chatroom.uimodel.BaseUiModel ...@@ -16,6 +16,7 @@ import chat.rocket.android.chatroom.uimodel.BaseUiModel
import chat.rocket.android.helper.EndlessRecyclerViewScrollListener import chat.rocket.android.helper.EndlessRecyclerViewScrollListener
import chat.rocket.android.pinnedmessages.presentation.PinnedMessagesPresenter import chat.rocket.android.pinnedmessages.presentation.PinnedMessagesPresenter
import chat.rocket.android.pinnedmessages.presentation.PinnedMessagesView import chat.rocket.android.pinnedmessages.presentation.PinnedMessagesView
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extensions.inflate import chat.rocket.android.util.extensions.inflate
import chat.rocket.android.util.extensions.showToast import chat.rocket.android.util.extensions.showToast
import chat.rocket.android.util.extensions.ui import chat.rocket.android.util.extensions.ui
...@@ -36,10 +37,12 @@ internal const val TAG_PINNED_MESSAGES_FRAGMENT = "PinnedMessagesFragment" ...@@ -36,10 +37,12 @@ internal const val TAG_PINNED_MESSAGES_FRAGMENT = "PinnedMessagesFragment"
private const val BUNDLE_CHAT_ROOM_ID = "chat_room_id" private const val BUNDLE_CHAT_ROOM_ID = "chat_room_id"
class PinnedMessagesFragment : Fragment(), PinnedMessagesView { class PinnedMessagesFragment : Fragment(), PinnedMessagesView {
private lateinit var chatRoomId: String
private val adapter = ChatRoomAdapter(enableActions = false)
@Inject @Inject
lateinit var presenter: PinnedMessagesPresenter lateinit var presenter: PinnedMessagesPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private lateinit var chatRoomId: String
private val adapter = ChatRoomAdapter(enableActions = false)
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
...@@ -64,7 +67,10 @@ class PinnedMessagesFragment : Fragment(), PinnedMessagesView { ...@@ -64,7 +67,10 @@ class PinnedMessagesFragment : Fragment(), PinnedMessagesView {
setupToolbar() setupToolbar()
presenter.loadPinnedMessages(chatRoomId) presenter.loadPinnedMessages(chatRoomId)
AnswersEvent.logScreenView(TAG_PINNED_MESSAGES_FRAGMENT)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_PINNED_MESSAGES_FRAGMENT)
}
} }
override fun showPinnedMessages(pinnedMessages: List<BaseUiModel<*>>) { override fun showPinnedMessages(pinnedMessages: List<BaseUiModel<*>>) {
......
...@@ -5,10 +5,12 @@ import android.view.LayoutInflater ...@@ -5,10 +5,12 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import chat.rocket.android.BuildConfig
import chat.rocket.android.R import chat.rocket.android.R
import chat.rocket.android.main.ui.MainActivity import chat.rocket.android.main.ui.MainActivity
import chat.rocket.android.preferences.presentation.PreferencesPresenter import chat.rocket.android.preferences.presentation.PreferencesPresenter
import chat.rocket.android.preferences.presentation.PreferencesView import chat.rocket.android.preferences.presentation.PreferencesView
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.helper.AnswersEvent import chat.rocket.android.util.helper.AnswersEvent
import dagger.android.support.AndroidSupportInjection import dagger.android.support.AndroidSupportInjection
import kotlinx.android.synthetic.main.app_bar.* import kotlinx.android.synthetic.main.app_bar.*
...@@ -20,6 +22,8 @@ internal const val TAG_PREFERENCES_FRAGMENT = "PreferencesFragment" ...@@ -20,6 +22,8 @@ internal const val TAG_PREFERENCES_FRAGMENT = "PreferencesFragment"
class PreferencesFragment : Fragment(), PreferencesView { class PreferencesFragment : Fragment(), PreferencesView {
@Inject @Inject
lateinit var presenter: PreferencesPresenter lateinit var presenter: PreferencesPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
...@@ -37,10 +41,21 @@ class PreferencesFragment : Fragment(), PreferencesView { ...@@ -37,10 +41,21 @@ class PreferencesFragment : Fragment(), PreferencesView {
setupToolbar() setupToolbar()
setupListeners() setupListeners()
presenter.loadAnalyticsTrackingInformation() presenter.loadAnalyticsTrackingInformation()
AnswersEvent.logScreenView(TAG_PREFERENCES_FRAGMENT)
if(analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_PREFERENCES_FRAGMENT)
}
} }
override fun setupAnalyticsTrackingView(isAnalyticsTrackingEnabled: Boolean) { override fun setupAnalyticsTrackingView(isAnalyticsTrackingEnabled: Boolean) {
if (BuildConfig.FLAVOR == "foss") {
text_analytics_tracking_description.text =
getString(R.string.msg_not_applicable_since_it_is_a_foss_version)
switch_analytics_tracking.isChecked = false
switch_analytics_tracking.isEnabled = false
return
}
if (isAnalyticsTrackingEnabled) { if (isAnalyticsTrackingEnabled) {
text_analytics_tracking_description.text = text_analytics_tracking_description.text =
getString(R.string.msg_send_analytics_tracking) getString(R.string.msg_send_analytics_tracking)
......
...@@ -16,6 +16,7 @@ import chat.rocket.android.R ...@@ -16,6 +16,7 @@ import chat.rocket.android.R
import chat.rocket.android.main.ui.MainActivity import chat.rocket.android.main.ui.MainActivity
import chat.rocket.android.profile.presentation.ProfilePresenter import chat.rocket.android.profile.presentation.ProfilePresenter
import chat.rocket.android.profile.presentation.ProfileView import chat.rocket.android.profile.presentation.ProfileView
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extension.asObservable import chat.rocket.android.util.extension.asObservable
import chat.rocket.android.util.extension.dispatchImageSelection import chat.rocket.android.util.extension.dispatchImageSelection
import chat.rocket.android.util.extension.dispatchTakePicture import chat.rocket.android.util.extension.dispatchTakePicture
...@@ -41,6 +42,8 @@ private const val REQUEST_CODE_FOR_PERFORM_CAMERA = 2 ...@@ -41,6 +42,8 @@ private const val REQUEST_CODE_FOR_PERFORM_CAMERA = 2
class ProfileFragment : Fragment(), ProfileView, ActionMode.Callback { class ProfileFragment : Fragment(), ProfileView, ActionMode.Callback {
@Inject @Inject
lateinit var presenter: ProfilePresenter lateinit var presenter: ProfilePresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private var currentName = "" private var currentName = ""
private var currentUsername = "" private var currentUsername = ""
private var currentEmail = "" private var currentEmail = ""
...@@ -72,7 +75,10 @@ class ProfileFragment : Fragment(), ProfileView, ActionMode.Callback { ...@@ -72,7 +75,10 @@ class ProfileFragment : Fragment(), ProfileView, ActionMode.Callback {
} }
presenter.loadUserProfile() presenter.loadUserProfile()
subscribeEditTexts() subscribeEditTexts()
AnswersEvent.logScreenView(TAG_PROFILE_FRAGMENT)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_PROFILE_FRAGMENT)
}
} }
override fun onDestroyView() { override fun onDestroyView() {
......
...@@ -17,6 +17,7 @@ class ChangeServerPresenter @Inject constructor( ...@@ -17,6 +17,7 @@ class ChangeServerPresenter @Inject constructor(
private val getCurrentServerInteractor: GetCurrentServerInteractor, private val getCurrentServerInteractor: GetCurrentServerInteractor,
private val getAccountInteractor: GetAccountInteractor, private val getAccountInteractor: GetAccountInteractor,
private val getAccountsInteractor: GetAccountsInteractor, private val getAccountsInteractor: GetAccountsInteractor,
private val analyticsTrackingInteractor: AnalyticsTrackingInteractor,
private val settingsRepository: SettingsRepository, private val settingsRepository: SettingsRepository,
private val tokenRepository: TokenRepository, private val tokenRepository: TokenRepository,
private val localRepository: LocalRepository, private val localRepository: LocalRepository,
...@@ -59,7 +60,9 @@ class ChangeServerPresenter @Inject constructor( ...@@ -59,7 +60,9 @@ class ChangeServerPresenter @Inject constructor(
saveCurrentServerInteractor.save(serverUrl) saveCurrentServerInteractor.save(serverUrl)
view.hideProgress() view.hideProgress()
AnswersEvent.logServerSwitch(serverUrl, accounts.size) if (analyticsTrackingInteractor.get()) {
AnswersEvent.logServerSwitch(serverUrl, accounts.size)
}
navigator.toChatRooms(chatRoomId) navigator.toChatRooms(chatRoomId)
}.ifNull { }.ifNull {
view.hideProgress() view.hideProgress()
......
...@@ -9,6 +9,7 @@ import chat.rocket.android.settings.password.presentation.PasswordPresenter ...@@ -9,6 +9,7 @@ import chat.rocket.android.settings.password.presentation.PasswordPresenter
import chat.rocket.android.settings.password.presentation.PasswordView import chat.rocket.android.settings.password.presentation.PasswordView
import chat.rocket.android.util.extensions.inflate import chat.rocket.android.util.extensions.inflate
import androidx.appcompat.view.ActionMode import androidx.appcompat.view.ActionMode
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extension.asObservable import chat.rocket.android.util.extension.asObservable
import chat.rocket.android.util.extensions.textContent import chat.rocket.android.util.extensions.textContent
import chat.rocket.android.util.extensions.ui import chat.rocket.android.util.extensions.ui
...@@ -23,7 +24,10 @@ import javax.inject.Inject ...@@ -23,7 +24,10 @@ import javax.inject.Inject
internal const val TAG_PASSWORD_FRAGMENT = "PasswordFragment" internal const val TAG_PASSWORD_FRAGMENT = "PasswordFragment"
class PasswordFragment: Fragment(), PasswordView, ActionMode.Callback { class PasswordFragment: Fragment(), PasswordView, ActionMode.Callback {
@Inject lateinit var presenter: PasswordPresenter @Inject
lateinit var presenter: PasswordPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private var actionMode: ActionMode? = null private var actionMode: ActionMode? = null
private val disposables = CompositeDisposable() private val disposables = CompositeDisposable()
...@@ -42,7 +46,10 @@ class PasswordFragment: Fragment(), PasswordView, ActionMode.Callback { ...@@ -42,7 +46,10 @@ class PasswordFragment: Fragment(), PasswordView, ActionMode.Callback {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
disposables.add(listenToChanges()) disposables.add(listenToChanges())
AnswersEvent.logScreenView(TAG_PASSWORD_FRAGMENT)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_PASSWORD_FRAGMENT)
}
} }
override fun onDestroyView() { override fun onDestroyView() {
......
...@@ -2,29 +2,33 @@ package chat.rocket.android.settings.ui ...@@ -2,29 +2,33 @@ package chat.rocket.android.settings.ui
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.appcompat.app.AppCompatActivity
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.AdapterView import android.widget.AdapterView
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import chat.rocket.android.R import chat.rocket.android.R
import chat.rocket.android.about.ui.AboutFragment import chat.rocket.android.about.ui.AboutFragment
import chat.rocket.android.about.ui.TAG_ABOUT_FRAGMENT import chat.rocket.android.about.ui.TAG_ABOUT_FRAGMENT
import chat.rocket.android.main.ui.MainActivity import chat.rocket.android.main.ui.MainActivity
import chat.rocket.android.preferences.ui.PreferencesFragment import chat.rocket.android.preferences.ui.PreferencesFragment
import chat.rocket.android.preferences.ui.TAG_PREFERENCES_FRAGMENT import chat.rocket.android.preferences.ui.TAG_PREFERENCES_FRAGMENT
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.settings.password.ui.PasswordActivity import chat.rocket.android.settings.password.ui.PasswordActivity
import chat.rocket.android.settings.presentation.SettingsView import chat.rocket.android.settings.presentation.SettingsView
import chat.rocket.android.util.extensions.addFragmentBackStack import chat.rocket.android.util.extensions.addFragmentBackStack
import chat.rocket.android.util.extensions.inflate import chat.rocket.android.util.extensions.inflate
import chat.rocket.android.util.helper.AnswersEvent import chat.rocket.android.util.helper.AnswersEvent
import kotlinx.android.synthetic.main.fragment_settings.* import kotlinx.android.synthetic.main.fragment_settings.*
import javax.inject.Inject
import kotlin.reflect.KClass import kotlin.reflect.KClass
internal const val TAG_SETTINGS_FRAGMENT = "SettingsFragment" internal const val TAG_SETTINGS_FRAGMENT = "SettingsFragment"
class SettingsFragment : Fragment(), SettingsView, AdapterView.OnItemClickListener { class SettingsFragment : Fragment(), SettingsView, AdapterView.OnItemClickListener {
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
...@@ -36,7 +40,10 @@ class SettingsFragment : Fragment(), SettingsView, AdapterView.OnItemClickListen ...@@ -36,7 +40,10 @@ class SettingsFragment : Fragment(), SettingsView, AdapterView.OnItemClickListen
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setupToolbar() setupToolbar()
setupListView() setupListView()
AnswersEvent.logScreenView(TAG_SETTINGS_FRAGMENT)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_SETTINGS_FRAGMENT)
}
} }
override fun onResume() { override fun onResume() {
......
...@@ -150,6 +150,7 @@ ...@@ -150,6 +150,7 @@
<string name="msg_analytics_tracking">Analytics tracking</string> <!-- TODO Add translation --> <string name="msg_analytics_tracking">Analytics tracking</string> <!-- TODO Add translation -->
<string name="msg_send_analytics_tracking">Send anonymous statics to help improving this app</string> <!-- TODO Add translation --> <string name="msg_send_analytics_tracking">Send anonymous statics to help improving this app</string> <!-- TODO Add translation -->
<string name="msg_do_not_send_analytics_tracking">Do not send anonymous statics to help improving this app</string> <!-- TODO Add translation --> <string name="msg_do_not_send_analytics_tracking">Do not send anonymous statics to help improving this app</string> <!-- TODO Add translation -->
<string name="msg_not_applicable_since_it_is_a_foss_version">Not applicable since it is a FOSS version</string> <!-- TODO Add translation -->
<!-- System messages --> <!-- System messages -->
<string name="message_room_name_changed">Raum Namen geändert zu: %1$s von %2$s</string> <string name="message_room_name_changed">Raum Namen geändert zu: %1$s von %2$s</string>
......
...@@ -144,6 +144,7 @@ ...@@ -144,6 +144,7 @@
<string name="msg_analytics_tracking">Analytics tracking</string> <!-- TODO Add translation --> <string name="msg_analytics_tracking">Analytics tracking</string> <!-- TODO Add translation -->
<string name="msg_send_analytics_tracking">Send anonymous statics to help improving this app</string> <!-- TODO Add translation --> <string name="msg_send_analytics_tracking">Send anonymous statics to help improving this app</string> <!-- TODO Add translation -->
<string name="msg_do_not_send_analytics_tracking">Do not send anonymous statics to help improving this app</string> <!-- TODO Add translation --> <string name="msg_do_not_send_analytics_tracking">Do not send anonymous statics to help improving this app</string> <!-- TODO Add translation -->
<string name="msg_not_applicable_since_it_is_a_foss_version">Not applicable since it is a FOSS version</string> <!-- TODO Add translation -->
<!-- System messages --> <!-- System messages -->
<string name="message_room_name_changed">Nombre de la sala cambiado para: %1$s por %2$s</string> <string name="message_room_name_changed">Nombre de la sala cambiado para: %1$s por %2$s</string>
......
...@@ -162,6 +162,7 @@ ...@@ -162,6 +162,7 @@
<string name="msg_analytics_tracking">Analytics tracking</string> <!-- TODO Add translation --> <string name="msg_analytics_tracking">Analytics tracking</string> <!-- TODO Add translation -->
<string name="msg_send_analytics_tracking">Send anonymous statics to help improving this app</string> <!-- TODO Add translation --> <string name="msg_send_analytics_tracking">Send anonymous statics to help improving this app</string> <!-- TODO Add translation -->
<string name="msg_do_not_send_analytics_tracking">Do not send anonymous statics to help improving this app</string> <!-- TODO Add translation --> <string name="msg_do_not_send_analytics_tracking">Do not send anonymous statics to help improving this app</string> <!-- TODO Add translation -->
<string name="msg_not_applicable_since_it_is_a_foss_version">Not applicable since it is a FOSS version</string> <!-- TODO Add translation -->
<!-- System messages --> <!-- System messages -->
<string name="message_room_name_changed">Le nom de le salle a changé à: %1$s par %2$s</string> <string name="message_room_name_changed">Le nom de le salle a changé à: %1$s par %2$s</string>
......
...@@ -150,6 +150,7 @@ ...@@ -150,6 +150,7 @@
<string name="msg_analytics_tracking">Analytics tracking</string> <!-- TODO Add translation --> <string name="msg_analytics_tracking">Analytics tracking</string> <!-- TODO Add translation -->
<string name="msg_send_analytics_tracking">Send anonymous statics to help improving this app</string> <!-- TODO Add translation --> <string name="msg_send_analytics_tracking">Send anonymous statics to help improving this app</string> <!-- TODO Add translation -->
<string name="msg_do_not_send_analytics_tracking">Do not send anonymous statics to help improving this app</string> <!-- TODO Add translation --> <string name="msg_do_not_send_analytics_tracking">Do not send anonymous statics to help improving this app</string> <!-- TODO Add translation -->
<string name="msg_not_applicable_since_it_is_a_foss_version">Not applicable since it is a FOSS version</string> <!-- TODO Add translation -->
<!-- System messages --> <!-- System messages -->
<string name="message_room_name_changed">%2$s ने रूम का नाम बदलकर %1$s किया</string> <string name="message_room_name_changed">%2$s ने रूम का नाम बदलकर %1$s किया</string>
......
...@@ -150,6 +150,7 @@ ...@@ -150,6 +150,7 @@
<string name="msg_analytics_tracking">Rastreamento de análises</string> <string name="msg_analytics_tracking">Rastreamento de análises</string>
<string name="msg_send_analytics_tracking">Envie estatísticas anônimas para ajudar a melhorar este app</string> <string name="msg_send_analytics_tracking">Envie estatísticas anônimas para ajudar a melhorar este app</string>
<string name="msg_do_not_send_analytics_tracking">Não envie estatísticas anônimas para ajudar a melhorar este app</string> <string name="msg_do_not_send_analytics_tracking">Não envie estatísticas anônimas para ajudar a melhorar este app</string>
<string name="msg_not_applicable_since_it_is_a_foss_version">Not aplicável devido a versão do aplicativo ser FOSS</string> <!-- TODO Add translation -->
<!-- System messages --> <!-- System messages -->
<string name="message_room_name_changed">Nome da sala alterado para: %1$s por %2$s</string> <string name="message_room_name_changed">Nome da sala alterado para: %1$s por %2$s</string>
......
...@@ -147,6 +147,7 @@ ...@@ -147,6 +147,7 @@
<string name="msg_analytics_tracking">Analytics tracking</string> <!-- TODO Add translation --> <string name="msg_analytics_tracking">Analytics tracking</string> <!-- TODO Add translation -->
<string name="msg_send_analytics_tracking">Send anonymous statics to help improving this app</string> <!-- TODO Add translation --> <string name="msg_send_analytics_tracking">Send anonymous statics to help improving this app</string> <!-- TODO Add translation -->
<string name="msg_do_not_send_analytics_tracking">Do not send anonymous statics to help improving this app</string> <!-- TODO Add translation --> <string name="msg_do_not_send_analytics_tracking">Do not send anonymous statics to help improving this app</string> <!-- TODO Add translation -->
<string name="msg_not_applicable_since_it_is_a_foss_version">Not applicable since it is a FOSS version</string> <!-- TODO Add translation -->
<!-- System messages --> <!-- System messages -->
<string name="message_room_name_changed">%2$s изменил название канала на %1$s</string> <string name="message_room_name_changed">%2$s изменил название канала на %1$s</string>
......
...@@ -153,6 +153,7 @@ ...@@ -153,6 +153,7 @@
<string name="msg_analytics_tracking">Analytics tracking</string> <string name="msg_analytics_tracking">Analytics tracking</string>
<string name="msg_send_analytics_tracking">Send anonymous statics to help improving this app</string> <string name="msg_send_analytics_tracking">Send anonymous statics to help improving this app</string>
<string name="msg_do_not_send_analytics_tracking">Do not send anonymous statics to help improving this app</string> <string name="msg_do_not_send_analytics_tracking">Do not send anonymous statics to help improving this app</string>
<string name="msg_not_applicable_since_it_is_a_foss_version">Not applicable since it is a FOSS version</string>
<!-- System messages --> <!-- System messages -->
<string name="message_room_name_changed">Room name changed to: %1$s by %2$s</string> <string name="message_room_name_changed">Room name changed to: %1$s by %2$s</string>
......
...@@ -20,10 +20,8 @@ fun Activity.requestStoredCredentials(): Pair<String, String>? { ...@@ -20,10 +20,8 @@ fun Activity.requestStoredCredentials(): Pair<String, String>? {
fun getCredentials(data: Intent): Pair<String, String>? { fun getCredentials(data: Intent): Pair<String, String>? {
val credentials: Credential = data.getParcelableExtra(Credential.EXTRA_KEY) val credentials: Credential = data.getParcelableExtra(Credential.EXTRA_KEY)
return credentials?.let { cred -> return credentials.password?.let {
cred.password?.let { Pair(credentials.id, it)
Pair(cred.id, it)
}
} }
} }
......
...@@ -10,7 +10,7 @@ buildscript { ...@@ -10,7 +10,7 @@ buildscript {
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.3.0-alpha05' classpath 'com.android.tools.build:gradle:3.3.0-alpha06'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${versions.kotlin}" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${versions.kotlin}"
classpath "org.jetbrains.dokka:dokka-gradle-plugin:${versions.dokka}" classpath "org.jetbrains.dokka:dokka-gradle-plugin:${versions.dokka}"
classpath 'com.google.gms:google-services:4.0.2' classpath 'com.google.gms:google-services:4.0.2'
......
...@@ -9,7 +9,7 @@ ext { ...@@ -9,7 +9,7 @@ ext {
dokka : '0.9.16', dokka : '0.9.16',
// For app // For app
kotlin : '1.2.60', kotlin : '1.2.61',
coroutine : '0.24.0', coroutine : '0.24.0',
appCompat : '1.0.0-beta01', appCompat : '1.0.0-beta01',
......
...@@ -19,14 +19,36 @@ android { ...@@ -19,14 +19,36 @@ android {
minifyEnabled false minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
} }
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
// Since we are using the util module here, we need to declare the same flavorDimensions and
// productFlavors from there.
flavorDimensions "type"
productFlavors {
// includes proprietary libs
play {
dimension "type"
}
// only foss
foss {
dimension "type"
}
} }
} }
dependencies { dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation project(':util')
implementation project(':core') implementation project(':core')
implementation project(':util')
implementation libraries.kotlin implementation libraries.kotlin
implementation libraries.coroutines implementation libraries.coroutines
......
...@@ -17,6 +17,25 @@ android { ...@@ -17,6 +17,25 @@ android {
minifyEnabled false minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
} }
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
flavorDimensions "type"
productFlavors {
// includes proprietary libs
play {
dimension "type"
}
// only foss
foss {
dimension "type"
}
} }
} }
...@@ -37,7 +56,7 @@ dependencies { ...@@ -37,7 +56,7 @@ dependencies {
implementation libraries.lifecycleExtensions implementation libraries.lifecycleExtensions
kapt libraries.lifecycleCompiler kapt libraries.lifecycleCompiler
implementation('com.crashlytics.sdk.android:answers:1.4.2@aar') { playImplementation('com.crashlytics.sdk.android:answers:1.4.2@aar') {
transitive = true transitive = true
} }
} }
\ No newline at end of file
package chat.rocket.android.util.helper
object AnswersEvent {
const val LOGIN_OR_SIGN_UP_BY_USER_AND_PASSWORD = "USER-AND-PASSWORD"
const val LOGIN_BY_CAS = "CAS"
const val LOGIN_BY_SAML = "SAML"
const val LOGIN_OR_SIGN_UP_BY_OAUTH = "OAUTH"
const val LOGIN_BY_DEEP_LINK = "DEEP-LINK"
/**
* Logs the Log In event.
*
* @param loginMethod The method that the user used to log in.
* @param loginSucceeded True if the user successful logged in, false otherwise.
*/
fun logLogin(loginMethod: String, loginSucceeded: Boolean) {
// Do absolutely nothing
}
/**
* Logs the Sign Up event.
*
* @param signUpMethod The method that the user used to sign up.
* @param signUpSucceeded True if the user successful signed up, false otherwise.
*/
fun logSignUp(signUpMethod: String, signUpSucceeded: Boolean) {
// Do absolutely nothing
}
/**
* Logs the screen view custom event.
*
* @param screenName The name of the screen to log.
*/
fun logScreenView(screenName: String) {
// Do absolutely nothing
}
/**
* Logs the message sent custom event.
*
* @param roomType The room type to log.
* @param serverUrl The server URL to log.
*/
fun logMessageSent(roomType: String, serverUrl: String) {
// Do absolutely nothing
}
/**
* Logs the media upload custom event.
*
* @param roomType The room type to log.
* @param mimeType The mime type of the media to log.
*/
fun logMediaUploaded(roomType: String, mimeType: String) {
// Do absolutely nothing
}
/**
* Logs the reaction custom event.
*
* @param roomType The room type to log.
*/
fun logReaction(roomType: String) {
// Do absolutely nothing
}
/**
* Logs the server switch custom event.
*
* @param serverUrl The server URL to log.
* @param serverCount The number of server(s) the use own.
*/
fun logServerSwitch(serverUrl: String, serverCount: Int) {
// Do absolutely nothing
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment