mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2025-09-29 00:03:24 +02:00
Delete user-specific preference xml file on logout
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package com.vitorpamplona.amethyst
|
package com.vitorpamplona.amethyst
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import com.google.gson.GsonBuilder
|
import com.google.gson.GsonBuilder
|
||||||
@@ -12,9 +13,12 @@ import com.vitorpamplona.amethyst.service.model.Event
|
|||||||
import com.vitorpamplona.amethyst.service.model.Event.Companion.getRefinedEvent
|
import com.vitorpamplona.amethyst.service.model.Event.Companion.getRefinedEvent
|
||||||
import nostr.postr.Persona
|
import nostr.postr.Persona
|
||||||
import nostr.postr.toHex
|
import nostr.postr.toHex
|
||||||
|
import java.io.File
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
// MUST BE SET TO FALSE FOR PRODUCTION!!!!!
|
// Release mode (!BuildConfig.DEBUG) always uses encrypted preferences
|
||||||
|
// To use plaintext SharedPreferences for debugging, set this to true
|
||||||
|
// It will only apply in Debug builds
|
||||||
const val DEBUG_PLAINTEXT_PREFERENCES = true
|
const val DEBUG_PLAINTEXT_PREFERENCES = true
|
||||||
|
|
||||||
data class AccountInfo(val npub: String, val current: Boolean, val displayName: String?, val profilePicture: String?)
|
data class AccountInfo(val npub: String, val current: Boolean, val displayName: String?, val profilePicture: String?)
|
||||||
@@ -62,6 +66,9 @@ object LocalPreferences {
|
|||||||
}.apply()
|
}.apply()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the account from the app level shared preferences
|
||||||
|
*/
|
||||||
private fun removeAccount(npub: String) {
|
private fun removeAccount(npub: String) {
|
||||||
val accounts = savedAccounts.toMutableSet()
|
val accounts = savedAccounts.toMutableSet()
|
||||||
accounts.remove(npub)
|
accounts.remove(npub)
|
||||||
@@ -71,8 +78,21 @@ object LocalPreferences {
|
|||||||
}.apply()
|
}.apply()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes the npub-specific shared preference file
|
||||||
|
*/
|
||||||
|
private fun deleteUserPreferenceFile(npub: String) {
|
||||||
|
val context = Amethyst.instance
|
||||||
|
val prefsDir = File("${context.filesDir.parent}/shared_prefs/")
|
||||||
|
prefsDir.list()?.forEach {
|
||||||
|
if (it.contains(npub)) {
|
||||||
|
File(prefsDir, it).delete()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun encryptedPreferences(npub: String? = null): SharedPreferences {
|
private fun encryptedPreferences(npub: String? = null): SharedPreferences {
|
||||||
return if (DEBUG_PLAINTEXT_PREFERENCES) {
|
return if (BuildConfig.DEBUG && DEBUG_PLAINTEXT_PREFERENCES) {
|
||||||
val preferenceFile = if (npub == null) "testing_only" else "testing_only_$npub"
|
val preferenceFile = if (npub == null) "testing_only" else "testing_only_$npub"
|
||||||
Amethyst.instance.getSharedPreferences(preferenceFile, Context.MODE_PRIVATE)
|
Amethyst.instance.getSharedPreferences(preferenceFile, Context.MODE_PRIVATE)
|
||||||
} else {
|
} else {
|
||||||
@@ -80,10 +100,16 @@ object LocalPreferences {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears the preferences for a given npub, deletes the preferences xml file,
|
||||||
|
* and switches the user to the first account in the list if it exists
|
||||||
|
*/
|
||||||
|
@SuppressLint("ApplySharedPref")
|
||||||
fun clearEncryptedStorage(npub: String) {
|
fun clearEncryptedStorage(npub: String) {
|
||||||
val userPrefs = encryptedPreferences(npub)
|
val userPrefs = encryptedPreferences(npub)
|
||||||
userPrefs.edit().clear().apply()
|
userPrefs.edit().clear().commit()
|
||||||
removeAccount(npub)
|
removeAccount(npub)
|
||||||
|
deleteUserPreferenceFile(npub)
|
||||||
|
|
||||||
if (savedAccounts.isEmpty()) {
|
if (savedAccounts.isEmpty()) {
|
||||||
val appPrefs = encryptedPreferences()
|
val appPrefs = encryptedPreferences()
|
||||||
@@ -91,16 +117,6 @@ object LocalPreferences {
|
|||||||
} else if (currentAccount == npub) {
|
} else if (currentAccount == npub) {
|
||||||
currentAccount = savedAccounts.elementAt(0)
|
currentAccount = savedAccounts.elementAt(0)
|
||||||
}
|
}
|
||||||
// encPrefs.edit().apply {
|
|
||||||
// encPrefs.all.keys.forEach {
|
|
||||||
// remove(it)
|
|
||||||
// }
|
|
||||||
// encryptedPreferences.all.keys.filter {
|
|
||||||
// it.startsWith(npub)
|
|
||||||
// }.forEach {
|
|
||||||
// remove(it)
|
|
||||||
// }
|
|
||||||
// }.apply()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun findAllLocalAccounts(): List<AccountInfo> {
|
fun findAllLocalAccounts(): List<AccountInfo> {
|
||||||
|
Reference in New Issue
Block a user