For #355 - Adds history to the recyclerview
parent
22ab6ac934
commit
64e96495cc
|
@ -5,7 +5,6 @@
|
|||
package org.mozilla.fenix.library
|
||||
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.Menu
|
||||
import android.view.MenuInflater
|
||||
|
@ -13,12 +12,9 @@ import android.view.MenuItem
|
|||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.constraintlayout.widget.Group
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.navigation.Navigation
|
||||
import kotlinx.android.synthetic.main.fragment_library.*
|
||||
import org.jetbrains.anko.constraint.layout.group
|
||||
import org.jetbrains.anko.view
|
||||
import org.mozilla.fenix.R
|
||||
|
||||
class LibraryFragment : Fragment() {
|
||||
|
|
|
@ -4,8 +4,13 @@
|
|||
package org.mozilla.fenix.library.history
|
||||
|
||||
import android.view.ViewGroup
|
||||
import org.mozilla.fenix.home.sessions.SessionsUIView
|
||||
import org.mozilla.fenix.mvi.*
|
||||
import org.mozilla.fenix.mvi.Action
|
||||
import org.mozilla.fenix.mvi.ActionBusFactory
|
||||
import org.mozilla.fenix.mvi.Change
|
||||
import org.mozilla.fenix.mvi.UIComponent
|
||||
import org.mozilla.fenix.mvi.ViewState
|
||||
|
||||
data class HistoryItem(val url: String)
|
||||
|
||||
class HistoryComponent(
|
||||
private val container: ViewGroup,
|
||||
|
@ -19,7 +24,7 @@ class HistoryComponent(
|
|||
|
||||
override val reducer: (HistoryState, HistoryChange) -> HistoryState = { state, change ->
|
||||
when (change) {
|
||||
is HistoryChange.Changed -> state // copy state with changes here
|
||||
is HistoryChange.Change -> state.copy(items = change.list)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -30,12 +35,12 @@ class HistoryComponent(
|
|||
}
|
||||
}
|
||||
|
||||
data class HistoryState(val items: List<String>) : ViewState
|
||||
data class HistoryState(val items: List<HistoryItem>) : ViewState
|
||||
|
||||
sealed class HistoryAction : Action {
|
||||
object Select : HistoryAction()
|
||||
}
|
||||
|
||||
sealed class HistoryChange : Change {
|
||||
object Changed : HistoryChange()
|
||||
data class Change(val list: List<HistoryItem>) : HistoryChange()
|
||||
}
|
||||
|
|
|
@ -15,10 +15,21 @@ import androidx.appcompat.app.AppCompatActivity
|
|||
import androidx.fragment.app.Fragment
|
||||
import androidx.navigation.Navigation
|
||||
import kotlinx.android.synthetic.main.fragment_history.view.*
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.launch
|
||||
import org.mozilla.fenix.R
|
||||
import org.mozilla.fenix.ext.requireComponents
|
||||
import org.mozilla.fenix.mvi.ActionBusFactory
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
|
||||
class HistoryFragment : Fragment(), CoroutineScope {
|
||||
|
||||
lateinit var job: Job
|
||||
override val coroutineContext: CoroutineContext
|
||||
get() = Dispatchers.Main + job
|
||||
|
||||
class HistoryFragment : Fragment() {
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
|
@ -32,18 +43,40 @@ class HistoryFragment : Fragment() {
|
|||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
job = Job()
|
||||
|
||||
setHasOptionsMenu(true)
|
||||
(activity as AppCompatActivity).supportActionBar?.show()
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
job.cancel()
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
||||
inflater.inflate(R.menu.library_menu, menu)
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
val eventEmitter = ActionBusFactory.get(this)
|
||||
|
||||
launch {
|
||||
val items = requireComponents.core.historyStorage.getVisited().map { HistoryItem(it) }
|
||||
|
||||
launch(Dispatchers.Main) {
|
||||
eventEmitter.emit(HistoryChange::class.java, HistoryChange.Change(items))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
return when (item.itemId) {
|
||||
R.id.libraryClose -> {
|
||||
Navigation.findNavController(requireActivity(), R.id.container).popBackStack(R.id.browserFragment, false)
|
||||
Navigation.findNavController(requireActivity(), R.id.container)
|
||||
.popBackStack(R.id.browserFragment, false)
|
||||
true
|
||||
}
|
||||
R.id.librarySearch -> {
|
||||
|
|
|
@ -5,8 +5,14 @@
|
|||
|
||||
package org.mozilla.fenix.library.history
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.os.Build
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import android.widget.RelativeLayout
|
||||
import android.widget.TextView
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import io.reactivex.Observable
|
||||
|
@ -28,10 +34,43 @@ class HistoryUIView(
|
|||
|
||||
init {
|
||||
view.apply {
|
||||
adapter = HistoryAdapter(context)
|
||||
layoutManager = LinearLayoutManager(container.context)
|
||||
}
|
||||
}
|
||||
|
||||
override fun updateView() = Consumer<HistoryState> {
|
||||
(view.adapter as HistoryAdapter).updateData(it.items)
|
||||
}
|
||||
}
|
||||
|
||||
private class HistoryAdapter(val context: Context) : RecyclerView.Adapter<HistoryAdapter.ViewHolder>() {
|
||||
class ViewHolder(val textView: TextView) : RecyclerView.ViewHolder(textView)
|
||||
|
||||
private var items: List<HistoryItem> = emptyList()
|
||||
|
||||
fun updateData(items: List<HistoryItem>) {
|
||||
this.items = items
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.M)
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
||||
val textView = TextView(context).apply {
|
||||
val lp = RelativeLayout.LayoutParams(
|
||||
RelativeLayout.LayoutParams.WRAP_CONTENT, // Width of TextView
|
||||
RelativeLayout.LayoutParams.WRAP_CONTENT
|
||||
)
|
||||
setLayoutParams(lp)
|
||||
setText("This is a sample TextView...")
|
||||
setTextColor(Color.parseColor("#ff0000"))
|
||||
}
|
||||
return ViewHolder(textView)
|
||||
}
|
||||
|
||||
override fun getItemCount(): Int = items.count()
|
||||
|
||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||
holder.textView.text = "Cell: ${items[position]}"
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue