From 5167b8578e135753798a1fa4834a7a8a5b8413e4 Mon Sep 17 00:00:00 2001 From: Konrad Pozniak Date: Sun, 7 Mar 2021 19:04:22 +0100 Subject: [PATCH] migrating to ViewBinding part 1: Dialogs + Views (#2091) --- .../compose/dialog/AddPollDialog.kt | 21 +++++++++--------- .../compose/view/PollPreviewView.kt | 16 ++++++-------- .../tusky/view/BackgroundMessageView.kt | 22 +++++++++++-------- .../keylesspalace/tusky/view/LicenseCard.kt | 13 ++++++----- .../tusky/view/MuteAccountDialog.kt | 17 +++++--------- .../main/res/layout/dialog_mute_account.xml | 1 - 6 files changed, 43 insertions(+), 47 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/AddPollDialog.kt b/app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/AddPollDialog.kt index d0f98bac6..09da54626 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/AddPollDialog.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/AddPollDialog.kt @@ -23,8 +23,8 @@ import android.view.WindowManager import androidx.appcompat.app.AlertDialog import com.keylesspalace.tusky.R import com.keylesspalace.tusky.adapter.AddPollOptionsAdapter +import com.keylesspalace.tusky.databinding.DialogAddPollBinding import com.keylesspalace.tusky.entity.NewPoll -import kotlinx.android.synthetic.main.dialog_add_poll.view.* fun showAddPollDialog( context: Context, @@ -34,12 +34,12 @@ fun showAddPollDialog( onUpdatePoll: (NewPoll) -> Unit ) { - val view = LayoutInflater.from(context).inflate(R.layout.dialog_add_poll, null) + val binding = DialogAddPollBinding.inflate(LayoutInflater.from(context)) val dialog = AlertDialog.Builder(context) .setIcon(R.drawable.ic_poll_24dp) .setTitle(R.string.create_poll_title) - .setView(view) + .setView(binding.root) .setNegativeButton(android.R.string.cancel, null) .setPositiveButton(android.R.string.ok, null) .create() @@ -48,7 +48,7 @@ fun showAddPollDialog( options = poll?.options?.toMutableList() ?: mutableListOf("", ""), maxOptionLength = maxOptionLength, onOptionRemoved = { valid -> - view.addChoiceButton.isEnabled = true + binding.addChoiceButton.isEnabled = true dialog.getButton(AlertDialog.BUTTON_POSITIVE).isEnabled = valid }, onOptionChanged = { valid -> @@ -56,9 +56,9 @@ fun showAddPollDialog( } ) - view.pollChoices.adapter = adapter + binding.pollChoices.adapter = adapter - view.addChoiceButton.setOnClickListener { + binding.addChoiceButton.setOnClickListener { if (adapter.itemCount < maxOptionCount) { adapter.addChoice() } @@ -71,14 +71,14 @@ fun showAddPollDialog( it <= poll?.expiresIn ?: 0 } - view.pollDurationSpinner.setSelection(pollDurationId) + binding.pollDurationSpinner.setSelection(pollDurationId) - view.multipleChoicesCheckBox.isChecked = poll?.multiple ?: false + binding.multipleChoicesCheckBox.isChecked = poll?.multiple ?: false dialog.setOnShowListener { val button = dialog.getButton(AlertDialog.BUTTON_POSITIVE) button.setOnClickListener { - val selectedPollDurationId = view.pollDurationSpinner.selectedItemPosition + val selectedPollDurationId = binding.pollDurationSpinner.selectedItemPosition val pollDuration = context.resources .getIntArray(R.array.poll_duration_values)[selectedPollDurationId] @@ -86,7 +86,7 @@ fun showAddPollDialog( onUpdatePoll(NewPoll( options = adapter.pollOptions, expiresIn = pollDuration, - multiple = view.multipleChoicesCheckBox.isChecked + multiple = binding.multipleChoicesCheckBox.isChecked )) dialog.dismiss() @@ -97,5 +97,4 @@ fun showAddPollDialog( // make the dialog focusable so the keyboard does not stay behind it dialog.window?.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM) - } \ No newline at end of file diff --git a/app/src/main/java/com/keylesspalace/tusky/components/compose/view/PollPreviewView.kt b/app/src/main/java/com/keylesspalace/tusky/components/compose/view/PollPreviewView.kt index 63e627fc1..1126047d8 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/compose/view/PollPreviewView.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/compose/view/PollPreviewView.kt @@ -17,11 +17,12 @@ package com.keylesspalace.tusky.components.compose.view import android.content.Context import android.util.AttributeSet +import android.view.LayoutInflater import android.widget.LinearLayout import com.keylesspalace.tusky.R import com.keylesspalace.tusky.adapter.PreviewPollOptionsAdapter +import com.keylesspalace.tusky.databinding.ViewPollPreviewBinding import com.keylesspalace.tusky.entity.NewPoll -import kotlinx.android.synthetic.main.view_poll_preview.view.* class PollPreviewView @JvmOverloads constructor( context: Context?, @@ -29,11 +30,11 @@ class PollPreviewView @JvmOverloads constructor( defStyleAttr: Int = 0) : LinearLayout(context, attrs, defStyleAttr) { - val adapter = PreviewPollOptionsAdapter() + private val adapter = PreviewPollOptionsAdapter() + + private val binding = ViewPollPreviewBinding.inflate(LayoutInflater.from(context), this) init { - inflate(context, R.layout.view_poll_preview, this) - orientation = VERTICAL setBackgroundResource(R.drawable.card_frame) @@ -42,8 +43,7 @@ class PollPreviewView @JvmOverloads constructor( setPadding(padding, padding, padding, padding) - pollPreviewOptions.adapter = adapter - + binding.pollPreviewOptions.adapter = adapter } fun setPoll(poll: NewPoll){ @@ -52,13 +52,11 @@ class PollPreviewView @JvmOverloads constructor( val pollDurationId = resources.getIntArray(R.array.poll_duration_values).indexOfLast { it <= poll.expiresIn } - pollDurationPreview.text = resources.getStringArray(R.array.poll_duration_names)[pollDurationId] - + binding.pollDurationPreview.text = resources.getStringArray(R.array.poll_duration_names)[pollDurationId] } override fun setOnClickListener(l: OnClickListener?) { super.setOnClickListener(l) adapter.setOnClickListener(l) } - } \ No newline at end of file diff --git a/app/src/main/java/com/keylesspalace/tusky/view/BackgroundMessageView.kt b/app/src/main/java/com/keylesspalace/tusky/view/BackgroundMessageView.kt index 4789ac3c1..32a7d6b31 100644 --- a/app/src/main/java/com/keylesspalace/tusky/view/BackgroundMessageView.kt +++ b/app/src/main/java/com/keylesspalace/tusky/view/BackgroundMessageView.kt @@ -3,14 +3,14 @@ package com.keylesspalace.tusky.view import android.content.Context import android.util.AttributeSet import android.view.Gravity +import android.view.LayoutInflater import android.view.View import android.widget.LinearLayout import androidx.annotation.DrawableRes import androidx.annotation.StringRes import com.keylesspalace.tusky.R +import com.keylesspalace.tusky.databinding.ViewBackgroundMessageBinding import com.keylesspalace.tusky.util.visible -import kotlinx.android.synthetic.main.view_background_message.view.* - /** * This view is used for screens with downloadable content which may fail. @@ -22,8 +22,9 @@ class BackgroundMessageView @JvmOverloads constructor( defStyleAttr: Int = 0 ) : LinearLayout(context, attrs, defStyleAttr) { + private val binding = ViewBackgroundMessageBinding.inflate(LayoutInflater.from(context), this) + init { - View.inflate(context, R.layout.view_background_message, this) gravity = Gravity.CENTER_HORIZONTAL orientation = VERTICAL @@ -36,11 +37,14 @@ class BackgroundMessageView @JvmOverloads constructor( * Setup image, message and button. * If [clickListener] is `null` then the button will be hidden. */ - fun setup(@DrawableRes imageRes: Int, @StringRes messageRes: Int, - clickListener: ((v: View) -> Unit)? = null) { - messageTextView.setText(messageRes) - imageView.setImageResource(imageRes) - button.setOnClickListener(clickListener) - button.visible(clickListener != null) + fun setup( + @DrawableRes imageRes: Int, + @StringRes messageRes: Int, + clickListener: ((v: View) -> Unit)? = null + ) { + binding.messageTextView.setText(messageRes) + binding.imageView.setImageResource(imageRes) + binding.button.setOnClickListener(clickListener) + binding.button.visible(clickListener != null) } } \ No newline at end of file diff --git a/app/src/main/java/com/keylesspalace/tusky/view/LicenseCard.kt b/app/src/main/java/com/keylesspalace/tusky/view/LicenseCard.kt index 2c73cd54a..ad9ae52c2 100644 --- a/app/src/main/java/com/keylesspalace/tusky/view/LicenseCard.kt +++ b/app/src/main/java/com/keylesspalace/tusky/view/LicenseCard.kt @@ -17,12 +17,13 @@ package com.keylesspalace.tusky.view import android.content.Context import android.util.AttributeSet +import android.view.LayoutInflater import com.google.android.material.card.MaterialCardView import com.keylesspalace.tusky.R +import com.keylesspalace.tusky.databinding.CardLicenseBinding import com.keylesspalace.tusky.util.LinkHelper import com.keylesspalace.tusky.util.ThemeUtils import com.keylesspalace.tusky.util.hide -import kotlinx.android.synthetic.main.card_license.view.* class LicenseCard @JvmOverloads constructor( @@ -32,7 +33,7 @@ class LicenseCard ) : MaterialCardView(context, attrs, defStyleAttr) { init { - inflate(context, R.layout.card_license, this) + val binding = CardLicenseBinding.inflate(LayoutInflater.from(context), this) setCardBackgroundColor(ThemeUtils.getColor(context, R.attr.colorSurface)) @@ -43,12 +44,12 @@ class LicenseCard val link: String? = a.getString(R.styleable.LicenseCard_link) a.recycle() - licenseCardName.text = name - licenseCardLicense.text = license + binding.licenseCardName.text = name + binding.licenseCardLicense.text = license if(link.isNullOrBlank()) { - licenseCardLink.hide() + binding.licenseCardLink.hide() } else { - licenseCardLink.text = link + binding.licenseCardLink.text = link setOnClickListener { LinkHelper.openLink(link, context) } } diff --git a/app/src/main/java/com/keylesspalace/tusky/view/MuteAccountDialog.kt b/app/src/main/java/com/keylesspalace/tusky/view/MuteAccountDialog.kt index 435e24501..da5e79874 100644 --- a/app/src/main/java/com/keylesspalace/tusky/view/MuteAccountDialog.kt +++ b/app/src/main/java/com/keylesspalace/tusky/view/MuteAccountDialog.kt @@ -3,29 +3,24 @@ package com.keylesspalace.tusky.view import android.app.Activity -import android.widget.CheckBox -import android.widget.Spinner -import android.widget.TextView import androidx.appcompat.app.AlertDialog import com.keylesspalace.tusky.R +import com.keylesspalace.tusky.databinding.DialogMuteAccountBinding fun showMuteAccountDialog( activity: Activity, accountUsername: String, onOk: (notifications: Boolean, duration: Int) -> Unit ) { - val view = activity.layoutInflater.inflate(R.layout.dialog_mute_account, null) - (view.findViewById(R.id.warning) as TextView).text = - activity.getString(R.string.dialog_mute_warning, accountUsername) - val checkbox: CheckBox = view.findViewById(R.id.checkbox) - checkbox.isChecked = true + val binding = DialogMuteAccountBinding.inflate(activity.layoutInflater) + binding.warning.text = activity.getString(R.string.dialog_mute_warning, accountUsername) + binding.checkbox.isChecked = true AlertDialog.Builder(activity) - .setView(view) + .setView(binding.root) .setPositiveButton(android.R.string.ok) { _, _ -> - val spinner: Spinner = view.findViewById(R.id.duration) val durationValues = activity.resources.getIntArray(R.array.mute_duration_values) - onOk(checkbox.isChecked, durationValues[spinner.selectedItemPosition]) + onOk(binding.checkbox.isChecked, durationValues[binding.duration.selectedItemPosition]) } .setNegativeButton(android.R.string.cancel, null) .show() diff --git a/app/src/main/res/layout/dialog_mute_account.xml b/app/src/main/res/layout/dialog_mute_account.xml index b58a277cb..e826445e3 100644 --- a/app/src/main/res/layout/dialog_mute_account.xml +++ b/app/src/main/res/layout/dialog_mute_account.xml @@ -23,7 +23,6 @@ android:text="@string/dialog_mute_hide_notifications"/>