diff --git a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/edit/FavouritesCategoryEditActivity.kt b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/edit/FavouritesCategoryEditActivity.kt index 8549bd0a7..a9a99305b 100644 --- a/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/edit/FavouritesCategoryEditActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/favourites/ui/categories/edit/FavouritesCategoryEditActivity.kt @@ -25,6 +25,7 @@ import org.koitharu.kotatsu.favourites.ui.categories.FavouriteCategoriesActivity import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.utils.ext.getDisplayMessage import org.koitharu.kotatsu.utils.ext.getSerializableCompat +import org.koitharu.kotatsu.utils.ext.setChecked import com.google.android.material.R as materialR @AndroidEntryPoint @@ -112,10 +113,8 @@ class FavouritesCategoryEditActivity : selectedSortOrder = category?.order val sortText = getString((category?.order ?: SortOrder.NEWEST).titleRes) binding.editSort.setText(sortText, false) - binding.switchTracker.isChecked = category?.isTrackingEnabled ?: true - binding.switchTracker.jumpDrawablesToCurrentState() - binding.switchShelf.isChecked = category?.isVisibleInLibrary ?: true - binding.switchShelf.jumpDrawablesToCurrentState() + binding.switchTracker.setChecked(category?.isTrackingEnabled ?: true, false) + binding.switchShelf.setChecked(category?.isVisibleInLibrary ?: true, false) } private fun onError(e: Throwable) { diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/onboard/adapter/SourceLocaleAD.kt b/app/src/main/java/org/koitharu/kotatsu/settings/onboard/adapter/SourceLocaleAD.kt index 167f23750..f5d5f1aed 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/onboard/adapter/SourceLocaleAD.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/onboard/adapter/SourceLocaleAD.kt @@ -4,6 +4,7 @@ import com.hannesdorfmann.adapterdelegates4.dsl.adapterDelegateViewBinding import org.koitharu.kotatsu.R import org.koitharu.kotatsu.databinding.ItemSourceLocaleBinding import org.koitharu.kotatsu.settings.onboard.model.SourceLocale +import org.koitharu.kotatsu.utils.ext.setChecked import org.koitharu.kotatsu.utils.ext.textAndVisible fun sourceLocaleAD( @@ -19,9 +20,6 @@ fun sourceLocaleAD( bind { payloads -> binding.textViewTitle.text = item.title ?: getString(R.string.different_languages) binding.textViewDescription.textAndVisible = item.summary - binding.switchToggle.isChecked = item.isChecked - if (payloads.isEmpty()) { - binding.switchToggle.jumpDrawablesToCurrentState() - } + binding.switchToggle.setChecked(item.isChecked, payloads.isNotEmpty()) } } diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/tools/ToolsFragment.kt b/app/src/main/java/org/koitharu/kotatsu/settings/tools/ToolsFragment.kt index 32449f70a..c7a7d4458 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/tools/ToolsFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/tools/ToolsFragment.kt @@ -19,6 +19,7 @@ import org.koitharu.kotatsu.databinding.FragmentToolsBinding import org.koitharu.kotatsu.download.ui.list.DownloadsActivity import org.koitharu.kotatsu.settings.SettingsActivity import org.koitharu.kotatsu.settings.about.AppUpdateDialog +import org.koitharu.kotatsu.utils.ext.setChecked @AndroidEntryPoint class ToolsFragment : @@ -42,10 +43,7 @@ class ToolsFragment : binding.memoryUsageView.setManageButtonOnClickListener(this) viewModel.isIncognitoModeEnabled.observe(viewLifecycleOwner) { - if (binding.switchIncognito.isChecked != it) { - binding.switchIncognito.isChecked = it - binding.switchIncognito.jumpDrawablesToCurrentState() - } + binding.switchIncognito.setChecked(it, false) } viewModel.storageUsage.observe(viewLifecycleOwner) { binding.memoryUsageView.bind(it) diff --git a/app/src/main/java/org/koitharu/kotatsu/shelf/ui/config/ShelfSettingsAdapterDelegates.kt b/app/src/main/java/org/koitharu/kotatsu/shelf/ui/config/ShelfSettingsAdapterDelegates.kt index c02b7a438..73de642e6 100644 --- a/app/src/main/java/org/koitharu/kotatsu/shelf/ui/config/ShelfSettingsAdapterDelegates.kt +++ b/app/src/main/java/org/koitharu/kotatsu/shelf/ui/config/ShelfSettingsAdapterDelegates.kt @@ -10,6 +10,7 @@ import org.koitharu.kotatsu.R import org.koitharu.kotatsu.databinding.ItemCategoryCheckableMultipleBinding import org.koitharu.kotatsu.databinding.ItemShelfSectionDraggableBinding import org.koitharu.kotatsu.shelf.domain.ShelfSection +import org.koitharu.kotatsu.utils.ext.setChecked @SuppressLint("ClickableViewAccessibility") fun shelfSectionAD( @@ -42,10 +43,7 @@ fun shelfSectionAD( bind { payloads -> binding.textViewTitle.setText(item.section.titleResId) - binding.switchToggle.isChecked = item.isChecked - if (payloads.isEmpty()) { - binding.switchToggle.jumpDrawablesToCurrentState() - } + binding.switchToggle.setChecked(item.isChecked, payloads.isNotEmpty()) } } @@ -65,10 +63,7 @@ fun shelfCategoryAD( bind { payloads -> binding.root.text = item.title - binding.root.isChecked = item.isChecked - if (payloads.isEmpty()) { - binding.root.jumpDrawablesToCurrentState() - } + binding.root.setChecked(item.isChecked, payloads.isNotEmpty()) } } diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/ext/ViewExt.kt b/app/src/main/java/org/koitharu/kotatsu/utils/ext/ViewExt.kt index 95d55f40d..f87555fb7 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/ext/ViewExt.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/ext/ViewExt.kt @@ -7,6 +7,7 @@ import android.view.View.MeasureSpec import android.view.ViewGroup import android.view.ViewParent import android.view.inputmethod.InputMethodManager +import android.widget.Checkable import androidx.core.view.children import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -192,3 +193,11 @@ fun View.measureDimension(desiredSize: Int, measureSpec: Int): Int { } return result } + +fun V.setChecked(checked: Boolean, animate: Boolean) where V : View, V : Checkable { + val skipAnimation = !animate && checked != isChecked + isChecked = checked + if (skipAnimation) { + jumpDrawablesToCurrentState() + } +}