diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index 3e17c5bbc..962fb2ba7 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -16,11 +16,12 @@ import androidx.fragment.app.Fragment import androidx.navigation.Navigation import androidx.navigation.fragment.FragmentNavigator import kotlinx.android.synthetic.main.fragment_home.* +import kotlinx.android.synthetic.main.fragment_home.view.* import org.mozilla.fenix.R +import org.mozilla.fenix.ext.requireComponents import org.mozilla.fenix.home.sessions.SessionsComponent import org.mozilla.fenix.home.sessions.layoutComponents import org.mozilla.fenix.mvi.ActionBusFactory -import org.mozilla.fenix.ext.requireComponents import kotlin.math.roundToInt class HomeFragment : Fragment() { @@ -28,7 +29,9 @@ class HomeFragment : Fragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - return inflater.inflate(R.layout.fragment_home, container, false) + val view = inflater.inflate(R.layout.fragment_home, container, false) + SessionsComponent(view.homeLayout, ActionBusFactory.get(this)).setup() + return view } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -43,8 +46,6 @@ class HomeFragment : Fragment() { toolbar.setOnClickListener { it -> Navigation.findNavController(it).navigate(R.id.action_homeFragment_to_searchFragment, null, null) } - - SessionsComponent(homeLayout, ActionBusFactory.get(this)).setup() layoutComponents(homeLayout) } } diff --git a/app/src/main/java/org/mozilla/fenix/home/sessions/SessionsLayouts.kt b/app/src/main/java/org/mozilla/fenix/home/sessions/SessionsLayouts.kt index b96fa2c0c..c86725f9c 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessions/SessionsLayouts.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessions/SessionsLayouts.kt @@ -2,6 +2,7 @@ package org.mozilla.fenix.home.sessions import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout.LayoutParams.PARENT_ID +import kotlinx.android.synthetic.main.component_sessions.* import kotlinx.android.synthetic.main.fragment_home.* import org.jetbrains.anko.constraint.layout.ConstraintSetBuilder.Side.* import org.jetbrains.anko.constraint.layout.applyConstraintSet diff --git a/app/src/main/java/org/mozilla/fenix/home/sessions/SessionsUIView.kt b/app/src/main/java/org/mozilla/fenix/home/sessions/SessionsUIView.kt index cf0d04992..5029f0252 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessions/SessionsUIView.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessions/SessionsUIView.kt @@ -4,21 +4,27 @@ package org.mozilla.fenix.home.sessions +import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView import io.reactivex.functions.Consumer -import kotlinx.android.synthetic.main.fragment_home.* +import org.mozilla.fenix.R import org.mozilla.fenix.mvi.ActionBusFactory import org.mozilla.fenix.mvi.UIView -class SessionsUIView(container: ViewGroup, bus: ActionBusFactory) : UIView(container, bus) { +class SessionsUIView(container: ViewGroup, bus: ActionBusFactory) : + UIView(container, bus) { - private var sessionAdapter = SessionsAdapter() + override val view: RecyclerView = LayoutInflater.from(container.context) + .inflate(R.layout.component_sessions, container, true) + .findViewById(R.id.session_list) + private val sessionsAdapter = SessionsAdapter() init { - session_list.apply { + view.apply { layoutManager = LinearLayoutManager(container.context) - adapter = sessionAdapter + adapter = sessionsAdapter } } diff --git a/app/src/main/java/org/mozilla/fenix/mvi/UIComponent.kt b/app/src/main/java/org/mozilla/fenix/mvi/UIComponent.kt index 0de58ff6b..3beea9e26 100644 --- a/app/src/main/java/org/mozilla/fenix/mvi/UIComponent.kt +++ b/app/src/main/java/org/mozilla/fenix/mvi/UIComponent.kt @@ -23,7 +23,7 @@ abstract class UIComponent(open val bus: Act * Render the ViewState to the View through the Reducer */ inline fun render(noinline reducer: Reducer): Disposable = - bus.getSafeManagedObservable(C::class.java) + getModelChangeEvents() .scan(initialState, reducer) .distinctUntilChanged() .subscribeOn(Schedulers.io()) diff --git a/app/src/main/java/org/mozilla/fenix/mvi/UIView.kt b/app/src/main/java/org/mozilla/fenix/mvi/UIView.kt index b0c8cca2d..1116b5c19 100644 --- a/app/src/main/java/org/mozilla/fenix/mvi/UIView.kt +++ b/app/src/main/java/org/mozilla/fenix/mvi/UIView.kt @@ -13,6 +13,9 @@ import kotlinx.android.extensions.LayoutContainer abstract class UIView( private val container: ViewGroup, val bus: ActionBusFactory ) : LayoutContainer { + + abstract val view: View + /** * Get the XML id for the UIView */ @@ -29,12 +32,12 @@ abstract class UIView( /** * Show the UIView */ - open fun show() { container.visibility = View.VISIBLE } + open fun show() { view.visibility = View.VISIBLE } /** * Hide the UIView */ - open fun hide() { container.visibility = View.GONE } + open fun hide() { view.visibility = View.GONE } /** * Update the view from the ViewState diff --git a/app/src/main/res/layout/component_sessions.xml b/app/src/main/res/layout/component_sessions.xml new file mode 100644 index 000000000..9c3c30702 --- /dev/null +++ b/app/src/main/res/layout/component_sessions.xml @@ -0,0 +1,11 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 3f119955d..e26323acd 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -70,16 +70,4 @@ android:textSize="14sp" /> - - \ No newline at end of file diff --git a/app/src/main/res/xml/home_scene.xml b/app/src/main/res/xml/home_scene.xml index fc40ba974..8723c2c52 100644 --- a/app/src/main/res/xml/home_scene.xml +++ b/app/src/main/res/xml/home_scene.xml @@ -81,12 +81,12 @@