Merge pull request #7620 from nextcloud/kotlin-android-extensions

plugin: 'kotlin-android-extensions' deprecrated
This commit is contained in:
Andy Scherzinger 2021-03-02 10:22:48 +01:00 committed by GitHub
commit dd3c8b4363
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 148 additions and 105 deletions

View File

@ -31,7 +31,6 @@ buildscript {
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'checkstyle'
apply plugin: 'pmd'

View File

@ -28,27 +28,30 @@ import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.google.android.material.snackbar.Snackbar
import com.owncloud.android.R
import com.owncloud.android.databinding.ActivityShowErrorBinding
import com.owncloud.android.utils.ClipboardUtil
import com.owncloud.android.utils.DisplayUtils
import kotlinx.android.synthetic.main.activity_show_error.*
import kotlinx.android.synthetic.main.toolbar_standard.*
class ShowErrorActivity : AppCompatActivity() {
private lateinit var binding: ActivityShowErrorBinding
companion object {
const val EXTRA_ERROR_TEXT = "error"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_show_error)
text_view_error.text = intent.getStringExtra(EXTRA_ERROR_TEXT)
binding = ActivityShowErrorBinding.inflate(layoutInflater)
setContentView(binding.root)
setSupportActionBar(toolbar)
binding.textViewError.text = intent.getStringExtra(EXTRA_ERROR_TEXT)
setSupportActionBar(binding.toolbarInclude.toolbar)
supportActionBar!!.title = createErrorTitle()
val snackbar = DisplayUtils.createSnackbar(
error_page_container,
binding.errorPageContainer,
R.string.error_report_issue_text,
Snackbar.LENGTH_INDEFINITE
)
@ -60,7 +63,7 @@ class ShowErrorActivity : AppCompatActivity() {
private fun createErrorTitle() = String.format(getString(R.string.error_crash_title), getString(R.string.app_name))
private fun reportIssue() {
ClipboardUtil.copyToClipboard(this, text_view_error.text.toString(), false)
ClipboardUtil.copyToClipboard(this, binding.textViewError.text.toString(), false)
val issueLink = getString(R.string.report_issue_link)
if (issueLink.isNotEmpty()) {
val uriUrl = Uri.parse(issueLink)
@ -85,7 +88,7 @@ class ShowErrorActivity : AppCompatActivity() {
private fun onClickedShare() {
val intent = Intent(Intent.ACTION_SEND)
intent.putExtra(Intent.EXTRA_SUBJECT, createErrorTitle())
intent.putExtra(Intent.EXTRA_TEXT, text_view_error.text)
intent.putExtra(Intent.EXTRA_TEXT, binding.textViewError.text)
intent.type = "text/plain"
startActivity(intent)
}

View File

@ -29,10 +29,11 @@ import android.view.View
import android.view.ViewGroup
import com.nextcloud.client.etm.EtmBaseFragment
import com.owncloud.android.R
import kotlinx.android.synthetic.main.fragment_etm_accounts.*
import kotlinx.android.synthetic.main.fragment_etm_preferences.*
import com.owncloud.android.databinding.FragmentEtmAccountsBinding
class EtmAccountsFragment : EtmBaseFragment() {
private var _binding: FragmentEtmAccountsBinding? = null
private val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -40,7 +41,9 @@ class EtmAccountsFragment : EtmBaseFragment() {
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_etm_accounts, container, false)
_binding = FragmentEtmAccountsBinding.inflate(inflater, container, false)
return binding.root
}
override fun onResume() {
@ -52,7 +55,7 @@ class EtmAccountsFragment : EtmBaseFragment() {
builder.append("\t${it.key}: ${it.value}\n")
}
}
etm_accounts_text.text = builder.toString()
binding.etmAccountsText.text = builder.toString()
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
@ -72,8 +75,14 @@ class EtmAccountsFragment : EtmBaseFragment() {
private fun onClickedShare() {
val intent = Intent(Intent.ACTION_SEND)
intent.putExtra(Intent.EXTRA_SUBJECT, "Nextcloud accounts information")
intent.putExtra(Intent.EXTRA_TEXT, etm_accounts_text.text)
intent.putExtra(Intent.EXTRA_TEXT, binding.etmAccountsText.text)
intent.type = "text/plain"
startActivity(intent)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@ -9,10 +9,12 @@ import android.view.View
import android.view.ViewGroup
import com.nextcloud.client.etm.EtmBaseFragment
import com.owncloud.android.R
import kotlinx.android.synthetic.main.fragment_etm_migrations.*
import com.owncloud.android.databinding.FragmentEtmMigrationsBinding
import java.util.Locale
class EtmMigrations : EtmBaseFragment() {
private var _binding: FragmentEtmMigrationsBinding? = null
private val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -20,7 +22,9 @@ class EtmMigrations : EtmBaseFragment() {
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_etm_migrations, container, false)
_binding = FragmentEtmMigrationsBinding.inflate(inflater, container, false)
return binding.root
}
override fun onResume() {
@ -47,7 +51,7 @@ class EtmMigrations : EtmBaseFragment() {
}
builder.append(" - ${it.id} ${it.description} - $migrationStatus\n")
}
etm_migrations_text.text = builder.toString()
binding.etmMigrationsText.text = builder.toString()
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
@ -68,4 +72,10 @@ class EtmMigrations : EtmBaseFragment() {
vm.clearMigrations()
showStatus()
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@ -29,9 +29,11 @@ import android.view.View
import android.view.ViewGroup
import com.nextcloud.client.etm.EtmBaseFragment
import com.owncloud.android.R
import kotlinx.android.synthetic.main.fragment_etm_preferences.*
import com.owncloud.android.databinding.FragmentEtmPreferencesBinding
class EtmPreferencesFragment : EtmBaseFragment() {
private var _binding: FragmentEtmPreferencesBinding? = null
private val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -39,14 +41,16 @@ class EtmPreferencesFragment : EtmBaseFragment() {
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_etm_preferences, container, false)
_binding = FragmentEtmPreferencesBinding.inflate(inflater, container, false)
return binding.root
}
override fun onResume() {
super.onResume()
val builder = StringBuilder()
vm.preferences.forEach { builder.append("${it.key}: ${it.value}\n") }
etm_preferences_text.text = builder
binding.etmPreferencesText.text = builder
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
@ -66,8 +70,14 @@ class EtmPreferencesFragment : EtmBaseFragment() {
private fun onClickedShare() {
val intent = Intent(Intent.ACTION_SEND)
intent.putExtra(Intent.EXTRA_SUBJECT, "Nextcloud preferences")
intent.putExtra(Intent.EXTRA_TEXT, etm_preferences_text.text)
intent.putExtra(Intent.EXTRA_TEXT, binding.etmPreferencesText.text)
intent.type = "text/plain"
startActivity(intent)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@ -37,6 +37,7 @@ import com.nextcloud.client.account.UserAccountManager
import com.nextcloud.client.di.Injectable
import com.nextcloud.client.network.ClientFactory
import com.owncloud.android.R
import com.owncloud.android.databinding.DialogChooseAccountBinding
import com.owncloud.android.datamodel.FileDataStorageManager
import com.owncloud.android.lib.resources.users.Status
import com.owncloud.android.ui.StatusDrawable
@ -49,8 +50,6 @@ import com.owncloud.android.utils.DisplayUtils
import com.owncloud.android.utils.DisplayUtils.AvatarGenerationListener
import com.owncloud.android.utils.theme.ThemeColorUtils
import com.owncloud.android.utils.theme.ThemeDrawableUtils
import kotlinx.android.synthetic.main.account_item.*
import kotlinx.android.synthetic.main.dialog_choose_account.*
import java.util.ArrayList
import javax.inject.Inject
@ -68,6 +67,9 @@ class ChooseAccountDialogFragment :
private lateinit var accountManager: UserAccountManager
private var currentStatus: Status? = null
private var _binding: DialogChooseAccountBinding? = null
private val binding get() = _binding!!
@Inject
lateinit var clientFactory: ClientFactory
@ -80,9 +82,11 @@ class ChooseAccountDialogFragment :
@SuppressLint("InflateParams")
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
dialogView = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_choose_account, null)
_binding = DialogChooseAccountBinding.inflate(LayoutInflater.from(requireContext()))
dialogView = binding.root
return MaterialAlertDialogBuilder(requireContext())
.setView(dialogView)
.setView(binding.root)
.create()
}
@ -92,27 +96,27 @@ class ChooseAccountDialogFragment :
currentUser?.let { user ->
// Defining user picture
user_icon.tag = user.accountName
binding.currentAccount.userIcon.tag = user.accountName
DisplayUtils.setAvatar(
user,
this,
resources.getDimension(R.dimen.list_item_avatar_icon_radius),
resources,
user_icon,
binding.currentAccount.userIcon,
context
)
// Defining user texts, accounts, etc.
user_name.text = user.toOwnCloudAccount().displayName
ticker.visibility = View.GONE
account.text = user.accountName
binding.currentAccount.userName.text = user.toOwnCloudAccount().displayName
binding.currentAccount.ticker.visibility = View.GONE
binding.currentAccount.account.text = user.accountName
// Defining user right indicator
val icon = ThemeDrawableUtils.tintDrawable(
ContextCompat.getDrawable(requireContext(), R.drawable.ic_check_circle),
ThemeColorUtils.primaryColor(requireContext(), true)
)
account_menu.setImageDrawable(icon)
binding.currentAccount.accountMenu.setImageDrawable(icon)
// Creating adapter for accounts list
val adapter = UserListAdapter(
@ -123,20 +127,21 @@ class ChooseAccountDialogFragment :
false,
false
)
accounts_list.adapter = adapter
binding.accountsList.adapter = adapter
// Creating listeners for quick-actions
current_account.setOnClickListener {
binding.currentAccount.root.setOnClickListener {
dismiss()
}
add_account.setOnClickListener {
binding.addAccount.setOnClickListener {
(activity as DrawerActivity).openAddAccount()
}
manage_accounts.setOnClickListener {
binding.manageAccounts.setOnClickListener {
(activity as DrawerActivity).openManageAccounts()
}
set_status.setOnClickListener {
binding.setStatus.setOnClickListener {
val setStatusDialog = SetStatusDialogFragment.newInstance(accountManager.user, currentStatus)
setStatusDialog.show((activity as DrawerActivity).supportFragmentManager, "fragment_set_status")
@ -147,14 +152,14 @@ class ChooseAccountDialogFragment :
.getCapability(user)
if (capability.userStatus.isTrue) {
statusView.visibility = View.VISIBLE
binding.statusView.visibility = View.VISIBLE
}
RetrieveStatusAsyncTask(user, this, clientFactory).execute()
}
}
private fun getAccountListItems(): List<UserListItem>? {
private fun getAccountListItems(): List<UserListItem> {
val users = accountManager.allUsers
val adapterUserList: MutableList<UserListItem> = ArrayList(users.size)
// Remove the current account from the adapter to display only other accounts
@ -179,7 +184,7 @@ class ChooseAccountDialogFragment :
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
return dialogView
}
@ -188,9 +193,7 @@ class ChooseAccountDialogFragment :
}
override fun avatarGenerated(avatarDrawable: Drawable?, callContext: Any?) {
if (user_icon != null) {
user_icon.setImageDrawable(avatarDrawable)
}
binding.currentAccount.userIcon.setImageDrawable(avatarDrawable)
}
override fun onAccountClicked(user: User?) {
@ -205,18 +208,26 @@ class ChooseAccountDialogFragment :
currentStatus = newStatus
val size = DisplayUtils.convertDpToPixel(STATUS_SIZE_IN_DP, context)
ticker.background = null
ticker.setImageDrawable(StatusDrawable(newStatus, size.toFloat(), context))
ticker.visibility = View.VISIBLE
binding.currentAccount.ticker.background = null
binding.currentAccount.ticker.setImageDrawable(StatusDrawable(newStatus, size.toFloat(), context))
binding.currentAccount.ticker.visibility = View.VISIBLE
if (newStatus.message.isNullOrBlank()) {
status.text = ""
status.visibility = View.GONE
} else {
status.text = newStatus.message
status.visibility = View.VISIBLE
binding.currentAccount.status.let {
if (newStatus.message.isNullOrBlank()) {
it.text = ""
it.visibility = View.GONE
} else {
it.text = newStatus.message
it.visibility = View.VISIBLE
}
}
view?.invalidate()
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@ -59,7 +59,6 @@ import com.owncloud.android.utils.theme.ThemeTextInputUtils
import com.vanniktech.emoji.EmojiManager
import com.vanniktech.emoji.EmojiPopup
import com.vanniktech.emoji.google.GoogleEmojiProvider
import kotlinx.android.synthetic.main.dialog_set_status.*
import java.util.ArrayList
import java.util.Calendar
import java.util.Locale
@ -140,23 +139,23 @@ class SetStatusDialogFragment :
accountManager = (activity as BaseActivity).userAccountManager
currentStatus?.let {
emoji.setText(it.icon)
binding.emoji.setText(it.icon)
binding.customStatusInput.text?.clear()
binding.customStatusInput.setText(it.message)
visualizeStatus(it.status)
if (it.clearAt > 0) {
clearStatusAfterSpinner.visibility = View.GONE
remainingClearTime.apply {
clearStatusMessageTextView.text = getString(R.string.clear_status_message)
binding.clearStatusAfterSpinner.visibility = View.GONE
binding.remainingClearTime.apply {
binding.clearStatusMessageTextView.text = getString(R.string.clear_status_message)
visibility = View.VISIBLE
text = DisplayUtils.getRelativeTimestamp(context, it.clearAt * ONE_SECOND_IN_MILLIS, true)
.toString()
.decapitalize(Locale.getDefault())
setOnClickListener {
visibility = View.GONE
clearStatusAfterSpinner.visibility = View.VISIBLE
clearStatusMessageTextView.text = getString(R.string.clear_status_message_after)
binding.clearStatusAfterSpinner.visibility = View.VISIBLE
binding.clearStatusMessageTextView.text = getString(R.string.clear_status_message_after)
}
}
}
@ -166,30 +165,30 @@ class SetStatusDialogFragment :
if (this::predefinedStatus.isInitialized) {
adapter.list = predefinedStatus
}
predefinedStatusList.adapter = adapter
predefinedStatusList.layoutManager = LinearLayoutManager(context)
binding.predefinedStatusList.adapter = adapter
binding.predefinedStatusList.layoutManager = LinearLayoutManager(context)
onlineStatus.setOnClickListener { setStatus(StatusType.ONLINE) }
dndStatus.setOnClickListener { setStatus(StatusType.DND) }
awayStatus.setOnClickListener { setStatus(StatusType.AWAY) }
invisibleStatus.setOnClickListener { setStatus(StatusType.INVISIBLE) }
binding.onlineStatus.setOnClickListener { setStatus(StatusType.ONLINE) }
binding.dndStatus.setOnClickListener { setStatus(StatusType.DND) }
binding.awayStatus.setOnClickListener { setStatus(StatusType.AWAY) }
binding.invisibleStatus.setOnClickListener { setStatus(StatusType.INVISIBLE) }
clearStatus.setOnClickListener { clearStatus() }
setStatus.setOnClickListener { setStatusMessage() }
emoji.setOnClickListener { openEmojiPopup() }
binding.clearStatus.setOnClickListener { clearStatus() }
binding.setStatus.setOnClickListener { setStatusMessage() }
binding.emoji.setOnClickListener { openEmojiPopup() }
popup = EmojiPopup.Builder
.fromRootView(view)
.setOnEmojiClickListener { _, _ ->
popup.dismiss()
emoji.clearFocus()
binding.emoji.clearFocus()
val imm: InputMethodManager = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as
InputMethodManager
imm.hideSoftInputFromWindow(emoji.windowToken, 0)
imm.hideSoftInputFromWindow(binding.emoji.windowToken, 0)
}
.build(emoji)
emoji.disableKeyboardInput(popup)
emoji.forceSingleEmoji()
.build(binding.emoji)
binding.emoji.disableKeyboardInput(popup)
binding.emoji.forceSingleEmoji()
val adapter = ArrayAdapter<String>(requireContext(), android.R.layout.simple_spinner_item)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
@ -200,7 +199,7 @@ class SetStatusDialogFragment :
adapter.add(getString(R.string.today))
adapter.add(getString(R.string.thisWeek))
clearStatusAfterSpinner.apply {
binding.clearStatusAfterSpinner.apply {
this.adapter = adapter
onItemSelectedListener = object : OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
@ -213,8 +212,8 @@ class SetStatusDialogFragment :
}
}
clearStatus.setTextColor(ThemeColorUtils.primaryColor(context, true))
ThemeButtonUtils.colorPrimaryButton(setStatus, context)
binding.clearStatus.setTextColor(ThemeColorUtils.primaryColor(context, true))
ThemeButtonUtils.colorPrimaryButton(binding.setStatus, context)
ThemeTextInputUtils.colorTextInput(
binding.customStatusInputContainer,
binding.customStatusInput,
@ -327,19 +326,19 @@ class SetStatusDialogFragment :
when (statusType) {
StatusType.ONLINE -> {
clearTopStatus()
onlineStatus.setBackgroundColor(ThemeColorUtils.primaryColor(context))
binding.onlineStatus.setBackgroundColor(ThemeColorUtils.primaryColor(context))
}
StatusType.AWAY -> {
clearTopStatus()
awayStatus.setBackgroundColor(ThemeColorUtils.primaryColor(context))
binding.awayStatus.setBackgroundColor(ThemeColorUtils.primaryColor(context))
}
StatusType.DND -> {
clearTopStatus()
dndStatus.setBackgroundColor(ThemeColorUtils.primaryColor(context))
binding.dndStatus.setBackgroundColor(ThemeColorUtils.primaryColor(context))
}
StatusType.INVISIBLE -> {
clearTopStatus()
invisibleStatus.setBackgroundColor(ThemeColorUtils.primaryColor(context))
binding.invisibleStatus.setBackgroundColor(ThemeColorUtils.primaryColor(context))
}
else -> clearTopStatus()
}
@ -348,10 +347,10 @@ class SetStatusDialogFragment :
private fun clearTopStatus() {
context?.let {
val grey = it.resources.getColor(R.color.grey_200)
onlineStatus.setBackgroundColor(grey)
awayStatus.setBackgroundColor(grey)
dndStatus.setBackgroundColor(grey)
invisibleStatus.setBackgroundColor(grey)
binding.onlineStatus.setBackgroundColor(grey)
binding.awayStatus.setBackgroundColor(grey)
binding.dndStatus.setBackgroundColor(grey)
binding.invisibleStatus.setBackgroundColor(grey)
}
}
@ -369,8 +368,8 @@ class SetStatusDialogFragment :
} else {
asyncRunner.postQuickTask(
SetUserDefinedCustomStatusTask(
customStatusInput.text.toString(),
emoji.text.toString(),
binding.customStatusInput.text.toString(),
binding.emoji.text.toString(),
clearAt,
accountManager.currentOwnCloudAccount?.savedAccount,
context
@ -409,39 +408,39 @@ class SetStatusDialogFragment :
override fun onClick(predefinedStatus: PredefinedStatus) {
selectedPredefinedMessageId = predefinedStatus.id
clearAt = clearAtToUnixTime(predefinedStatus.clearAt)
emoji.setText(predefinedStatus.icon)
binding.emoji.setText(predefinedStatus.icon)
binding.customStatusInput.text?.clear()
binding.customStatusInput.text?.append(predefinedStatus.message)
remainingClearTime.visibility = View.GONE
clearStatusAfterSpinner.visibility = View.VISIBLE
clearStatusMessageTextView.text = getString(R.string.clear_status_message_after)
binding.remainingClearTime.visibility = View.GONE
binding.clearStatusAfterSpinner.visibility = View.VISIBLE
binding.clearStatusMessageTextView.text = getString(R.string.clear_status_message_after)
if (predefinedStatus.clearAt == null) {
clearStatusAfterSpinner.setSelection(0)
binding.clearStatusAfterSpinner.setSelection(0)
} else {
val clearAt = predefinedStatus.clearAt!!
if (clearAt.type.equals("period")) {
when (clearAt.time) {
"1800" -> clearStatusAfterSpinner.setSelection(POS_HALF_AN_HOUR)
"3600" -> clearStatusAfterSpinner.setSelection(POS_AN_HOUR)
"14400" -> clearStatusAfterSpinner.setSelection(POS_FOUR_HOURS)
else -> clearStatusAfterSpinner.setSelection(POS_DONT_CLEAR)
"1800" -> binding.clearStatusAfterSpinner.setSelection(POS_HALF_AN_HOUR)
"3600" -> binding.clearStatusAfterSpinner.setSelection(POS_AN_HOUR)
"14400" -> binding.clearStatusAfterSpinner.setSelection(POS_FOUR_HOURS)
else -> binding.clearStatusAfterSpinner.setSelection(POS_DONT_CLEAR)
}
} else if (clearAt.type.equals("end-of")) {
when (clearAt.time) {
"day" -> clearStatusAfterSpinner.setSelection(POS_TODAY)
"week" -> clearStatusAfterSpinner.setSelection(POS_END_OF_WEEK)
else -> clearStatusAfterSpinner.setSelection(POS_DONT_CLEAR)
"day" -> binding.clearStatusAfterSpinner.setSelection(POS_TODAY)
"week" -> binding.clearStatusAfterSpinner.setSelection(POS_END_OF_WEEK)
else -> binding.clearStatusAfterSpinner.setSelection(POS_DONT_CLEAR)
}
}
}
setClearStatusAfterValue(clearStatusAfterSpinner.selectedItemPosition)
setClearStatusAfterValue(binding.clearStatusAfterSpinner.selectedItemPosition)
}
@VisibleForTesting
fun setPredefinedStatus(predefinedStatus: ArrayList<PredefinedStatus>) {
adapter.list = predefinedStatus
predefinedStatusList.adapter?.notifyDataSetChanged()
binding.predefinedStatusList.adapter?.notifyDataSetChanged()
}
}

View File

@ -18,12 +18,15 @@
-->
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.errorhandling.ShowErrorActivity">
android:layout_height="match_parent">
<include layout="@layout/toolbar_standard" />
<include layout="@layout/toolbar_standard"
android:id="@+id/toolbar_include"/>
<include
android:id="@+id/empty_list"
layout="@layout/empty_list" />
<ScrollView
android:id="@+id/error_page_container"

View File

@ -24,8 +24,7 @@
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/bg_default"
tools:viewBindingIgnore="true">
android:background="@color/bg_default">
<FrameLayout
android:layout_width="match_parent"