From ae2e480876b91c3fb014543d1ed7da65396676d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Fri, 30 Jun 2023 10:41:01 +0200 Subject: [PATCH] Prevent loading messages before app is unlocked --- .../smsmessenger/activities/MainActivity.kt | 75 +++++++++++++------ 1 file changed, 51 insertions(+), 24 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt index 35222eb0..5413eda7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt @@ -50,6 +50,7 @@ class MainActivity : SimpleActivity() { private var lastSearchedText = "" private var bus: EventBus? = null private val smsExporter by lazy { MessagesExporter(this) } + private var wasProtectionHandled = false @SuppressLint("InlinedApi") override fun onCreate(savedInstanceState: Bundle?) { @@ -64,7 +65,10 @@ class MainActivity : SimpleActivity() { if (savedInstanceState == null) { handleAppPasswordProtection { - if (!it) { + wasProtectionHandled = it + if (it) { + loadMessages() + } else { finish() } } @@ -74,29 +78,6 @@ class MainActivity : SimpleActivity() { return } - if (isQPlus()) { - val roleManager = getSystemService(RoleManager::class.java) - if (roleManager!!.isRoleAvailable(RoleManager.ROLE_SMS)) { - if (roleManager.isRoleHeld(RoleManager.ROLE_SMS)) { - askPermissions() - } else { - val intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_SMS) - startActivityForResult(intent, MAKE_DEFAULT_APP_REQUEST) - } - } else { - toast(R.string.unknown_error_occurred) - finish() - } - } else { - if (Telephony.Sms.getDefaultSmsPackage(this) == packageName) { - askPermissions() - } else { - val intent = Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT) - intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, packageName) - startActivityForResult(intent, MAKE_DEFAULT_APP_REQUEST) - } - } - clearAllMessagesIfNeeded() } @@ -148,6 +129,27 @@ class MainActivity : SimpleActivity() { } } + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + outState.putBoolean(WAS_PROTECTION_HANDLED, wasProtectionHandled) + } + + override fun onRestoreInstanceState(savedInstanceState: Bundle) { + super.onRestoreInstanceState(savedInstanceState) + wasProtectionHandled = savedInstanceState.getBoolean(WAS_PROTECTION_HANDLED, false) + + if (!wasProtectionHandled) { + handleAppPasswordProtection { + wasProtectionHandled = it + if (it) { + loadMessages() + } else { + finish() + } + } + } + } + private fun setupOptionsMenu() { main_menu.getToolbar().inflateMenu(R.menu.menu_main) main_menu.toggleHideOnScroll(true) @@ -213,6 +215,31 @@ class MainActivity : SimpleActivity() { main_menu.updateColors() } + private fun loadMessages() { + if (isQPlus()) { + val roleManager = getSystemService(RoleManager::class.java) + if (roleManager!!.isRoleAvailable(RoleManager.ROLE_SMS)) { + if (roleManager.isRoleHeld(RoleManager.ROLE_SMS)) { + askPermissions() + } else { + val intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_SMS) + startActivityForResult(intent, MAKE_DEFAULT_APP_REQUEST) + } + } else { + toast(R.string.unknown_error_occurred) + finish() + } + } else { + if (Telephony.Sms.getDefaultSmsPackage(this) == packageName) { + askPermissions() + } else { + val intent = Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT) + intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, packageName) + startActivityForResult(intent, MAKE_DEFAULT_APP_REQUEST) + } + } + } + // while SEND_SMS and READ_SMS permissions are mandatory, READ_CONTACTS is optional. If we don't have it, we just won't be able to show the contact name in some cases private fun askPermissions() { handlePermission(PERMISSION_READ_SMS) {