package ani.dantotsu.settings import android.annotation.SuppressLint import android.app.AlertDialog import android.os.Build.* import android.os.Build.VERSION.* import android.os.Bundle import android.text.Editable import android.text.TextWatcher import android.view.View import android.view.ViewGroup import android.widget.AutoCompleteTextView import androidx.appcompat.app.AppCompatActivity import androidx.core.view.updateLayoutParams import androidx.fragment.app.Fragment import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.widget.ViewPager2 import ani.dantotsu.* import ani.dantotsu.databinding.ActivityExtensionsBinding import ani.dantotsu.others.LanguageMapper import ani.dantotsu.settings.saving.PrefManager import ani.dantotsu.settings.saving.PrefName import ani.dantotsu.themes.ThemeManager import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayoutMediator class ExtensionsActivity : AppCompatActivity() { lateinit var binding: ActivityExtensionsBinding @SuppressLint("SetTextI18n") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ThemeManager(this).applyTheme() binding = ActivityExtensionsBinding.inflate(layoutInflater) setContentView(binding.root) val tabLayout = findViewById(R.id.tabLayout) val viewPager = findViewById(R.id.viewPager) viewPager.offscreenPageLimit = 1 viewPager.adapter = object : FragmentStateAdapter(this) { override fun getItemCount(): Int = 6 override fun createFragment(position: Int): Fragment { return when (position) { 0 -> InstalledAnimeExtensionsFragment() 1 -> AnimeExtensionsFragment() 2 -> InstalledMangaExtensionsFragment() 3 -> MangaExtensionsFragment() 4 -> InstalledNovelExtensionsFragment() 5 -> NovelExtensionsFragment() else -> AnimeExtensionsFragment() } } } val searchView: AutoCompleteTextView = findViewById(R.id.searchViewText) tabLayout.addOnTabSelectedListener( object : TabLayout.OnTabSelectedListener { override fun onTabSelected(tab: TabLayout.Tab) { searchView.setText("") searchView.clearFocus() tabLayout.clearFocus() if (tab.text?.contains("Installed") == true) binding.languageselect.visibility = View.GONE else binding.languageselect.visibility = View.VISIBLE viewPager.updateLayoutParams { height = ViewGroup.LayoutParams.MATCH_PARENT } } override fun onTabUnselected(tab: TabLayout.Tab) { viewPager.updateLayoutParams { height = ViewGroup.LayoutParams.MATCH_PARENT } tabLayout.clearFocus() } override fun onTabReselected(tab: TabLayout.Tab) { viewPager.updateLayoutParams { height = ViewGroup.LayoutParams.MATCH_PARENT } // Do nothing } } ) TabLayoutMediator(tabLayout, viewPager) { tab, position -> tab.text = when (position) { 0 -> "Installed Anime" 1 -> "Available Anime" 2 -> "Installed Manga" 3 -> "Available Manga" 4 -> "Installed Novels" 5 -> "Available Novels" else -> null } }.attach() searchView.addTextChangedListener(object : TextWatcher { override fun afterTextChanged(s: Editable?) { } override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { } override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { val currentFragment = supportFragmentManager.findFragmentByTag("f${viewPager.currentItem}") if (currentFragment is SearchQueryHandler) { currentFragment.updateContentBasedOnQuery(s?.toString()?.trim()) } } }) initActivity(this) binding.languageselect.setOnClickListener { val languageOptions = LanguageMapper.Companion.Language.entries.map { it.name }.toTypedArray() val builder = AlertDialog.Builder(currContext(), R.style.MyPopup) val listOrder: String = PrefManager.getVal(PrefName.LangSort) val index = LanguageMapper.Companion.Language.entries.toTypedArray() .indexOfFirst { it.code == listOrder } builder.setTitle("Language") builder.setSingleChoiceItems(languageOptions, index) { dialog, i -> PrefManager.setVal( PrefName.LangSort, LanguageMapper.Companion.Language.entries[i].code ) val currentFragment = supportFragmentManager.findFragmentByTag("f${viewPager.currentItem}") if (currentFragment is SearchQueryHandler) { currentFragment.notifyDataChanged() } dialog.dismiss() } val dialog = builder.show() dialog.window?.setDimAmount(0.8f) } binding.settingsContainer.updateLayoutParams { topMargin = statusBarHeight bottomMargin = navBarHeight } } } interface SearchQueryHandler { fun updateContentBasedOnQuery(query: String?) fun notifyDataChanged() }