Update empty view for contacts

Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
Mario Danic 2020-02-03 00:46:47 +01:00
parent 2558b5e190
commit 5c27d58dfa
No known key found for this signature in database
GPG Key ID: CDE0BBD2738C4CC0
9 changed files with 79 additions and 11 deletions

View File

@ -23,10 +23,12 @@ package com.nextcloud.talk.activities
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.os.Build import android.os.Build
import android.os.Bundle
import android.util.Log import android.util.Log
import android.view.WindowManager import android.view.WindowManager
import android.webkit.SslErrorHandler import android.webkit.SslErrorHandler
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.events.CertificateEvent import com.nextcloud.talk.events.CertificateEvent
import com.nextcloud.talk.utils.SecurityUtils import com.nextcloud.talk.utils.SecurityUtils

View File

@ -23,15 +23,17 @@
package com.nextcloud.talk.newarch.data.presenters package com.nextcloud.talk.newarch.data.presenters
import android.content.Context import android.content.Context
import android.view.View
import com.otaliastudios.elements.Element import com.otaliastudios.elements.Element
import com.otaliastudios.elements.Page import com.otaliastudios.elements.Page
import com.otaliastudios.elements.extensions.EmptyPresenter import com.otaliastudios.elements.extensions.EmptyPresenter
class AdvancedEmptyPresenter(context: Context, layout: Int, private val onViewClick: (() -> Unit)? = null) : EmptyPresenter(context, layout) { class AdvancedEmptyPresenter(context: Context, layout: Int, private val onViewClick: (() -> Unit)? = null, private val bind: ((View) -> Unit)? = null) : EmptyPresenter(context, layout) {
override fun onBind(page: Page, holder: Holder, element: Element<Void>, payloads: List<Any>) { override fun onBind(page: Page, holder: Holder, element: Element<Void>, payloads: List<Any>) {
super.onBind(page, holder, element, payloads) super.onBind(page, holder, element, payloads)
holder.itemView.setOnClickListener { holder.itemView.setOnClickListener {
onViewClick?.invoke() onViewClick?.invoke()
} }
bind?.invoke(holder.itemView)
} }
} }

View File

@ -23,26 +23,32 @@
package com.nextcloud.talk.newarch.features.contactsflow.contacts package com.nextcloud.talk.newarch.features.contactsflow.contacts
import android.content.Context import android.content.Context
import android.content.res.ColorStateList
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.RelativeLayout
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.lifecycle.observe import androidx.lifecycle.observe
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import coil.api.load
import com.bluelinelabs.conductor.RouterTransaction import com.bluelinelabs.conductor.RouterTransaction
import com.bluelinelabs.conductor.autodispose.ControllerScopeProvider import com.bluelinelabs.conductor.autodispose.ControllerScopeProvider
import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.controllers.ChatController import com.nextcloud.talk.controllers.ChatController
import com.nextcloud.talk.models.json.participants.Participant import com.nextcloud.talk.models.json.participants.Participant
import com.nextcloud.talk.newarch.data.presenters.AdvancedEmptyPresenter
import com.nextcloud.talk.newarch.features.contactsflow.ContactsViewOperationState import com.nextcloud.talk.newarch.features.contactsflow.ContactsViewOperationState
import com.nextcloud.talk.newarch.features.contactsflow.groupconversation.GroupConversationView import com.nextcloud.talk.newarch.features.contactsflow.groupconversation.GroupConversationView
import com.nextcloud.talk.newarch.features.search.DebouncingTextWatcher import com.nextcloud.talk.newarch.features.search.DebouncingTextWatcher
import com.nextcloud.talk.newarch.mvvm.BaseView import com.nextcloud.talk.newarch.mvvm.BaseView
import com.nextcloud.talk.newarch.mvvm.ext.initRecyclerView import com.nextcloud.talk.newarch.mvvm.ext.initRecyclerView
import com.nextcloud.talk.newarch.utils.ElementPayload import com.nextcloud.talk.newarch.utils.ElementPayload
import com.nextcloud.talk.newarch.utils.dp
import com.nextcloud.talk.newarch.utils.px
import com.nextcloud.talk.utils.bundle.BundleKeys import com.nextcloud.talk.utils.bundle.BundleKeys
import com.otaliastudios.elements.Adapter import com.otaliastudios.elements.Adapter
import com.otaliastudios.elements.Element import com.otaliastudios.elements.Element
@ -55,7 +61,6 @@ import kotlinx.android.synthetic.main.message_state.view.*
import kotlinx.android.synthetic.main.search_layout.* import kotlinx.android.synthetic.main.search_layout.*
import kotlinx.android.synthetic.main.search_layout.view.* import kotlinx.android.synthetic.main.search_layout.view.*
import org.koin.android.ext.android.inject import org.koin.android.ext.android.inject
class ContactsView(private val bundle: Bundle? = null) : BaseView() { class ContactsView(private val bundle: Bundle? = null) : BaseView() {
override val scopeProvider: LifecycleScopeProvider<*> = ControllerScopeProvider.from(this) override val scopeProvider: LifecycleScopeProvider<*> = ControllerScopeProvider.from(this)
@ -81,17 +86,25 @@ class ContactsView(private val bundle: Bundle? = null) : BaseView() {
viewModel = viewModelProvider(factory).get(ContactsViewModel::class.java) viewModel = viewModelProvider(factory).get(ContactsViewModel::class.java)
val view = super.onCreateView(inflater, container) val view = super.onCreateView(inflater, container)
// todo - change empty state magic
val participantsAdapterBuilder = Adapter.builder(this) val participantsAdapterBuilder = Adapter.builder(this)
.addSource(ContactsViewSource(data = viewModel.contactsLiveData)) .addSource(ContactsViewSource(data = viewModel.contactsLiveData))
.addSource(ContactsHeaderSource(activity as Context, ParticipantElementType.PARTICIPANT_HEADER.ordinal)) .addSource(ContactsHeaderSource(activity as Context, ParticipantElementType.PARTICIPANT_HEADER.ordinal))
.addSource(ContactsViewFooterSource(activity as Context, ParticipantElementType.PARTICIPANT_FOOTER.ordinal)) .addSource(ContactsViewFooterSource(activity as Context, ParticipantElementType.PARTICIPANT_FOOTER.ordinal))
.addPresenter(ContactPresenter(activity as Context, ::onElementClick)) .addPresenter(ContactPresenter(activity as Context, ::onElementClick))
.addPresenter(Presenter.forLoadingIndicator(activity as Context, R.layout.loading_state)) .addPresenter(Presenter.forLoadingIndicator(activity as Context, R.layout.loading_state))
.addPresenter(Presenter.forEmptyIndicator(activity as Context, R.layout.message_state)) .addPresenter(AdvancedEmptyPresenter(activity as Context, R.layout.message_state, null) { view ->
val layoutParams = view.messageStateImageView.layoutParams as RelativeLayout.LayoutParams
layoutParams.height = 128.px
layoutParams.width = 128.px
view.messageStateImageView.layoutParams = layoutParams
view.messageStateTextView.setText(R.string.nc_search_empty_contacts)
view.messageStateImageView.load(context.getDrawable(R.drawable.ic_undraw_not_found_60pq))
view.messageStateImageView.imageTintList = null
})
.addPresenter(Presenter.forErrorIndicator(activity as Context, R.layout.message_state) { view, throwable -> .addPresenter(Presenter.forErrorIndicator(activity as Context, R.layout.message_state) { view, throwable ->
view.messageStateTextView.setText(R.string.nc_oops) view.messageStateTextView.setText(R.string.nc_oops)
view.messageStateImageView.setImageDrawable((activity as Context).getDrawable(R.drawable.ic_announcement_white_24dp)) view.messageStateImageView.load((activity as Context).getDrawable(R.drawable.ic_announcement_white_24dp))
view.messageStateImageView.imageTintList = resources?.getColor(R.color.colorPrimary)?.let { ColorStateList.valueOf(it) }
}) })
.setAutoScrollMode(Adapter.AUTOSCROLL_POSITION_0, true) .setAutoScrollMode(Adapter.AUTOSCROLL_POSITION_0, true)

View File

@ -134,10 +134,11 @@ class ContactsViewModel constructor(
} }
private fun loadContacts() { private fun loadContacts() {
getContactsUseCase.invoke(viewModelScope, parametersOf(globalService.currentUserLiveData.value, groupConversation, filterLiveData.value, conversationToken), object : val searchQuery: String = if (filterLiveData.value.isNullOrBlank()) "" else filterLiveData.value.toString()
getContactsUseCase.invoke(viewModelScope, parametersOf(globalService.currentUserLiveData.value, groupConversation, searchQuery, conversationToken), object :
UseCaseResponse<List<Participant>> { UseCaseResponse<List<Participant>> {
override suspend fun onSuccess(result: List<Participant>) { override suspend fun onSuccess(result: List<Participant>) {
val sortPriority = mapOf("users" to 0, "groups" to 1, "emails" to 2, "circles" to 0) val sortPriority = mapOf("users" to 0, "groups" to 1, "emails" to 2, "circles" to 3)
val sortedList = result.sortedWith(compareBy({ val sortedList = result.sortedWith(compareBy({
sortPriority[it.source] sortPriority[it.source]

View File

@ -23,6 +23,7 @@
package com.nextcloud.talk.newarch.features.conversationslist package com.nextcloud.talk.newarch.features.conversationslist
import android.content.Context import android.content.Context
import android.content.res.ColorStateList
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
@ -51,6 +52,7 @@ import com.nextcloud.talk.newarch.features.contactsflow.contacts.ContactsView
import com.nextcloud.talk.newarch.features.search.DebouncingTextWatcher import com.nextcloud.talk.newarch.features.search.DebouncingTextWatcher
import com.nextcloud.talk.newarch.mvvm.BaseView import com.nextcloud.talk.newarch.mvvm.BaseView
import com.nextcloud.talk.newarch.mvvm.ext.initRecyclerView import com.nextcloud.talk.newarch.mvvm.ext.initRecyclerView
import com.nextcloud.talk.newarch.utils.px
import com.nextcloud.talk.utils.ConductorRemapping import com.nextcloud.talk.utils.ConductorRemapping
import com.nextcloud.talk.utils.DisplayUtils import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.animations.SharedElementTransition import com.nextcloud.talk.utils.animations.SharedElementTransition
@ -86,10 +88,13 @@ class ConversationsListView : BaseView() {
.addSource(ConversationsListSource(viewModel.conversationsLiveData)) .addSource(ConversationsListSource(viewModel.conversationsLiveData))
.addPresenter(ConversationPresenter(activity as Context, ::onElementClick, ::onElementLongClick)) .addPresenter(ConversationPresenter(activity as Context, ::onElementClick, ::onElementLongClick))
.addPresenter(Presenter.forLoadingIndicator(activity as Context, R.layout.loading_state)) .addPresenter(Presenter.forLoadingIndicator(activity as Context, R.layout.loading_state))
.addPresenter(AdvancedEmptyPresenter(activity as Context, R.layout.message_state, ::openNewConversationScreen)) .addPresenter(AdvancedEmptyPresenter(activity as Context, R.layout.message_state, ::openNewConversationScreen) { view ->
view.messageStateImageView.imageTintList = resources?.getColor(R.color.colorPrimary)?.let { ColorStateList.valueOf(it) }
})
.addPresenter(Presenter.forErrorIndicator(activity as Context, R.layout.message_state) { view, throwable -> .addPresenter(Presenter.forErrorIndicator(activity as Context, R.layout.message_state) { view, throwable ->
view.messageStateTextView.setText(R.string.nc_oops) view.messageStateTextView.setText(R.string.nc_oops)
view.messageStateImageView.setImageDrawable((activity as Context).getDrawable(drawable.ic_announcement_white_24dp)) view.messageStateImageView.setImageDrawable((activity as Context).getDrawable(drawable.ic_announcement_white_24dp))
view.messageStateImageView.imageTintList = resources?.getColor(R.color.colorPrimary)?.let { ColorStateList.valueOf(it) }
}) })
.setAutoScrollMode(Adapter.AUTOSCROLL_POSITION_0, true) .setAutoScrollMode(Adapter.AUTOSCROLL_POSITION_0, true)
.into(view.recyclerView) .into(view.recyclerView)

View File

@ -22,6 +22,7 @@
package com.nextcloud.talk.newarch.utils package com.nextcloud.talk.newarch.utils
import android.content.res.Resources
import com.nextcloud.talk.models.database.UserEntity import com.nextcloud.talk.models.database.UserEntity
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils
import java.security.MessageDigest import java.security.MessageDigest
@ -32,3 +33,9 @@ fun String.hashWithAlgorithm(algorithm: String): String {
val bytes = digest.digest(this.toByteArray(Charsets.UTF_8)) val bytes = digest.digest(this.toByteArray(Charsets.UTF_8))
return bytes.fold("", { str, it -> str + "%02x".format(it) }) return bytes.fold("", { str, it -> str + "%02x".format(it) })
} }
val Int.dp: Int
get() = (this / Resources.getSystem().displayMetrics.density).toInt()
val Int.px: Int
get() = (this * Resources.getSystem().displayMetrics.density).toInt()

View File

@ -0,0 +1,37 @@
<vector android:autoMirrored="true" android:height="777.91583dp"
android:viewportHeight="777.91583" android:viewportWidth="1120.5923"
android:width="1120.5923dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#ff6584" android:pathData="M212.59,103m-64,0a64,64 0,1 1,128 0a64,64 0,1 1,-128 0"/>
<path android:fillColor="#f2f2f2" android:pathData="M523.98,343.12c0,151.01 -89.77,203.74 -200.52,203.74S122.95,494.13 122.95,343.12 323.46,0 323.46,0 523.98,192.11 523.98,343.12Z"/>
<path android:fillColor="#3f3d56" android:pathData="M316.16,523.76l2.05,-126.38l85.46,-156.35l-85.14,136.53l0.92,-56.83l58.9,-113.12l-58.66,98.08l0,0l1.66,-102.21l63.07,-90.06l-62.81,73.99l1.04,-187.41l-6.52,248.1l0.54,-10.24l-64.13,-98.16l63.1,117.8l-5.98,114.15l-0.18,-3.03l-73.93,-103.3l73.7,114l-0.75,14.27l-0.13,0.21l0.06,1.17l-15.16,289.6l20.25,0l2.43,-149.58l73.52,-113.72l-73.34,102.48z"/>
<path android:fillColor="#f2f2f2" android:pathData="M1120.59,404.97c0,123.61 -73.48,166.77 -164.13,166.77s-164.13,-43.16 -164.13,-166.77S956.46,124.11 956.46,124.11 1120.59,281.36 1120.59,404.97Z"/>
<path android:fillColor="#3f3d56" android:pathData="M950.48,552.83l1.68,-103.45l69.96,-127.98l-69.69,111.75l0.76,-46.51l48.21,-92.6l-48.01,80.29l0,0l1.36,-83.66l51.63,-73.72l-51.42,60.56l0.85,-153.4l-5.34,203.08l0.44,-8.38l-52.49,-80.35l51.65,96.43l-4.89,93.43l-0.15,-2.48l-60.51,-84.55l60.33,93.31l-0.61,11.68l-0.11,0.18l0.05,0.96l-12.41,237.05l16.58,0l1.99,-122.44l60.18,-93.08l-60.03,83.88z"/>
<path android:fillColor="#3f3d56" android:pathData="M0,680.48a554.59,28.03 0,1 0,1109.18 0a554.59,28.03 0,1 0,-1109.18 0z"/>
<path android:fillColor="#3f3d56" android:pathData="M797.46,726.8a94.99,4.8 0,1 0,189.98 0a94.99,4.8 0,1 0,-189.98 0z"/>
<path android:fillColor="#3f3d56" android:pathData="M453.73,773.11a94.99,4.8 0,1 0,189.98 0a94.99,4.8 0,1 0,-189.98 0z"/>
<path android:fillColor="#3f3d56" android:pathData="M70.93,734.28a217.01,10.97 0,1 0,434.03 0a217.01,10.97 0,1 0,-434.03 0z"/>
<path android:fillColor="#2f2e41" android:pathData="M97.08,566.27m-79,0a79,79 0,1 1,158 0a79,79 0,1 1,-158 0"/>
<path android:fillColor="#2f2e41" android:pathData="M60.36,627.84l24,0.28l-0.51,43l-24,-0.28z"/>
<path android:fillColor="#2f2e41" android:pathData="M108.35,628.41l24,0.28l-0.51,43l-24,-0.28z"/>
<path android:fillColor="#2f2e41" android:pathData="M79.75,679.07a7.5,20 90.68,1 0,0.18 -15a7.5,20 90.68,1 0,-0.18 15z"/>
<path android:fillColor="#2f2e41" android:pathData="M127.76,678.64a7.5,20 90.68,1 0,0.18 -15a7.5,20 90.68,1 0,-0.18 15z"/>
<path android:fillColor="#fff" android:pathData="M99.32,546.29m-27,0a27,27 0,1 1,54 0a27,27 0,1 1,-54 0"/>
<path android:fillColor="#3f3d56" android:pathData="M99.32,546.29m-9,0a9,9 0,1 1,18 0a9,9 0,1 1,-18 0"/>
<path android:fillColor="@color/colorPrimary" android:pathData="M21.32,491.9c-6.04,-28.64 14.69,-57.26 46.3,-63.93s62.14,11.14 68.18,39.78 -14.98,38.93 -46.59,45.6S27.36,520.55 21.32,491.9Z"/>
<path android:fillColor="@color/colorPrimary" android:pathData="M217.59,610.34c0,55.08 -32.74,74.31 -73.13,74.31q-1.4,0 -2.8,-0.03c-1.87,-0.04 -3.72,-0.13 -5.56,-0.25 -36.45,-2.58 -64.77,-22.8 -64.77,-74.02 0,-53.01 67.74,-119.9 72.83,-124.85l0.01,-0.01c0.2,-0.19 0.29,-0.29 0.29,-0.29S217.59,555.27 217.59,610.34Z"/>
<path android:fillColor="#3f3d56" android:pathData="M141.8,676.22l26.75,-37.37 -26.81,41.48 -0.07,4.29c-1.87,-0.04 -3.72,-0.13 -5.56,-0.25l2.88,-55.1 -0.02,-0.43 0.05,-0.08 0.27,-5.2 -26.88,-41.58 26.97,37.68 0.06,1.11 2.18,-41.63 -23.01,-42.97 23.29,35.66 2.27,-86.31 0.01,-0.29v0.29l-0.38,68.06 22.91,-26.98 -23,32.85 -0.61,37.28L164.48,560.92l-21.48,41.26 -0.34,20.72 31.06,-49.79 -31.17,57.02Z"/>
<path android:fillColor="#2f2e41" android:pathData="M712.49,565.42m-79,0a79,79 0,1 1,158 0a79,79 0,1 1,-158 0"/>
<path android:fillColor="#2f2e41" android:pathData="M696.29,635.26l22.94,-7.05l12.63,41.1l-22.94,7.05z"/>
<path android:fillColor="#2f2e41" android:pathData="M742.17,621.16l22.94,-7.05l12.63,41.1l-22.94,7.05z"/>
<path android:fillColor="#2f2e41" android:pathData="M709.07,676.84a7.5,20 72.92,1 0,38.24 -11.75a7.5,20 72.92,1 0,-38.24 11.75z"/>
<path android:fillColor="#2f2e41" android:pathData="M754.65,661.78a7.5,20 72.92,1 0,38.24 -11.75a7.5,20 72.92,1 0,-38.24 11.75z"/>
<path android:fillColor="#fff" android:pathData="M708.52,545.71m-27,0a27,27 0,1 1,54 0a27,27 0,1 1,-54 0"/>
<path android:fillColor="#3f3d56" android:pathData="M708.52,545.71m-9,0a9,9 0,1 1,18 0a9,9 0,1 1,-18 0"/>
<path android:fillColor="@color/colorPrimary" android:pathData="M617.65,517.7c-14.49,-25.43 -3.48,-59.02 24.59,-75.01s62.58,-8.34 77.07,17.09 -2.39,41.64 -30.46,57.64S632.14,543.13 617.65,517.7Z"/>
<path android:fillColor="@color/colorPrimary" android:pathData="M571.59,600.26c0,50.56 -30.05,68.21 -67.13,68.21q-1.29,0 -2.57,-0.03c-1.72,-0.04 -3.42,-0.12 -5.1,-0.23 -33.46,-2.37 -59.46,-20.93 -59.46,-67.95 0,-48.66 62.18,-110.06 66.85,-114.6l0.01,-0.01c0.18,-0.18 0.27,-0.26 0.27,-0.26S571.59,549.7 571.59,600.26Z"/>
<path android:fillColor="#3f3d56" android:pathData="M502.02,660.73l24.55,-34.31 -24.61,38.07 -0.07,3.94c-1.72,-0.04 -3.42,-0.12 -5.1,-0.23l2.65,-50.58 -0.02,-0.39 0.05,-0.07 0.25,-4.78 -24.68,-38.17 24.75,34.59 0.06,1.01 2,-38.22 -21.13,-39.44L502.1,564.89l2.08,-79.23 0.01,-0.27v0.26l-0.35,62.48 21.03,-24.77 -21.12,30.15 -0.56,34.22 19.64,-32.84 -19.72,37.87 -0.31,19.02 28.51,-45.71 -28.61,52.34Z"/>
<path android:fillColor="@color/colorPrimary" android:pathData="M835.59,621.34c0,55.08 -32.74,74.31 -73.13,74.31q-1.4,0 -2.8,-0.03c-1.87,-0.04 -3.72,-0.13 -5.56,-0.25 -36.45,-2.58 -64.77,-22.8 -64.77,-74.02 0,-53.01 67.74,-119.9 72.83,-124.85l0.01,-0.01c0.2,-0.19 0.29,-0.29 0.29,-0.29S835.59,566.27 835.59,621.34Z"/>
<path android:fillColor="#3f3d56" android:pathData="M759.8,687.22l26.75,-37.37 -26.81,41.48 -0.07,4.29c-1.87,-0.04 -3.72,-0.13 -5.56,-0.25l2.88,-55.1 -0.02,-0.43 0.05,-0.08 0.27,-5.2L730.4,592.97l26.97,37.68 0.06,1.11 2.18,-41.63 -23.01,-42.97 23.29,35.66 2.27,-86.31 0.01,-0.29v0.29l-0.38,68.06 22.91,-26.98 -23,32.85 -0.61,37.28L782.48,571.92l-21.48,41.26 -0.34,20.72 31.06,-49.79 -31.17,57.02Z"/>
<path android:fillColor="#2f2e41" android:pathData="M676.5,606.98a12.4,39.5 115.37,1 0,10.63 -22.41a12.4,39.5 115.37,1 0,-10.63 22.41z"/>
<path android:fillColor="#2f2e41" android:pathData="M68.2,602.29a12.4,39.5 111.84,1 0,9.23 -23.02a12.4,39.5 111.84,1 0,-9.23 23.02z"/>
</vector>

View File

@ -26,12 +26,12 @@
<ImageView <ImageView
android:id="@+id/messageStateImageView" android:id="@+id/messageStateImageView"
android:layout_width="@dimen/item_height" android:layout_width="64dp"
android:layout_height="@dimen/item_height" android:layout_height="64dp"
android:adjustViewBounds="true"
android:layout_above="@id/messageStateTextView" android:layout_above="@id/messageStateTextView"
android:layout_centerHorizontal="true" android:layout_centerHorizontal="true"
android:src="@drawable/ic_logo" android:src="@drawable/ic_logo"
android:tint="@color/colorPrimary"
/> />
<TextView <TextView

View File

@ -343,4 +343,5 @@
tools:override="true">M3.27,4.27L19.74,20.74</string> tools:override="true">M3.27,4.27L19.74,20.74</string>
<string name="nc_search_for_more">Search for more participants</string> <string name="nc_search_for_more">Search for more participants</string>
<string name="nc_new_group">New group</string> <string name="nc_new_group">New group</string>
<string name="nc_search_empty_contacts">Where did they all hide?</string>
</resources> </resources>