1
0
Fork 0

Handle listener state bugs as onViewCreated isn't always called

master
Colin Lee 2019-02-18 15:18:55 -06:00 committed by Jeff Boek
parent 9c8df094a7
commit 291f21aa8e
4 changed files with 73 additions and 83 deletions

View File

@ -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

View File

@ -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

View File

@ -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 {

View File

@ -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) {