LockScreen : refact some code and add secureFlag
This commit is contained in:
parent
64b7c906db
commit
5a417ba498
15 changed files with 128 additions and 47 deletions
|
|
@ -16,7 +16,14 @@
|
|||
|
||||
package io.element.android.features.lockscreen.api
|
||||
|
||||
import android.os.Build
|
||||
import android.view.WindowManager
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
|
||||
interface LockScreenService {
|
||||
/**
|
||||
|
|
@ -28,5 +35,33 @@ interface LockScreenService {
|
|||
* Check if setting up the lock screen is required.
|
||||
* @return true if the lock screen is mandatory and not setup yet, false otherwise.
|
||||
*/
|
||||
suspend fun isSetupRequired(): Boolean
|
||||
fun isSetupRequired(): Flow<Boolean>
|
||||
|
||||
/**
|
||||
* Check if pin is setup.
|
||||
* @return true if the pin is setup, false otherwise.
|
||||
*/
|
||||
fun isPinSetup(): Flow<Boolean>
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes sure the secure flag is set on the activity if the pin is setup.
|
||||
* @param activity the activity to set the flag on.
|
||||
*/
|
||||
fun LockScreenService.handleSecureFlag(activity: ComponentActivity) {
|
||||
isPinSetup()
|
||||
.onEach { isPinSetup ->
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||
activity.setRecentsScreenshotEnabled(!isPinSetup)
|
||||
} else {
|
||||
if (isPinSetup) {
|
||||
activity.window.setFlags(
|
||||
WindowManager.LayoutParams.FLAG_SECURE,
|
||||
WindowManager.LayoutParams.FLAG_SECURE
|
||||
)
|
||||
} else {
|
||||
activity.window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE)
|
||||
}
|
||||
}
|
||||
}.launchIn(activity.lifecycleScope)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue