Dantotsu/app/src/main/java/ani/dantotsu/settings/ExtensionsActivity.kt
2024-02-06 02:16:10 -06:00

158 lines
5.9 KiB
Kotlin

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<TabLayout>(R.id.tabLayout)
val viewPager = findViewById<ViewPager2>(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<ViewGroup.LayoutParams> {
height = ViewGroup.LayoutParams.MATCH_PARENT
}
}
override fun onTabUnselected(tab: TabLayout.Tab) {
viewPager.updateLayoutParams<ViewGroup.LayoutParams> {
height = ViewGroup.LayoutParams.MATCH_PARENT
}
tabLayout.clearFocus()
}
override fun onTabReselected(tab: TabLayout.Tab) {
viewPager.updateLayoutParams<ViewGroup.LayoutParams> {
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<ViewGroup.MarginLayoutParams> {
topMargin = statusBarHeight
bottomMargin = navBarHeight
}
}
}
interface SearchQueryHandler {
fun updateContentBasedOnQuery(query: String?)
fun notifyDataChanged()
}