Update tracker services logo layout (closes #5625)

This commit is contained in:
arkon 2021-08-22 16:48:08 -04:00
parent 0f41e56a24
commit 7094fef37f
8 changed files with 100 additions and 48 deletions

View file

@ -35,7 +35,7 @@ class TrackSearchAdapter(
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TrackSearchHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TrackSearchHolder {
val binding = TrackSearchItemBinding.inflate(LayoutInflater.from(parent.context), parent, false) val binding = TrackSearchItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
binding.container.applyElevationOverlay() binding.root.applyElevationOverlay()
return TrackSearchHolder(binding, this) return TrackSearchHolder(binding, this)
} }

View file

@ -15,10 +15,10 @@ class TrackSearchHolder(
private val adapter: TrackSearchAdapter private val adapter: TrackSearchAdapter
) : RecyclerView.ViewHolder(binding.root) { ) : RecyclerView.ViewHolder(binding.root) {
fun bind(track: TrackSearch, position: Int) { fun bind(track: TrackSearch, position: Int) {
binding.container.isChecked = position == adapter.selectedItemPosition binding.root.isChecked = position == adapter.selectedItemPosition
binding.container.setOnClickListener { binding.root.setOnClickListener {
adapter.selectedItemPosition = position adapter.selectedItemPosition = position
binding.container.isChecked = true binding.root.isChecked = true
} }
binding.trackSearchTitle.text = track.title binding.trackSearchTitle.text = track.title
@ -62,6 +62,6 @@ class TrackSearchHolder(
} }
fun setUnchecked() { fun setUnchecked() {
binding.container.isChecked = false binding.root.isChecked = false
} }
} }

View file

@ -28,7 +28,7 @@ import eu.kanade.tachiyomi.util.preference.switchPreference
import eu.kanade.tachiyomi.util.preference.titleRes import eu.kanade.tachiyomi.util.preference.titleRes
import eu.kanade.tachiyomi.util.system.openInBrowser import eu.kanade.tachiyomi.util.system.openInBrowser
import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.system.toast
import eu.kanade.tachiyomi.widget.preference.LoginPreference import eu.kanade.tachiyomi.widget.preference.TrackerPreference
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
@ -96,12 +96,13 @@ class SettingsTrackingController :
private inline fun PreferenceGroup.trackPreference( private inline fun PreferenceGroup.trackPreference(
service: TrackService, service: TrackService,
crossinline login: () -> Unit crossinline login: () -> Unit
): LoginPreference { ): TrackerPreference {
return add( return add(
LoginPreference(context).apply { TrackerPreference(context).apply {
key = Keys.trackUsername(service.id) key = Keys.trackUsername(service.id)
titleRes = service.nameRes() titleRes = service.nameRes()
iconRes = service.getLogo() iconRes = service.getLogo()
iconColor = service.getLogoColor()
onClick { onClick {
if (service.isLogged) { if (service.isLogged) {
if (service is NoLoginTrackService) { if (service is NoLoginTrackService) {
@ -142,7 +143,7 @@ class SettingsTrackingController :
} }
private fun updatePreference(id: Int) { private fun updatePreference(id: Int) {
val pref = findPreference(Keys.trackUsername(id)) as? LoginPreference val pref = findPreference(Keys.trackUsername(id)) as? TrackerPreference
pref?.notifyChanged() pref?.notifyChanged()
} }

View file

@ -1,32 +0,0 @@
package eu.kanade.tachiyomi.widget.preference
import android.content.Context
import android.util.AttributeSet
import android.widget.ImageView
import androidx.preference.Preference
import androidx.preference.PreferenceViewHolder
import eu.kanade.tachiyomi.R
class LoginPreference @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
Preference(context, attrs) {
init {
widgetLayoutResource = R.layout.pref_widget_imageview
}
override fun onBindViewHolder(holder: PreferenceViewHolder) {
super.onBindViewHolder(holder)
(holder.findViewById(R.id.image_view) as ImageView).setImageResource(
if (getPersistedString("").isNullOrEmpty()) {
android.R.color.transparent
} else {
R.drawable.ic_done_green_24dp
}
)
}
public override fun notifyChanged() {
super.notifyChanged()
}
}

View file

@ -0,0 +1,41 @@
package eu.kanade.tachiyomi.widget.preference
import android.content.Context
import android.graphics.Color
import android.util.AttributeSet
import android.widget.ImageView
import androidx.annotation.ColorInt
import androidx.core.view.isVisible
import androidx.preference.Preference
import androidx.preference.PreferenceViewHolder
import com.google.android.material.card.MaterialCardView
import eu.kanade.tachiyomi.R
class TrackerPreference @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
Preference(context, attrs) {
init {
layoutResource = R.layout.pref_tracker_item
}
override fun onBindViewHolder(holder: PreferenceViewHolder) {
super.onBindViewHolder(holder)
val logoContainer = holder.findViewById(R.id.logo_container) as MaterialCardView
val checkedIcon = holder.findViewById(R.id.checked_icon) as ImageView
logoContainer.setCardBackgroundColor(iconColor)
checkedIcon.isVisible = !getPersistedString("").isNullOrEmpty()
}
@ColorInt
var iconColor: Int = Color.TRANSPARENT
set(value) {
field = value
notifyChanged()
}
public override fun notifyChanged() {
super.notifyChanged()
}
}

View file

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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="?listPreferredItemHeight"
android:orientation="horizontal"
android:paddingHorizontal="16dp"
android:paddingVertical="8dp">
<com.google.android.material.card.MaterialCardView
android:id="@+id/logo_container"
android:layout_width="48dp"
android:layout_height="48dp"
app:cardBackgroundColor="#2E51A2"
app:cardElevation="0dp"
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.MaterialCardView.Tracker">
<ImageView
android:id="@android:id/icon"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:importantForAccessibility="no"
android:padding="4dp"
tools:src="@drawable/ic_tracker_mal" />
</com.google.android.material.card.MaterialCardView>
<TextView
android:id="@android:id/title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:ellipsize="end"
android:maxLines="1"
android:paddingHorizontal="16dp"
android:textAppearance="?attr/textAppearanceSubtitle1"
tools:text="MyAnimeList" />
<ImageView
android:id="@+id/checked_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_gravity="center_vertical"
android:padding="4dp"
android:src="@drawable/ic_done_green_24dp" />
</LinearLayout>

View file

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

View file

@ -2,7 +2,6 @@
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android" <com.google.android.material.card.MaterialCardView 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" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="4dp" android:layout_margin="4dp"
@ -12,7 +11,6 @@
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.MaterialCardView.Tracker"> app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.MaterialCardView.Tracker">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="12dp" android:layout_marginBottom="12dp"