diff --git a/app/src/main/java/com/owncloud/android/authentication/PassCodeManager.kt b/app/src/main/java/com/owncloud/android/authentication/PassCodeManager.kt index c5b2dbc3446a..655691a67d4f 100644 --- a/app/src/main/java/com/owncloud/android/authentication/PassCodeManager.kt +++ b/app/src/main/java/com/owncloud/android/authentication/PassCodeManager.kt @@ -17,6 +17,7 @@ import androidx.annotation.VisibleForTesting import com.nextcloud.client.core.Clock import com.nextcloud.client.preferences.AppPreferences import com.owncloud.android.MainApp +import com.owncloud.android.authentication.PassCodeManager.Companion.PASS_CODE_TIMEOUT import com.owncloud.android.ui.activity.PassCodeActivity import com.owncloud.android.ui.activity.RequestCredentialsActivity import com.owncloud.android.ui.activity.SettingsActivity @@ -85,6 +86,19 @@ class PassCodeManager(private val preferences: AppPreferences, private val clock return askedForPin } + fun isLocked(activity: Activity): Boolean { + var askedForPin = false + val timestamp = preferences.lockTimestamp + + if (!isExemptActivity(activity)) { + val passcodeRequested = passCodeShouldBeRequested(timestamp) + val credentialsRequested = deviceCredentialsShouldBeRequested(timestamp, activity) + askedForPin = passcodeRequested || credentialsRequested + } + + return askedForPin + } + private fun requestPasscode(activity: Activity) { val i = Intent(MainApp.getAppContext(), PassCodeActivity::class.java).apply { action = PassCodeActivity.ACTION_CHECK @@ -121,7 +135,7 @@ class PassCodeManager(private val preferences: AppPreferences, private val clock @VisibleForTesting fun passCodeShouldBeRequested(timestamp: Long): Boolean = shouldBeLocked(timestamp) && isPassCodeEnabled() - private fun isPassCodeEnabled(): Boolean = SettingsActivity.LOCK_PASSCODE == preferences.lockPreference + fun isPassCodeEnabled(): Boolean = SettingsActivity.LOCK_PASSCODE == preferences.lockPreference private fun deviceCredentialsShouldBeRequested(timestamp: Long, activity: Activity): Boolean = shouldBeLocked(timestamp) && deviceCredentialsAreEnabled(activity) diff --git a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt index a13a6de5f000..061c62a09810 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt @@ -89,6 +89,7 @@ import com.nextcloud.utils.fileNameValidator.FileNameValidator.checkFolderPath import com.nextcloud.utils.view.FastScrollUtils import com.owncloud.android.MainApp import com.owncloud.android.R +import com.owncloud.android.authentication.PassCodeManager import com.owncloud.android.databinding.FilesBinding import com.owncloud.android.datamodel.FileDataStorageManager import com.owncloud.android.datamodel.OCFile @@ -253,6 +254,9 @@ class FileDisplayActivity : @Inject lateinit var syncedFolderProvider: SyncedFolderProvider + @Inject + lateinit var passCodeManager: PassCodeManager + /** * Indicates whether the downloaded file should be previewed immediately. Since `FileDownloadWorker` can be * triggered from multiple sources, this helps determine if an automatic preview is needed after download. @@ -628,6 +632,10 @@ class FileDisplayActivity : @SuppressLint("UnsafeIntentLaunch") private fun handleCommonIntents(intent: Intent) { + if (passCodeManager.isPassCodeEnabled() && passCodeManager.isLocked(this)) { + return + } + when (intent.action) { Intent.ACTION_VIEW -> handleOpenFileViaIntent(intent)