From b9171cd99ae40316ca6f7c77a1494243ac54f4c7 Mon Sep 17 00:00:00 2001 From: Jeff Boek Date: Fri, 8 Feb 2019 17:06:47 -0800 Subject: [PATCH] For #355 - Navigat back to brows when you tap a history item --- .../fenix/library/history/HistoryComponent.kt | 3 +- .../fenix/library/history/HistoryFragment.kt | 13 ++++++++ .../fenix/library/history/HistoryUIView.kt | 31 +++++++++++++------ app/src/main/res/layout/history_list_item.xml | 3 ++ 4 files changed, 39 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/library/history/HistoryComponent.kt b/app/src/main/java/org/mozilla/fenix/library/history/HistoryComponent.kt index 34501cf4e..e6885546a 100644 --- a/app/src/main/java/org/mozilla/fenix/library/history/HistoryComponent.kt +++ b/app/src/main/java/org/mozilla/fenix/library/history/HistoryComponent.kt @@ -15,6 +15,7 @@ data class HistoryItem(val url: String) { val title: String get() = siteTitle() + @SuppressWarnings("TooGenericExceptionCaught") private fun siteTitle(): String { return try { URL(url).host @@ -50,7 +51,7 @@ class HistoryComponent( data class HistoryState(val items: List) : ViewState sealed class HistoryAction : Action { - object Select : HistoryAction() + data class Select(val item: HistoryItem) : HistoryAction() } sealed class HistoryChange : Change { diff --git a/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt b/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt index de1a875ba..85768dd62 100644 --- a/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt @@ -4,6 +4,7 @@ package org.mozilla.fenix.library.history +import android.annotation.SuppressLint import android.os.Bundle import android.view.LayoutInflater import android.view.Menu @@ -22,6 +23,7 @@ import kotlinx.coroutines.launch import org.mozilla.fenix.R import org.mozilla.fenix.ext.requireComponents import org.mozilla.fenix.mvi.ActionBusFactory +import org.mozilla.fenix.mvi.getSafeManagedObservable import kotlin.coroutines.CoroutineContext class HistoryFragment : Fragment(), CoroutineScope { @@ -41,12 +43,23 @@ class HistoryFragment : Fragment(), CoroutineScope { return view } + @SuppressLint("CheckResult") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) job = Job() setHasOptionsMenu(true) (activity as AppCompatActivity).supportActionBar?.show() + + getSafeManagedObservable() + .subscribe { + if (it is HistoryAction.Select) { + Navigation.findNavController(requireActivity(), R.id.container) + .popBackStack(R.id.browserFragment, false) + + requireComponents.useCases.sessionUseCases.loadUrl.invoke(it.item.url) + } + } } override fun onDestroy() { diff --git a/app/src/main/java/org/mozilla/fenix/library/history/HistoryUIView.kt b/app/src/main/java/org/mozilla/fenix/library/history/HistoryUIView.kt index f1dde63fb..4174601f2 100644 --- a/app/src/main/java/org/mozilla/fenix/library/history/HistoryUIView.kt +++ b/app/src/main/java/org/mozilla/fenix/library/history/HistoryUIView.kt @@ -5,16 +5,10 @@ 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.View import android.view.ViewGroup -import android.widget.RelativeLayout import android.widget.TextView -import androidx.annotation.RequiresApi -import androidx.constraintlayout.widget.ConstraintLayout import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import io.reactivex.Observable @@ -36,7 +30,7 @@ class HistoryUIView( init { view.apply { - adapter = HistoryAdapter(context) + adapter = HistoryAdapter(actionEmitter) layoutManager = LinearLayoutManager(container.context) } } @@ -46,12 +40,29 @@ class HistoryUIView( } } -private class HistoryAdapter(val context: Context) : RecyclerView.Adapter() { - class HistoryListItemViewHolder(val view: View) : RecyclerView.ViewHolder(view) { +private class HistoryAdapter( + private val actionEmitter: Observer +) : RecyclerView.Adapter() { + class HistoryListItemViewHolder( + view: View, + private val actionEmitter: Observer + ) : RecyclerView.ViewHolder(view) { + private var title = view.findViewById(R.id.history_title) private var url = view.findViewById(R.id.history_url) + private var item: HistoryItem? = null + + init { + view.setOnClickListener { + item?.apply { + actionEmitter.onNext(HistoryAction.Select(this)) + } + } + } fun bind(item: HistoryItem) { + this.item = item + title.text = item.title url.text = item.url } @@ -71,7 +82,7 @@ private class HistoryAdapter(val context: Context) : RecyclerView.Adapter