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?) {
|
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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue