Эх сурвалжийг харах

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

plugin: 'kotlin-android-extensions' deprecrated
Andy Scherzinger 4 жил өмнө
parent
commit
dd3c8b4363

+ 0 - 1
build.gradle

@@ -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'

+ 11 - 8
src/main/java/com/nextcloud/client/errorhandling/ShowErrorActivity.kt

@@ -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)
+
+        binding.textViewError.text = intent.getStringExtra(EXTRA_ERROR_TEXT)
 
-        setSupportActionBar(toolbar)
+        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)
     }

+ 14 - 5
src/main/java/com/nextcloud/client/etm/pages/EtmAccountsFragment.kt

@@ -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
+    }
 }

+ 13 - 3
src/main/java/com/nextcloud/client/etm/pages/EtmMigrations.kt

@@ -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
+    }
 }

+ 14 - 4
src/main/java/com/nextcloud/client/etm/pages/EtmPreferencesFragment.kt

@@ -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
+    }
 }

+ 42 - 31
src/main/java/com/nextcloud/ui/ChooseAccountDialogFragment.kt

@@ -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
-
-        if (newStatus.message.isNullOrBlank()) {
-            status.text = ""
-            status.visibility = View.GONE
-        } else {
-            status.text = newStatus.message
-            status.visibility = View.VISIBLE
+        binding.currentAccount.ticker.background = null
+        binding.currentAccount.ticker.setImageDrawable(StatusDrawable(newStatus, size.toFloat(), context))
+        binding.currentAccount.ticker.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
+    }
 }

+ 47 - 48
src/main/java/com/nextcloud/ui/SetStatusDialogFragment.kt

@@ -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()
     }
 }

+ 7 - 4
src/main/res/layout/activity_show_error.xml

@@ -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"

+ 1 - 2
src/main/res/layout/toolbar_standard.xml

@@ -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"