Handle listener state bugs as onViewCreated isn't always called
parent
9c8df094a7
commit
291f21aa8e
|
@ -103,18 +103,6 @@ class BrowserFragment : Fragment(), BackHandler {
|
|||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
getAutoDisposeObservable<SearchAction>()
|
||||
.subscribe {
|
||||
when (it) {
|
||||
is SearchAction.ToolbarTapped -> Navigation.findNavController(toolbar)
|
||||
.navigate(BrowserFragmentDirections.actionBrowserFragmentToSearchFragment(
|
||||
requireComponents.core.sessionManager.selectedSession?.id,
|
||||
(activity as HomeActivity).browsingModeManager.isPrivate
|
||||
))
|
||||
is SearchAction.ToolbarMenuItemTapped -> handleToolbarItemInteraction(it)
|
||||
}
|
||||
}
|
||||
|
||||
sessionId = BrowserFragmentArgs.fromBundle(arguments!!).sessionId
|
||||
|
||||
(activity as AppCompatActivity).supportActionBar?.hide()
|
||||
|
@ -184,6 +172,23 @@ class BrowserFragment : Fragment(), BackHandler {
|
|||
view = view)
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
getAutoDisposeObservable<SearchAction>()
|
||||
.subscribe {
|
||||
when (it) {
|
||||
is SearchAction.ToolbarTapped -> Navigation.findNavController(toolbar)
|
||||
.navigate(
|
||||
BrowserFragmentDirections.actionBrowserFragmentToSearchFragment(
|
||||
requireComponents.core.sessionManager.selectedSession?.id,
|
||||
(activity as HomeActivity).browsingModeManager.isPrivate
|
||||
)
|
||||
)
|
||||
is SearchAction.ToolbarMenuItemTapped -> handleToolbarItemInteraction(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("ReturnCount")
|
||||
override fun onBackPressed(): Boolean {
|
||||
if (findInPageIntegration.onBackPressed()) return true
|
||||
|
|
|
@ -65,25 +65,6 @@ class HomeFragment : Fragment() {
|
|||
(activity as AppCompatActivity).supportActionBar?.hide()
|
||||
setupHomeMenu()
|
||||
|
||||
getAutoDisposeObservable<TabsAction>()
|
||||
.subscribe {
|
||||
when (it) {
|
||||
is TabsAction.Select -> {
|
||||
val session = requireComponents.core.sessionManager.findSessionById(it.sessionId)
|
||||
requireComponents.core.sessionManager.select(session!!)
|
||||
val directions = HomeFragmentDirections.actionHomeFragmentToBrowserFragment(
|
||||
it.sessionId,
|
||||
(activity as HomeActivity).browsingModeManager.isPrivate)
|
||||
Navigation.findNavController(view).navigate(directions)
|
||||
}
|
||||
is TabsAction.Close -> {
|
||||
requireComponents.core.sessionManager.findSessionById(it.sessionId)?.let { session ->
|
||||
requireComponents.core.sessionManager.remove(session)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val searchIcon = requireComponents.search.searchEngineManager.getDefaultSearchEngine(requireContext()).let {
|
||||
BitmapDrawable(resources, it.icon)
|
||||
}
|
||||
|
@ -97,7 +78,7 @@ class HomeFragment : Fragment() {
|
|||
view.toolbar.setCompoundDrawablesWithIntrinsicBounds(searchIcon, null, null, null)
|
||||
val roundToInt = (toolbarPaddingDp * Resources.getSystem().displayMetrics.density).roundToInt()
|
||||
view.toolbar.compoundDrawablePadding = roundToInt
|
||||
view.toolbar.setOnClickListener { it ->
|
||||
view.toolbar.setOnClickListener {
|
||||
val directions = HomeFragmentDirections.actionHomeFragmentToSearchFragment(null,
|
||||
(activity as HomeActivity).browsingModeManager.isPrivate)
|
||||
Navigation.findNavController(it).navigate(directions)
|
||||
|
@ -145,8 +126,30 @@ class HomeFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
if (isAdded) {
|
||||
getAutoDisposeObservable<TabsAction>()
|
||||
.subscribe {
|
||||
when (it) {
|
||||
is TabsAction.Select -> {
|
||||
val session = requireComponents.core.sessionManager.findSessionById(it.sessionId)
|
||||
requireComponents.core.sessionManager.select(session!!)
|
||||
val directions = HomeFragmentDirections.actionHomeFragmentToBrowserFragment(
|
||||
it.sessionId,
|
||||
(activity as HomeActivity).browsingModeManager.isPrivate
|
||||
)
|
||||
Navigation.findNavController(view!!).navigate(directions)
|
||||
}
|
||||
is TabsAction.Close -> {
|
||||
requireComponents.core.sessionManager.findSessionById(it.sessionId)?.let { session ->
|
||||
requireComponents.core.sessionManager.remove(session)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sessionObserver = subscribeToSessions()
|
||||
sessionObserver?.onSessionsRestored()
|
||||
}
|
||||
|
@ -174,68 +177,44 @@ class HomeFragment : Fragment() {
|
|||
val observer = object : SessionManager.Observer {
|
||||
override fun onSessionAdded(session: Session) {
|
||||
super.onSessionAdded(session)
|
||||
val sessionManager = requireComponents.core.sessionManager
|
||||
getManagedEmitter<TabsChange>().onNext(
|
||||
TabsChange.Changed(
|
||||
sessionManager.sessions
|
||||
.filter { (activity as HomeActivity).browsingModeManager.isPrivate == it.private }
|
||||
.map { it.toSessionViewState(it == sessionManager.selectedSession) }
|
||||
)
|
||||
)
|
||||
emitSessionChanges()
|
||||
}
|
||||
|
||||
override fun onSessionRemoved(session: Session) {
|
||||
super.onSessionRemoved(session)
|
||||
val sessionManager = requireComponents.core.sessionManager
|
||||
getManagedEmitter<TabsChange>().onNext(
|
||||
TabsChange.Changed(
|
||||
sessionManager.sessions
|
||||
.filter { (activity as HomeActivity).browsingModeManager.isPrivate == it.private }
|
||||
.map { it.toSessionViewState(it == sessionManager.selectedSession) }
|
||||
)
|
||||
)
|
||||
emitSessionChanges()
|
||||
}
|
||||
|
||||
override fun onSessionSelected(session: Session) {
|
||||
super.onSessionSelected(session)
|
||||
val sessionManager = requireComponents.core.sessionManager
|
||||
getManagedEmitter<TabsChange>().onNext(
|
||||
TabsChange.Changed(
|
||||
sessionManager.sessions
|
||||
.filter { (activity as HomeActivity).browsingModeManager.isPrivate == it.private }
|
||||
.map { it.toSessionViewState(it == sessionManager.selectedSession) }
|
||||
)
|
||||
)
|
||||
emitSessionChanges()
|
||||
}
|
||||
|
||||
override fun onSessionsRestored() {
|
||||
super.onSessionsRestored()
|
||||
val sessionManager = requireComponents.core.sessionManager
|
||||
getManagedEmitter<TabsChange>().onNext(
|
||||
TabsChange.Changed(
|
||||
sessionManager.sessions
|
||||
.filter { (activity as HomeActivity).browsingModeManager.isPrivate == it.private }
|
||||
.map { it.toSessionViewState(it == sessionManager.selectedSession) }
|
||||
)
|
||||
)
|
||||
emitSessionChanges()
|
||||
}
|
||||
|
||||
override fun onAllSessionsRemoved() {
|
||||
super.onAllSessionsRemoved()
|
||||
val sessionManager = requireComponents.core.sessionManager
|
||||
getManagedEmitter<TabsChange>().onNext(
|
||||
TabsChange.Changed(
|
||||
sessionManager.sessions
|
||||
.filter { (activity as HomeActivity).browsingModeManager.isPrivate == it.private }
|
||||
.map { it.toSessionViewState(it == sessionManager.selectedSession) }
|
||||
)
|
||||
)
|
||||
emitSessionChanges()
|
||||
}
|
||||
}
|
||||
requireComponents.core.sessionManager.register(observer)
|
||||
return observer
|
||||
}
|
||||
|
||||
private fun emitSessionChanges() {
|
||||
val sessionManager = requireComponents.core.sessionManager
|
||||
getManagedEmitter<TabsChange>().onNext(
|
||||
TabsChange.Changed(
|
||||
sessionManager.sessions
|
||||
.filter { (activity as HomeActivity).browsingModeManager.isPrivate == it.private }
|
||||
.map { it.toSessionViewState(it == sessionManager.selectedSession) }
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val addTabButtonIncreaseDps = 8
|
||||
const val overflowButtonIncreaseDps = 8
|
||||
|
|
|
@ -79,6 +79,18 @@ class HistoryFragment : Fragment(), CoroutineScope, BackHandler {
|
|||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
launch(Dispatchers.IO) {
|
||||
val items = requireComponents.core.historyStorage.getVisited()
|
||||
.mapIndexed { id, item -> HistoryItem(id, item) }
|
||||
|
||||
launch(Dispatchers.Main) {
|
||||
getManagedEmitter<HistoryChange>().onNext(HistoryChange.Change(items))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
getAutoDisposeObservable<HistoryAction>()
|
||||
.subscribe {
|
||||
when (it) {
|
||||
|
@ -93,15 +105,6 @@ class HistoryFragment : Fragment(), CoroutineScope, BackHandler {
|
|||
.onNext(HistoryChange.ExitEditMode)
|
||||
}
|
||||
}
|
||||
|
||||
launch(Dispatchers.IO) {
|
||||
val items = requireComponents.core.historyStorage.getVisited()
|
||||
.mapIndexed { id, item -> HistoryItem(id, item) }
|
||||
|
||||
launch(Dispatchers.Main) {
|
||||
getManagedEmitter<HistoryChange>().onNext(HistoryChange.Change(items))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
|
|
|
@ -63,7 +63,10 @@ class SearchFragment : Fragment() {
|
|||
lifecycle.addObserver((toolbarComponent.uiView as ToolbarUIView).toolbarIntegration)
|
||||
|
||||
view.toolbar_wrapper.clipToOutline = false
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
getAutoDisposeObservable<SearchAction>()
|
||||
.subscribe {
|
||||
when (it) {
|
||||
|
|
Loading…
Reference in New Issue