Unverified Commit 71410e16 authored by Rafael Kellermann Streit's avatar Rafael Kellermann Streit Committed by GitHub

Merge pull request #1775 from RocketChat/beta

[RELEASE] Update DEVELOP with BETA
parents 5a472099 09c179f1
......@@ -16,8 +16,8 @@ android {
applicationId "chat.rocket.android"
minSdkVersion versions.minSdk
targetSdkVersion versions.targetSdk
versionCode 2043
versionName "2.6.1"
versionCode 2047
versionName "3.0.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
......
package chat.rocket.android.analytics
import chat.rocket.android.analytics.event.AuthenticationEvent
import chat.rocket.android.analytics.event.ScreenViewEvent
import chat.rocket.android.analytics.event.SubscriptionTypeEvent
class AnswersAnalytics : Analytics {
override fun logLogin(event: AuthenticationEvent, loginSucceeded: Boolean) {
// Do absolutely nothing
}
override fun logSignUp(event: AuthenticationEvent, signUpSucceeded: Boolean) {
// Do absolutely nothing
}
override fun logScreenView(event: ScreenViewEvent) {
// Do absolutely nothing
}
override fun logMessageSent(event: SubscriptionTypeEvent, serverUrl: String) {
// Do absolutely nothing
}
override fun logMediaUploaded(event: SubscriptionTypeEvent, mimeType: String) {
// Do absolutely nothing
}
override fun logReaction(event: SubscriptionTypeEvent) {
// Do absolutely nothing
}
override fun logServerSwitch(serverUrl: String, serverCount: Int) {
// Do absolutely nothing
}
}
class AnswersAnalytics : Analytics
\ No newline at end of file
package chat.rocket.android.analytics
import android.content.Context
import chat.rocket.android.analytics.event.AuthenticationEvent
import chat.rocket.android.analytics.event.ScreenViewEvent
import chat.rocket.android.analytics.event.SubscriptionTypeEvent
import javax.inject.Inject
class GoogleAnalyticsForFirebase @Inject constructor(val context: Context) :
Analytics {
override fun logLogin(event: AuthenticationEvent, loginSucceeded: Boolean) {
// Do absolutely nothing
}
override fun logSignUp(event: AuthenticationEvent, signUpSucceeded: Boolean) {
// Do absolutely nothing
}
override fun logScreenView(event: ScreenViewEvent) {
// Do absolutely nothing
}
override fun logMessageSent(event: SubscriptionTypeEvent, serverUrl: String) {
// Do absolutely nothing
}
override fun logMediaUploaded(event: SubscriptionTypeEvent, mimeType: String) {
// Do absolutely nothing
}
override fun logReaction(event: SubscriptionTypeEvent) {
// Do absolutely nothing
}
override fun logServerSwitch(serverUrl: String, serverCount: Int) {
// Do absolutely nothing
}
}
class GoogleAnalyticsForFirebase @Inject constructor(val context: Context) : Analytics
\ No newline at end of file
......@@ -12,7 +12,7 @@ interface Analytics {
* @param event The [AuthenticationEvent] used to log in.
* @param loginSucceeded True if successful logged in, false otherwise.
*/
fun logLogin(event: AuthenticationEvent, loginSucceeded: Boolean)
fun logLogin(event: AuthenticationEvent, loginSucceeded: Boolean) {}
/**
* Logs the sign up event.
......@@ -20,14 +20,14 @@ interface Analytics {
* @param event The [AuthenticationEvent] used to sign up.
* @param signUpSucceeded True if successful signed up, false otherwise.
*/
fun logSignUp(event: AuthenticationEvent, signUpSucceeded: Boolean)
fun logSignUp(event: AuthenticationEvent, signUpSucceeded: Boolean) {}
/**
* Logs the screen view event.
*
* @param event The [ScreenViewEvent] to log.
*/
fun logScreenView(event: ScreenViewEvent)
fun logScreenView(event: ScreenViewEvent) {}
/**
* Logs the message sent event.
......@@ -35,7 +35,7 @@ interface Analytics {
* @param event The [SubscriptionTypeEvent] to log.
* @param serverUrl The server URL to log.
*/
fun logMessageSent(event: SubscriptionTypeEvent, serverUrl: String)
fun logMessageSent(event: SubscriptionTypeEvent, serverUrl: String) {}
/**
* Logs the media upload event.
......@@ -43,14 +43,14 @@ interface Analytics {
* @param event The [SubscriptionTypeEvent] to log.
* @param mimeType The mime type of the media uploaded to log.
*/
fun logMediaUploaded(event: SubscriptionTypeEvent, mimeType: String)
fun logMediaUploaded(event: SubscriptionTypeEvent, mimeType: String) {}
/**
* Logs the reaction event.
*
* @param event The [SubscriptionTypeEvent] to log.
*/
fun logReaction(event: SubscriptionTypeEvent)
fun logReaction(event: SubscriptionTypeEvent) {}
/**
* Logs the server switch event.
......@@ -58,5 +58,10 @@ interface Analytics {
* @param serverUrl The server URL to log.
* @param serverCount The number of server(s) the use own.
*/
fun logServerSwitch(serverUrl: String, serverCount: Int)
fun logServerSwitch(serverUrl: String, serverCount: Int) {}
/**
* Logs the admin opening.
*/
fun logOpenAdmin() {}
}
......@@ -64,4 +64,10 @@ class AnalyticsManager @Inject constructor(
analytics.forEach { it.logServerSwitch(serverUrl, accounts.size) }
}
}
fun logOpenAdmin() {
if (analyticsTrackingInteractor.get()) {
analytics.forEach { it.logOpenAdmin() }
}
}
}
......@@ -68,6 +68,7 @@ class LoginOptionsPresenter @Inject constructor(
fun toLoginWithEmail() = navigator.toLogin(currentServer)
fun authenticateWithOauth(oauthToken: String, oauthSecret: String) {
setupConnectionInfo(currentServer)
credentialToken = oauthToken
credentialSecret = oauthSecret
loginMethod = AuthenticationEvent.AuthenticationWithOauth
......@@ -75,12 +76,14 @@ class LoginOptionsPresenter @Inject constructor(
}
fun authenticateWithCas(casToken: String) {
setupConnectionInfo(currentServer)
credentialToken = casToken
loginMethod = AuthenticationEvent.AuthenticationWithCas
doAuthentication(TYPE_LOGIN_CAS)
}
fun authenticateWithSaml(samlToken: String) {
setupConnectionInfo(currentServer)
credentialToken = samlToken
loginMethod = AuthenticationEvent.AuthenticationWithSaml
doAuthentication(TYPE_LOGIN_SAML)
......
......@@ -9,6 +9,7 @@ import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.LinearLayout
import androidx.appcompat.view.ContextThemeWrapper
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import chat.rocket.android.R
......@@ -18,11 +19,7 @@ import chat.rocket.android.authentication.domain.model.LoginDeepLinkInfo
import chat.rocket.android.authentication.loginoptions.presentation.LoginOptionsPresenter
import chat.rocket.android.authentication.loginoptions.presentation.LoginOptionsView
import chat.rocket.android.authentication.ui.AuthenticationActivity
import chat.rocket.android.util.extensions.clearLightStatusBar
import chat.rocket.android.util.extensions.inflate
import chat.rocket.android.util.extensions.rotateBy
import chat.rocket.android.util.extensions.showToast
import chat.rocket.android.util.extensions.ui
import chat.rocket.android.util.extensions.*
import chat.rocket.android.webview.oauth.ui.INTENT_OAUTH_CREDENTIAL_SECRET
import chat.rocket.android.webview.oauth.ui.INTENT_OAUTH_CREDENTIAL_TOKEN
import chat.rocket.android.webview.oauth.ui.oauthWebViewIntent
......@@ -290,7 +287,6 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView {
}
}
// OAuth Accounts.
override fun enableLoginByFacebook() = enableAccountButton(button_facebook)
......@@ -337,8 +333,8 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView {
buttonColor: Int
) {
val button = getCustomServiceButton(serviceName, serviceNameColor, buttonColor)
accounts_container.addView(button)
setupButtonListener(button, customOauthUrl, state, REQUEST_CODE_FOR_OAUTH)
accounts_container.addView(button)
}
// SAML account.
......@@ -350,8 +346,8 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView {
buttonColor: Int
) {
val button = getCustomServiceButton(serviceName, serviceNameColor, buttonColor)
accounts_container.addView(button)
setupButtonListener(button, samlUrl, samlToken, REQUEST_CODE_FOR_SAML)
accounts_container.addView(button)
}
override fun showAccountsView() {
......@@ -487,7 +483,11 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView {
val marginTop = resources.getDimensionPixelSize(R.dimen.button_account_margin_top)
params.setMargins(0, marginTop, 0, 0)
val button = Button(context)
val button = Button(
ContextThemeWrapper(context, R.style.Authentication_Button),
null,
R.style.Authentication_Button
)
button.layoutParams = params
button.text = buttonText
button.setTextColor(buttonTextColor)
......
......@@ -7,6 +7,7 @@ import android.view.ViewGroup
import android.view.ViewTreeObserver
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.ScrollView
import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.core.net.toUri
......@@ -52,8 +53,10 @@ class ServerFragment : Fragment(), ServerView {
private var protocol = "https://"
private lateinit var serverUrlDisposable: Disposable
private val layoutListener = ViewTreeObserver.OnGlobalLayoutListener {
text_server_url.isCursorVisible =
KeyboardHelper.isSoftKeyboardShown(scroll_view.rootView)
if (KeyboardHelper.isSoftKeyboardShown(scroll_view.rootView)) {
scroll_view.fullScroll(ScrollView.FOCUS_DOWN)
text_server_url.isCursorVisible = true
}
}
override fun onCreate(savedInstanceState: Bundle?) {
......
......@@ -11,7 +11,6 @@ import androidx.core.view.ViewCompat
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import chat.rocket.android.R
import chat.rocket.android.R.string.message_credentials_saved_successfully
import chat.rocket.android.analytics.AnalyticsManager
import chat.rocket.android.analytics.event.ScreenViewEvent
import chat.rocket.android.authentication.signup.presentation.SignupPresenter
......@@ -64,7 +63,7 @@ class SignupFragment : Fragment(), SignupView {
if (resultCode == Activity.RESULT_OK) {
if (data != null) {
if (requestCode == SAVE_CREDENTIALS) {
showMessage(getString(message_credentials_saved_successfully))
showMessage(getString(R.string.message_credentials_saved_successfully))
}
}
}
......
......@@ -17,6 +17,7 @@ import chat.rocket.android.chatinformation.presentation.MessageInfoView
import chat.rocket.android.chatinformation.viewmodel.ReadReceiptViewModel
import chat.rocket.android.util.extensions.setVisible
import chat.rocket.android.util.extensions.showToast
import chat.rocket.android.util.extensions.ui
import dagger.android.support.AndroidSupportInjection
import kotlinx.android.synthetic.main.fragment_message_info.*
import javax.inject.Inject
......@@ -84,16 +85,22 @@ class MessageInfoFragment : Fragment(), MessageInfoView {
}
override fun showLoading() {
view_loading.setVisible(true)
view_loading.show()
ui {
view_loading.setVisible(true)
view_loading.show()
}
}
override fun hideLoading() {
view_loading.hide()
view_loading.setVisible(false)
ui {
view_loading.hide()
view_loading.setVisible(false)
}
}
override fun showReadReceipts(messageReceipts: List<ReadReceiptViewModel>) {
adapter.addAll(messageReceipts)
ui {
adapter.addAll(messageReceipts)
}
}
}
......@@ -141,7 +141,7 @@ class ChatRoomPresenter @Inject constructor(
broadcast
} ?: false
view.onRoomUpdated(userCanPost, chatIsBroadcast, userCanMod)
loadMessages(roomId, roomType)
loadMessages(roomId, roomType, clearDataSet = true)
chatRoomMessage?.let { messageHelper.messageIdFromPermalink(it) }
?.let { messageId ->
val name = messageHelper.roomNameFromPermalink(chatRoomMessage)
......@@ -719,9 +719,9 @@ class ChatRoomPresenter @Inject constructor(
.filterNot { filterSelfOut && it.sender?.username == self }
val activeUsers = mutableListOf<PeopleSuggestionUiModel>()
recentMessages.forEach {
val sender = it.sender!!
val username = sender.username ?: ""
val name = sender.name ?: ""
val sender = it.sender
val username = sender?.username ?: ""
val name = sender?.name ?: ""
val avatarUrl = currentServer.avatarUrl(username)
val found = members.firstOrNull { member -> member.username == username }
val status = if (found != null) found.status else UserStatus.Offline()
......
......@@ -85,9 +85,10 @@ class UiModelMapper @Inject constructor(
suspend fun map(
message: Message,
roomUiModel: RoomUiModel = RoomUiModel(roles = emptyList(), isBroadcast = true)
): List<BaseUiModel<*>> {
return translate(message, roomUiModel)
}
): List<BaseUiModel<*>> =
withContext(CommonPool) {
return@withContext translate(message, roomUiModel)
}
suspend fun map(
messages: List<Message>,
......
......@@ -35,6 +35,7 @@ import chat.rocket.android.server.ui.ChangeServerActivity
import chat.rocket.android.settings.di.SettingsFragmentProvider
import chat.rocket.android.settings.password.di.PasswordFragmentProvider
import chat.rocket.android.settings.password.ui.PasswordActivity
import chat.rocket.android.webview.adminpanel.di.AdminPanelWebViewFragmentProvider
import dagger.Module
import dagger.android.ContributesAndroidInjector
......@@ -64,7 +65,8 @@ abstract class ActivityBuilder {
ProfileFragmentProvider::class,
SettingsFragmentProvider::class,
AboutFragmentProvider::class,
PreferencesFragmentProvider::class
PreferencesFragmentProvider::class,
AdminPanelWebViewFragmentProvider::class
]
)
abstract fun bindMainActivity(): MainActivity
......
......@@ -25,25 +25,25 @@ abstract class MessageDao {
@Insert
abstract fun insert(message: MessageEntity)
@Insert
@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract fun insert(relation: MessageFavoritesRelation)
@Insert
@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract fun insert(relation: MessageMentionsRelation)
@Insert
@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract fun insert(relation: MessageChannels)
@Insert
@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract fun insert(attachment: AttachmentEntity)
@Insert
@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract fun insert(field: AttachmentFieldEntity)
@Insert(onConflict = OnConflictStrategy.IGNORE)
abstract fun insert(reaction: ReactionEntity)
@Insert
@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract fun insert(url: UrlEntity)
@Query("DELETE FROM messages WHERE id = :id")
......@@ -159,7 +159,7 @@ abstract class MessageDao {
internal fun retrieveFullMessage(message: PartialMessage): FullMessage {
val favorites = getFavoritesByMessage(message.message.id)
val mentions = getFavoritesByMessage(message.message.id)
val mentions = getMentionsByMessage(message.message.id)
return FullMessage(message, favorites, mentions)
}
......
......@@ -10,9 +10,9 @@ import android.text.Spanned
import android.text.style.ClickableSpan
import android.text.style.ImageSpan
import android.text.style.ReplacementSpan
import android.util.Patterns
import android.view.View
import androidx.core.content.res.ResourcesCompat
import androidx.core.util.PatternsCompat
import chat.rocket.android.R
import chat.rocket.android.chatroom.ui.StrikethroughDelimiterProcessor
import chat.rocket.android.emoji.EmojiParser
......@@ -33,7 +33,6 @@ import org.commonmark.node.ListItem
import org.commonmark.node.Node
import org.commonmark.node.OrderedList
import org.commonmark.node.StrongEmphasis
import org.commonmark.node.Text
import org.commonmark.parser.Parser
import ru.noties.markwon.SpannableBuilder
import ru.noties.markwon.SpannableConfiguration
......@@ -223,9 +222,9 @@ class MessageParser @Inject constructor(
class LinkVisitor(private val builder: SpannableBuilder) : AbstractVisitor() {
override fun visit(text: Text) {
override fun visit(document: Document) {
// Replace all url links to markdown url syntax.
val matcher = Patterns.WEB_URL.matcher(builder.text())
val matcher = PatternsCompat.AUTOLINK_WEB_URL.matcher(builder.text())
val consumed = mutableListOf<String>()
while (matcher.find()) {
......
......@@ -66,6 +66,7 @@ class MembersFragment : Fragment(), MembersView {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setupToolbar()
setupRecyclerView()
presenter.loadChatRoomsMembers(chatRoomId)
......@@ -125,9 +126,13 @@ class MembersFragment : Fragment(), MembersView {
}
}
private fun setupToolbar(totalMembers: Long) {
private fun setupToolbar(totalMembers: Long? = null) {
(activity as ChatRoomActivity).let {
it.showToolbarTitle(getString(R.string.title_members, totalMembers))
if (totalMembers != null) {
it.showToolbarTitle(getString(R.string.title_counted_members, totalMembers))
} else {
it.showToolbarTitle(getString(R.string.title_members))
}
it.hideToolbarChatRoomIcon()
}
}
......
package chat.rocket.android.webview.adminpanel.di
import chat.rocket.android.webview.adminpanel.ui.AdminPanelWebViewFragment
import dagger.Module
import dagger.android.ContributesAndroidInjector
@Module
abstract class AdminPanelWebViewFragmentProvider {
@ContributesAndroidInjector
abstract fun provideAdminPanelWebViewFragment(): AdminPanelWebViewFragment
}
\ No newline at end of file
......@@ -8,18 +8,22 @@ import android.view.ViewGroup
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import chat.rocket.android.R
import chat.rocket.android.analytics.AnalyticsManager
import chat.rocket.android.util.extensions.inflate
import chat.rocket.android.util.extensions.ui
import dagger.android.support.DaggerFragment
import kotlinx.android.synthetic.main.fragment_admin_panel_web_view.*
import javax.inject.Inject
private const val BUNDLE_WEB_PAGE_URL = "web_page_url"
private const val BUNDLE_USER_TOKEN = "user_token"
class AdminPanelWebViewFragment : Fragment() {
class AdminPanelWebViewFragment : DaggerFragment() {
private lateinit var webPageUrl: String
private lateinit var userToken: String
@Inject
lateinit var analyticsManager: AnalyticsManager
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
......@@ -42,6 +46,8 @@ class AdminPanelWebViewFragment : Fragment() {
super.onViewCreated(view, savedInstanceState)
setupToolbar()
setupWebView()
analyticsManager.logOpenAdmin()
}
private fun setupToolbar() {
......
......@@ -9,19 +9,22 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
<LinearLayout
android:id="@+id/accounts_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible">
<Button
android:id="@+id/button_facebook"
style="?borderlessButtonStyle"
android:layout_width="0dp"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="@drawable/rounded_border"
android:clickable="false"
......@@ -34,15 +37,12 @@
android:textColor="@color/colorPrimary"
android:textSize="16sp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible" />
<Button
android:id="@+id/button_github"
style="?borderlessButtonStyle"
android:layout_width="0dp"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginTop="10dp"
android:background="@drawable/rounded_border"
......@@ -56,15 +56,12 @@
android:textColor="@color/colorPrimary"
android:textSize="16sp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button_facebook"
tools:visibility="visible" />
<Button
android:id="@+id/button_google"
style="?borderlessButtonStyle"
android:layout_width="0dp"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginTop="10dp"
android:background="@drawable/rounded_border"
......@@ -78,15 +75,12 @@
android:textColor="@color/colorPrimary"
android:textSize="16sp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button_github"
tools:visibility="visible" />
<Button
android:id="@+id/button_linkedin"
style="?borderlessButtonStyle"
android:layout_width="0dp"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginTop="10dp"
android:background="@drawable/rounded_border"
......@@ -100,15 +94,12 @@
android:textColor="@color/colorPrimary"
android:textSize="16sp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button_google"
tools:visibility="visible" />
<Button
android:id="@+id/button_gitlab"
style="?borderlessButtonStyle"
android:layout_width="0dp"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginTop="10dp"
android:background="@drawable/rounded_border"
......@@ -122,15 +113,12 @@
android:textColor="@color/colorPrimary"
android:textSize="16sp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button_linkedin"
tools:visibility="visible" />
<Button
android:id="@+id/button_wordpress"
style="?borderlessButtonStyle"
android:layout_width="0dp"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginTop="10dp"
android:background="@drawable/rounded_border"
......@@ -144,9 +132,6 @@
android:textColor="@color/colorPrimary"
android:textSize="16sp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button_gitlab"
tools:visibility="visible" />
<Button
......@@ -156,11 +141,8 @@
android:clickable="false"
android:text="@string/action_login_or_sign_up"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button_wordpress"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/expand_more_accounts_container"
......
......@@ -21,6 +21,7 @@
android:layout_marginStart="56dp"
android:layout_marginTop="2dp"
android:textDirection="locale"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:text="This is a multiline chat message from Bertie that will take more than just one line of text. I have sure that everything is amazing!" />
......
......@@ -10,7 +10,8 @@
<string name="title_legal_terms">Legal Terms</string>
<string name="title_chats">Chats</string>
<string name="title_profile">Profil</string>
<string name="title_members">Benutzer (%d)</string>
<string name="title_members">Benutzer</string>
<string name="title_counted_members">Benutzer (%d)</string>
<string name="title_settings">Einstellungen</string>
<string name="title_preferences">Preferences</string> <!-- TODO Add translation -->
<string name="title_change_password">Ändere Passwort</string>
......
......@@ -9,7 +9,8 @@
<string name="title_legal_terms">Términos legales</string>
<string name="title_chats">Chats</string>
<string name="title_profile">Perfil</string>
<string name="title_members">Miembros (%d)</string>
<string name="title_members">Miembros</string>
<string name="title_counted_members">Miembros (%d)</string>
<string name="title_settings">Configuraciones</string>
<string name="title_preferences">Preferences</string> <!-- TODO Add translation -->
<string name="title_change_password">Cambia la contraseña</string>
......
......@@ -10,7 +10,8 @@
<string name="title_legal_terms">Termes juridiques</string>
<string name="title_chats">Chats</string>
<string name="title_profile">Profil</string>
<string name="title_members">Membres (%d)</string>
<string name="title_members">Membres</string>
<string name="title_counted_members">Membres (%d)</string>
<string name="title_settings">Paramètres</string>
<string name="title_preferences">Préférences</string>
<string name="title_change_password">Changer le mot de passe</string>
......
......@@ -10,7 +10,8 @@
<string name="title_legal_terms">कानूनी शर्तें</string>
<string name="title_chats">चैट</string>
<string name="title_profile">प्रोफाइल</string>
<string name="title_members">सदस्य (%d)</string>
<string name="title_members">सदस्य</string>
<string name="title_counted_members">सदस्य (%d)</string>
<string name="title_settings">सेटिंग्स</string>
<string name="title_preferences">प्राथमिकताएँ</string>
<string name="title_change_password">पासवर्ड बदलें</string>
......@@ -91,7 +92,7 @@
<string name="msg_content_description_log_in_using_gitlab">Gitlab द्वारा लॉगिन करें</string>
<string name="msg_content_description_log_in_using_wordpress">WordPress द्वारा लॉगिन करें</string>
<string name="msg_content_description_send_message">मेसेज भेजें</string>
<string name="msg_content_description_show_more_login_options">Show more login options</string> <!-- TODO Translate-->
<string name="msg_content_description_show_more_login_options">अधिक लॉगिन विकल्प दिखाएं</string>
<string name="msg_content_description_show_attachment_options">अटैचमेंट विकल्प दिखाएं</string>
<string name="msg_you">आप</string>
<string name="msg_unknown">अनजान</string>
......@@ -160,10 +161,8 @@
<string name="msg_member_already_added">आपने पहले से ही इस यूजर को चुन चुके है।</string>
<string name="msg_member_not_found">सदस्य नहीं मिला</string>
<string name="msg_channel_created_successfully">चैनल सफलतापूर्वक बनाया गया</string>
<!-- TODO - Add proper translation -->
<string name="msg_view_more">view more</string>
<!-- TODO - Add proper translation -->
<string name="msg_view_less">view less</string>
<string name="msg_view_more">और देखें</string>
<string name="msg_view_less">कम देखें</string>
<!-- Preferences messages -->
<string name="msg_analytics_tracking">एनालिटिक्स ट्रैकिंग</string>
......@@ -306,6 +305,5 @@
<string name="read_by">द्वारा पढ़ें</string>
<string name="message_information_title">संदेश की जानकारी</string>
<string name="msg_log_out">लॉग आउट कर रहा हूं…</string>
<!--TODO - Add proper translation-->
<string name="message_room_changed_privacy">Room type changed to: %1$s by %2$s</string>
<string name="message_room_changed_privacy">%2$s ने रूम का प्रकार बदलकर %1$s किया </string>
</resources>
......@@ -12,7 +12,8 @@
<string name="title_legal_terms">Legal Terms</string>
<string name="title_chats">チャット</string>
<string name="title_profile">プロフィール</string>
<string name="title_members">メンバー (%d)</string>
<string name="title_members">メンバー</string>
<string name="title_counted_members">メンバー (%d)</string>
<string name="title_settings">設定</string>
<string name="title_preferences">Preferences</string> <!-- TODO Add translation -->
<string name="title_change_password">Change Password</string> <!-- TODO Add translation -->
......
......@@ -10,7 +10,8 @@
<string name="title_legal_terms">Termos Legais</string>
<string name="title_chats">Chats</string>
<string name="title_profile">Perfil</string>
<string name="title_members">Membros (%d)</string>
<string name="title_members">Membros</string>
<string name="title_counted_members">Membros (%d)</string>
<string name="title_settings">Configurações</string>
<string name="title_preferences">Preferencias</string>
<string name="title_change_password">Alterar senha</string>
......
......@@ -10,7 +10,8 @@
<string name="title_legal_terms">Юридические условия</string>
<string name="title_chats">Чаты</string>
<string name="title_profile">Профиль</string>
<string name="title_members">Пользователи (%d)</string>
<string name="title_members">Пользователи</string>
<string name="title_counted_members">Пользователи (%d)</string>
<string name="title_settings">Настройки</string>
<string name="title_preferences">Персональные</string>
<string name="title_change_password">Изменить пароль</string>
......@@ -45,11 +46,11 @@
<string name="action_select_photo_from_gallery">Выбрать из галереи</string>
<string name="action_take_photo">Сделать снимок</string>
<string name="action_reset_avatar">Восстановить аватар</string>
<string name="action_connect_server">Connect with a server</string> <!-- TODO Add translation -->
<string name="action_join_community">Join in the community</string> <!-- TODO Add translation -->
<string name="action_create_server">Create a new server</string> <!-- TODO Add translation -->
<string name="action_register">Register</string> <!-- TODO Add translation -->
<string name="action_confirm">Confirm</string> <!-- TODO Add translation -->
<string name="action_connect_server">Соединиться с сервером</string>
<string name="action_join_community">Сообщество</string>
<string name="action_create_server">Создать новый сервер</string>
<string name="action_register">Зарегистрировать</string>
<string name="action_confirm">Подтвердить</string>
<!-- Settings List -->
<string-array name="settings_actions">
......@@ -91,7 +92,7 @@
<string name="msg_content_description_log_in_using_gitlab">Войти с помощью Gitlab</string>
<string name="msg_content_description_log_in_using_wordpress">Войти с помощью WordPress</string>
<string name="msg_content_description_send_message">Отправить сообщение</string>
<string name="msg_content_description_show_more_login_options">Show more login options</string> <!-- TODO Translate-->
<string name="msg_content_description_show_more_login_options">Больше параметров входа</string>
<string name="msg_content_description_show_attachment_options">Показать параметры вложения</string>
<string name="msg_you">Вы</string>
<string name="msg_unknown">Неизвестный</string>
......@@ -133,18 +134,18 @@
<string name="msg_delete_description">Вы уверены, что хотите удалить это сообщение?</string>
<string name="msg_channel_name">Название канала</string>
<string name="msg_search">Поиск</string>
<string name="msg_welcome_to_rocket_chat">Welcome to Rocket.Chat</string> <!-- TODO Add translation -->
<string name="msg_team_communication">Open Source Communication</string> <!-- TODO Add translation -->
<string name="msg_login_with_email">Login with <b>e-mail</b></string> <!-- TODO Add translation -->
<string name="msg_create_account">Create an account</string> <!-- TODO Add translation -->
<string name="msg_continue_with_facebook">Continue with <b>Facebook</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_github">Continue with <b>Github</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_google">Continue with <b>Google</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_linkedin">Continue with <b>Linkedin</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_gitlab">Continue with <b>GitLab</b></string> <!-- TODO Add translation -->
<string name="msg_continue_with_wordpress">Continue with <b>WordPress</b></string> <!-- TODO Add translation -->
<string name="msg_two_factor_authentication">Two-factor Authentication</string> <!-- TODO Add translation -->
<string name="msg__your_2fa_code">What’s your 2FA code?</string> <!-- TODO Add translation -->
<string name="msg_welcome_to_rocket_chat">Rocket.Chat</string>
<string name="msg_team_communication">Чат с открытым исходным кодом</string>
<string name="msg_login_with_email">Войти с помощью <b>e-mail</b></string>
<string name="msg_create_account">Создать аккаунт</string>
<string name="msg_continue_with_facebook">Войти с помощью <b>Facebook</b></string>
<string name="msg_continue_with_github">Войти с помощью <b>Github</b></string>
<string name="msg_continue_with_google">Войти с помощью <b>Google</b></string>
<string name="msg_continue_with_linkedin">Войти с помощью <b>Linkedin</b></string>
<string name="msg_continue_with_gitlab">Войти с помощью <b>GitLab</b></string>
<string name="msg_continue_with_wordpress">Войти с помощью <b>WordPress</b></string>
<string name="msg_two_factor_authentication">Двухфакторная аутентификация</string>
<string name="msg__your_2fa_code">Ваш код 2FA?</string>
<string name="msg_view_more">больше</string>
<string name="msg_view_less">меньше</string>
......@@ -300,6 +301,5 @@
<string name="read_by">Прочитано</string>
<string name="message_information_title">Информация о прочтении</string>
<string name="msg_log_out">Выходим…</string>
<!--TODO - Add proper translation-->
<string name="message_room_changed_privacy">Room type changed to: %1$s by %2$s</string>
<string name="message_room_changed_privacy">Тип канала изменен на: %1$s пользователем %2$s</string>
</resources>
......@@ -10,7 +10,8 @@
<string name="title_legal_terms">Yasal Şartlar</string>
<string name="title_chats">Sohbetler</string>
<string name="title_profile">Profil</string>
<string name="title_members">Üyeler (%d)</string>
<string name="title_members">Üyeler</string>
<string name="title_counted_members">Üyeler (%d)</string>
<string name="title_settings">Ayarlar</string>
<string name="title_preferences">Tercihler</string>
<string name="title_change_password">Şifre Değişikliği</string>
......
......@@ -10,7 +10,8 @@
<string name="title_legal_terms">Юридичні умови</string>
<string name="title_chats">Чати</string>
<string name="title_profile">Профіль</string>
<string name="title_members">Користувачі (%d)</string>
<string name="title_members">Користувачі</string>
<string name="title_counted_members">Користувачі (%d)</string>
<string name="title_settings">Налаштування</string>
<string name="title_preferences">Персональні</string>
<string name="title_change_password">Змінити пароль</string>
......
......@@ -22,7 +22,8 @@ https://github.com/RocketChat/java-code-styles/blob/master/CODING_STYLE.md#strin
<string name="title_legal_terms">Legal Terms</string>
<string name="title_chats">Chats</string>
<string name="title_profile">Profile</string>
<string name="title_members">Members (%d)</string>
<string name="title_members">Members</string>
<string name="title_counted_members">Members (%d)</string>
<string name="title_settings">Settings</string>
<string name="title_preferences">Preferences</string>
<string name="title_change_password">Change Password</string>
......
......@@ -40,6 +40,8 @@
<item name="android:textStyle">bold</item>
<item name="android:textColor">@color/colorAccent</item>
<item name="android:letterSpacing">0.04</item>
<item name="android:maxLines">1</item>
<item name="android:ellipsize">end</item>
</style>
<style name="Authentication.Button.Title.White" parent="Authentication.Button.Title">
......@@ -52,6 +54,8 @@
<item name="android:textStyle">normal</item>
<item name="android:textColor">@color/colorAuthenticationSecondaryText</item>
<item name="android:letterSpacing">0.04</item>
<item name="android:maxLines">1</item>
<item name="android:ellipsize">end</item>
</style>
<style name="Authentication.EditText.Hint" parent="TextAppearance.AppCompat">
......@@ -76,7 +80,7 @@
</style>
<style name="Authentication.Button" parent="Widget.AppCompat.Button.Borderless">
<item name="android:layout_width">0dp</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">48dp</item>
<item name="android:foreground">?selectableItemBackground</item>
<item name="android:textSize">18sp</item>
......
......@@ -65,4 +65,6 @@ class AnswersAnalytics : Analytics {
.putCustomAttribute("server_url", serverUrl)
.putCustomAttribute("server_count", serverCount)
)
override fun logOpenAdmin() = Answers.getInstance().logCustom(CustomEvent("open_admin"))
}
......@@ -58,4 +58,6 @@ class GoogleAnalyticsForFirebase @Inject constructor(val context: Context) :
putInt("server_count", serverCount)
})
}
override fun logOpenAdmin() = firebaseAnalytics.logEvent("open_admin", null)
}
......@@ -10,7 +10,7 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0-rc03'
classpath 'com.android.tools.build:gradle:3.3.0-alpha12'
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'
......
......@@ -5,20 +5,20 @@ ext {
compileSdk : 28,
targetSdk : 28,
minSdk : 21,
buildTools : '28.0.2',
buildTools : '28.0.3',
dokka : '0.9.16',
// For app
kotlin : '1.2.61',
coroutine : '0.25.0',
appCompat : '1.0.0-rc02',
recyclerview : '1.0.0-rc02',
appCompat : '1.0.0',
recyclerview : '1.0.0',
constraintLayout : '2.0.0-alpha2',
cardview : '1.0.0-rc02',
browser : '1.0.0-rc02',
androidKtx : '1.0.0-rc02',
workmanager : '1.0.0-alpha08',
cardview : '1.0.0',
browser : '1.0.0',
androidKtx : '1.0.0',
workmanager : '1.0.0-alpha09',
dagger : '2.16',
firebaseCloudMessage : '17.3.0',
......@@ -28,8 +28,8 @@ ext {
flexbox : '1.0.0',
material : '1.0.0-beta01',
room : '2.0.0-rc01',
lifecycle : '2.0.0-rc01',
room : '2.0.0',
lifecycle : '2.0.0',
livedataKtx : '2.0.1',
......
......@@ -5,7 +5,7 @@ apply plugin: 'kotlin-kapt'
android {
compileSdkVersion versions.compileSdk
buildToolsVersion versions.buildTools
buildToolsVersion '28.0.3'
defaultConfig {
minSdkVersion versions.minSdk
......
#Mon Aug 06 11:30:07 BRT 2018
#Wed Oct 10 10:41:36 UYT 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-all.zip
distributionSha256Sum=39e2d5803bbd5eaf6c8efe07067b0e5a00235e8c71318642b2ed262920b27721
\ No newline at end of file
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
distributionSha256Sum=b7aedd369a26b177147bcb715f8b1fc4fe32b0a6ade0d7fd8ee5ed0c6f731f2c
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