1package com.peachpasswords.ui.components23import android.view.Window4import android.view.WindowManager5import java.util.WeakHashMap678910111213141516internal object SecureWindowPolicy {17 private data class State(18 var leases: Int = 0,19 var userSecure: Boolean = true,20 var userChoiceApplied: Boolean = false,21 )2223 private val states = WeakHashMap<Window, State>()2425 private fun evaluate(window: Window, state: State) {26 if (state.userSecure || (!state.userChoiceApplied && state.leases > 0)) {27 window.setFlags(28 WindowManager.LayoutParams.FLAG_SECURE,29 WindowManager.LayoutParams.FLAG_SECURE,30 )31 } else {32 window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE)33 }34 }3536 37 fun setUserSecure(window: Window, secure: Boolean) {38 synchronized(states) {39 val state = states.getOrPut(window) { State() }40 state.userSecure = secure41 state.userChoiceApplied = true42 evaluate(window, state)43 }44 }4546 47 fun acquire(window: Window) {48 synchronized(states) {49 val state = states.getOrPut(window) { State() }50 state.leases++51 evaluate(window, state)52 }53 }5455 56 fun release(window: Window) {57 synchronized(states) {58 val state = states[window] ?: return59 if (state.leases > 0) state.leases--60 evaluate(window, state)61 }62 }63}