1 package com.android.systemui.util 2 3 import java.lang.ref.SoftReference 4 import java.lang.ref.WeakReference 5 import kotlin.properties.ReadWriteProperty 6 import kotlin.reflect.KProperty 7 8 /** 9 * Creates a Kotlin idiomatic weak reference. 10 * 11 * Usage: 12 * ``` 13 * var weakReferenceObj: Object? by weakReference(null) 14 * weakReferenceObj = Object() 15 * ``` 16 */ 17 fun <T> weakReference(obj: T? = null): ReadWriteProperty<Any?, T?> { 18 return object : ReadWriteProperty<Any?, T?> { 19 var weakRef = WeakReference<T?>(obj) 20 override fun getValue(thisRef: Any?, property: KProperty<*>): T? { 21 return weakRef.get() 22 } 23 24 override fun setValue(thisRef: Any?, property: KProperty<*>, value: T?) { 25 weakRef = WeakReference(value) 26 } 27 } 28 } 29 30 /** 31 * Creates a Kotlin idiomatic soft reference. 32 * 33 * Usage: 34 * ``` 35 * var softReferenceObj: Object? by softReference(null) 36 * softReferenceObj = Object() 37 * ``` 38 */ 39 fun <T> softReference(obj: T? = null): ReadWriteProperty<Any?, T?> { 40 return object : ReadWriteProperty<Any?, T?> { 41 var softRef = SoftReference<T?>(obj) 42 override fun getValue(thisRef: Any?, property: KProperty<*>): T? { 43 return softRef.get() 44 } 45 46 override fun setValue(thisRef: Any?, property: KProperty<*>, value: T?) { 47 softRef = SoftReference(value) 48 } 49 } 50 } 51