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: 'com.android.application'
apply plugin: 'kotlin-android' apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-kapt'
apply plugin: 'checkstyle' apply plugin: 'checkstyle'
apply plugin: 'pmd' apply plugin: 'pmd'

View File

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

View File

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

View File

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

View File

@ -29,9 +29,11 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import com.nextcloud.client.etm.EtmBaseFragment import com.nextcloud.client.etm.EtmBaseFragment
import com.owncloud.android.R import com.owncloud.android.R
import kotlinx.android.synthetic.main.fragment_etm_preferences.* import com.owncloud.android.databinding.FragmentEtmPreferencesBinding
class EtmPreferencesFragment : EtmBaseFragment() { class EtmPreferencesFragment : EtmBaseFragment() {
private var _binding: FragmentEtmPreferencesBinding? = null
private val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -39,14 +41,16 @@ class EtmPreferencesFragment : EtmBaseFragment() {
} }
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { 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() { override fun onResume() {
super.onResume() super.onResume()
val builder = StringBuilder() val builder = StringBuilder()
vm.preferences.forEach { builder.append("${it.key}: ${it.value}\n") } 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) { override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
@ -66,8 +70,14 @@ class EtmPreferencesFragment : EtmBaseFragment() {
private fun onClickedShare() { private fun onClickedShare() {
val intent = Intent(Intent.ACTION_SEND) val intent = Intent(Intent.ACTION_SEND)
intent.putExtra(Intent.EXTRA_SUBJECT, "Nextcloud preferences") 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" intent.type = "text/plain"
startActivity(intent) 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.di.Injectable
import com.nextcloud.client.network.ClientFactory import com.nextcloud.client.network.ClientFactory
import com.owncloud.android.R import com.owncloud.android.R
import com.owncloud.android.databinding.DialogChooseAccountBinding
import com.owncloud.android.datamodel.FileDataStorageManager import com.owncloud.android.datamodel.FileDataStorageManager
import com.owncloud.android.lib.resources.users.Status import com.owncloud.android.lib.resources.users.Status
import com.owncloud.android.ui.StatusDrawable 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.DisplayUtils.AvatarGenerationListener
import com.owncloud.android.utils.theme.ThemeColorUtils import com.owncloud.android.utils.theme.ThemeColorUtils
import com.owncloud.android.utils.theme.ThemeDrawableUtils 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 java.util.ArrayList
import javax.inject.Inject import javax.inject.Inject
@ -68,6 +67,9 @@ class ChooseAccountDialogFragment :
private lateinit var accountManager: UserAccountManager private lateinit var accountManager: UserAccountManager
private var currentStatus: Status? = null private var currentStatus: Status? = null
private var _binding: DialogChooseAccountBinding? = null
private val binding get() = _binding!!
@Inject @Inject
lateinit var clientFactory: ClientFactory lateinit var clientFactory: ClientFactory
@ -80,9 +82,11 @@ class ChooseAccountDialogFragment :
@SuppressLint("InflateParams") @SuppressLint("InflateParams")
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { 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()) return MaterialAlertDialogBuilder(requireContext())
.setView(dialogView) .setView(binding.root)
.create() .create()
} }
@ -92,27 +96,27 @@ class ChooseAccountDialogFragment :
currentUser?.let { user -> currentUser?.let { user ->
// Defining user picture // Defining user picture
user_icon.tag = user.accountName binding.currentAccount.userIcon.tag = user.accountName
DisplayUtils.setAvatar( DisplayUtils.setAvatar(
user, user,
this, this,
resources.getDimension(R.dimen.list_item_avatar_icon_radius), resources.getDimension(R.dimen.list_item_avatar_icon_radius),
resources, resources,
user_icon, binding.currentAccount.userIcon,
context context
) )
// Defining user texts, accounts, etc. // Defining user texts, accounts, etc.
user_name.text = user.toOwnCloudAccount().displayName binding.currentAccount.userName.text = user.toOwnCloudAccount().displayName
ticker.visibility = View.GONE binding.currentAccount.ticker.visibility = View.GONE
account.text = user.accountName binding.currentAccount.account.text = user.accountName
// Defining user right indicator // Defining user right indicator
val icon = ThemeDrawableUtils.tintDrawable( val icon = ThemeDrawableUtils.tintDrawable(
ContextCompat.getDrawable(requireContext(), R.drawable.ic_check_circle), ContextCompat.getDrawable(requireContext(), R.drawable.ic_check_circle),
ThemeColorUtils.primaryColor(requireContext(), true) ThemeColorUtils.primaryColor(requireContext(), true)
) )
account_menu.setImageDrawable(icon) binding.currentAccount.accountMenu.setImageDrawable(icon)
// Creating adapter for accounts list // Creating adapter for accounts list
val adapter = UserListAdapter( val adapter = UserListAdapter(
@ -123,20 +127,21 @@ class ChooseAccountDialogFragment :
false, false,
false false
) )
accounts_list.adapter = adapter
binding.accountsList.adapter = adapter
// Creating listeners for quick-actions // Creating listeners for quick-actions
current_account.setOnClickListener { binding.currentAccount.root.setOnClickListener {
dismiss() dismiss()
} }
add_account.setOnClickListener { binding.addAccount.setOnClickListener {
(activity as DrawerActivity).openAddAccount() (activity as DrawerActivity).openAddAccount()
} }
manage_accounts.setOnClickListener { binding.manageAccounts.setOnClickListener {
(activity as DrawerActivity).openManageAccounts() (activity as DrawerActivity).openManageAccounts()
} }
set_status.setOnClickListener { binding.setStatus.setOnClickListener {
val setStatusDialog = SetStatusDialogFragment.newInstance(accountManager.user, currentStatus) val setStatusDialog = SetStatusDialogFragment.newInstance(accountManager.user, currentStatus)
setStatusDialog.show((activity as DrawerActivity).supportFragmentManager, "fragment_set_status") setStatusDialog.show((activity as DrawerActivity).supportFragmentManager, "fragment_set_status")
@ -147,14 +152,14 @@ class ChooseAccountDialogFragment :
.getCapability(user) .getCapability(user)
if (capability.userStatus.isTrue) { if (capability.userStatus.isTrue) {
statusView.visibility = View.VISIBLE binding.statusView.visibility = View.VISIBLE
} }
RetrieveStatusAsyncTask(user, this, clientFactory).execute() RetrieveStatusAsyncTask(user, this, clientFactory).execute()
} }
} }
private fun getAccountListItems(): List<UserListItem>? { private fun getAccountListItems(): List<UserListItem> {
val users = accountManager.allUsers val users = accountManager.allUsers
val adapterUserList: MutableList<UserListItem> = ArrayList(users.size) val adapterUserList: MutableList<UserListItem> = ArrayList(users.size)
// Remove the current account from the adapter to display only other accounts // 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 return dialogView
} }
@ -188,9 +193,7 @@ class ChooseAccountDialogFragment :
} }
override fun avatarGenerated(avatarDrawable: Drawable?, callContext: Any?) { override fun avatarGenerated(avatarDrawable: Drawable?, callContext: Any?) {
if (user_icon != null) { binding.currentAccount.userIcon.setImageDrawable(avatarDrawable)
user_icon.setImageDrawable(avatarDrawable)
}
} }
override fun onAccountClicked(user: User?) { override fun onAccountClicked(user: User?) {
@ -205,18 +208,26 @@ class ChooseAccountDialogFragment :
currentStatus = newStatus currentStatus = newStatus
val size = DisplayUtils.convertDpToPixel(STATUS_SIZE_IN_DP, context) val size = DisplayUtils.convertDpToPixel(STATUS_SIZE_IN_DP, context)
ticker.background = null binding.currentAccount.ticker.background = null
ticker.setImageDrawable(StatusDrawable(newStatus, size.toFloat(), context)) binding.currentAccount.ticker.setImageDrawable(StatusDrawable(newStatus, size.toFloat(), context))
ticker.visibility = View.VISIBLE binding.currentAccount.ticker.visibility = View.VISIBLE
if (newStatus.message.isNullOrBlank()) { binding.currentAccount.status.let {
status.text = "" if (newStatus.message.isNullOrBlank()) {
status.visibility = View.GONE it.text = ""
} else { it.visibility = View.GONE
status.text = newStatus.message } else {
status.visibility = View.VISIBLE it.text = newStatus.message
it.visibility = View.VISIBLE
}
} }
view?.invalidate() 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.EmojiManager
import com.vanniktech.emoji.EmojiPopup import com.vanniktech.emoji.EmojiPopup
import com.vanniktech.emoji.google.GoogleEmojiProvider import com.vanniktech.emoji.google.GoogleEmojiProvider
import kotlinx.android.synthetic.main.dialog_set_status.*
import java.util.ArrayList import java.util.ArrayList
import java.util.Calendar import java.util.Calendar
import java.util.Locale import java.util.Locale
@ -140,23 +139,23 @@ class SetStatusDialogFragment :
accountManager = (activity as BaseActivity).userAccountManager accountManager = (activity as BaseActivity).userAccountManager
currentStatus?.let { currentStatus?.let {
emoji.setText(it.icon) binding.emoji.setText(it.icon)
binding.customStatusInput.text?.clear() binding.customStatusInput.text?.clear()
binding.customStatusInput.setText(it.message) binding.customStatusInput.setText(it.message)
visualizeStatus(it.status) visualizeStatus(it.status)
if (it.clearAt > 0) { if (it.clearAt > 0) {
clearStatusAfterSpinner.visibility = View.GONE binding.clearStatusAfterSpinner.visibility = View.GONE
remainingClearTime.apply { binding.remainingClearTime.apply {
clearStatusMessageTextView.text = getString(R.string.clear_status_message) binding.clearStatusMessageTextView.text = getString(R.string.clear_status_message)
visibility = View.VISIBLE visibility = View.VISIBLE
text = DisplayUtils.getRelativeTimestamp(context, it.clearAt * ONE_SECOND_IN_MILLIS, true) text = DisplayUtils.getRelativeTimestamp(context, it.clearAt * ONE_SECOND_IN_MILLIS, true)
.toString() .toString()
.decapitalize(Locale.getDefault()) .decapitalize(Locale.getDefault())
setOnClickListener { setOnClickListener {
visibility = View.GONE visibility = View.GONE
clearStatusAfterSpinner.visibility = View.VISIBLE binding.clearStatusAfterSpinner.visibility = View.VISIBLE
clearStatusMessageTextView.text = getString(R.string.clear_status_message_after) binding.clearStatusMessageTextView.text = getString(R.string.clear_status_message_after)
} }
} }
} }
@ -166,30 +165,30 @@ class SetStatusDialogFragment :
if (this::predefinedStatus.isInitialized) { if (this::predefinedStatus.isInitialized) {
adapter.list = predefinedStatus adapter.list = predefinedStatus
} }
predefinedStatusList.adapter = adapter binding.predefinedStatusList.adapter = adapter
predefinedStatusList.layoutManager = LinearLayoutManager(context) binding.predefinedStatusList.layoutManager = LinearLayoutManager(context)
onlineStatus.setOnClickListener { setStatus(StatusType.ONLINE) } binding.onlineStatus.setOnClickListener { setStatus(StatusType.ONLINE) }
dndStatus.setOnClickListener { setStatus(StatusType.DND) } binding.dndStatus.setOnClickListener { setStatus(StatusType.DND) }
awayStatus.setOnClickListener { setStatus(StatusType.AWAY) } binding.awayStatus.setOnClickListener { setStatus(StatusType.AWAY) }
invisibleStatus.setOnClickListener { setStatus(StatusType.INVISIBLE) } binding.invisibleStatus.setOnClickListener { setStatus(StatusType.INVISIBLE) }
clearStatus.setOnClickListener { clearStatus() } binding.clearStatus.setOnClickListener { clearStatus() }
setStatus.setOnClickListener { setStatusMessage() } binding.setStatus.setOnClickListener { setStatusMessage() }
emoji.setOnClickListener { openEmojiPopup() } binding.emoji.setOnClickListener { openEmojiPopup() }
popup = EmojiPopup.Builder popup = EmojiPopup.Builder
.fromRootView(view) .fromRootView(view)
.setOnEmojiClickListener { _, _ -> .setOnEmojiClickListener { _, _ ->
popup.dismiss() popup.dismiss()
emoji.clearFocus() binding.emoji.clearFocus()
val imm: InputMethodManager = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as val imm: InputMethodManager = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as
InputMethodManager InputMethodManager
imm.hideSoftInputFromWindow(emoji.windowToken, 0) imm.hideSoftInputFromWindow(binding.emoji.windowToken, 0)
} }
.build(emoji) .build(binding.emoji)
emoji.disableKeyboardInput(popup) binding.emoji.disableKeyboardInput(popup)
emoji.forceSingleEmoji() binding.emoji.forceSingleEmoji()
val adapter = ArrayAdapter<String>(requireContext(), android.R.layout.simple_spinner_item) val adapter = ArrayAdapter<String>(requireContext(), android.R.layout.simple_spinner_item)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_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.today))
adapter.add(getString(R.string.thisWeek)) adapter.add(getString(R.string.thisWeek))
clearStatusAfterSpinner.apply { binding.clearStatusAfterSpinner.apply {
this.adapter = adapter this.adapter = adapter
onItemSelectedListener = object : OnItemSelectedListener { onItemSelectedListener = object : OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) { override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
@ -213,8 +212,8 @@ class SetStatusDialogFragment :
} }
} }
clearStatus.setTextColor(ThemeColorUtils.primaryColor(context, true)) binding.clearStatus.setTextColor(ThemeColorUtils.primaryColor(context, true))
ThemeButtonUtils.colorPrimaryButton(setStatus, context) ThemeButtonUtils.colorPrimaryButton(binding.setStatus, context)
ThemeTextInputUtils.colorTextInput( ThemeTextInputUtils.colorTextInput(
binding.customStatusInputContainer, binding.customStatusInputContainer,
binding.customStatusInput, binding.customStatusInput,
@ -327,19 +326,19 @@ class SetStatusDialogFragment :
when (statusType) { when (statusType) {
StatusType.ONLINE -> { StatusType.ONLINE -> {
clearTopStatus() clearTopStatus()
onlineStatus.setBackgroundColor(ThemeColorUtils.primaryColor(context)) binding.onlineStatus.setBackgroundColor(ThemeColorUtils.primaryColor(context))
} }
StatusType.AWAY -> { StatusType.AWAY -> {
clearTopStatus() clearTopStatus()
awayStatus.setBackgroundColor(ThemeColorUtils.primaryColor(context)) binding.awayStatus.setBackgroundColor(ThemeColorUtils.primaryColor(context))
} }
StatusType.DND -> { StatusType.DND -> {
clearTopStatus() clearTopStatus()
dndStatus.setBackgroundColor(ThemeColorUtils.primaryColor(context)) binding.dndStatus.setBackgroundColor(ThemeColorUtils.primaryColor(context))
} }
StatusType.INVISIBLE -> { StatusType.INVISIBLE -> {
clearTopStatus() clearTopStatus()
invisibleStatus.setBackgroundColor(ThemeColorUtils.primaryColor(context)) binding.invisibleStatus.setBackgroundColor(ThemeColorUtils.primaryColor(context))
} }
else -> clearTopStatus() else -> clearTopStatus()
} }
@ -348,10 +347,10 @@ class SetStatusDialogFragment :
private fun clearTopStatus() { private fun clearTopStatus() {
context?.let { context?.let {
val grey = it.resources.getColor(R.color.grey_200) val grey = it.resources.getColor(R.color.grey_200)
onlineStatus.setBackgroundColor(grey) binding.onlineStatus.setBackgroundColor(grey)
awayStatus.setBackgroundColor(grey) binding.awayStatus.setBackgroundColor(grey)
dndStatus.setBackgroundColor(grey) binding.dndStatus.setBackgroundColor(grey)
invisibleStatus.setBackgroundColor(grey) binding.invisibleStatus.setBackgroundColor(grey)
} }
} }
@ -369,8 +368,8 @@ class SetStatusDialogFragment :
} else { } else {
asyncRunner.postQuickTask( asyncRunner.postQuickTask(
SetUserDefinedCustomStatusTask( SetUserDefinedCustomStatusTask(
customStatusInput.text.toString(), binding.customStatusInput.text.toString(),
emoji.text.toString(), binding.emoji.text.toString(),
clearAt, clearAt,
accountManager.currentOwnCloudAccount?.savedAccount, accountManager.currentOwnCloudAccount?.savedAccount,
context context
@ -409,39 +408,39 @@ class SetStatusDialogFragment :
override fun onClick(predefinedStatus: PredefinedStatus) { override fun onClick(predefinedStatus: PredefinedStatus) {
selectedPredefinedMessageId = predefinedStatus.id selectedPredefinedMessageId = predefinedStatus.id
clearAt = clearAtToUnixTime(predefinedStatus.clearAt) clearAt = clearAtToUnixTime(predefinedStatus.clearAt)
emoji.setText(predefinedStatus.icon) binding.emoji.setText(predefinedStatus.icon)
binding.customStatusInput.text?.clear() binding.customStatusInput.text?.clear()
binding.customStatusInput.text?.append(predefinedStatus.message) binding.customStatusInput.text?.append(predefinedStatus.message)
remainingClearTime.visibility = View.GONE binding.remainingClearTime.visibility = View.GONE
clearStatusAfterSpinner.visibility = View.VISIBLE binding.clearStatusAfterSpinner.visibility = View.VISIBLE
clearStatusMessageTextView.text = getString(R.string.clear_status_message_after) binding.clearStatusMessageTextView.text = getString(R.string.clear_status_message_after)
if (predefinedStatus.clearAt == null) { if (predefinedStatus.clearAt == null) {
clearStatusAfterSpinner.setSelection(0) binding.clearStatusAfterSpinner.setSelection(0)
} else { } else {
val clearAt = predefinedStatus.clearAt!! val clearAt = predefinedStatus.clearAt!!
if (clearAt.type.equals("period")) { if (clearAt.type.equals("period")) {
when (clearAt.time) { when (clearAt.time) {
"1800" -> clearStatusAfterSpinner.setSelection(POS_HALF_AN_HOUR) "1800" -> binding.clearStatusAfterSpinner.setSelection(POS_HALF_AN_HOUR)
"3600" -> clearStatusAfterSpinner.setSelection(POS_AN_HOUR) "3600" -> binding.clearStatusAfterSpinner.setSelection(POS_AN_HOUR)
"14400" -> clearStatusAfterSpinner.setSelection(POS_FOUR_HOURS) "14400" -> binding.clearStatusAfterSpinner.setSelection(POS_FOUR_HOURS)
else -> clearStatusAfterSpinner.setSelection(POS_DONT_CLEAR) else -> binding.clearStatusAfterSpinner.setSelection(POS_DONT_CLEAR)
} }
} else if (clearAt.type.equals("end-of")) { } else if (clearAt.type.equals("end-of")) {
when (clearAt.time) { when (clearAt.time) {
"day" -> clearStatusAfterSpinner.setSelection(POS_TODAY) "day" -> binding.clearStatusAfterSpinner.setSelection(POS_TODAY)
"week" -> clearStatusAfterSpinner.setSelection(POS_END_OF_WEEK) "week" -> binding.clearStatusAfterSpinner.setSelection(POS_END_OF_WEEK)
else -> clearStatusAfterSpinner.setSelection(POS_DONT_CLEAR) else -> binding.clearStatusAfterSpinner.setSelection(POS_DONT_CLEAR)
} }
} }
} }
setClearStatusAfterValue(clearStatusAfterSpinner.selectedItemPosition) setClearStatusAfterValue(binding.clearStatusAfterSpinner.selectedItemPosition)
} }
@VisibleForTesting @VisibleForTesting
fun setPredefinedStatus(predefinedStatus: ArrayList<PredefinedStatus>) { fun setPredefinedStatus(predefinedStatus: ArrayList<PredefinedStatus>) {
adapter.list = 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" <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent">
tools:context=".ui.errorhandling.ShowErrorActivity">
<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 <ScrollView
android:id="@+id/error_page_container" android:id="@+id/error_page_container"

View File

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