package ani.dantotsu.settings import android.app.AlertDialog import android.content.Intent import android.graphics.Color import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.content.ContextCompat import androidx.core.view.isVisible import ani.dantotsu.BottomSheetDialogFragment import ani.dantotsu.MainActivity import ani.dantotsu.R import ani.dantotsu.connections.anilist.Anilist import ani.dantotsu.databinding.BottomSheetSettingsBinding import ani.dantotsu.download.anime.OfflineAnimeFragment import ani.dantotsu.download.manga.OfflineMangaFragment import ani.dantotsu.getAppString import ani.dantotsu.getThemeColor import ani.dantotsu.home.AnimeFragment import ani.dantotsu.home.HomeFragment import ani.dantotsu.home.LoginFragment import ani.dantotsu.home.MangaFragment import ani.dantotsu.home.NoInternet import ani.dantotsu.incognitoNotification import ani.dantotsu.loadImage import ani.dantotsu.offline.OfflineFragment import ani.dantotsu.profile.ProfileActivity import ani.dantotsu.profile.activity.FeedActivity import ani.dantotsu.profile.activity.NotificationActivity import ani.dantotsu.setSafeOnClickListener import ani.dantotsu.settings.saving.PrefManager import ani.dantotsu.settings.saving.PrefName import ani.dantotsu.startMainActivity import ani.dantotsu.util.customAlertDialog import eu.kanade.tachiyomi.util.system.getSerializableCompat import java.util.Timer import kotlin.concurrent.schedule class SettingsDialogFragment : BottomSheetDialogFragment() { private var _binding: BottomSheetSettingsBinding? = null private val binding get() = _binding!! private lateinit var pageType: PageType override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) pageType = arguments?.getSerializableCompat("pageType") as? PageType ?: PageType.HOME } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = BottomSheetSettingsBinding.inflate(inflater, container, false) return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val window = dialog?.window window?.statusBarColor = Color.CYAN window?.navigationBarColor = requireContext().getThemeColor(com.google.android.material.R.attr.colorSurface) val notificationIcon = if (Anilist.unreadNotificationCount > 0) { R.drawable.ic_round_notifications_active_24 } else { R.drawable.ic_round_notifications_none_24 } binding.settingsNotification.setImageResource(notificationIcon) if (Anilist.token != null) { binding.settingsLogin.setText(R.string.logout) binding.settingsLogin.setOnClickListener { requireContext().customAlertDialog().apply{ setTitle(R.string.logout) setMessage(R.string.logout_confirm) setPosButton(R.string.yes) { Anilist.removeSavedToken() startMainActivity(requireActivity()) } setNegButton(R.string.no) show() } } binding.settingsUsername.text = Anilist.username binding.settingsUserAvatar.loadImage(Anilist.avatar) } else { binding.settingsUsername.visibility = View.GONE binding.settingsLogin.setText(R.string.login) binding.settingsLogin.setOnClickListener { dismiss() Anilist.loginIntent(requireActivity()) } } binding.settingsNotificationCount.isVisible = Anilist.unreadNotificationCount > 0 binding.settingsNotificationCount.text = Anilist.unreadNotificationCount.toString() binding.settingsUserAvatar.setOnClickListener { ContextCompat.startActivity( requireContext(), Intent(requireContext(), ProfileActivity::class.java) .putExtra("userId", Anilist.userid), null ) } binding.settingsIncognito.isChecked = PrefManager.getVal(PrefName.Incognito) binding.settingsIncognito.setOnCheckedChangeListener { _, isChecked -> PrefManager.setVal(PrefName.Incognito, isChecked) incognitoNotification(requireContext()) } binding.settingsExtensionSettings.setSafeOnClickListener { startActivity(Intent(activity, ExtensionsActivity::class.java)) dismiss() } binding.settingsSettings.setSafeOnClickListener { startActivity(Intent(activity, SettingsActivity::class.java)) dismiss() } binding.settingsActivity.setSafeOnClickListener { startActivity(Intent(activity, FeedActivity::class.java)) dismiss() } binding.settingsNotification.setOnClickListener { startActivity(Intent(activity, NotificationActivity::class.java)) dismiss() } binding.settingsDownloads.isChecked = PrefManager.getVal(PrefName.OfflineMode) binding.settingsDownloads.setOnCheckedChangeListener { _, isChecked -> Timer().schedule(300) { when (pageType) { PageType.MANGA -> { val intent = Intent(activity, NoInternet::class.java) intent.putExtra( "FRAGMENT_CLASS_NAME", OfflineMangaFragment::class.java.name ) startActivity(intent) } PageType.ANIME -> { val intent = Intent(activity, NoInternet::class.java) intent.putExtra( "FRAGMENT_CLASS_NAME", OfflineAnimeFragment::class.java.name ) startActivity(intent) } PageType.HOME -> { val intent = Intent(activity, NoInternet::class.java) intent.putExtra("FRAGMENT_CLASS_NAME", OfflineFragment::class.java.name) startActivity(intent) } PageType.OfflineMANGA -> { val intent = Intent(activity, MainActivity::class.java) intent.putExtra("FRAGMENT_CLASS_NAME", MangaFragment::class.java.name) startActivity(intent) } PageType.OfflineHOME -> { val intent = Intent(activity, MainActivity::class.java) intent.putExtra( "FRAGMENT_CLASS_NAME", if (Anilist.token != null) HomeFragment::class.java.name else LoginFragment::class.java.name ) startActivity(intent) } PageType.OfflineANIME -> { val intent = Intent(activity, MainActivity::class.java) intent.putExtra("FRAGMENT_CLASS_NAME", AnimeFragment::class.java.name) startActivity(intent) } } dismiss() PrefManager.setVal(PrefName.OfflineMode, isChecked) } } } override fun onDestroyView() { super.onDestroyView() _binding = null } companion object { enum class PageType { MANGA, ANIME, HOME, OfflineMANGA, OfflineANIME, OfflineHOME } fun newInstance(pageType: PageType): SettingsDialogFragment { val fragment = SettingsDialogFragment() val args = Bundle() args.putSerializable("pageType", pageType) fragment.arguments = args return fragment } } }