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?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) 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 sessionId = BrowserFragmentArgs.fromBundle(arguments!!).sessionId
(activity as AppCompatActivity).supportActionBar?.hide() (activity as AppCompatActivity).supportActionBar?.hide()
@ -184,6 +172,23 @@ class BrowserFragment : Fragment(), BackHandler {
view = view) 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") @SuppressWarnings("ReturnCount")
override fun onBackPressed(): Boolean { override fun onBackPressed(): Boolean {
if (findInPageIntegration.onBackPressed()) return true if (findInPageIntegration.onBackPressed()) return true

View File

@ -65,25 +65,6 @@ class HomeFragment : Fragment() {
(activity as AppCompatActivity).supportActionBar?.hide() (activity as AppCompatActivity).supportActionBar?.hide()
setupHomeMenu() 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 { val searchIcon = requireComponents.search.searchEngineManager.getDefaultSearchEngine(requireContext()).let {
BitmapDrawable(resources, it.icon) BitmapDrawable(resources, it.icon)
} }
@ -97,7 +78,7 @@ class HomeFragment : Fragment() {
view.toolbar.setCompoundDrawablesWithIntrinsicBounds(searchIcon, null, null, null) view.toolbar.setCompoundDrawablesWithIntrinsicBounds(searchIcon, null, null, null)
val roundToInt = (toolbarPaddingDp * Resources.getSystem().displayMetrics.density).roundToInt() val roundToInt = (toolbarPaddingDp * Resources.getSystem().displayMetrics.density).roundToInt()
view.toolbar.compoundDrawablePadding = roundToInt view.toolbar.compoundDrawablePadding = roundToInt
view.toolbar.setOnClickListener { it -> view.toolbar.setOnClickListener {
val directions = HomeFragmentDirections.actionHomeFragmentToSearchFragment(null, val directions = HomeFragmentDirections.actionHomeFragmentToSearchFragment(null,
(activity as HomeActivity).browsingModeManager.isPrivate) (activity as HomeActivity).browsingModeManager.isPrivate)
Navigation.findNavController(it).navigate(directions) Navigation.findNavController(it).navigate(directions)
@ -145,8 +126,30 @@ class HomeFragment : Fragment() {
} }
} }
override fun onResume() { override fun onStart() {
super.onResume() 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 = subscribeToSessions()
sessionObserver?.onSessionsRestored() sessionObserver?.onSessionsRestored()
} }
@ -174,68 +177,44 @@ class HomeFragment : Fragment() {
val observer = object : SessionManager.Observer { val observer = object : SessionManager.Observer {
override fun onSessionAdded(session: Session) { override fun onSessionAdded(session: Session) {
super.onSessionAdded(session) super.onSessionAdded(session)
val sessionManager = requireComponents.core.sessionManager emitSessionChanges()
getManagedEmitter<TabsChange>().onNext(
TabsChange.Changed(
sessionManager.sessions
.filter { (activity as HomeActivity).browsingModeManager.isPrivate == it.private }
.map { it.toSessionViewState(it == sessionManager.selectedSession) }
)
)
} }
override fun onSessionRemoved(session: Session) { override fun onSessionRemoved(session: Session) {
super.onSessionRemoved(session) super.onSessionRemoved(session)
val sessionManager = requireComponents.core.sessionManager emitSessionChanges()
getManagedEmitter<TabsChange>().onNext(
TabsChange.Changed(
sessionManager.sessions
.filter { (activity as HomeActivity).browsingModeManager.isPrivate == it.private }
.map { it.toSessionViewState(it == sessionManager.selectedSession) }
)
)
} }
override fun onSessionSelected(session: Session) { override fun onSessionSelected(session: Session) {
super.onSessionSelected(session) super.onSessionSelected(session)
val sessionManager = requireComponents.core.sessionManager emitSessionChanges()
getManagedEmitter<TabsChange>().onNext(
TabsChange.Changed(
sessionManager.sessions
.filter { (activity as HomeActivity).browsingModeManager.isPrivate == it.private }
.map { it.toSessionViewState(it == sessionManager.selectedSession) }
)
)
} }
override fun onSessionsRestored() { override fun onSessionsRestored() {
super.onSessionsRestored() super.onSessionsRestored()
val sessionManager = requireComponents.core.sessionManager emitSessionChanges()
getManagedEmitter<TabsChange>().onNext(
TabsChange.Changed(
sessionManager.sessions
.filter { (activity as HomeActivity).browsingModeManager.isPrivate == it.private }
.map { it.toSessionViewState(it == sessionManager.selectedSession) }
)
)
} }
override fun onAllSessionsRemoved() { override fun onAllSessionsRemoved() {
super.onAllSessionsRemoved() super.onAllSessionsRemoved()
val sessionManager = requireComponents.core.sessionManager emitSessionChanges()
getManagedEmitter<TabsChange>().onNext(
TabsChange.Changed(
sessionManager.sessions
.filter { (activity as HomeActivity).browsingModeManager.isPrivate == it.private }
.map { it.toSessionViewState(it == sessionManager.selectedSession) }
)
)
} }
} }
requireComponents.core.sessionManager.register(observer) requireComponents.core.sessionManager.register(observer)
return 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 { companion object {
const val addTabButtonIncreaseDps = 8 const val addTabButtonIncreaseDps = 8
const val overflowButtonIncreaseDps = 8 const val overflowButtonIncreaseDps = 8

View File

@ -79,6 +79,18 @@ class HistoryFragment : Fragment(), CoroutineScope, BackHandler {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) 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>() getAutoDisposeObservable<HistoryAction>()
.subscribe { .subscribe {
when (it) { when (it) {
@ -93,15 +105,6 @@ class HistoryFragment : Fragment(), CoroutineScope, BackHandler {
.onNext(HistoryChange.ExitEditMode) .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 { override fun onOptionsItemSelected(item: MenuItem): Boolean {

View File

@ -63,7 +63,10 @@ class SearchFragment : Fragment() {
lifecycle.addObserver((toolbarComponent.uiView as ToolbarUIView).toolbarIntegration) lifecycle.addObserver((toolbarComponent.uiView as ToolbarUIView).toolbarIntegration)
view.toolbar_wrapper.clipToOutline = false view.toolbar_wrapper.clipToOutline = false
}
override fun onStart() {
super.onStart()
getAutoDisposeObservable<SearchAction>() getAutoDisposeObservable<SearchAction>()
.subscribe { .subscribe {
when (it) { when (it) {