Skip to content

Commit 07332d3

Browse files
author
lucky
committed
fix unencrypted preferences sync, thanks to @xyz-nobody
1 parent 3876640 commit 07332d3

File tree

7 files changed

+76
-48
lines changed

7 files changed

+76
-48
lines changed

SECURITY.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44

55
| Version | Supported |
66
| ------- | ------------------ |
7-
| 1.4.x | :white_check_mark: |
8-
| < 1.4 | :x: |
7+
| 1.5.x | :white_check_mark: |
8+
| < 1.5 | :x: |
99

1010
## Reporting a Vulnerability
1111

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ android {
1010
applicationId "me.lucky.wasted"
1111
minSdk 23
1212
targetSdk 32
13-
versionCode 29
14-
versionName "1.5.0"
13+
versionCode 30
14+
versionName "1.5.1"
1515

1616
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1717
}
Lines changed: 21 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package me.lucky.wasted
22

3-
import android.content.SharedPreferences
43
import android.os.Bundle
54
import androidx.appcompat.app.AppCompatActivity
65
import androidx.fragment.app.Fragment
@@ -14,10 +13,6 @@ open class MainActivity : AppCompatActivity() {
1413
private lateinit var prefs: Preferences
1514
private lateinit var prefsdb: Preferences
1615

17-
private val prefsListener = SharedPreferences.OnSharedPreferenceChangeListener { _, key ->
18-
prefs.copyTo(prefsdb, key)
19-
}
20-
2116
override fun onCreate(savedInstanceState: Bundle?) {
2217
super.onCreate(savedInstanceState)
2318
binding = ActivityMainBinding.inflate(layoutInflater)
@@ -34,54 +29,41 @@ open class MainActivity : AppCompatActivity() {
3429
replaceFragment(MainFragment())
3530
}
3631

37-
private fun setup() {
38-
binding.apply {
39-
appBar.setNavigationOnClickListener {
40-
drawer.open()
41-
}
42-
appBar.setOnMenuItemClickListener {
43-
when (it.itemId) {
44-
R.id.top_settings -> {
45-
replaceFragment(when (supportFragmentManager.fragments.last()) {
46-
is SettingsFragment ->
47-
getFragment(navigation.checkedItem?.itemId ?: R.id.nav_main)
48-
else -> SettingsFragment()
49-
})
50-
true
51-
}
52-
else -> false
32+
private fun setup() = binding.apply {
33+
appBar.setNavigationOnClickListener {
34+
drawer.open()
35+
}
36+
appBar.setOnMenuItemClickListener {
37+
when (it.itemId) {
38+
R.id.top_settings -> {
39+
replaceFragment(when (supportFragmentManager.fragments.last()) {
40+
is SettingsFragment ->
41+
getFragment(navigation.checkedItem?.itemId ?: R.id.nav_main)
42+
else -> SettingsFragment()
43+
})
44+
true
5345
}
46+
else -> false
5447
}
55-
navigation.setNavigationItemSelectedListener {
56-
replaceFragment(getFragment(it.itemId))
57-
it.isChecked = true
58-
drawer.close()
59-
true
60-
}
48+
}
49+
navigation.setNavigationItemSelectedListener {
50+
replaceFragment(getFragment(it.itemId))
51+
it.isChecked = true
52+
drawer.close()
53+
true
6154
}
6255
}
6356

64-
private fun replaceFragment(f: Fragment) {
57+
private fun replaceFragment(f: Fragment) =
6558
supportFragmentManager
6659
.beginTransaction()
6760
.replace(binding.fragment.id, f)
6861
.commit()
69-
}
7062

7163
private fun getFragment(id: Int) = when (id) {
7264
R.id.nav_main -> MainFragment()
7365
R.id.nav_trigger_lock -> LockFragment()
7466
R.id.top_settings -> SettingsFragment()
7567
else -> MainFragment()
7668
}
77-
78-
override fun onStart() {
79-
super.onStart()
80-
prefs.registerListener(prefsListener)
81-
}
82-
83-
override fun onStop() {
84-
super.onStop()
85-
prefs.unregisterListener(prefsListener)
86-
}
8769
}

app/src/main/java/me/lucky/wasted/fragment/LockFragment.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package me.lucky.wasted.fragment
22

33
import android.content.Context
4+
import android.content.SharedPreferences
45
import android.os.Bundle
56
import android.view.LayoutInflater
67
import android.view.View
@@ -23,9 +24,14 @@ class LockFragment : Fragment() {
2324
private lateinit var binding: FragmentLockBinding
2425
private lateinit var ctx: Context
2526
private lateinit var prefs: Preferences
27+
private lateinit var prefsdb: Preferences
2628
private val lockCountPattern by lazy {
2729
Pattern.compile("^[1-9]\\d*[$MODIFIER_DAYS$MODIFIER_HOURS$MODIFIER_MINUTES]$") }
2830

31+
private val prefsListener = SharedPreferences.OnSharedPreferenceChangeListener { _, key ->
32+
prefs.copyTo(prefsdb, key)
33+
}
34+
2935
override fun onCreateView(
3036
inflater: LayoutInflater,
3137
container: ViewGroup?,
@@ -37,9 +43,20 @@ class LockFragment : Fragment() {
3743
return binding.root
3844
}
3945

46+
override fun onStart() {
47+
super.onStart()
48+
prefs.registerListener(prefsListener)
49+
}
50+
51+
override fun onStop() {
52+
super.onStop()
53+
prefs.unregisterListener(prefsListener)
54+
}
55+
4056
private fun init() {
4157
ctx = requireContext()
4258
prefs = Preferences(ctx)
59+
prefsdb = Preferences(ctx, encrypted = false)
4360
val count = prefs.triggerLockCount
4461
val time = when {
4562
count % (24 * 60) == 0 -> "${count / 24 / 60}$MODIFIER_DAYS"

app/src/main/java/me/lucky/wasted/fragment/MainFragment.kt

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.app.Activity
44
import android.content.ClipData
55
import android.content.ClipboardManager
66
import android.content.Context
7+
import android.content.SharedPreferences
78
import android.os.Bundle
89
import android.view.LayoutInflater
910
import android.view.View
@@ -23,9 +24,14 @@ class MainFragment : Fragment() {
2324
private lateinit var binding: FragmentMainBinding
2425
private lateinit var ctx: Context
2526
private lateinit var prefs: Preferences
27+
private lateinit var prefsdb: Preferences
2628
private val clipboardManager by lazy { ctx.getSystemService(ClipboardManager::class.java) }
2729
private val admin by lazy { DeviceAdminManager(ctx) }
2830

31+
private val prefsListener = SharedPreferences.OnSharedPreferenceChangeListener { _, key ->
32+
prefs.copyTo(prefsdb, key)
33+
}
34+
2935
override fun onCreateView(
3036
inflater: LayoutInflater,
3137
container: ViewGroup?,
@@ -39,15 +45,24 @@ class MainFragment : Fragment() {
3945

4046
override fun onStart() {
4147
super.onStart()
42-
updateSecretColor()
48+
prefs.registerListener(prefsListener)
49+
}
50+
51+
override fun onStop() {
52+
super.onStop()
53+
prefs.unregisterListener(prefsListener)
4354
}
4455

4556
private fun init() {
4657
ctx = requireContext()
4758
prefs = Preferences(ctx)
59+
prefsdb = Preferences(ctx, encrypted = false)
4860
if (prefs.secret.isEmpty()) prefs.secret = makeSecret()
4961
binding.apply {
5062
secret.text = prefs.secret
63+
secret.setBackgroundColor(ctx.getColor(
64+
if (prefs.triggers != 0) R.color.secret_1 else R.color.secret_0
65+
))
5166
wipeData.isChecked = prefs.isWipeData
5267
wipeEmbeddedSim.isChecked = prefs.isWipeEmbeddedSim
5368
wipeEmbeddedSim.isEnabled = wipeData.isChecked
@@ -77,10 +92,6 @@ class MainFragment : Fragment() {
7792
Snackbar.make(binding.secret, R.string.copied_popup, Snackbar.LENGTH_SHORT).show()
7893
}
7994

80-
private fun updateSecretColor() = binding.secret.setBackgroundColor(ctx.getColor(
81-
if (prefs.triggers != 0) R.color.secret_1 else R.color.secret_0
82-
))
83-
8495
private fun setOn() {
8596
prefs.isEnabled = true
8697
Utils(ctx).setEnabled(true)

app/src/main/java/me/lucky/wasted/fragment/SettingsFragment.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package me.lucky.wasted.fragment
22

33
import android.content.Context
4+
import android.content.SharedPreferences
45
import android.os.Build
56
import android.os.Bundle
67
import android.view.LayoutInflater
@@ -17,8 +18,13 @@ class SettingsFragment : Fragment() {
1718
private lateinit var binding: FragmentSettingsBinding
1819
private lateinit var ctx: Context
1920
private lateinit var prefs: Preferences
21+
private lateinit var prefsdb: Preferences
2022
private val utils by lazy { Utils(ctx) }
2123

24+
private val prefsListener = SharedPreferences.OnSharedPreferenceChangeListener { _, key ->
25+
prefs.copyTo(prefsdb, key)
26+
}
27+
2228
override fun onCreateView(
2329
inflater: LayoutInflater,
2430
container: ViewGroup?,
@@ -30,9 +36,20 @@ class SettingsFragment : Fragment() {
3036
return binding.root
3137
}
3238

39+
override fun onStart() {
40+
super.onStart()
41+
prefs.registerListener(prefsListener)
42+
}
43+
44+
override fun onStop() {
45+
super.onStop()
46+
prefs.unregisterListener(prefsListener)
47+
}
48+
3349
private fun init() {
3450
ctx = requireContext()
3551
prefs = Preferences(ctx)
52+
prefsdb = Preferences(ctx, encrypted = false)
3653
binding.apply {
3754
val triggers = prefs.triggers
3855
panicKit.isChecked = triggers.and(Trigger.PANIC_KIT.value) != 0
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
fix unencrypted preferences sync, thanks to @xyz-nobody

0 commit comments

Comments
 (0)