package ani.dantotsu.settings import android.app.AlertDialog import android.content.Intent import android.graphics.Color import android.os.Bundle import android.util.TypedValue 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.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 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 val typedValue = TypedValue() val theme = requireContext().theme theme.resolveAttribute(com.google.android.material.R.attr.colorSurface, typedValue, true) window?.navigationBarColor = typedValue.data 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 { val alertDialog = AlertDialog.Builder(requireContext(), R.style.MyPopup) .setTitle("Logout") .setMessage("Are you sure you want to logout?") .setPositiveButton("Yes") { _, _ -> Anilist.removeSavedToken() dismiss() startMainActivity(requireActivity()) } .setNegativeButton("No") { _, _ -> } .create() alertDialog.window?.setDimAmount(0.8f) alertDialog.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 } } }