diff --git a/presentation/src/main/java/org/cryptomator/presentation/presenter/Presenter.kt b/presentation/src/main/java/org/cryptomator/presentation/presenter/Presenter.kt index 1aae26b9..2cdba135 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/presenter/Presenter.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/presenter/Presenter.kt @@ -130,7 +130,6 @@ abstract class Presenter protected constructor(private val exceptionMa open fun resumed() {} - fun destroy() { logLifecycle("destroy") unsubscribeAll() diff --git a/presentation/src/main/java/org/cryptomator/presentation/service/CryptorsService.java b/presentation/src/main/java/org/cryptomator/presentation/service/CryptorsService.java index 5b70c905..9b55fba8 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/service/CryptorsService.java +++ b/presentation/src/main/java/org/cryptomator/presentation/service/CryptorsService.java @@ -8,6 +8,7 @@ import android.content.IntentFilter; import android.os.IBinder; import androidx.annotation.Nullable; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; import org.cryptomator.data.cloud.crypto.Cryptors; import org.cryptomator.presentation.util.FileUtil; @@ -23,6 +24,7 @@ import timber.log.Timber; public class CryptorsService extends Service { + public static final String SCREEN_AND_VAULT_LOCKED = "CRYPTOMATOR_SCREEN_AND_VAULT_LOCKED"; private static final String ACTION_LOCK_ALL = "CRYPTOMATOR_LOCK_ALL"; private final Cryptors.Default cryptors = new Cryptors.Default(); private final AutolockTimeout autolockTimeout = new AutolockTimeout(); @@ -211,6 +213,9 @@ public class CryptorsService extends Service { destroyCryptorsAndHideNotification(); stopCryptorsService(); + + // notify BrowseFilesActivity to finish because of #320 + LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent(SCREEN_AND_VAULT_LOCKED)); } } } diff --git a/presentation/src/main/java/org/cryptomator/presentation/ui/activity/BrowseFilesActivity.kt b/presentation/src/main/java/org/cryptomator/presentation/ui/activity/BrowseFilesActivity.kt index 701bf137..410599f7 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/ui/activity/BrowseFilesActivity.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/ui/activity/BrowseFilesActivity.kt @@ -1,11 +1,15 @@ package org.cryptomator.presentation.ui.activity +import android.content.BroadcastReceiver +import android.content.Context import android.content.Intent +import android.content.IntentFilter import android.view.Menu import android.view.View import androidx.appcompat.widget.SearchView import androidx.fragment.app.DialogFragment import androidx.fragment.app.Fragment +import androidx.localbroadcastmanager.content.LocalBroadcastManager import org.cryptomator.domain.CloudNode import org.cryptomator.generator.Activity import org.cryptomator.generator.InjectIntent @@ -28,6 +32,7 @@ import org.cryptomator.presentation.model.comparator.CloudNodeModelSizeBiggestFi import org.cryptomator.presentation.model.comparator.CloudNodeModelSizeSmallestFirstComparator import org.cryptomator.presentation.presenter.BrowseFilesPresenter import org.cryptomator.presentation.presenter.BrowseFilesPresenter.Companion.OPEN_FILE_FINISHED +import org.cryptomator.presentation.service.CryptorsService import org.cryptomator.presentation.ui.activity.view.BrowseFilesView import org.cryptomator.presentation.ui.bottomsheet.FileSettingsBottomSheet import org.cryptomator.presentation.ui.bottomsheet.FolderSettingsBottomSheet @@ -73,6 +78,8 @@ class BrowseFilesActivity : BaseActivity(), // private var navigationMode: ChooseCloudNodeSettings.NavigationMode? = null + private var finishActivityDueToScreenLockEventReceiver: BroadcastReceiver? = null + override fun setupView() { setupToolbar() setupNavigationMode() @@ -102,6 +109,28 @@ class BrowseFilesActivity : BaseActivity(), // browseFilesIntent.chooseCloudNodeSettings() ) + override fun onDestroy() { + super.onDestroy() + + finishActivityDueToScreenLockEventReceiver?.let { + LocalBroadcastManager.getInstance(this).unregisterReceiver(it) + } + } + + override fun onResume() { + super.onResume() + + finishActivityDueToScreenLockEventReceiver = object : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + finish() + } + } + + finishActivityDueToScreenLockEventReceiver?.let { + LocalBroadcastManager.getInstance(this).registerReceiver(it, IntentFilter(CryptorsService.SCREEN_AND_VAULT_LOCKED)) + } + } + override fun onBackPressed() { browseFilesPresenter.onBackPressed() when {