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 5413eda7..863f6e73 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt @@ -445,6 +445,7 @@ class MainActivity : SimpleActivity() { val conversation = any as Conversation putExtra(THREAD_ID, conversation.threadId) putExtra(THREAD_TITLE, conversation.title) + putExtra(WAS_PROTECTION_HANDLED, wasProtectionHandled) startActivity(this) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt index 6a116d02..08f251ac 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt @@ -101,6 +101,7 @@ class ThreadActivity : SimpleActivity() { private var loadingOlderMessages = false private var allMessagesFetched = false private var oldestMessageDate = -1 + private var wasProtectionHandled = false private var isScheduledMessage: Boolean = false private var scheduledMessage: Message? = null @@ -111,7 +112,7 @@ class ThreadActivity : SimpleActivity() { override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) finish() - startActivity(intent) + startActivity(intent) } override fun onCreate(savedInstanceState: Bundle?) { @@ -136,28 +137,23 @@ class ThreadActivity : SimpleActivity() { intent.getStringExtra(THREAD_TITLE)?.let { thread_toolbar.title = it } + wasProtectionHandled = intent.getBooleanExtra(WAS_PROTECTION_HANDLED, false) bus = EventBus.getDefault() bus!!.register(this) - handlePermission(PERMISSION_READ_PHONE_STATE) { granted -> - if (granted) { - setupButtons() - setupConversation() - setupCachedMessages { - val searchedMessageId = intent.getLongExtra(SEARCHED_MESSAGE_ID, -1L) - intent.removeExtra(SEARCHED_MESSAGE_ID) - if (searchedMessageId != -1L) { - val index = threadItems.indexOfFirst { (it as? Message)?.id == searchedMessageId } - if (index != -1) { - thread_messages_list.smoothScrollToPosition(index) - } - } - setupThread() - setupScrollFab() + if (savedInstanceState == null) { + if (!wasProtectionHandled) { + handleAppPasswordProtection { + wasProtectionHandled = it + if (it) { + loadConversation() + } else { + finish() + } } } else { - finish() + loadConversation() } } @@ -221,6 +217,29 @@ class ThreadActivity : SimpleActivity() { bus?.unregister(this) } + 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) { + loadConversation() + } else { + finish() + } + } + } else { + loadConversation() + } + } + private fun refreshMenuItems() { val firstPhoneNumber = participants.firstOrNull()?.phoneNumbers?.firstOrNull()?.value thread_toolbar.menu.apply { @@ -546,6 +565,30 @@ class ThreadActivity : SimpleActivity() { } } + private fun loadConversation() { + handlePermission(PERMISSION_READ_PHONE_STATE) { granted -> + if (granted) { + setupButtons() + setupConversation() + setupCachedMessages { + val searchedMessageId = intent.getLongExtra(SEARCHED_MESSAGE_ID, -1L) + intent.removeExtra(SEARCHED_MESSAGE_ID) + if (searchedMessageId != -1L) { + val index = threadItems.indexOfFirst { (it as? Message)?.id == searchedMessageId } + if (index != -1) { + thread_messages_list.smoothScrollToPosition(index) + } + } + + setupThread() + setupScrollFab() + } + } else { + finish() + } + } + } + private fun setupConversation() { ensureBackgroundThread { conversation = conversationsDB.getConversationWithThreadId(threadId)