Skip to content

Commit ccb133e

Browse files
authored
Merge pull request #54 from scribd/kabliz/APT-10955-crash
[APT-10955] SharedPref Crash Fix
2 parents 2841758 + 270466b commit ccb133e

File tree

3 files changed

+18
-14
lines changed

3 files changed

+18
-14
lines changed

Armadillo/src/main/java/com/scribd/armadillo/extensions/SharedPrefExt.kt

+14-13
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ fun SharedPreferences.deleteEncryptedSharedPreference(context: Context, filename
2828
val deleted = sharedPrefsFile.delete()
2929
Log.d(tag, "resetStorage() Shared prefs file deleted: $deleted; path: ${sharedPrefsFile.absolutePath}")
3030
} else {
31-
Log.d(tag,"resetStorage() Shared prefs file non-existent; path: ${sharedPrefsFile.absolutePath}")
31+
Log.d(tag, "resetStorage() Shared prefs file non-existent; path: ${sharedPrefsFile.absolutePath}")
3232
}
3333

3434
val keyStore = KeyStore.getInstance(ANDROID_KEYSTORE_NAME)
@@ -41,7 +41,7 @@ fun SharedPreferences.deleteEncryptedSharedPreference(context: Context, filename
4141

4242
fun createEncryptedSharedPrefKeyStoreWithRetry(context: Context, fileName: String, keystoreAlias: String): SharedPreferences? {
4343
val firstAttempt = createEncryptedSharedPrefsKeyStore(context = context, fileName = fileName, keystoreAlias = keystoreAlias)
44-
return if(firstAttempt != null) {
44+
return if (firstAttempt != null) {
4545
firstAttempt
4646
} else {
4747
context.getSharedPreferences(fileName, Context.MODE_PRIVATE).deleteEncryptedSharedPreference(
@@ -61,25 +61,26 @@ fun createEncryptedSharedPrefsKeyStore(context: Context, fileName: String, keyst
6161
.setEncryptionPaddings(ENCRYPTION_PADDING_NONE)
6262
.build()
6363

64-
val keys = try {
65-
MasterKeys.getOrCreate(keySpec)
66-
} catch (ex: Exception) {
67-
//clear corrupted store, contents will be lost
68-
context.getSharedPreferences(fileName, Context.MODE_PRIVATE).deleteEncryptedSharedPreference(
69-
context = context,
70-
filename = fileName,
71-
keystoreAlias = keystoreAlias )
72-
MasterKeys.getOrCreate(keySpec)
73-
}
7464
return try {
65+
val keys = try {
66+
MasterKeys.getOrCreate(keySpec)
67+
} catch (ex: Exception) {
68+
//clear corrupted store, contents will be lost
69+
context.getSharedPreferences(fileName, Context.MODE_PRIVATE).deleteEncryptedSharedPreference(
70+
context = context,
71+
filename = fileName,
72+
keystoreAlias = keystoreAlias)
73+
MasterKeys.getOrCreate(keySpec)
74+
}
75+
7576
EncryptedSharedPreferences.create(
7677
fileName,
7778
keys,
7879
context,
7980
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
8081
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
8182
)
82-
} catch(ex: Exception) {
83+
} catch (ex: Exception) {
8384
null
8485
}
8586
}

RELEASE.md

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# Project Armadillo Release Notes
22

3+
## 1.6.9
4+
- Improves the crash fix from 1.6.8, so that even retries on EncryptedSharedPreferences does not crash.
5+
36
## 1.6.8
47
- Fixes an app startup crash to EncryptedSharedPreference faults.
58
- Adds resilience to playing unencrypted content if it is optionally drm enabled.

gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ org.gradle.jvmargs=-Xmx1536m
1313
# org.gradle.parallel=true
1414
PACKAGE_NAME=com.scribd.armadillo
1515
GRADLE_PLUGIN_VERSION=7.2.0
16-
LIBRARY_VERSION=1.6.8
16+
LIBRARY_VERSION=1.6.9
1717
EXOPLAYER_VERSION=2.19.1
1818
RXJAVA_VERSION=2.2.4
1919
RXANDROID_VERSION=2.0.1

0 commit comments

Comments
 (0)