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 releaseOwned: Boolean = false,20 )2122 private val states = WeakHashMap<Window, State>()2324 25 fun installRelease(window: Window) {26 synchronized(states) {27 val state = states.getOrPut(window) { State() }28 state.releaseOwned = true29 window.setFlags(30 WindowManager.LayoutParams.FLAG_SECURE,31 WindowManager.LayoutParams.FLAG_SECURE,32 )33 }34 }3536 37 fun acquire(window: Window) {38 synchronized(states) {39 val state = states.getOrPut(window) { State() }40 state.leases++41 window.setFlags(42 WindowManager.LayoutParams.FLAG_SECURE,43 WindowManager.LayoutParams.FLAG_SECURE,44 )45 }46 }4748 49 fun release(window: Window) {50 synchronized(states) {51 val state = states[window] ?: return52 if (state.leases > 0) state.leases--53 if (state.leases == 0 && !state.releaseOwned) {54 window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE)55 states.remove(window)56 }57 }58 }59}