112 lines
4.5 KiB
Kotlin
112 lines
4.5 KiB
Kotlin
package ani.dantotsu.media
|
|
|
|
import android.annotation.SuppressLint
|
|
import android.os.Bundle
|
|
import android.util.TypedValue
|
|
import android.view.View
|
|
import android.view.ViewGroup
|
|
import android.view.Window
|
|
import androidx.activity.viewModels
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import androidx.core.content.ContextCompat
|
|
import androidx.core.view.updateLayoutParams
|
|
import androidx.lifecycle.MutableLiveData
|
|
import androidx.lifecycle.lifecycleScope
|
|
import ani.dantotsu.R
|
|
import ani.dantotsu.Refresh
|
|
import ani.dantotsu.databinding.ActivityListBinding
|
|
import ani.dantotsu.hideSystemBarsExtendView
|
|
import ani.dantotsu.media.user.ListViewPagerAdapter
|
|
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
|
|
import kotlinx.coroutines.Dispatchers
|
|
import kotlinx.coroutines.launch
|
|
import kotlinx.coroutines.withContext
|
|
|
|
class CalendarActivity : AppCompatActivity() {
|
|
private lateinit var binding: ActivityListBinding
|
|
private val scope = lifecycleScope
|
|
private var selectedTabIdx = 1
|
|
private val model: OtherDetailsViewModel by viewModels()
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
|
|
ThemeManager(this).applyTheme()
|
|
binding = ActivityListBinding.inflate(layoutInflater)
|
|
|
|
|
|
val typedValue = TypedValue()
|
|
theme.resolveAttribute(com.google.android.material.R.attr.colorSurface, typedValue, true)
|
|
val primaryColor = typedValue.data
|
|
val typedValue3 = TypedValue()
|
|
theme.resolveAttribute(com.google.android.material.R.attr.colorPrimary, typedValue3, true)
|
|
val primaryTextColor = typedValue3.data
|
|
val typedValue4 = TypedValue()
|
|
theme.resolveAttribute(com.google.android.material.R.attr.colorOutline, typedValue4, true)
|
|
val secondaryTextColor = typedValue4.data
|
|
|
|
window.statusBarColor = primaryColor
|
|
window.navigationBarColor = primaryColor
|
|
binding.listTabLayout.setBackgroundColor(primaryColor)
|
|
binding.listAppBar.setBackgroundColor(primaryColor)
|
|
binding.listTitle.setTextColor(primaryTextColor)
|
|
binding.listTabLayout.setTabTextColors(secondaryTextColor, primaryTextColor)
|
|
binding.listTabLayout.setSelectedTabIndicatorColor(primaryTextColor)
|
|
if (!(PrefManager.getVal(PrefName.ImmersiveMode) as Boolean)) {
|
|
this.window.statusBarColor =
|
|
ContextCompat.getColor(this, R.color.nav_bg_inv)
|
|
binding.root.fitsSystemWindows = true
|
|
|
|
} else {
|
|
binding.root.fitsSystemWindows = false
|
|
requestWindowFeature(Window.FEATURE_NO_TITLE)
|
|
hideSystemBarsExtendView()
|
|
binding.settingsContainer.updateLayoutParams<ViewGroup.MarginLayoutParams> {
|
|
topMargin = statusBarHeight
|
|
}
|
|
}
|
|
setContentView(binding.root)
|
|
|
|
binding.listTitle.setText(R.string.release_calendar)
|
|
binding.listSort.visibility = View.GONE
|
|
binding.random.visibility = View.GONE
|
|
binding.listTabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
|
|
override fun onTabSelected(tab: TabLayout.Tab?) {
|
|
this@CalendarActivity.selectedTabIdx = tab?.position ?: 1
|
|
}
|
|
|
|
override fun onTabUnselected(tab: TabLayout.Tab?) {}
|
|
override fun onTabReselected(tab: TabLayout.Tab?) {}
|
|
})
|
|
|
|
model.getCalendar().observe(this) {
|
|
if (it != null) {
|
|
binding.listProgressBar.visibility = View.GONE
|
|
binding.listViewPager.adapter = ListViewPagerAdapter(it.size, true, this)
|
|
val keys = it.keys.toList()
|
|
val values = it.values.toList()
|
|
val savedTab = this.selectedTabIdx
|
|
TabLayoutMediator(binding.listTabLayout, binding.listViewPager) { tab, position ->
|
|
tab.text = "${keys[position]} (${values[position].size})"
|
|
}.attach()
|
|
binding.listViewPager.setCurrentItem(savedTab, false)
|
|
}
|
|
}
|
|
|
|
val live = Refresh.activity.getOrPut(this.hashCode()) { MutableLiveData(true) }
|
|
live.observe(this) {
|
|
if (it) {
|
|
scope.launch {
|
|
withContext(Dispatchers.IO) { model.loadCalendar() }
|
|
live.postValue(false)
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|