aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt
diff options
context:
space:
mode:
authorAllan Wang <me@allanwang.ca>2017-12-31 00:42:49 -0500
committerGitHub <noreply@github.com>2017-12-31 00:42:49 -0500
commit3076d9a97c203497aec1415d8ac6037d10eebb46 (patch)
treecdeb914fa95f2b230f6327be3e1527d15b41dc94 /app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt
parent041bafcceadbd5203e95f2692899ac903dd2e883 (diff)
downloadfrost-3076d9a97c203497aec1415d8ac6037d10eebb46.tar.gz
frost-3076d9a97c203497aec1415d8ac6037d10eebb46.tar.bz2
frost-3076d9a97c203497aec1415d8ac6037d10eebb46.zip
feature/menu-parser (#582)
* Test menu parser * Add menu fragment implementation * Test proguard * Clean up * Use async * Use invoke * Try without proguard * Try 2 * Add fallback logic * Use normal notification event * Add custom event flag * Add rest of menu fragment data * Ensure fallback works * Update docs
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt')
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt64
1 files changed, 43 insertions, 21 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 0d4ea46c..64a3d14c 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt
@@ -16,7 +16,6 @@ import android.support.design.widget.CoordinatorLayout
import android.support.design.widget.FloatingActionButton
import android.support.design.widget.TabLayout
import android.support.v4.app.Fragment
-import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentPagerAdapter
import android.support.v7.widget.Toolbar
import android.view.Menu
@@ -58,6 +57,7 @@ import com.pitchedapps.frost.facebook.FbCookie
import com.pitchedapps.frost.facebook.FbItem
import com.pitchedapps.frost.facebook.PROFILE_PICTURE_URL
import com.pitchedapps.frost.fragments.BaseFragment
+import com.pitchedapps.frost.fragments.WebFragment
import com.pitchedapps.frost.parsers.FrostSearch
import com.pitchedapps.frost.parsers.SearchParser
import com.pitchedapps.frost.utils.*
@@ -80,7 +80,7 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract,
VideoViewHolder, SearchViewHolder,
FrostBilling by IabMain() {
- lateinit var adapter: SectionsPagerAdapter
+ protected lateinit var adapter: SectionsPagerAdapter
override val frameWrapper: FrameLayout by bindView(R.id.frame_wrapper)
val toolbar: Toolbar by bindView(R.id.toolbar)
val viewPager: FrostViewPager by bindView(R.id.container)
@@ -114,7 +114,7 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract,
controlWebview = WebView(this)
setFrameContentView(Prefs.mainActivityLayout.layoutRes)
setSupportActionBar(toolbar)
- adapter = SectionsPagerAdapter(supportFragmentManager, loadFbTabs())
+ adapter = SectionsPagerAdapter(loadFbTabs())
viewPager.adapter = adapter
viewPager.offscreenPageLimit = TAB_COUNT
setupDrawer(savedInstanceState)
@@ -335,6 +335,19 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract,
}
}
+ private val STATE_FORCE_FALLBACK = "frost_state_force_fallback"
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ outState.putStringArrayList(STATE_FORCE_FALLBACK, ArrayList(adapter.forcedFallbacks))
+ }
+
+ override fun onRestoreInstanceState(savedInstanceState: Bundle) {
+ super.onRestoreInstanceState(savedInstanceState)
+ adapter.forcedFallbacks.clear()
+ adapter.forcedFallbacks.addAll(savedInstanceState.getStringArrayList(STATE_FORCE_FALLBACK))
+ }
+
override fun onResume() {
super.onResume()
FbCookie.switchBackUser { }
@@ -384,32 +397,41 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract,
inline val currentFragment
get() = supportFragmentManager.findFragmentByTag("android:switcher:${R.id.container}:${viewPager.currentItem}") as BaseFragment
- inner class SectionsPagerAdapter(fm: FragmentManager, val pages: List<FbItem>) : FragmentPagerAdapter(fm) {
+ override fun reloadFragment(fragment: BaseFragment) {
+ runOnUiThread { adapter.reloadFragment(fragment) }
+ }
+
+ inner class SectionsPagerAdapter(val pages: List<FbItem>) : FragmentPagerAdapter(supportFragmentManager) {
+
+ val forcedFallbacks = mutableSetOf<String>()
+
+ fun reloadFragment(fragment: BaseFragment) {
+ if (fragment is WebFragment) return
+ L.d("Reload fragment ${fragment.position}: ${fragment.baseEnum.name}")
+ forcedFallbacks.add(fragment.baseEnum.name)
+ supportFragmentManager.beginTransaction().remove(fragment).commitNowAllowingStateLoss()
+ notifyDataSetChanged()
+ }
override fun getItem(position: Int): Fragment {
val item = pages[position]
- val fragment = BaseFragment(item.fragmentCreator, item, position)
- //If first load hasn't occurred, add a listener
- // todo check
-// if (!firstLoadFinished) {
-// var disposable: Disposable? = null
-// fragment.post {
-// disposable = it.web.refreshObservable.subscribe {
-// if (!it) {
-// //Ensure first load finisher only happens once
-// if (!firstLoadFinished) firstLoadFinished = true
-// disposable?.dispose()
-// disposable = null
-// }
-// }
-// }
-// }
- return fragment
+ return BaseFragment(item.fragmentCreator,
+ forcedFallbacks.contains(item.name),
+ item,
+ position)
}
override fun getCount() = pages.size
override fun getPageTitle(position: Int): CharSequence = getString(pages[position].titleId)
+
+ override fun getItemPosition(fragment: Any) =
+ if (fragment !is BaseFragment)
+ POSITION_UNCHANGED
+ else if (fragment is WebFragment || fragment.valid)
+ POSITION_UNCHANGED
+ else
+ POSITION_NONE
}
override val lowerVideoPadding: PointF