@@ -25,6 +25,7 @@ import kotlinx.coroutines.Dispatchers
2525import kotlinx.coroutines.withContext
2626import org.matrix.android.sdk.api.extensions.orFalse
2727import javax.inject.Inject
28+ import javax.inject.Singleton
2829import kotlin.coroutines.resume
2930import kotlin.coroutines.suspendCoroutine
3031
@@ -56,26 +57,40 @@ interface PinCodeStore {
5657 * Will reset the counters
5758 */
5859 fun resetCounters ()
60+
61+ fun addListener (listener : PinCodeStoreListener )
62+ fun removeListener (listener : PinCodeStoreListener )
63+ }
64+
65+ interface PinCodeStoreListener {
66+ fun onPinSetUpChange (isConfigured : Boolean )
5967}
6068
69+ @Singleton
6170class SharedPrefPinCodeStore @Inject constructor(private val sharedPreferences : SharedPreferences ) : PinCodeStore {
71+ private val listeners = mutableSetOf<PinCodeStoreListener >()
6272
63- override suspend fun storeEncodedPin (encodePin : String ) = withContext(Dispatchers .IO ) {
64- sharedPreferences.edit {
65- putString(ENCODED_PIN_CODE_KEY , encodePin)
73+ override suspend fun storeEncodedPin (encodePin : String ) {
74+ withContext(Dispatchers .IO ) {
75+ sharedPreferences.edit {
76+ putString(ENCODED_PIN_CODE_KEY , encodePin)
77+ }
6678 }
79+ listeners.forEach { it.onPinSetUpChange(isConfigured = true ) }
6780 }
6881
69- override suspend fun deleteEncodedPin () = withContext(Dispatchers .IO ) {
70- // Also reset the counters
71- resetCounters()
72- sharedPreferences.edit {
73- remove(ENCODED_PIN_CODE_KEY )
82+ override suspend fun deleteEncodedPin () {
83+ withContext(Dispatchers .IO ) {
84+ // Also reset the counters
85+ resetCounters()
86+ sharedPreferences.edit {
87+ remove(ENCODED_PIN_CODE_KEY )
88+ }
89+ awaitPinCodeCallback<Boolean > {
90+ PFSecurityManager .getInstance().pinCodeHelper.delete(it)
91+ }
7492 }
75- awaitPinCodeCallback<Boolean > {
76- PFSecurityManager .getInstance().pinCodeHelper.delete(it)
77- }
78- return @withContext
93+ listeners.forEach { it.onPinSetUpChange(isConfigured = false ) }
7994 }
8095
8196 override fun getEncodedPin (): String? {
@@ -124,6 +139,14 @@ class SharedPrefPinCodeStore @Inject constructor(private val sharedPreferences:
124139 }
125140 }
126141
142+ override fun addListener (listener : PinCodeStoreListener ) {
143+ listeners.add(listener)
144+ }
145+
146+ override fun removeListener (listener : PinCodeStoreListener ) {
147+ listeners.remove(listener)
148+ }
149+
127150 private suspend inline fun <T > awaitPinCodeCallback (crossinline callback : (PFPinCodeHelperCallback <T >) -> Unit ) = suspendCoroutine<PFResult <T >> { cont ->
128151 callback(PFPinCodeHelperCallback <T > { result -> cont.resume(result) })
129152 }
0 commit comments