package ani.dantotsu.home import android.content.Context import android.content.Intent import android.os.Handler import android.os.Looper import android.util.TypedValue import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.animation.LayoutAnimationController import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.core.view.updateLayoutParams import androidx.core.view.updatePadding import androidx.lifecycle.MutableLiveData import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.viewpager2.widget.ViewPager2 import ani.dantotsu.MediaPageTransformer import ani.dantotsu.R import ani.dantotsu.connections.anilist.Anilist import ani.dantotsu.currContext import ani.dantotsu.databinding.ItemMangaPageBinding import ani.dantotsu.loadData import ani.dantotsu.loadImage import ani.dantotsu.media.GenreActivity import ani.dantotsu.media.MediaAdaptor import ani.dantotsu.media.SearchActivity import ani.dantotsu.px import ani.dantotsu.setSafeOnClickListener import ani.dantotsu.setSlideIn import ani.dantotsu.setSlideUp import ani.dantotsu.settings.SettingsDialogFragment import ani.dantotsu.settings.UserInterfaceSettings import ani.dantotsu.statusBarHeight import com.google.android.material.card.MaterialCardView import com.google.android.material.textfield.TextInputLayout class MangaPageAdapter : RecyclerView.Adapter() { val ready = MutableLiveData(false) lateinit var binding: ItemMangaPageBinding private var trendHandler: Handler? = null private lateinit var trendRun: Runnable var trendingViewPager: ViewPager2? = null private var uiSettings: UserInterfaceSettings = loadData("ui_settings") ?: UserInterfaceSettings() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MangaPageViewHolder { val binding = ItemMangaPageBinding.inflate(LayoutInflater.from(parent.context), parent, false) return MangaPageViewHolder(binding) } override fun onBindViewHolder(holder: MangaPageViewHolder, position: Int) { binding = holder.binding trendingViewPager = binding.mangaTrendingViewPager val textInputLayout = holder.itemView.findViewById(R.id.mangaSearchBar) val currentColor = textInputLayout.boxBackgroundColor val semiTransparentColor = (currentColor and 0x00FFFFFF) or 0xA8000000.toInt() textInputLayout.boxBackgroundColor = semiTransparentColor val materialCardView = holder.itemView.findViewById(R.id.mangaUserAvatarContainer) materialCardView.setCardBackgroundColor(semiTransparentColor) val typedValue = TypedValue() currContext()?.theme?.resolveAttribute(android.R.attr.windowBackground, typedValue, true) val color = typedValue.data val colorOverflow = currContext()?.getSharedPreferences("Dantotsu", Context.MODE_PRIVATE) ?.getBoolean("colorOverflow", false) ?: false if (!colorOverflow) { textInputLayout.boxBackgroundColor = (color and 0x00FFFFFF) or 0x28000000.toInt() materialCardView.setCardBackgroundColor((color and 0x00FFFFFF) or 0x28000000.toInt()) } binding.mangaTitleContainer.updatePadding(top = statusBarHeight) if (uiSettings.smallView) binding.mangaTrendingContainer.updateLayoutParams { bottomMargin = (-108f).px } updateAvatar() binding.mangaSearchBar.hint = "MANGA" binding.mangaSearchBarText.setOnClickListener { ContextCompat.startActivity( it.context, Intent(it.context, SearchActivity::class.java).putExtra("type", "MANGA"), null ) } binding.mangaUserAvatar.setSafeOnClickListener { val dialogFragment = SettingsDialogFragment.newInstance(SettingsDialogFragment.Companion.PageType.MANGA) dialogFragment.show((it.context as AppCompatActivity).supportFragmentManager, "dialog") } binding.mangaSearchBar.setEndIconOnClickListener { binding.mangaSearchBarText.performClick() } binding.mangaGenreImage.loadImage("https://s4.anilist.co/file/anilistcdn/media/manga/banner/105778-wk5qQ7zAaTGl.jpg") binding.mangaTopScoreImage.loadImage("https://s4.anilist.co/file/anilistcdn/media/manga/banner/30002-3TuoSMl20fUX.jpg") binding.mangaGenre.setOnClickListener { ContextCompat.startActivity( it.context, Intent(it.context, GenreActivity::class.java).putExtra("type", "MANGA"), null ) } binding.mangaTopScore.setOnClickListener { ContextCompat.startActivity( it.context, Intent(it.context, SearchActivity::class.java) .putExtra("type", "MANGA") .putExtra("sortBy", Anilist.sortBy[0]) .putExtra("search", true), null ) } binding.mangaIncludeList.visibility = if (Anilist.userid != null) View.VISIBLE else View.GONE binding.mangaIncludeList.isChecked = currContext()?.getSharedPreferences("Dantotsu", Context.MODE_PRIVATE) ?.getBoolean("popular_list", true) ?: true binding.mangaIncludeList.setOnCheckedChangeListener { _, isChecked -> onIncludeListClick.invoke(isChecked) currContext()?.getSharedPreferences("Dantotsu", Context.MODE_PRIVATE)?.edit() ?.putBoolean("popular_list", isChecked)?.apply() } if (ready.value == false) ready.postValue(true) } lateinit var onIncludeListClick: ((Boolean) -> Unit) override fun getItemCount(): Int = 1 fun updateHeight() { trendingViewPager!!.updateLayoutParams { height += statusBarHeight } } fun updateTrending(adaptor: MediaAdaptor) { binding.mangaTrendingProgressBar.visibility = View.GONE binding.mangaTrendingViewPager.adapter = adaptor binding.mangaTrendingViewPager.offscreenPageLimit = 3 binding.mangaTrendingViewPager.getChildAt(0).overScrollMode = RecyclerView.OVER_SCROLL_NEVER binding.mangaTrendingViewPager.setPageTransformer(MediaPageTransformer()) trendHandler = Handler(Looper.getMainLooper()) trendRun = Runnable { binding.mangaTrendingViewPager.currentItem = binding.mangaTrendingViewPager.currentItem + 1 } binding.mangaTrendingViewPager.registerOnPageChangeCallback( object : ViewPager2.OnPageChangeCallback() { override fun onPageSelected(position: Int) { super.onPageSelected(position) trendHandler!!.removeCallbacks(trendRun) trendHandler!!.postDelayed(trendRun, 4000) } } ) binding.mangaTrendingViewPager.layoutAnimation = LayoutAnimationController(setSlideIn(uiSettings), 0.25f) binding.mangaTitleContainer.startAnimation(setSlideUp(uiSettings)) binding.mangaListContainer.layoutAnimation = LayoutAnimationController(setSlideIn(uiSettings), 0.25f) } fun updateNovel(adaptor: MediaAdaptor) { binding.mangaNovelProgressBar.visibility = View.GONE binding.mangaNovelRecyclerView.adapter = adaptor binding.mangaNovelRecyclerView.layoutManager = LinearLayoutManager( binding.mangaNovelRecyclerView.context, LinearLayoutManager.HORIZONTAL, false ) binding.mangaNovelRecyclerView.visibility = View.VISIBLE binding.mangaNovel.visibility = View.VISIBLE binding.mangaNovel.startAnimation(setSlideUp(uiSettings)) binding.mangaNovelRecyclerView.layoutAnimation = LayoutAnimationController(setSlideIn(uiSettings), 0.25f) binding.mangaPopular.visibility = View.VISIBLE binding.mangaPopular.startAnimation(setSlideUp(uiSettings)) } fun updateAvatar() { if (Anilist.avatar != null && ready.value == true) { binding.mangaUserAvatar.loadImage(Anilist.avatar) binding.mangaUserAvatar.imageTintList = null } } inner class MangaPageViewHolder(val binding: ItemMangaPageBinding) : RecyclerView.ViewHolder(binding.root) }