Commit 84523a02 authored by Filipe de Lima Brito's avatar Filipe de Lima Brito

Refactor on the OnBoardingFragment

Fix the rocket.chat icon being draw incorrect on on boarding screen.
Adds proper widget themes.
Correct status bar color is now displayed accordingly the fragment (as per our desing).
Removes unneeded code.
parent 5c4bb503
......@@ -9,14 +9,14 @@
<application
android:name=".app.RocketChatApplication"
tools:replace="android:name"
android:allowBackup="true"
android:fullBackupContent="@xml/backup_config"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true">
android:supportsRtl="true"
tools:replace="android:name">
<activity
android:name=".authentication.ui.AuthenticationActivity"
......@@ -27,6 +27,7 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
......@@ -40,6 +41,7 @@
<data
android:host="auth"
android:scheme="rocketchat" />
<data
android:host="go.rocket.chat"
android:path="/auth"
......
......@@ -2,16 +2,18 @@ package chat.rocket.android.authentication.loginoptions.ui
import android.app.Activity
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.*
import androidx.fragment.app.Fragment
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.R
import chat.rocket.android.authentication.login.ui.REQUEST_CODE_FOR_OAUTH
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.rotateBy
import chat.rocket.android.util.extensions.showToast
import chat.rocket.android.util.extensions.ui
......@@ -23,7 +25,7 @@ import kotlinx.android.synthetic.main.app_bar_chat_room.*
import kotlinx.android.synthetic.main.fragment_authentication_login_options.*
import javax.inject.Inject
internal const val TAG_LOGIN_OPTIONS = "LoginOptionsFragment"
private const val BUNDLE_SERVER_NAME = "BUNDLE_SERVER_NAME"
class LoginOptionsFragment : Fragment(), LoginOptionsView {
......@@ -33,7 +35,7 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView {
private var server: String? = null
companion object {
fun newInstance(server: String) : LoginOptionsFragment {
fun newInstance(server: String): LoginOptionsFragment {
return LoginOptionsFragment().apply {
arguments = Bundle(1).apply {
putString(BUNDLE_SERVER_NAME, server)
......@@ -52,9 +54,10 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView {
}
}
override fun onCreateView(inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? = inflater.inflate(R.layout.fragment_authentication_login_options, container, false)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
......@@ -71,12 +74,12 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView {
button_login.setOnClickListener {
presenter.toLogin()
}
image_more_login_option.setOnClickListener{
if (it.rotation == 0f){
image_more_login_option.setOnClickListener {
if (it.rotation == 0f) {
image_more_login_option.rotateBy(180f)
button_linkedin.isVisible = true
button_gitlab.isVisible = true
}else {
} else {
image_more_login_option.rotateBy(-180f)
button_linkedin.isVisible = false
button_gitlab.isVisible = false
......@@ -85,14 +88,15 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView {
}
private fun setupToolbar() {
val toolbar = (activity as AuthenticationActivity).toolbar
toolbar.isVisible = true
val textServerName = (activity as AuthenticationActivity).text_room_name
textServerName.text = server?.replace("https://","")
with((activity as AuthenticationActivity)) {
view?.let { clearLightStatusBar(it) }
toolbar.isVisible = true
text_room_name.text = server?.replace(getString(R.string.default_protocol), "")
}
}
override fun enableLoginByFacebook() {
ui{
ui {
button_facebook.isClickable = true
}
}
......@@ -101,8 +105,8 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView {
ui { activity ->
button_facebook.setOnClickListener {
startActivityForResult(
activity.oauthWebViewIntent(facebookOauthUrl, state),
REQUEST_CODE_FOR_OAUTH
activity.oauthWebViewIntent(facebookOauthUrl, state),
REQUEST_CODE_FOR_OAUTH
)
activity.overridePendingTransition(R.anim.slide_up, R.anim.hold)
}
......@@ -119,8 +123,8 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView {
ui { activity ->
button_github.setOnClickListener {
startActivityForResult(
activity.oauthWebViewIntent(githubUrl, state),
REQUEST_CODE_FOR_OAUTH
activity.oauthWebViewIntent(githubUrl, state),
REQUEST_CODE_FOR_OAUTH
)
activity.overridePendingTransition(R.anim.slide_up, R.anim.hold)
}
......@@ -137,8 +141,8 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView {
ui { activity ->
button_google.setOnClickListener {
startActivityForResult(
activity.oauthWebViewIntent(googleUrl, state),
REQUEST_CODE_FOR_OAUTH
activity.oauthWebViewIntent(googleUrl, state),
REQUEST_CODE_FOR_OAUTH
)
activity.overridePendingTransition(R.anim.slide_up, R.anim.hold)
}
......@@ -155,8 +159,8 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView {
ui { activity ->
button_linkedin.setOnClickListener {
startActivityForResult(
activity.oauthWebViewIntent(linkedinUrl, state),
REQUEST_CODE_FOR_OAUTH
activity.oauthWebViewIntent(linkedinUrl, state),
REQUEST_CODE_FOR_OAUTH
)
activity.overridePendingTransition(R.anim.slide_up, R.anim.hold)
}
......@@ -173,8 +177,8 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView {
ui { activity ->
button_gitlab.setOnClickListener {
startActivityForResult(
activity.oauthWebViewIntent(gitlabUrl, state),
REQUEST_CODE_FOR_OAUTH
activity.oauthWebViewIntent(gitlabUrl, state),
REQUEST_CODE_FOR_OAUTH
)
activity.overridePendingTransition(R.anim.slide_up, R.anim.hold)
}
......@@ -182,12 +186,12 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView {
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode == Activity.RESULT_OK && data != null){
when(requestCode){
if (resultCode == Activity.RESULT_OK && data != null) {
when (requestCode) {
REQUEST_CODE_FOR_OAUTH -> {
presenter.authenticateWithOauth(
data.getStringExtra(INTENT_OAUTH_CREDENTIAL_TOKEN),
data.getStringExtra(INTENT_OAUTH_CREDENTIAL_SECRET)
data.getStringExtra(INTENT_OAUTH_CREDENTIAL_TOKEN),
data.getStringExtra(INTENT_OAUTH_CREDENTIAL_SECRET)
)
}
}
......
......@@ -18,19 +18,14 @@ class OnBoardingFragmentModule {
@Provides
@PerFragment
fun onBoardingView(frag: OnBoardingFragment): OnBoardingView{
return frag
}
fun onBoardingView(frag: OnBoardingFragment): OnBoardingView = frag
@Provides
@PerFragment
fun provideLifecycleOwner(frag: OnBoardingFragment): LifecycleOwner {
return frag
}
fun provideLifecycleOwner(frag: OnBoardingFragment): LifecycleOwner = frag
@Provides
@PerFragment
fun provideCancelStrategy(owner: LifecycleOwner, jobs: Job): CancelStrategy {
return CancelStrategy(owner, jobs)
}
fun provideCancelStrategy(owner: LifecycleOwner, jobs: Job): CancelStrategy =
CancelStrategy(owner, jobs)
}
\ No newline at end of file
......@@ -5,7 +5,8 @@ import chat.rocket.android.dagger.scope.PerFragment
import dagger.Module
import dagger.android.ContributesAndroidInjector
@Module abstract class OnBoardingFragmentProvider {
@Module
abstract class OnBoardingFragmentProvider {
@ContributesAndroidInjector(modules = [OnBoardingFragmentModule::class])
@PerFragment
......
package chat.rocket.android.authentication.onboarding.presentation
import chat.rocket.android.authentication.domain.model.LoginDeepLinkInfo
import chat.rocket.android.authentication.presentation.AuthenticationNavigator
import chat.rocket.android.core.behaviours.showMessage
import chat.rocket.android.core.lifecycle.CancelStrategy
......@@ -7,50 +8,43 @@ import chat.rocket.android.server.domain.GetAccountsInteractor
import chat.rocket.android.server.domain.RefreshSettingsInteractor
import chat.rocket.android.server.domain.SaveConnectingServerInteractor
import chat.rocket.android.util.extension.launchUI
import chat.rocket.android.util.extensions.isValidUrl
import javax.inject.Inject
class OnBoardingPresenter @Inject constructor(
private val view: OnBoardingView,
private val strategy: CancelStrategy,
private val navigator: AuthenticationNavigator,
private val serverInteractor: SaveConnectingServerInteractor,
private val refreshSettingsInteractor: RefreshSettingsInteractor,
private val getAccountsInteractor: GetAccountsInteractor
private val view: OnBoardingView,
private val strategy: CancelStrategy,
private val navigator: AuthenticationNavigator,
private val serverInteractor: SaveConnectingServerInteractor,
private val refreshSettingsInteractor: RefreshSettingsInteractor,
private val getAccountsInteractor: GetAccountsInteractor
) {
fun createServer(){
navigator.toWebPage("https://cloud.rocket.chat/trial")
}
fun connect(server: String) {
//code that leads to login screen (smart lock will be implemented after this)
connectToServer(server) {
navigator.toLoginOptions(server)
}
}
fun toConnectWithAServer(deepLinkInfo: LoginDeepLinkInfo?) =
navigator.toConnectWithAServer(deepLinkInfo)
fun connectToCommunityServer(communityServer: String) =
connectToServer(communityServer) { navigator.toLoginOptions(communityServer) }
fun toCreateANewServer(createServerUrl: String) = navigator.toWebPage(createServerUrl)
private fun connectToServer(server: String, block: () -> Unit) {
if (!server.isValidUrl()) {
view.showInvalidServerUrlMessage()
} else {
launchUI(strategy) {
// Check if we already have an account for this server...
val account = getAccountsInteractor.get().firstOrNull { it.serverUrl == server }
if (account != null) {
navigator.toChatList(server)
return@launchUI
}
launchUI(strategy) {
// Check if we already have an account for this server...
val account = getAccountsInteractor.get().firstOrNull { it.serverUrl == server }
if (account != null) {
navigator.toChatList(server)
return@launchUI
}
view.showLoading()
try {
refreshSettingsInteractor.refresh(server)
serverInteractor.save(server)
block()
} catch (ex: Exception) {
view.showMessage(ex)
} finally {
view.hideLoading()
}
view.showLoading()
try {
refreshSettingsInteractor.refresh(server)
serverInteractor.save(server)
block()
} catch (ex: Exception) {
view.showMessage(ex)
} finally {
view.hideLoading()
}
}
}
......
......@@ -3,10 +3,4 @@ package chat.rocket.android.authentication.onboarding.presentation
import chat.rocket.android.core.behaviours.LoadingView
import chat.rocket.android.core.behaviours.MessageView
interface OnBoardingView : LoadingView, MessageView {
/**
* Shows an invalid server URL message.
*/
fun showInvalidServerUrlMessage()
}
\ No newline at end of file
interface OnBoardingView : LoadingView, MessageView
\ No newline at end of file
package chat.rocket.android.authentication.onboarding.ui
import android.os.Bundle
import androidx.fragment.app.Fragment
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.R
import chat.rocket.android.authentication.domain.model.getLoginDeepLinkInfo
import chat.rocket.android.authentication.onboarding.presentation.OnBoardingPresenter
import chat.rocket.android.authentication.onboarding.presentation.OnBoardingView
import chat.rocket.android.authentication.server.ui.ServerFragment
import chat.rocket.android.authentication.ui.AuthenticationActivity
import chat.rocket.android.util.extensions.*
import chat.rocket.android.util.extensions.inflate
import chat.rocket.android.util.extensions.setLightStatusBar
import chat.rocket.android.util.extensions.showToast
import chat.rocket.android.util.extensions.ui
import dagger.android.support.AndroidSupportInjection
import kotlinx.android.synthetic.main.app_bar_chat_room.*
import kotlinx.android.synthetic.main.fragment_authentication_on_boarding.*
import javax.inject.Inject
class OnBoardingFragment : Fragment(), OnBoardingView {
@Inject
lateinit var presenter: OnBoardingPresenter
private var protocol = "https://"
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? = container?.inflate(R.layout.fragment_authentication_on_boarding)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
AndroidSupportInjection.inject(this)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? = container?.inflate(R.layout.fragment_authentication_on_boarding)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setupOnClickListener()
setupToobar()
setupOnClickListener()
}
private fun setupToobar() {
val toolbar = (activity as AuthenticationActivity).toolbar
toolbar.isVisible = false
with(activity as AuthenticationActivity) {
view?.let { setLightStatusBar(it) }
toolbar.isVisible = false
}
}
private fun setupOnClickListener() {
val deepLinkInfo = activity?.intent?.getLoginDeepLinkInfo()
button_connect_server.setOnClickListener {
(activity as AuthenticationActivity).addFragmentBackStack("ServerFragment", R.id.fragment_container) {
ServerFragment.newInstance(deepLinkInfo)
}
}
button_join_community.setOnClickListener {
connectToCommunityServer()
}
button_create_server.setOnClickListener {
presenter.createServer()
}
}
container_connect_with_a_server.setOnClickListener { connectWithAServer() }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
AndroidSupportInjection.inject(this)
container_join_community.setOnClickListener { joinInTheCommunity() }
container_create_server.setOnClickListener { createANewServer() }
}
override fun showLoading() {
ui{
view_loading.setVisible(true)
ui {
view_loading.isVisible = true
}
}
override fun hideLoading() {
ui{
view_loading.setVisible(false)
ui {
view_loading.isVisible = false
}
}
override fun showInvalidServerUrlMessage() = showMessage(getString(R.string.msg_invalid_server_url))
override fun showMessage(resId: Int) {
ui {
showToast(resId)
......@@ -84,16 +79,26 @@ class OnBoardingFragment : Fragment(), OnBoardingView {
}
}
override fun showGenericErrorMessage() {
showMessage(getString(R.string.msg_generic_error))
override fun showGenericErrorMessage() = showMessage(getString(R.string.msg_generic_error))
private fun connectWithAServer() = ui {
presenter.toConnectWithAServer(activity?.intent?.getLoginDeepLinkInfo())
}
private fun connectToCommunityServer() {
ui {
val url = getString(R.string.community_server)
presenter.connect("$protocol${url.sanitize()}")
}
private fun joinInTheCommunity() = ui {
presenter.connectToCommunityServer(
getString(R.string.default_protocol) +
getString(R.string.community_server_url)
)
}
private fun createANewServer() = ui {
presenter.toCreateANewServer(
getString(R.string.default_protocol) +
getString(R.string.create_server_url)
)
}
companion object {
fun newInstance() = OnBoardingFragment()
}
......
......@@ -6,10 +6,13 @@ import chat.rocket.android.authentication.domain.model.LoginDeepLinkInfo
import chat.rocket.android.authentication.login.ui.LoginFragment
import chat.rocket.android.authentication.login.ui.TAG_LOGIN_FRAGMENT
import chat.rocket.android.authentication.loginoptions.ui.LoginOptionsFragment
import chat.rocket.android.authentication.loginoptions.ui.TAG_LOGIN_OPTIONS
import chat.rocket.android.authentication.registerusername.ui.RegisterUsernameFragment
import chat.rocket.android.authentication.registerusername.ui.TAG_REGISTER_USERNAME_FRAGMENT
import chat.rocket.android.authentication.resetpassword.ui.ResetPasswordFragment
import chat.rocket.android.authentication.resetpassword.ui.TAG_RESET_PASSWORD_FRAGMENT
import chat.rocket.android.authentication.server.ui.ServerFragment
import chat.rocket.android.authentication.server.ui.TAG_SERVER_FRAGMENT
import chat.rocket.android.authentication.signup.ui.SignupFragment
import chat.rocket.android.authentication.signup.ui.TAG_SIGNUP_FRAGMENT
import chat.rocket.android.authentication.twofactor.ui.TAG_TWO_FA_FRAGMENT
......@@ -24,8 +27,14 @@ import chat.rocket.android.webview.ui.webViewIntent
class AuthenticationNavigator(internal val activity: AuthenticationActivity) {
fun toConnectWithAServer(deepLinkInfo: LoginDeepLinkInfo?) {
activity.addFragmentBackStack(TAG_SERVER_FRAGMENT, R.id.fragment_container) {
ServerFragment.newInstance(deepLinkInfo)
}
}
fun toLoginOptions(server: String) {
activity.addFragmentBackStack("LoginOptionFragment", R.id.fragment_container) {
activity.addFragmentBackStack(TAG_LOGIN_OPTIONS, R.id.fragment_container) {
LoginOptionsFragment.newInstance(server)
}
}
......@@ -91,7 +100,7 @@ class AuthenticationNavigator(internal val activity: AuthenticationActivity) {
}
fun toCreateAccount() {
activity.addFragmentBackStack("SignUpFragment", R.id.fragment_container){
activity.addFragmentBackStack("SignUpFragment", R.id.fragment_container) {
SignupFragment.newInstance()
}
}
......
......@@ -107,8 +107,10 @@ class ServerFragment : Fragment(), ServerView {
}
private fun setupToobar() {
val toolbar = (activity as AuthenticationActivity).toolbar
toolbar.isVisible = false
with(activity as AuthenticationActivity) {
view?.let { setLightStatusBar(it) }
toolbar.isVisible = false
}
}
override fun onDestroyView() {
......
......@@ -3,6 +3,7 @@ package chat.rocket.android.util.extensions
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.os.Build
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuItem
......@@ -16,9 +17,25 @@ import androidx.annotation.StringRes
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.view.SupportMenuInflater
import androidx.appcompat.view.menu.MenuBuilder
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import chat.rocket.android.R
fun AppCompatActivity.setLightStatusBar(view: View) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
var flags = view.systemUiVisibility
flags = flags or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
view.systemUiVisibility = flags
window.statusBarColor = ContextCompat.getColor(this, R.color.colorWhite)
}
}
fun AppCompatActivity.clearLightStatusBar(view: View) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
window.statusBarColor = ContextCompat.getColor(this, R.color.colorPrimary)
}
}
// TODO: Remove. Use KTX instead.
fun View.setVisible(visible: Boolean) {
visibility = if (visible) {
......@@ -35,11 +52,13 @@ fun View.isVisible(): Boolean {
fun ViewGroup.inflate(@LayoutRes resource: Int, attachToRoot: Boolean = false): View =
LayoutInflater.from(context).inflate(resource, this, attachToRoot)
fun AppCompatActivity.addFragment(tag: String, layoutId: Int, allowStateLoss: Boolean = false,
newInstance: () -> Fragment) {
fun AppCompatActivity.addFragment(
tag: String, layoutId: Int, allowStateLoss: Boolean = false,
newInstance: () -> Fragment
) {
val fragment = supportFragmentManager.findFragmentByTag(tag) ?: newInstance()
val transaction = supportFragmentManager.beginTransaction()
.replace(layoutId, fragment, tag)
.replace(layoutId, fragment, tag)
if (allowStateLoss) {
transaction.commitAllowingStateLoss()
} else {
......
......@@ -6,13 +6,13 @@
android:viewportHeight="30">
<path
android:strokeColor="#1D74F5"
android:pathData="M13.086 8.636l4.242-4.243a5.5 5.5 0 0 1 7.779 7.779l-4.243 4.242a5.5 5.5 0 0 1-7.778 0"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M13.086 8.636l4.242-4.243a5.5 5.5 0 0 1 7.779 7.779l-4.243 4.242a5.5 5.5 0 0 1-7.778 0" />
android:strokeColor="#FF000000"
android:strokeLineCap="round" />
<path
android:strokeColor="#1D74F5"
android:pathData="M15.914 21.364l-4.242 4.243a5.5 5.5 0 0 1-7.779-7.779l4.243-4.242a5.5 5.5 0 0 1 7.778 0"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M15.914 21.364l-4.242 4.243a5.5 5.5 0 0 1-7.779-7.779l4.243-4.242a5.5 5.5 0 0 1 7.778 0" />
android:strokeColor="#FF000000"
android:strokeLineCap="round" />
</vector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="31dp"
android:height="30dp"
android:viewportWidth="31"
android:viewportHeight="30">
<group
android:translateX="1"
android:translateY="2">
<path
android:fillColor="#C1262D"
android:pathData="M29.246 12.423c0-1.47-0.439-2.877-1.306-4.186-0.778-1.175-1.868-2.216-3.24-3.092-2.65-1.692-6.13-2.624-9.803-2.624a20.92 20.92 0 0 0-3.608 0.309 11.94 11.94 0 0 0-2.48-1.778C3.992-1.282 0 0.997 0 0.997s3.712 3.05 3.109 5.723C1.448 8.367 0.548 10.354 0.548 12.423v0.04c0 2.068 0.9 4.054 2.56 5.702C3.713 20.838 0 23.888 0 23.888s3.993 2.279 8.808-0.055a11.958 11.958 0 0 0 2.48-1.778c1.174 0.205 2.382 0.309 3.61 0.309 3.672 0 7.153-0.932 9.802-2.624 1.372-0.876 2.462-1.916 3.24-3.092 0.867 -1.309 1.306-2.717 1.306-4.185v-0.02-0.02z" />
<path
android:fillColor="#FFF"
android:pathData="M14.897 4.597c6.8 0 12.313 3.521 12.313 7.865 0 4.343-5.513 7.865-12.313 7.865-1.514 0-2.964-0.175-4.304-0.494-1.361 1.637-4.356 3.915-7.266 3.179 0.946 -1.017 2.348-2.734 2.048-5.564-1.744-1.357-2.79-3.093-2.79-4.986 0-4.344 5.512-7.865 12.312-7.865" />
<path
android:fillColor="#C1262D"
android:pathData="M 14.897 11.079 C 15.8005378507 11.079 16.533 11.8114621493 16.533 12.715 C 16.533 13.6185378507 15.8005378507 14.351 14.897 14.351 C 13.9934621493 14.351 13.261 13.6185378507 13.261 12.715 C 13.261 11.8114621493 13.9934621493 11.079 14.897 11.079 Z" />
<path
android:fillColor="#C1262D"
android:pathData="M 20.584 11.079 C 21.4875378507 11.079 22.22 11.8114621493 22.22 12.715 C 22.22 13.6185378507 21.4875378507 14.351 20.584 14.351 C 19.6804621493 14.351 18.948 13.6185378507 18.948 12.715 C 18.948 11.8114621493 19.6804621493 11.079 20.584 11.079 Z" />
<path
android:fillColor="#C1262D"
android:pathData="M 9.21 11.08 C 10.112985566 11.08 10.845 11.812014434 10.845 12.715 C 10.845 13.617985566 10.112985566 14.35 9.21 14.35 C 8.30701443403 14.35 7.575 13.617985566 7.575 12.715 C 7.575 11.812014434 8.30701443403 11.08 9.21 11.08 Z" />
<path
android:fillColor="#CCC"
android:pathData="M14.897 19.292c-1.514 0-2.964-0.152-4.304-0.429-1.202 1.254-3.678 2.939-6.244 2.877a9.71 9.71 0 0 1-1.022 1.271c2.91 0.736 5.905-1.54 7.266-3.179 1.34 0.32 2.79 0.495 4.304 0.495 6.746 0 12.223-3.466 12.31-7.761-0.087 3.723-5.564 6.726-12.31 6.726z" />
</group>
</vector>
\ No newline at end of file
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="30dp"
android:height="30dp"
android:viewportWidth="30"
android:viewportHeight="30">
<path
android:fillType="nonZero"
android:pathData="M26.2984,12.2493L26.2989,12.2501C26.2988,12.2499 26.2987,12.2498 26.2987,12.2497C26.2986,12.2496 26.2985,12.2494 26.2984,12.2493ZM9.0351,3.1159C9.9595,3.6298 10.8333,4.2801 11.5795,5.0028C12.7824,4.7847 14.0227,4.6747 15.281,4.6747C19.0478,4.6747 22.6191,5.6639 25.3363,7.4593C26.7435,8.3896 27.8619,9.4933 28.6603,10.7402C29.5493,12.1296 30,13.6236 30,15.2246C30,16.7824 29.5493,18.2771 28.6603,19.6662C27.8619,20.9137 26.7435,22.0171 25.3363,22.9474C22.6191,24.7428 19.0481,25.7314 15.281,25.7314C14.0227,25.7314 12.7827,25.6214 11.5795,25.4036C10.833,26.126 9.9595,26.7765 9.0351,27.2905C4.0959,29.7665 0,27.3487 0,27.3487C0,27.3487 3.8081,24.1124 3.1889,21.2755C1.485,19.5274 0.5618,17.419 0.5618,15.1821C0.5618,12.9873 1.4853,10.879 3.1889,9.1306C3.808,6.2944 0.0013,3.0587 0,3.0577C0.0012,3.057 4.0966,0.6399 9.0351,3.1159Z"
android:strokeWidth="1"
android:strokeColor="#00000000">
<aapt:attr name="android:fillColor">
<gradient
android:endX="15"
android:endY="25.305122"
android:startX="15"
android:startY="-1.2754043"
android:type="linear">
<item
android:color="#FFDB2323"
android:offset="0" />
<item
android:color="#FFDB2323"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M5.9908,19.9981C4.2976,18.6585 3.2813,16.9442 3.2813,15.0757C3.2813,10.7882 8.6328,7.3125 15.2344,7.3125C21.8359,7.3125 27.1875,10.7882 27.1875,15.0757C27.1875,19.3632 21.8359,22.8389 15.2344,22.8389C13.6074,22.8389 12.0563,22.6278 10.6425,22.2454L9.6089,23.2462C9.0473,23.79 8.3891,24.2821 7.7029,24.6698C6.7935,25.1182 5.8954,25.3629 5.0068,25.4375C5.057,25.346 5.1031,25.2533 5.1527,25.1617C6.1883,23.2464 6.4677,21.5252 5.9908,19.9981Z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
<path
android:fillType="nonZero"
android:pathData="M9.5313,15.125m-1.7188,0a1.7188,1.7188 0,1 1,3.4375 0a1.7188,1.7188 0,1 1,-3.4375 0"
android:strokeWidth="1"
android:strokeColor="#00000000">
<aapt:attr name="android:fillColor">
<gradient
android:endX="9.53125"
android:endY="16.345976"
android:startX="9.53125"
android:startY="13.133343"
android:type="linear">
<item
android:color="#FFDB2323"
android:offset="0" />
<item
android:color="#FFDB2323"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path
android:fillType="nonZero"
android:pathData="M15.1563,15.125m-1.7188,0a1.7188,1.7188 0,1 1,3.4375 0a1.7188,1.7188 0,1 1,-3.4375 0"
android:strokeWidth="1"
android:strokeColor="#00000000">
<aapt:attr name="android:fillColor">
<gradient
android:endX="15.15625"
android:endY="16.345972"
android:startX="15.15625"
android:startY="13.133308"
android:type="linear">
<item
android:color="#FFDB2323"
android:offset="0" />
<item
android:color="#FFDB2323"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path
android:fillType="nonZero"
android:pathData="M20.9375,15.125m-1.7188,0a1.7188,1.7188 0,1 1,3.4375 0a1.7188,1.7188 0,1 1,-3.4375 0"
android:strokeWidth="1"
android:strokeColor="#00000000">
<aapt:attr name="android:fillColor">
<gradient
android:endX="20.93745"
android:endY="16.345972"
android:startX="20.93745"
android:startY="13.133308"
android:type="linear">
<item
android:color="#FFDB2323"
android:offset="0" />
<item
android:color="#FFDB2323"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
</vector>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke android:width="1dp" android:color="#e1e5e8" />
<stroke
android:width="1dp"
android:color="@color/colorAuthenticationOnBoardingButtonBorder" />
<corners android:radius="2dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/colorAccent" />
<corners android:radius="2dp"/>
<corners android:radius="2dp" />
</shape>
\ No newline at end of file
......@@ -4,7 +4,7 @@
<!-- Main colors -->
<color name="colorPrimary">#2f343d</color>
<color name="colorPrimaryDark">#2f343d</color>
<color name="colorAccent">#1d74f5</color>
<color name="colorAccent">#FF1D74F5</color>
<!-- Text colors -->
<color name="colorPrimaryText">#DE000000</color>
......@@ -22,6 +22,11 @@
<color name="colorBlack">#FF000000</color>
<color name="colorRed">#FFFF0000</color>
<!-- Authentication colors -->
<color name="colorAuthenticationOnBoardingButtonBorder">#FFE1E5E8</color>
<color name="colorAuthenticationOnBoardingChevron">#FFCBCED1</color>
<color name="colorAuthenticationOnBoardingTextDescription">#FF9EA2A8</color>
<color name="darkGray">#FFa0a0a0</color>
<color name="actionMenuColor">#FF727272</color>
<color name="whitesmoke">#FFf1f1f1</color>
......
......@@ -2,4 +2,6 @@
<resources>
<string name="default_protocol" translatable="false">https://</string>
<string name="default_server" translatable="false">open.rocket.chat</string>
<string name="community_server_url" translatable="false">open.rocket.chat</string>
<string name="create_server_url" translatable="false">cloud.rocket.chat/trial</string>
</resources>
\ No newline at end of file
......@@ -85,6 +85,7 @@
<string name="msg_invalid_2fa_code">Invalid 2FA Code</string>
<string name="msg_invalid_file">Invalid file</string>
<string name="msg_invalid_server_url">Invalid server URL</string>
<string name="msg_content_description_onboarding">Onboarding image</string>
<string name="msg_content_description_log_in_using_facebook">Login using Facebook</string>
<string name="msg_content_description_log_in_using_github">Login using Github</string>
<string name="msg_content_description_log_in_using_google">Login using Google</string>
......@@ -306,6 +307,7 @@
<string name="message_information_title">Message information</string>
<string name="foss" tools:ignore="MissingTranslation">(FOSS)</string>
<!-- Community Server-->
<string name="community_server" translatable="false">open.rocket.chat</string>
</resources>
\ No newline at end of file
......@@ -26,8 +26,9 @@
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textSize">22sp</item>
<item name="android:lineSpacingExtra">4sp</item>
<item name="android:fontFamily">sans-serif</item>
<item name="android:textColor">#2f343d</item>
<item name="android:textColor">#FF2F343D</item>
<item name="android:textStyle">bold</item>
</style>
......@@ -35,8 +36,31 @@
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textSize">16sp</item>
<item name="android:textColor">#54585e</item>
<item name="android:fontFamily">sans-serif</item>
<item name="android:lineSpacingExtra">4sp</item>
<item name="android:textColor">#FF54585E</item>
<item name="android:textStyle">normal</item>
</style>
<!-- OnBoarding -->
<style name="Authentication.OnBoarding.Button.Title" parent="TextAppearance.AppCompat">
<item name="android:textSize">17sp</item>
<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">bold</item>
<item name="android:textColor">@color/colorAccent</item>
<item name="android:letterSpacing">0.04</item>
</style>
<style name="Authentication.OnBoarding.Button.Title.White" parent="Authentication.OnBoarding.Button.Title">
<item name="android:textColor">@color/colorWhite</item>
</style>
<style name="Authentication.OnBoarding.Button.Description" parent="TextAppearance.AppCompat">
<item name="android:textSize">15sp</item>
<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">normal</item>
<item name="android:textColor">@color/colorAuthenticationOnBoardingTextDescription</item>
<item name="android:letterSpacing">0.04</item>
</style>
<style name="Authentication.EditText" parent="Widget.AppCompat.EditText">
......
{
"formatVersion": 1,
"database": {
"version": 1,
"identityHash": "5d591429a85289a5fe608ab2c4d77b0b",
"entities": [
{
"tableName": "Emoji",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`shortname` TEXT NOT NULL, `shortnameAlternates` TEXT NOT NULL, `unicode` TEXT NOT NULL, `category` TEXT NOT NULL, `count` INTEGER NOT NULL, `siblings` TEXT NOT NULL, `fitzpatrick` TEXT NOT NULL, `url` TEXT, `isDefault` INTEGER NOT NULL, PRIMARY KEY(`shortname`))",
"fields": [
{
"fieldPath": "shortname",
"columnName": "shortname",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "shortnameAlternates",
"columnName": "shortnameAlternates",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "unicode",
"columnName": "unicode",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "category",
"columnName": "category",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "count",
"columnName": "count",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "siblings",
"columnName": "siblings",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "fitzpatrick",
"columnName": "fitzpatrick",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "url",
"columnName": "url",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "isDefault",
"columnName": "isDefault",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"columnNames": [
"shortname"
],
"autoGenerate": false
},
"indices": [],
"foreignKeys": []
}
],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"5d591429a85289a5fe608ab2c4d77b0b\")"
]
}
}
\ 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