Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import android.view.Menu
import android.view.MenuItem
import android.view.WindowManager
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.fragment.app.DialogFragment
Expand Down Expand Up @@ -225,6 +226,18 @@ abstract class BaseActivity<VB : ViewBinding>(val bindingFactory: (LayoutInflate
transaction.commit()
}

/**
* Hands the back event over to the system (which finishes this activity) while the given [callback] is disabled,
* so that the callback does not handle its own dispatch.
*
* @param callback The activity's back callback that decided not to handle the event itself.
*/
internal fun performDefaultBackPressed(callback: OnBackPressedCallback) {
callback.isEnabled = false
onBackPressedDispatcher.onBackPressed()
callback.isEnabled = true
}

override fun getComponent(): ActivityComponent? = activityComponent

override fun activity(): android.app.Activity = this
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import android.content.Intent
import android.content.IntentFilter
import android.view.Menu
import android.view.View
import androidx.activity.OnBackPressedCallback
import androidx.appcompat.widget.SearchView
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.Fragment
Expand Down Expand Up @@ -86,6 +87,7 @@ class BrowseFilesActivity : BaseActivity<ActivityLayoutBinding>(ActivityLayoutBi
override fun setupView() {
setupToolbar()
setupNavigationMode()
setupBackPressedCallback()
}

private fun setupNavigationMode() {
Expand Down Expand Up @@ -130,26 +132,32 @@ class BrowseFilesActivity : BaseActivity<ActivityLayoutBinding>(ActivityLayoutBi
}.also { LocalBroadcastManager.getInstance(this).registerReceiver(it, IntentFilter(CryptorsService.SCREEN_AND_VAULT_LOCKED)) }
}

override fun onBackPressed() {
browseFilesPresenter.onBackPressed()
when {
isNavigationMode(SELECT_ITEMS) -> {
browseFilesPresenter.disableSelectionMode()
}
supportFragmentManager.backStackEntryCount > 0 -> {
supportFragmentManager.popBackStack()
}
hasCloudNodeSettings() && isNavigationMode(MOVE_CLOUD_NODE) && browseFilesFragment().folder.hasParent() -> {
browseFilesFragment().folder.parent?.let {
createBackStackFor(it)
} ?: throw ParentFolderIsNullException(browseFilesFragment().folder.name)
}
else -> {
super.onBackPressed()
private val backPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
browseFilesPresenter.onBackPressed()
when {
isNavigationMode(SELECT_ITEMS) -> {
browseFilesPresenter.disableSelectionMode()
}
supportFragmentManager.backStackEntryCount > 0 -> {
supportFragmentManager.popBackStack()
}
hasCloudNodeSettings() && isNavigationMode(MOVE_CLOUD_NODE) && browseFilesFragment().folder.hasParent() -> {
browseFilesFragment().folder.parent?.let {
createBackStackFor(it)
} ?: throw ParentFolderIsNullException(browseFilesFragment().folder.name)
}
else -> {
performDefaultBackPressed(this)
}
}
}
}

private fun setupBackPressedCallback() {
onBackPressedDispatcher.addCallback(this, backPressedCallback)
}

private fun isNavigationMode(navigationMode: ChooseCloudNodeSettings.NavigationMode): Boolean = this.navigationMode == navigationMode

private fun hasCloudNodeSettings(): Boolean =
Expand Down Expand Up @@ -630,10 +638,10 @@ class BrowseFilesActivity : BaseActivity<ActivityLayoutBinding>(ActivityLayoutBi
}

override fun navigateFolderBackBecauseSymlink() {
onBackPressed()
onBackPressedDispatcher.onBackPressed()
}

override fun navigateFolderBackBecauseNoDirFile() {
onBackPressed()
onBackPressedDispatcher.onBackPressed()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package org.cryptomator.presentation.ui.activity

import android.view.Menu
import android.view.MenuItem
import androidx.activity.OnBackPressedCallback
import androidx.appcompat.widget.SearchView
import androidx.fragment.app.Fragment
import org.cryptomator.generator.Activity
Expand Down Expand Up @@ -41,16 +42,23 @@ class TextEditorActivity : BaseActivity<ActivityLayoutBinding>(ActivityLayoutBin
override fun setupView() {
textEditorPresenter.setTextFile(textEditorIntent.textFile())
setupToolbar()
setupBackPressedCallback()
}

override fun createFragment(): Fragment = TextEditorFragment()

override fun onBackPressed() {
if (!hasWriteAccess()) {
super.onBackPressed()
return
private val backPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
if (!hasWriteAccess()) {
performBackPressed()
return
}
textEditorPresenter.onBackPressed()
}
textEditorPresenter.onBackPressed()
}

private fun setupBackPressedCallback() {
onBackPressedDispatcher.addCallback(this, backPressedCallback)
}

override fun onCreateOptionsMenu(menu: Menu): Boolean {
Expand Down Expand Up @@ -120,7 +128,7 @@ class TextEditorActivity : BaseActivity<ActivityLayoutBinding>(ActivityLayoutBin
}

override fun performBackPressed() {
super.onBackPressed()
performDefaultBackPressed(backPressedCallback)
}

override fun showUnsavedChangesDialog() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import android.content.Intent
import android.content.pm.PackageManager
import android.os.Build
import android.view.View
import androidx.activity.OnBackPressedCallback
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import androidx.core.view.ViewCompat
Expand Down Expand Up @@ -100,6 +101,7 @@ class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>(ActivityWelcomeBind

setupPages()
setupPager()
setupBackPressedCallback()

validate(intent)
updateNotificationPermissionState()
Expand All @@ -123,8 +125,14 @@ class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>(ActivityWelcomeBind
orchestrator.onPause()
}

override fun onBackPressed() {
goBackOrExit()
private val backPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
goBackOrExit()
}
}

private fun setupBackPressedCallback() {
onBackPressedDispatcher.addCallback(this, backPressedCallback)
}

private fun setupPages() {
Expand Down
Loading