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 {
transitive = true
}
implementation('com.crashlytics.sdk.android:answers:1.4.2@aar') {
playImplementation('com.crashlytics.sdk.android:answers:1.4.2@aar') {
transitive = true
}
......
......@@ -4,18 +4,21 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import chat.rocket.android.BuildConfig
import chat.rocket.android.R
import chat.rocket.android.main.ui.MainActivity
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.helper.AnswersEvent
import kotlinx.android.synthetic.main.app_bar.*
import kotlinx.android.synthetic.main.fragment_about.*
import javax.inject.Inject
internal const val TAG_ABOUT_FRAGMENT = "AboutFragment"
class AboutFragment : Fragment() {
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
override fun onCreateView(
inflater: LayoutInflater,
......@@ -27,8 +30,11 @@ class AboutFragment : Fragment() {
super.onViewCreated(view, savedInstanceState)
setupToolbar()
setupViews()
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_ABOUT_FRAGMENT)
}
}
private fun setupViews() {
text_version_name.text = BuildConfig.VERSION_NAME
......
......@@ -5,30 +5,8 @@ import chat.rocket.android.authentication.presentation.AuthenticationNavigator
import chat.rocket.android.core.lifecycle.CancelStrategy
import chat.rocket.android.helper.OauthHelper
import chat.rocket.android.infrastructure.LocalRepository
import chat.rocket.android.server.domain.GetAccountsInteractor
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.*
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.util.extension.launchUI
import chat.rocket.android.util.extensions.avatarUrl
......@@ -83,6 +61,7 @@ class LoginPresenter @Inject constructor(
private val localRepository: LocalRepository,
private val getAccountsInteractor: GetAccountsInteractor,
private val settingsInteractor: GetSettingsInteractor,
private val analyticsTrackingInteractor: AnalyticsTrackingInteractor,
serverInteractor: GetConnectingServerInteractor,
private val saveCurrentServer: SaveCurrentServerInteractor,
private val saveAccountInteractor: SaveAccountInteractor,
......@@ -477,7 +456,9 @@ class LoginPresenter @Inject constructor(
saveAccount(myself.username!!)
saveToken(token)
registerPushToken()
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logLogin(loginMethod, true)
}
if (loginType == TYPE_LOGIN_USER_EMAIL) {
view.saveSmartLockCredentials(usernameOrEmail, password)
}
......@@ -491,7 +472,9 @@ class LoginPresenter @Inject constructor(
navigator.toTwoFA(usernameOrEmail, password)
}
else -> {
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logLogin(loginMethod, false)
}
exception.message?.let {
view.showMessage(it)
}.ifNull {
......
......@@ -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.LoginView
import chat.rocket.android.helper.*
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extensions.*
import chat.rocket.android.util.helper.AnswersEvent
import chat.rocket.android.webview.sso.ui.INTENT_SSO_TOKEN
......@@ -46,6 +47,8 @@ internal const val REQUEST_CODE_FOR_OAUTH = 6
class LoginFragment : Fragment(), LoginView {
@Inject
lateinit var presenter: LoginPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private var isOauthViewEnable = false
private val layoutListener = ViewTreeObserver.OnGlobalLayoutListener {
areLoginOptionsNeeded()
......@@ -93,8 +96,10 @@ class LoginFragment : Fragment(), LoginView {
image_key.isVisible = false
}
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_LOGIN_FRAGMENT)
}
}
override fun onDestroyView() {
super.onDestroyView()
......
......@@ -28,6 +28,7 @@ class RegisterUsernamePresenter @Inject constructor(
private val factory: RocketChatClientFactory,
private val saveAccountInteractor: SaveAccountInteractor,
private val getAccountsInteractor: GetAccountsInteractor,
private val analyticsTrackingInteractor: AnalyticsTrackingInteractor,
serverInteractor: GetConnectingServerInteractor,
private val saveCurrentServer: SaveCurrentServerInteractor,
settingsInteractor: GetSettingsInteractor
......@@ -52,11 +53,15 @@ class RegisterUsernamePresenter @Inject constructor(
saveCurrentServer.save(currentServer)
tokenRepository.save(currentServer, Token(userId, authToken))
registerPushToken()
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logSignUp(AnswersEvent.LOGIN_OR_SIGN_UP_BY_OAUTH, true)
}
navigator.toChatList()
}
} catch (exception: RocketChatException) {
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logSignUp(AnswersEvent.LOGIN_OR_SIGN_UP_BY_OAUTH, false)
}
exception.message?.let {
view.showMessage(it)
}.ifNull {
......
......@@ -10,6 +10,7 @@ import android.view.ViewGroup
import chat.rocket.android.R
import chat.rocket.android.authentication.registerusername.presentation.RegisterUsernamePresenter
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.helper.AnswersEvent
import dagger.android.support.AndroidSupportInjection
......@@ -21,6 +22,8 @@ internal const val TAG_REGISTER_USERNAME_FRAGMENT = "RegisterUsernameFragment"
class RegisterUsernameFragment : Fragment(), RegisterUsernameView {
@Inject
lateinit var presenter: RegisterUsernamePresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private lateinit var userId: String
private lateinit var authToken: String
......@@ -64,8 +67,11 @@ class RegisterUsernameFragment : Fragment(), RegisterUsernameView {
}
setupOnClickListener()
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_REGISTER_USERNAME_FRAGMENT)
}
}
override fun alertBlankUsername() {
ui {
......
......@@ -11,6 +11,7 @@ import android.widget.Toast
import chat.rocket.android.R
import chat.rocket.android.authentication.resetpassword.presentation.ResetPasswordPresenter
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.helper.AnswersEvent
import dagger.android.support.AndroidSupportInjection
......@@ -22,10 +23,8 @@ internal const val TAG_RESET_PASSWORD_FRAGMENT = "ResetPasswordFragment"
class ResetPasswordFragment : Fragment(), ResetPasswordView {
@Inject
lateinit var presenter: ResetPasswordPresenter
companion object {
fun newInstance() = ResetPasswordFragment()
}
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
......@@ -51,8 +50,11 @@ class ResetPasswordFragment : Fragment(), ResetPasswordView {
}
setupOnClickListener()
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_RESET_PASSWORD_FRAGMENT)
}
}
override fun alertBlankEmail() {
ui {
......@@ -135,4 +137,8 @@ class ResetPasswordFragment : Fragment(), ResetPasswordView {
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
import chat.rocket.android.authentication.server.presentation.ServerPresenter
import chat.rocket.android.authentication.server.presentation.ServerView
import chat.rocket.android.helper.KeyboardHelper
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extensions.*
import chat.rocket.android.util.helper.AnswersEvent
import chat.rocket.common.util.ifNull
......@@ -29,21 +30,12 @@ internal const val TAG_SERVER_FRAGMENT = "ServerFragment"
class ServerFragment : Fragment(), ServerView {
@Inject
lateinit var presenter: ServerPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private var deepLinkInfo: LoginDeepLinkInfo? = null
private val layoutListener = ViewTreeObserver.OnGlobalLayoutListener {
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 ignoreChange = false
......@@ -104,8 +96,10 @@ class ServerFragment : Fragment(), ServerView {
}
}
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_SERVER_FRAGMENT)
}
}
override fun onDestroyView() {
super.onDestroyView()
......@@ -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(
private val localRepository: LocalRepository,
private val serverInteractor: GetConnectingServerInteractor,
private val saveCurrentServerInteractor: SaveCurrentServerInteractor,
private val analyticsTrackingInteractor: AnalyticsTrackingInteractor,
private val factory: RocketChatClientFactory,
private val saveAccountInteractor: SaveAccountInteractor,
private val getAccountsInteractor: GetAccountsInteractor,
......@@ -67,11 +68,21 @@ class SignupPresenter @Inject constructor(
localRepository.save(LocalRepository.CURRENT_USERNAME_KEY, me.username)
saveAccount(me)
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)
navigator.toChatList()
} 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 {
view.showMessage(it)
}.ifNull {
......
......@@ -18,6 +18,7 @@ import chat.rocket.android.authentication.signup.presentation.SignupView
import chat.rocket.android.helper.KeyboardHelper
import chat.rocket.android.helper.TextHelper
import chat.rocket.android.helper.saveCredentials
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extensions.*
import chat.rocket.android.util.helper.AnswersEvent
import dagger.android.support.AndroidSupportInjection
......@@ -30,6 +31,8 @@ internal const val SAVE_CREDENTIALS = 1
class SignupFragment : Fragment(), SignupView {
@Inject
lateinit var presenter: SignupPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private val layoutListener = ViewTreeObserver.OnGlobalLayoutListener {
if (KeyboardHelper.isSoftKeyboardShown(relative_layout.rootView)) {
bottom_container.setVisible(false)
......@@ -42,10 +45,6 @@ class SignupFragment : Fragment(), SignupView {
}
}
companion object {
fun newInstance() = SignupFragment()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
AndroidSupportInjection.inject(this)
......@@ -77,8 +76,10 @@ class SignupFragment : Fragment(), SignupView {
)
}
if(analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_SIGNUP_FRAGMENT)
}
}
override fun onDestroyView() {
relative_layout.viewTreeObserver.removeOnGlobalLayoutListener(layoutListener)
......@@ -217,4 +218,8 @@ class SignupFragment : Fragment(), SignupView {
text_password.isEnabled = value
text_email.isEnabled = value
}
companion object {
fun newInstance() = SignupFragment()
}
}
......@@ -29,6 +29,7 @@ class TwoFAPresenter @Inject constructor(
private val localRepository: LocalRepository,
private val serverInteractor: GetConnectingServerInteractor,
private val saveCurrentServerInteractor: SaveCurrentServerInteractor,
private val analyticsTrackingInteractor: AnalyticsTrackingInteractor,
private val factory: RocketChatClientFactory,
private val saveAccountInteractor: SaveAccountInteractor,
private val getAccountsInteractor: GetAccountsInteractor,
......@@ -66,13 +67,23 @@ class TwoFAPresenter @Inject constructor(
saveCurrentServerInteractor.save(currentServer)
tokenRepository.save(server, token)
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()
} catch (exception: RocketChatException) {
if (exception is RocketChatAuthException) {
view.alertInvalidTwoFactorAuthenticationCode()
} 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 {
view.showMessage(it)
}.ifNull {
......
......@@ -12,6 +12,7 @@ import android.view.inputmethod.InputMethodManager
import chat.rocket.android.R
import chat.rocket.android.authentication.twofactor.presentation.TwoFAPresenter
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.helper.AnswersEvent
import dagger.android.support.AndroidSupportInjection
......@@ -21,23 +22,13 @@ import javax.inject.Inject
internal const val TAG_TWO_FA_FRAGMENT = "TwoFAFragment"
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 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?) {
super.onCreate(savedInstanceState)
AndroidSupportInjection.inject(this)
......@@ -63,8 +54,11 @@ class TwoFAFragment : Fragment(), TwoFAView {
}
setupOnClickListener()
if(analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_TWO_FA_FRAGMENT)
}
}
override fun alertBlankTwoFactorAuthenticationCode() {
ui {
......@@ -124,4 +118,17 @@ class TwoFAFragment : Fragment(), TwoFAView {
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
import chat.rocket.android.chatinformation.presentation.MessageInfoView
import chat.rocket.android.chatinformation.viewmodel.ReadReceiptViewModel
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.showToast
import chat.rocket.android.util.helper.AnswersEvent
......@@ -34,10 +35,10 @@ internal const val TAG_MESSAGE_INFO_FRAGMENT = "MessageInfoFragment"
private const val BUNDLE_MESSAGE_ID = "message_id"
class MessageInfoFragment : Fragment(), MessageInfoView {
@Inject
lateinit var presenter: MessageInfoPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private lateinit var adapter: ReadReceiptAdapter
private lateinit var messageId: String
......@@ -66,8 +67,11 @@ class MessageInfoFragment : Fragment(), MessageInfoView {
super.onViewCreated(view, savedInstanceState)
setupRecyclerView()
presenter.loadReadReceipts(messageId = messageId)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_MESSAGE_INFO_FRAGMENT)
}
}
private fun setupRecyclerView() {
// Initialize the endlessRecyclerViewScrollListener so we don't NPE at onDestroyView
......
......@@ -17,17 +17,7 @@ import chat.rocket.android.db.DatabaseManager
import chat.rocket.android.helper.MessageHelper
import chat.rocket.android.helper.UserHelper
import chat.rocket.android.infrastructure.LocalRepository
import chat.rocket.android.server.domain.GetCurrentServerInteractor
import chat.rocket.android.server.domain.GetSettingsInteractor
import chat.rocket.android.server.domain.JobSchedulerInteractor
import chat.rocket.android.server.domain.MessagesRepository
import chat.rocket.android.server.domain.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.domain.*
import chat.rocket.android.server.infraestructure.ConnectionManagerFactory
import chat.rocket.android.server.infraestructure.state
import chat.rocket.android.util.extension.compressImageAndGetInputStream
......@@ -91,6 +81,7 @@ class ChatRoomPresenter @Inject constructor(
private val usersRepository: UsersRepository,
private val roomsRepository: RoomRepository,
private val localRepository: LocalRepository,
private val analyticsTrackingInteractor: AnalyticsTrackingInteractor,
private val userHelper: UserHelper,
private val mapper: UiModelMapper,
private val jobSchedulerInteractor: JobSchedulerInteractor,
......@@ -297,7 +288,9 @@ class ChatRoomPresenter @Inject constructor(
), false
)
client.sendMessage(id, chatRoomId, text)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logMessageSent(chatRoomType, currentServer)
}
} catch (ex: Exception) {
// 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
......@@ -368,10 +361,12 @@ class ChatRoomPresenter @Inject constructor(
inputStream
}
}
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logMediaUploaded(chatRoomType, mimeType)
}
}
}
}
} catch (ex: Exception) {
Timber.d(ex, "Error uploading file")
when (ex) {
......@@ -941,7 +936,9 @@ class ChatRoomPresenter @Inject constructor(
retryIO("toggleEmoji($messageId, $emoji)") {
client.toggleReaction(messageId, emoji.removeSurrounding(":"))
}
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logReaction(chatRoomType)
}
} catch (ex: RocketChatException) {
Timber.e(ex)
}
......
......@@ -55,6 +55,7 @@ import chat.rocket.android.helper.EndlessRecyclerViewScrollListener
import chat.rocket.android.helper.ImageHelper
import chat.rocket.android.helper.KeyboardHelper
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.extensions.circularRevealOrUnreveal
import chat.rocket.android.util.extensions.fadeIn
......@@ -135,6 +136,8 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
lateinit var presenter: ChatRoomPresenter
@Inject
lateinit var parser: MessageParser
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private lateinit var adapter: ChatRoomAdapter
internal lateinit var chatRoomId: String
private lateinit var chatRoomName: String
......@@ -232,8 +235,10 @@ class ChatRoomFragment : Fragment(), ChatRoomView, EmojiKeyboardListener, EmojiR
it.showToolbarChatRoomIcon(chatRoomType)
}
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_CHAT_ROOM_FRAGMENT)
}
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
......
......@@ -32,6 +32,7 @@ import chat.rocket.android.db.DatabaseManager
import chat.rocket.android.helper.ChatRoomsSortOrder
import chat.rocket.android.helper.Constants
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.extensions.fadeIn
import chat.rocket.android.util.extensions.fadeOut
......@@ -57,14 +58,12 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView {
lateinit var factory: ChatRoomsViewModelFactory
@Inject
lateinit var dbManager: DatabaseManager // TODO - remove when moving ChatRoom screen to DB
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
lateinit var viewModel: ChatRoomsViewModel
private var searchView: SearchView? = null
private var sortView: MenuItem? = null
private val handler = Handler()
private var chatRoomId: String? = null
private var progressDialog: ProgressDialog? = null
......@@ -111,8 +110,11 @@ class ChatRoomsFragment : Fragment(), ChatRoomsView {
subscribeUi()
setupToolbar()
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_CHAT_ROOMS_FRAGMENT)
}
}
private fun subscribeUi() {
ui {
......
......@@ -20,6 +20,7 @@ import chat.rocket.android.createchannel.presentation.CreateChannelView
import chat.rocket.android.main.ui.MainActivity
import chat.rocket.android.members.adapter.MembersAdapter
import chat.rocket.android.members.uimodel.MemberUiModel
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extension.asObservable
import chat.rocket.android.util.extensions.inflate
import chat.rocket.android.util.extensions.showToast
......@@ -40,6 +41,8 @@ internal const val TAG_CREATE_CHANNEL_FRAGMENT = "CreateChannelFragment"
class CreateChannelFragment : Fragment(), CreateChannelView, ActionMode.Callback {
@Inject
lateinit var createChannelPresenter: CreateChannelPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private var actionMode: ActionMode? = null
private val adapter: MembersAdapter = MembersAdapter {
if (it.username != null) {
......@@ -72,8 +75,11 @@ class CreateChannelFragment : Fragment(), CreateChannelView, ActionMode.Callback
setupViewListeners()
setupRecyclerView()
subscribeEditTexts()
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_CREATE_CHANNEL_FRAGMENT)
}
}
override fun onDestroyView() {
super.onDestroyView()
......
......@@ -16,6 +16,7 @@ import chat.rocket.android.chatroom.uimodel.BaseUiModel
import chat.rocket.android.favoritemessages.presentation.FavoriteMessagesPresenter
import chat.rocket.android.favoritemessages.presentation.FavoriteMessagesView
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.showToast
import chat.rocket.android.util.extensions.ui
......@@ -36,10 +37,12 @@ internal const val TAG_FAVORITE_MESSAGES_FRAGMENT = "FavoriteMessagesFragment"
private const val INTENT_CHAT_ROOM_ID = "chat_room_id"
class FavoriteMessagesFragment : Fragment(), FavoriteMessagesView {
private lateinit var chatRoomId: String
private val adapter = ChatRoomAdapter(enableActions = false)
@Inject
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?) {
super.onCreate(savedInstanceState)
......@@ -63,8 +66,11 @@ class FavoriteMessagesFragment : Fragment(), FavoriteMessagesView {
super.onViewCreated(view, savedInstanceState)
setupToolbar()
presenter.loadFavoriteMessages(chatRoomId)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_FAVORITE_MESSAGES_FRAGMENT)
}
}
override fun showFavoriteMessages(favoriteMessages: List<BaseUiModel<*>>) {
ui {
......
......@@ -21,6 +21,7 @@ import chat.rocket.android.files.uimodel.FileUiModel
import chat.rocket.android.helper.EndlessRecyclerViewScrollListener
import chat.rocket.android.helper.ImageHelper
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.showToast
import chat.rocket.android.util.extensions.ui
......@@ -43,6 +44,8 @@ private const val BUNDLE_CHAT_ROOM_ID = "chat_room_id"
class FilesFragment : Fragment(), FilesView {
@Inject
lateinit var presenter: FilesPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private val adapter: FilesAdapter =
FilesAdapter { fileUiModel -> presenter.openFile(fileUiModel) }
private val linearLayoutManager = LinearLayoutManager(context)
......@@ -70,8 +73,11 @@ class FilesFragment : Fragment(), FilesView {
super.onViewCreated(view, savedInstanceState)
setupRecyclerView()
presenter.loadFiles(chatRoomId)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_FILES_FRAGMENT)
}
}
override fun showFiles(dataSet: List<FileUiModel>, total: Long) {
setupToolbar(total)
......
......@@ -7,10 +7,12 @@ import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
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.textContent
import chat.rocket.android.util.helper.AnswersEvent
import kotlinx.android.synthetic.main.fragment_member_bottom_sheet.*
import javax.inject.Inject
fun newInstance(avatarUri: String,
realName: String,
......@@ -37,6 +39,8 @@ private const val BUNDLE_EMAIL = "email"
private const val BUNDLE_UTC_OFFSET = "utc_offset"
class MemberBottomSheetFragment: BottomSheetDialogFragment() {
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private lateinit var avatarUri: String
private lateinit var realName: String
private lateinit var username: String
......@@ -63,8 +67,11 @@ class MemberBottomSheetFragment: BottomSheetDialogFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
showMemberDetails()
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_MEMBER_BOTTOM_SHEET_FRAGMENT)
}
}
private fun showMemberDetails() {
image_bottom_sheet_avatar.setImageURI(avatarUri)
......
......@@ -16,6 +16,7 @@ import chat.rocket.android.members.adapter.MembersAdapter
import chat.rocket.android.members.presentation.MembersPresenter
import chat.rocket.android.members.presentation.MembersView
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.showToast
import chat.rocket.android.util.extensions.ui
......@@ -38,6 +39,8 @@ private const val BUNDLE_CHAT_ROOM_ID = "chat_room_id"
class MembersFragment : Fragment(), MembersView {
@Inject
lateinit var presenter: MembersPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private val adapter: MembersAdapter =
MembersAdapter { memberUiModel -> presenter.toMemberDetails(memberUiModel) }
private val linearLayoutManager = LinearLayoutManager(context)
......@@ -65,8 +68,11 @@ class MembersFragment : Fragment(), MembersView {
super.onViewCreated(view, savedInstanceState)
setupRecyclerView()
presenter.loadChatRoomsMembers(chatRoomId)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_MEMBERS_FRAGMENT)
}
}
override fun showMembers(dataSet: List<MemberUiModel>, total: Long) {
ui {
......
......@@ -16,6 +16,7 @@ import chat.rocket.android.chatroom.uimodel.BaseUiModel
import chat.rocket.android.helper.EndlessRecyclerViewScrollListener
import chat.rocket.android.mentions.presentention.MentionsPresenter
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.showToast
import chat.rocket.android.util.extensions.ui
......@@ -41,6 +42,8 @@ class MentionsFragment : Fragment(), MentionsView {
private val adapter = ChatRoomAdapter(enableActions = false)
@Inject
lateinit var presenter: MentionsPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
......@@ -65,8 +68,11 @@ class MentionsFragment : Fragment(), MentionsView {
setupToolbar()
presenter.loadMentions(chatRoomId)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_MENTIONS_FRAGMENT)
}
}
override fun showMentions(mentions: List<BaseUiModel<*>>) {
ui {
......
......@@ -16,6 +16,7 @@ import chat.rocket.android.chatroom.uimodel.BaseUiModel
import chat.rocket.android.helper.EndlessRecyclerViewScrollListener
import chat.rocket.android.pinnedmessages.presentation.PinnedMessagesPresenter
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.showToast
import chat.rocket.android.util.extensions.ui
......@@ -36,10 +37,12 @@ internal const val TAG_PINNED_MESSAGES_FRAGMENT = "PinnedMessagesFragment"
private const val BUNDLE_CHAT_ROOM_ID = "chat_room_id"
class PinnedMessagesFragment : Fragment(), PinnedMessagesView {
private lateinit var chatRoomId: String
private val adapter = ChatRoomAdapter(enableActions = false)
@Inject
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?) {
super.onCreate(savedInstanceState)
......@@ -64,8 +67,11 @@ class PinnedMessagesFragment : Fragment(), PinnedMessagesView {
setupToolbar()
presenter.loadPinnedMessages(chatRoomId)
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_PINNED_MESSAGES_FRAGMENT)
}
}
override fun showPinnedMessages(pinnedMessages: List<BaseUiModel<*>>) {
ui {
......
......@@ -5,10 +5,12 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import chat.rocket.android.BuildConfig
import chat.rocket.android.R
import chat.rocket.android.main.ui.MainActivity
import chat.rocket.android.preferences.presentation.PreferencesPresenter
import chat.rocket.android.preferences.presentation.PreferencesView
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.helper.AnswersEvent
import dagger.android.support.AndroidSupportInjection
import kotlinx.android.synthetic.main.app_bar.*
......@@ -20,6 +22,8 @@ internal const val TAG_PREFERENCES_FRAGMENT = "PreferencesFragment"
class PreferencesFragment : Fragment(), PreferencesView {
@Inject
lateinit var presenter: PreferencesPresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
......@@ -37,10 +41,21 @@ class PreferencesFragment : Fragment(), PreferencesView {
setupToolbar()
setupListeners()
presenter.loadAnalyticsTrackingInformation()
if(analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_PREFERENCES_FRAGMENT)
}
}
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) {
text_analytics_tracking_description.text =
getString(R.string.msg_send_analytics_tracking)
......
......@@ -16,6 +16,7 @@ import chat.rocket.android.R
import chat.rocket.android.main.ui.MainActivity
import chat.rocket.android.profile.presentation.ProfilePresenter
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.dispatchImageSelection
import chat.rocket.android.util.extension.dispatchTakePicture
......@@ -41,6 +42,8 @@ private const val REQUEST_CODE_FOR_PERFORM_CAMERA = 2
class ProfileFragment : Fragment(), ProfileView, ActionMode.Callback {
@Inject
lateinit var presenter: ProfilePresenter
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
private var currentName = ""
private var currentUsername = ""
private var currentEmail = ""
......@@ -72,8 +75,11 @@ class ProfileFragment : Fragment(), ProfileView, ActionMode.Callback {
}
presenter.loadUserProfile()
subscribeEditTexts()
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_PROFILE_FRAGMENT)
}
}
override fun onDestroyView() {
super.onDestroyView()
......
......@@ -17,6 +17,7 @@ class ChangeServerPresenter @Inject constructor(
private val getCurrentServerInteractor: GetCurrentServerInteractor,
private val getAccountInteractor: GetAccountInteractor,
private val getAccountsInteractor: GetAccountsInteractor,
private val analyticsTrackingInteractor: AnalyticsTrackingInteractor,
private val settingsRepository: SettingsRepository,
private val tokenRepository: TokenRepository,
private val localRepository: LocalRepository,
......@@ -59,7 +60,9 @@ class ChangeServerPresenter @Inject constructor(
saveCurrentServerInteractor.save(serverUrl)
view.hideProgress()
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logServerSwitch(serverUrl, accounts.size)
}
navigator.toChatRooms(chatRoomId)
}.ifNull {
view.hideProgress()
......
......@@ -9,6 +9,7 @@ import chat.rocket.android.settings.password.presentation.PasswordPresenter
import chat.rocket.android.settings.password.presentation.PasswordView
import chat.rocket.android.util.extensions.inflate
import androidx.appcompat.view.ActionMode
import chat.rocket.android.server.domain.AnalyticsTrackingInteractor
import chat.rocket.android.util.extension.asObservable
import chat.rocket.android.util.extensions.textContent
import chat.rocket.android.util.extensions.ui
......@@ -23,7 +24,10 @@ import javax.inject.Inject
internal const val TAG_PASSWORD_FRAGMENT = "PasswordFragment"
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 val disposables = CompositeDisposable()
......@@ -42,8 +46,11 @@ class PasswordFragment: Fragment(), PasswordView, ActionMode.Callback {
super.onViewCreated(view, savedInstanceState)
disposables.add(listenToChanges())
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_PASSWORD_FRAGMENT)
}
}
override fun onDestroyView() {
disposables.clear()
......
......@@ -2,29 +2,33 @@ package chat.rocket.android.settings.ui
import android.content.Intent
import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.appcompat.app.AppCompatActivity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.AdapterView
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import chat.rocket.android.R
import chat.rocket.android.about.ui.AboutFragment
import chat.rocket.android.about.ui.TAG_ABOUT_FRAGMENT
import chat.rocket.android.main.ui.MainActivity
import chat.rocket.android.preferences.ui.PreferencesFragment
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.presentation.SettingsView
import chat.rocket.android.util.extensions.addFragmentBackStack
import chat.rocket.android.util.extensions.inflate
import chat.rocket.android.util.helper.AnswersEvent
import kotlinx.android.synthetic.main.fragment_settings.*
import javax.inject.Inject
import kotlin.reflect.KClass
internal const val TAG_SETTINGS_FRAGMENT = "SettingsFragment"
class SettingsFragment : Fragment(), SettingsView, AdapterView.OnItemClickListener {
@Inject
lateinit var analyticsTrackingInteractor: AnalyticsTrackingInteractor
override fun onCreateView(
inflater: LayoutInflater,
......@@ -36,8 +40,11 @@ class SettingsFragment : Fragment(), SettingsView, AdapterView.OnItemClickListen
super.onViewCreated(view, savedInstanceState)
setupToolbar()
setupListView()
if (analyticsTrackingInteractor.get()) {
AnswersEvent.logScreenView(TAG_SETTINGS_FRAGMENT)
}
}
override fun onResume() {
// FIXME - gambiarra ahead. will fix when moving to new androidx Navigation
......
......@@ -150,6 +150,7 @@
<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_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 -->
<string name="message_room_name_changed">Raum Namen geändert zu: %1$s von %2$s</string>
......
......@@ -144,6 +144,7 @@
<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_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 -->
<string name="message_room_name_changed">Nombre de la sala cambiado para: %1$s por %2$s</string>
......
......@@ -162,6 +162,7 @@
<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_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 -->
<string name="message_room_name_changed">Le nom de le salle a changé à: %1$s par %2$s</string>
......
......@@ -150,6 +150,7 @@
<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_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 -->
<string name="message_room_name_changed">%2$s ने रूम का नाम बदलकर %1$s किया</string>
......
......@@ -150,6 +150,7 @@
<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_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 -->
<string name="message_room_name_changed">Nome da sala alterado para: %1$s por %2$s</string>
......
......@@ -147,6 +147,7 @@
<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_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 -->
<string name="message_room_name_changed">%2$s изменил название канала на %1$s</string>
......
......@@ -153,6 +153,7 @@
<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_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 -->
<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>? {
fun getCredentials(data: Intent): Pair<String, String>? {
val credentials: Credential = data.getParcelableExtra(Credential.EXTRA_KEY)
return credentials?.let { cred ->
cred.password?.let {
Pair(cred.id, it)
}
return credentials.password?.let {
Pair(credentials.id, it)
}
}
......
......@@ -10,7 +10,7 @@ buildscript {
}
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.dokka:dokka-gradle-plugin:${versions.dokka}"
classpath 'com.google.gms:google-services:4.0.2'
......
......@@ -9,7 +9,7 @@ ext {
dokka : '0.9.16',
// For app
kotlin : '1.2.60',
kotlin : '1.2.61',
coroutine : '0.24.0',
appCompat : '1.0.0-beta01',
......
......@@ -19,14 +19,36 @@ android {
minifyEnabled false
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 {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation project(':util')
implementation project(':core')
implementation project(':util')
implementation libraries.kotlin
implementation libraries.coroutines
......
......@@ -17,6 +17,25 @@ android {
minifyEnabled false
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 {
implementation libraries.lifecycleExtensions
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
}
}
\ 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