Skip to content

Commit 132c96a

Browse files
committed
Handling tabs in pageFragment
1 parent dc4de2b commit 132c96a

File tree

4 files changed

+33
-11
lines changed

4 files changed

+33
-11
lines changed

app/src/main/java/org/wikipedia/page/PageActivity.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,11 +409,14 @@ class PageActivity : BaseActivity(), PageFragment.Callback, LinkPreviewDialog.Lo
409409
removeTransitionAnimState()
410410
maybeShowThemeTooltip()
411411
runBlocking {
412+
L.d("onPageLoadComplete " + pageFragment.currentTab.id)
413+
L.d("onPageLoadComplete size " + pageFragment.currentTab.backStack.size)
412414
if (pageFragment.currentTab.id != 0L) {
413415
TabHelper.updateTab(pageFragment.currentTab)
414416
} else {
415417
TabHelper.insertTabs(listOf(pageFragment.currentTab))
416418
}
419+
pageFragment.setTab(TabHelper.getCurrentTab())
417420
}
418421
}
419422

@@ -639,6 +642,7 @@ class PageActivity : BaseActivity(), PageFragment.Callback, LinkPreviewDialog.Lo
639642
}
640643

641644
private fun loadFilePageFromBackStackIfNeeded() {
645+
pageFragment.initTab()
642646
if (pageFragment.currentTab.backStack.isNotEmpty()) {
643647
val item = pageFragment.currentTab.backStack[pageFragment.currentTab.backStackPosition]
644648
loadNonArticlePageIfNeeded(item.getPageTitle())

app/src/main/java/org/wikipedia/page/PageFragment.kt

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ class PageFragment : Fragment(), BackPressedHandler, CommunicationBridge.Communi
199199
_binding = FragmentPageBinding.inflate(inflater, container, false)
200200
webView = binding.pageWebView
201201
initWebViewListeners()
202+
initTab()
202203
binding.pageRefreshContainer.scrollableChild = webView
203204
binding.pageRefreshContainer.setOnRefreshListener(pageRefreshListener)
204205
val swipeOffset = DimenUtil.getContentTopOffsetPx(requireActivity()) + REFRESH_SPINNER_ADDITIONAL_OFFSET
@@ -242,11 +243,6 @@ class PageFragment : Fragment(), BackPressedHandler, CommunicationBridge.Communi
242243
}
243244
}
244245

245-
// TODO: use coroutines if we have viewModel
246-
runBlocking {
247-
currentTab = TabHelper.getCurrentTab()
248-
}
249-
250246
editHandler = EditHandler(this, bridge)
251247
sidePanelHandler = SidePanelHandler(this, bridge)
252248
leadImagesHandler = LeadImagesHandler(this, webView, binding.pageHeaderView, callback())
@@ -526,6 +522,18 @@ class PageFragment : Fragment(), BackPressedHandler, CommunicationBridge.Communi
526522
}
527523
}
528524

525+
fun initTab() {
526+
// TODO: use coroutines if we have viewModel
527+
runBlocking {
528+
currentTab = TabHelper.getCurrentTab()
529+
}
530+
}
531+
532+
fun setTab(tab: Tab) {
533+
currentTab = tab
534+
pageFragmentLoadState.setTab(tab)
535+
}
536+
529537
private fun openInNewTab(title: PageTitle, entry: HistoryEntry, toForeground: Boolean) {
530538
val selectedTab = TabHelper.findTabByTitle(title)
531539
if (selectedTab != null) {
@@ -930,6 +938,9 @@ class PageFragment : Fragment(), BackPressedHandler, CommunicationBridge.Communi
930938
// handler), since the page metadata might have altered the lead image display state.
931939
bridge.execute(JavaScriptActionHandler.setTopMargin(leadImagesHandler.topMargin))
932940
bridge.execute(JavaScriptActionHandler.setFooter(model))
941+
942+
// Update the currentTab from the pageLoadState
943+
currentTab = pageFragmentLoadState.getCurrentTab()
933944
}
934945

935946
fun openInNewBackgroundTab(title: PageTitle, entry: HistoryEntry) {

app/src/main/java/org/wikipedia/page/PageFragmentLoadState.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ class PageFragmentLoadState(private var model: PageViewModel,
7979
return isDifferent
8080
}
8181

82+
fun getCurrentTab(): Tab {
83+
return currentTab
84+
}
85+
8286
fun goBack(): Boolean {
8387
if (currentTab.canGoBack()) {
8488
currentTab.moveBack()

app/src/main/java/org/wikipedia/page/tabs/TabHelper.kt

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,11 @@ object TabHelper {
3333
count = tabs.size
3434
}
3535

36-
fun getCurrentTab(): Tab {
37-
// TODO: handle this with coroutines if we have viewModel
38-
return runBlocking {
36+
suspend fun getCurrentTab(): Tab {
37+
return withContext(Dispatchers.IO) {
3938
val foregroundTab = AppDatabase.instance.tabDao().getForegroundTab()
4039
if (foregroundTab == null) {
41-
return@runBlocking Tab()
40+
return@withContext Tab()
4241
}
4342
// Use the backStackIds to get the full backStack items from the database
4443
val backStackItems = AppDatabase.instance.pageBackStackItemDao()
@@ -173,10 +172,12 @@ object TabHelper {
173172
// Find the existing tab in the database
174173
val existingTab = AppDatabase.instance.tabDao().getTabById(tab.id)
175174
if (existingTab != null) {
175+
L.d("onPageLoadComplete existingTab " + existingTab.id)
176176
// First, find removed backstack items
177177
val removedBackStacks =
178-
existingTab.getBackStackIds().subtract(tab.getBackStackIds()).filter { it != -1L }
178+
existingTab.getBackStackIds().subtract(tab.getBackStackIds()).filter { it != 0L }
179179
if (removedBackStacks.isNotEmpty()) {
180+
L.d("onPageLoadComplete removedBackStacks")
180181
// Delete removed backstack items from the database
181182
AppDatabase.instance.pageBackStackItemDao()
182183
.deletePageBackStackItemsById(removedBackStacks.toList())
@@ -186,7 +187,8 @@ object TabHelper {
186187
val backStackIds = mutableListOf<Long>()
187188
tab.backStack.forEach { item ->
188189
var backStackId = item.id
189-
if (item.id == -1L) {
190+
L.d("onPageLoadComplete backStack $backStackId")
191+
if (item.id == 0L) {
190192
val newId = AppDatabase.instance.pageBackStackItemDao()
191193
.insertPageBackStackItem(item)
192194
backStackId = newId
@@ -195,6 +197,7 @@ object TabHelper {
195197
}
196198

197199
// Finally, update the tab with the new backStackIds and order
200+
L.d("onPageLoadComplete $backStackIds")
198201
tab.setBackStackIds(backStackIds)
199202
AppDatabase.instance.tabDao().updateTab(tab)
200203
updateTabCount()

0 commit comments

Comments
 (0)