aboutsummaryrefslogtreecommitdiff
path: root/app/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt72
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt20
2 files changed, 62 insertions, 30 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt
index 4669418d..ca30401a 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt
@@ -123,7 +123,10 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract,
FileChooserContract by FileChooserDelegate(),
VideoViewHolder, SearchViewHolder {
- protected lateinit var adapter: SectionsPagerAdapter
+ /**
+ * Note that tabs themselves are initialized through a coroutine during onCreate
+ */
+ protected val adapter: SectionsPagerAdapter = SectionsPagerAdapter()
override val frameWrapper: FrameLayout get() = frame_wrapper
val viewPager: FrostViewPager get() = container
val cookieDao: CookieDao by inject()
@@ -136,6 +139,8 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract,
val appBar: AppBarLayout by bindView(R.id.appbar)
val coordinator: CoordinatorLayout by bindView(R.id.main_content)
+ protected var lastPosition = -1
+
override var videoViewer: FrostVideoViewer? = null
private lateinit var drawer: Drawer
private lateinit var drawerHeader: AccountHeader
@@ -156,14 +161,14 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract,
background(viewPager)
}
setSupportActionBar(toolbar)
- launch {
- adapter = SectionsPagerAdapter(tabDao.selectAll())
- viewPager.adapter = adapter
- viewPager.offscreenPageLimit = TAB_COUNT
- }
+ viewPager.adapter = adapter
+ viewPager.offscreenPageLimit = TAB_COUNT
tabs.setBackgroundColor(Prefs.mainActivityLayout.backgroundColor())
onNestedCreate(savedInstanceState)
L.i { "Main finished loading UI in ${System.currentTimeMillis() - start} ms" }
+ launch {
+ adapter.setPages(tabDao.selectAll())
+ }
controlWebview = WebView(this)
if (BuildConfig.VERSION_CODE > Prefs.versionCode) {
Prefs.prevVersionCode = Prefs.versionCode
@@ -462,16 +467,12 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract,
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
- outState.putStringArrayList(STATE_FORCE_FALLBACK, ArrayList(adapter.forcedFallbacks))
+ adapter.saveInstanceState(outState)
}
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
- adapter.forcedFallbacks.clear()
- adapter.forcedFallbacks.addAll(
- savedInstanceState.getStringArrayList(STATE_FORCE_FALLBACK)
- ?: emptyList()
- )
+ adapter.restoreInstanceState(savedInstanceState)
}
override fun onResume() {
@@ -526,9 +527,47 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract,
runOnUiThread { adapter.reloadFragment(fragment) }
}
- inner class SectionsPagerAdapter(val pages: List<FbItem>) : FragmentPagerAdapter(supportFragmentManager) {
+ inner class SectionsPagerAdapter : FragmentPagerAdapter(supportFragmentManager) {
+
+ private val pages: MutableList<FbItem> = mutableListOf()
- val forcedFallbacks = mutableSetOf<String>()
+ private val forcedFallbacks = mutableSetOf<String>()
+
+ /**
+ * Update page list and prompt reload
+ */
+ fun setPages(pages: List<FbItem>) {
+ this.pages.clear()
+ this.pages.addAll(pages)
+ notifyDataSetChanged()
+ tabs.removeAllTabs()
+ this.pages.forEachIndexed { index, fbItem ->
+ tabs.addTab(
+ tabs.newTab()
+ .setCustomView(BadgedIcon(this@BaseMainActivity).apply { iicon = fbItem.icon }.also {
+ it.setAllAlpha(if (index == 0) SELECTED_TAB_ALPHA else UNSELECTED_TAB_ALPHA)
+ })
+ )
+ }
+ lastPosition = 0
+ viewPager.setCurrentItem(0, false)
+ viewPager.post {
+ if (!fragmentChannel.isClosedForSend)
+ fragmentChannel.offer(0)
+ } //trigger hook so title is set
+ }
+
+ fun saveInstanceState(outState: Bundle) {
+ outState.putStringArrayList(STATE_FORCE_FALLBACK, ArrayList(forcedFallbacks))
+ }
+
+ fun restoreInstanceState(savedInstanceState: Bundle) {
+ forcedFallbacks.clear()
+ forcedFallbacks.addAll(
+ savedInstanceState.getStringArrayList(STATE_FORCE_FALLBACK)
+ ?: emptyList()
+ )
+ }
fun reloadFragment(fragment: BaseFragment) {
if (fragment is WebFragment) return
@@ -567,4 +606,9 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract,
PointF(0f, toolbar.height.toFloat())
else
PointF(0f, 0f)
+
+ companion object {
+ const val SELECTED_TAB_ALPHA = 255f
+ const val UNSELECTED_TAB_ALPHA = 128f
+ }
}
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt
index 75c9537b..34674cb0 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt
@@ -35,7 +35,6 @@ class MainActivity : BaseMainActivity() {
override val fragmentChannel = BroadcastChannel<Int>(10)
override val headerBadgeChannel = BroadcastChannel<String>(Channel.CONFLATED)
- var lastPosition = -1
override fun onNestedCreate(savedInstanceState: Bundle?) {
setupTabs()
@@ -54,23 +53,18 @@ class MainActivity : BaseMainActivity() {
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels)
- val delta = positionOffset * (255 - 128).toFloat()
+ val delta = positionOffset * (SELECTED_TAB_ALPHA - UNSELECTED_TAB_ALPHA)
tabsForEachView { tabPosition, view ->
view.setAllAlpha(
when (tabPosition) {
- position -> 255.0f - delta
- position + 1 -> 128.0f + delta
- else -> 128f
+ position -> SELECTED_TAB_ALPHA - delta
+ position + 1 -> UNSELECTED_TAB_ALPHA + delta
+ else -> UNSELECTED_TAB_ALPHA
}
)
}
}
})
- viewPager.post {
- if (!fragmentChannel.isClosedForSend)
- fragmentChannel.offer(0)
- lastPosition = 0
- } //trigger hook so title is set
}
private fun setupTabs() {
@@ -115,11 +109,5 @@ class MainActivity : BaseMainActivity() {
L.e(e) { "Header badge error" }
}
}
- adapter.pages.forEach {
- tabs.addTab(
- tabs.newTab()
- .setCustomView(BadgedIcon(this).apply { iicon = it.icon })
- )
- }
}
}