mirror of https://github.com/tuskyapp/Tusky.git
Browse Source
* Convert AccountViewHolder from Java to Kotlin Use view binding in the converted code, which requires small changes in code that calls constructors. Pass showBotOverlays as a parameter, rather than having the code reach in to the shared preferences, fixing a layering violation. This affects callers and classes derived from AccountAdapter. * Use 2-arg getString * Simplify setting bot badge indicator - Specify the drawable in the XML - Use visible() to set visibility - Rename ID to account_bot_badge to make it clearer that this is all it is for * Use lateinit to avoid needing !! laterpull/3026/head
13 changed files with 116 additions and 91 deletions
@ -1,61 +0,0 @@
|
||||
package com.keylesspalace.tusky.adapter; |
||||
|
||||
import android.content.SharedPreferences; |
||||
import android.view.View; |
||||
import android.widget.ImageView; |
||||
import android.widget.TextView; |
||||
|
||||
import androidx.preference.PreferenceManager; |
||||
import androidx.recyclerview.widget.RecyclerView; |
||||
|
||||
import com.keylesspalace.tusky.R; |
||||
import com.keylesspalace.tusky.entity.TimelineAccount; |
||||
import com.keylesspalace.tusky.interfaces.AccountActionListener; |
||||
import com.keylesspalace.tusky.interfaces.LinkListener; |
||||
import com.keylesspalace.tusky.util.CustomEmojiHelper; |
||||
import com.keylesspalace.tusky.util.ImageLoadingHelper; |
||||
|
||||
public class AccountViewHolder extends RecyclerView.ViewHolder { |
||||
private TextView username; |
||||
private TextView displayName; |
||||
private ImageView avatar; |
||||
private ImageView avatarInset; |
||||
private String accountId; |
||||
private boolean showBotOverlay; |
||||
|
||||
public AccountViewHolder(View itemView) { |
||||
super(itemView); |
||||
username = itemView.findViewById(R.id.account_username); |
||||
displayName = itemView.findViewById(R.id.account_display_name); |
||||
avatar = itemView.findViewById(R.id.account_avatar); |
||||
avatarInset = itemView.findViewById(R.id.account_avatar_inset); |
||||
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(itemView.getContext()); |
||||
showBotOverlay = sharedPrefs.getBoolean("showBotOverlay", true); |
||||
} |
||||
|
||||
public void setupWithAccount(TimelineAccount account, boolean animateAvatar, boolean animateEmojis) { |
||||
accountId = account.getId(); |
||||
String format = username.getContext().getString(R.string.post_username_format); |
||||
String formattedUsername = String.format(format, account.getUsername()); |
||||
username.setText(formattedUsername); |
||||
CharSequence emojifiedName = CustomEmojiHelper.emojify(account.getName(), account.getEmojis(), displayName, animateEmojis); |
||||
displayName.setText(emojifiedName); |
||||
int avatarRadius = avatar.getContext().getResources() |
||||
.getDimensionPixelSize(R.dimen.avatar_radius_48dp); |
||||
ImageLoadingHelper.loadAvatar(account.getAvatar(), avatar, avatarRadius, animateAvatar); |
||||
if (showBotOverlay && account.getBot()) { |
||||
avatarInset.setVisibility(View.VISIBLE); |
||||
avatarInset.setImageResource(R.drawable.bot_badge); |
||||
} else { |
||||
avatarInset.setVisibility(View.GONE); |
||||
} |
||||
} |
||||
|
||||
void setupActionListener(final AccountActionListener listener) { |
||||
itemView.setOnClickListener(v -> listener.onViewAccount(accountId)); |
||||
} |
||||
|
||||
public void setupLinkListener(final LinkListener listener) { |
||||
itemView.setOnClickListener(v -> listener.onViewAccount(accountId)); |
||||
} |
||||
} |
||||
@ -0,0 +1,56 @@
|
||||
package com.keylesspalace.tusky.adapter |
||||
|
||||
import androidx.recyclerview.widget.RecyclerView |
||||
import com.keylesspalace.tusky.R |
||||
import com.keylesspalace.tusky.databinding.ItemAccountBinding |
||||
import com.keylesspalace.tusky.entity.TimelineAccount |
||||
import com.keylesspalace.tusky.interfaces.AccountActionListener |
||||
import com.keylesspalace.tusky.interfaces.LinkListener |
||||
import com.keylesspalace.tusky.util.emojify |
||||
import com.keylesspalace.tusky.util.loadAvatar |
||||
import com.keylesspalace.tusky.util.visible |
||||
|
||||
class AccountViewHolder( |
||||
private val binding: ItemAccountBinding |
||||
) : RecyclerView.ViewHolder(binding.root) { |
||||
private lateinit var accountId: String |
||||
|
||||
fun setupWithAccount( |
||||
account: TimelineAccount, |
||||
animateAvatar: Boolean, |
||||
animateEmojis: Boolean, |
||||
showBotOverlay: Boolean |
||||
) { |
||||
accountId = account.id |
||||
|
||||
binding.accountUsername.text = binding.accountUsername.context.getString( |
||||
R.string.post_username_format, |
||||
account.username |
||||
) |
||||
|
||||
val emojifiedName = account.name.emojify( |
||||
account.emojis, |
||||
binding.accountDisplayName, |
||||
animateEmojis |
||||
) |
||||
binding.accountDisplayName.text = emojifiedName |
||||
|
||||
val avatarRadius = binding.accountAvatar.context.resources |
||||
.getDimensionPixelSize(R.dimen.avatar_radius_48dp) |
||||
loadAvatar(account.avatar, binding.accountAvatar, avatarRadius, animateAvatar) |
||||
|
||||
binding.accountBotBadge.visible(showBotOverlay && account.bot) |
||||
} |
||||
|
||||
fun setupActionListener(listener: AccountActionListener) { |
||||
itemView.setOnClickListener { listener.onViewAccount(accountId) } |
||||
} |
||||
|
||||
fun setupLinkListener(listener: LinkListener) { |
||||
itemView.setOnClickListener { |
||||
listener.onViewAccount( |
||||
accountId |
||||
) |
||||
} |
||||
} |
||||
} |
||||
Loading…
Reference in new issue