Skip to content

Commit 630d990

Browse files
committed
fix back button press
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent a57baed commit 630d990

5 files changed

Lines changed: 46 additions & 23 deletions

File tree

app/src/main/java/com/owncloud/android/ui/navigation/NavigatorActivity.kt

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import com.nextcloud.utils.extensions.getParcelableArgument
1818
import com.owncloud.android.R
1919
import com.owncloud.android.databinding.ActivityNavigatorBinding
2020
import com.owncloud.android.ui.activity.DrawerActivity
21+
import com.owncloud.android.ui.navigation.`interface`.NavigatorOnBackPressListener
22+
import com.owncloud.android.ui.navigation.model.ActionBarStyle
2123
import dagger.android.support.AndroidSupportInjection
2224

2325
class NavigatorActivity : DrawerActivity() {
@@ -50,21 +52,36 @@ class NavigatorActivity : DrawerActivity() {
5052
super.onAttachFragment(fragment)
5153
}
5254

55+
/**
56+
* Handles action bar leading button action
57+
*/
5358
override fun onOptionsItemSelected(item: MenuItem): Boolean {
5459
if (item.itemId == android.R.id.home) {
55-
val currentScreen = navigator.getTopScreen()
60+
val onBackPressListener =
61+
supportFragmentManager.fragments
62+
.filterIsInstance<NavigatorOnBackPressListener>()
63+
.firstOrNull()
5664

57-
if (currentScreen?.hasDrawer == false) {
58-
onBackPressedDispatcher.onBackPressed()
65+
if (onBackPressListener != null && onBackPressListener.canInterceptBackPress()) {
66+
onBackPressListener.interceptBackPress()
5967
} else {
60-
if (isDrawerOpen) {
61-
closeDrawer()
68+
val currentScreen = navigator.getTopScreen()
69+
70+
if (currentScreen?.hasDrawer == false) {
71+
onBackPressedDispatcher.onBackPressed()
6272
} else {
63-
openDrawer()
73+
if (isDrawerOpen) {
74+
closeDrawer()
75+
} else {
76+
openDrawer()
77+
}
6478
}
6579
}
80+
6681
return true
6782
}
83+
84+
6885
return super.onOptionsItemSelected(item)
6986
}
7087

app/src/main/java/com/owncloud/android/ui/navigation/NavigatorScreen.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.owncloud.android.R
1313
import com.owncloud.android.ui.fragment.ActivitiesFragment
1414
import com.owncloud.android.ui.fragment.community.CommunityFragment
1515
import com.owncloud.android.ui.fragment.notifications.NotificationsFragment
16+
import com.owncloud.android.ui.navigation.model.ActionBarStyle
1617
import com.owncloud.android.ui.trashbin.TrashbinFragment
1718
import kotlinx.parcelize.Parcelize
1819

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/*
2+
* Nextcloud - Android Client
3+
*
4+
* SPDX-FileCopyrightText: 2026 Alper Ozturk <alper.ozturk@nextcloud.com>
5+
* SPDX-License-Identifier: AGPL-3.0-or-later
6+
*/
7+
8+
package com.owncloud.android.ui.navigation.`interface`
9+
10+
interface NavigatorOnBackPressListener {
11+
fun canInterceptBackPress(): Boolean
12+
fun interceptBackPress()
13+
}

app/src/main/java/com/owncloud/android/ui/navigation/ActionBarStyle.kt renamed to app/src/main/java/com/owncloud/android/ui/navigation/model/ActionBarStyle.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* SPDX-License-Identifier: AGPL-3.0-or-later
66
*/
77

8-
package com.owncloud.android.ui.navigation
8+
package com.owncloud.android.ui.navigation.model
99

1010
enum class ActionBarStyle {
1111
Plain,

app/src/main/java/com/owncloud/android/ui/trashbin/TrashbinFragment.kt

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import android.view.ViewGroup
2121
import android.widget.AbsListView
2222
import android.widget.PopupMenu
2323
import android.widget.TextView
24-
import androidx.activity.OnBackPressedCallback
2524
import androidx.annotation.IdRes
2625
import androidx.annotation.VisibleForTesting
2726
import androidx.core.content.ContextCompat
@@ -51,6 +50,7 @@ import com.owncloud.android.ui.adapter.TrashbinListAdapter
5150
import com.owncloud.android.ui.dialog.SortingOrderDialogFragment.OnSortingOrderListener
5251
import com.owncloud.android.ui.interfaces.TrashbinActivityInterface
5352
import com.owncloud.android.ui.navigation.NavigatorActivity
53+
import com.owncloud.android.ui.navigation.`interface`.NavigatorOnBackPressListener
5454
import com.owncloud.android.utils.DisplayUtils
5555
import com.owncloud.android.utils.FileSortOrder
5656
import com.owncloud.android.utils.theme.ViewThemeUtils
@@ -61,6 +61,7 @@ class TrashbinFragment :
6161
TrashbinActivityInterface,
6262
OnSortingOrderListener,
6363
TrashbinContract.View,
64+
NavigatorOnBackPressListener,
6465
Injectable {
6566

6667
@Inject
@@ -98,12 +99,6 @@ class TrashbinFragment :
9899

99100
private var multiChoiceModeListener: MultiChoiceModeListener? = null
100101

101-
private val onBackPressedCallback = object : OnBackPressedCallback(true) {
102-
override fun handleOnBackPressed() {
103-
trashbinPresenter?.navigateUp()
104-
}
105-
}
106-
107102
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
108103
binding = FragmentTrashbinBinding.inflate(inflater, container, false)
109104
val binding = binding!!
@@ -131,7 +126,6 @@ class TrashbinFragment :
131126

132127
val trashRepository = RemoteTrashbinRepository(accountProvider.user, clientFactory)
133128
trashbinPresenter = TrashbinPresenter(trashRepository, this)
134-
handleBackPress()
135129
active = true
136130
setupContent()
137131
addMenuProvider()
@@ -208,13 +202,6 @@ class TrashbinFragment :
208202
}
209203
}
210204

211-
private fun handleBackPress() {
212-
requireActivity().onBackPressedDispatcher.addCallback(
213-
viewLifecycleOwner,
214-
onBackPressedCallback
215-
)
216-
}
217-
218205
fun loadFolder(onComplete: () -> Unit = {}, onError: () -> Unit = {}) {
219206
// exit action mode on data refresh
220207
multiChoiceModeListener?.exitSelectionMode()
@@ -323,7 +310,6 @@ class TrashbinFragment :
323310
override fun atRoot(isRoot: Boolean) {
324311
val navigatorActivity = getTypedActivity(NavigatorActivity::class.java)
325312
navigatorActivity?.setDrawerIndicatorEnabled(isRoot)
326-
onBackPressedCallback.isEnabled = !isRoot
327313
}
328314

329315
override fun onSortingOrderChosen(selection: FileSortOrder?) {
@@ -495,6 +481,12 @@ class TrashbinFragment :
495481
}
496482
}
497483

484+
override fun canInterceptBackPress(): Boolean = (trashbinPresenter?.isRoot == false)
485+
486+
override fun interceptBackPress() {
487+
trashbinPresenter?.navigateUp()
488+
}
489+
498490
companion object {
499491
const val EMPTY_LIST_COUNT = 1
500492
}

0 commit comments

Comments
 (0)