package ani.dantotsu.settings import android.app.AlertDialog 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.R import ani.dantotsu.currContext import ani.dantotsu.databinding.ActivityExtensionsBinding import ani.dantotsu.initActivity import ani.dantotsu.navBarHeight import ani.dantotsu.others.AndroidBug5497Workaround import ani.dantotsu.others.LanguageMapper import ani.dantotsu.settings.saving.PrefManager import ani.dantotsu.settings.saving.PrefName import ani.dantotsu.statusBarHeight 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 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ThemeManager(this).applyTheme() binding = ActivityExtensionsBinding.inflate(layoutInflater) setContentView(binding.root) initActivity(this) AndroidBug5497Workaround.assistActivity(this) { if (it) { binding.searchView.updateLayoutParams { bottomMargin = statusBarHeight } } else { binding.searchView.updateLayoutParams { bottomMargin = statusBarHeight + navBarHeight } } } binding.searchView.updateLayoutParams { bottomMargin = statusBarHeight + navBarHeight } 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() }