Don't read intent when relaunching from history

pull/1051/head
Alex Baker 5 years ago
parent e2cd5c8619
commit e01d5c87ca

@ -0,0 +1,32 @@
package com.todoroo.astrid.activity
import android.content.Intent
import android.content.Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
import android.content.Intent.FLAG_ACTIVITY_NEW_TASK
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.todoroo.astrid.activity.MainActivity.Companion.isFromHistory
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class MainActivityTest {
@Test
fun newTaskIsNotFromHistory() {
assertFalse(Intent().setFlags(FLAG_ACTIVITY_NEW_TASK).isFromHistory)
}
@Test
fun oldTaskIsNotFromHistory() {
assertFalse(Intent().setFlags(FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY).isFromHistory)
}
@Test
fun newTaskIsFromHistory() {
assertTrue(
Intent()
.setFlags(FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY)
.isFromHistory)
}
}

@ -102,6 +102,7 @@ class MainActivity : InjectingAppCompatActivity(), TaskListFragmentCallbackHandl
finishActionMode() finishActionMode()
} }
}) })
handleIntent()
} }
public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
@ -134,6 +135,7 @@ class MainActivity : InjectingAppCompatActivity(), TaskListFragmentCallbackHandl
override fun onNewIntent(intent: Intent) { override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent) super.onNewIntent(intent)
setIntent(intent) setIntent(intent)
handleIntent()
} }
override fun onSaveInstanceState(outState: Bundle) { override fun onSaveInstanceState(outState: Bundle) {
@ -148,6 +150,9 @@ class MainActivity : InjectingAppCompatActivity(), TaskListFragmentCallbackHandl
private fun getTaskToLoad(filter: Filter?): Task? { private fun getTaskToLoad(filter: Filter?): Task? {
val intent = intent val intent = intent
if (intent.isFromHistory) {
return null
}
if (intent.hasExtra(CREATE_TASK)) { if (intent.hasExtra(CREATE_TASK)) {
intent.removeExtra(CREATE_TASK) intent.removeExtra(CREATE_TASK)
return taskCreator.createWithValues(filter, "") return taskCreator.createWithValues(filter, "")
@ -171,34 +176,33 @@ class MainActivity : InjectingAppCompatActivity(), TaskListFragmentCallbackHandl
private fun handleIntent() { private fun handleIntent() {
val intent = intent val intent = intent
val openFilter = intent.hasExtra(OPEN_FILTER) val openFilter: Filter? =
val loadFilter = intent.hasExtra(LOAD_FILTER) if (intent.isFromHistory) null else intent.getParcelableExtra(OPEN_FILTER)
if (openFilter || loadFilter) { intent.removeExtra(OPEN_FILTER)
val loadFilter = if (intent.isFromHistory) null else intent.getStringExtra(LOAD_FILTER)
intent.removeExtra(LOAD_FILTER)
if (openFilter != null || loadFilter != null) {
taskEditFragment?.let { taskEditFragment?.let {
lifecycleScope.launch { lifecycleScope.launch {
it.save() it.save()
} }
} }
} }
if (loadFilter || !openFilter && filter == null) { if (!loadFilter.isNullOrBlank() || openFilter == null && filter == null) {
lifecycleScope.launch { lifecycleScope.launch {
val filterString = intent.getStringExtra(LOAD_FILTER) val filter = if (loadFilter.isNullOrBlank()) {
intent.removeExtra(LOAD_FILTER)
val filter = if (filterString.isNullOrBlank()) {
defaultFilterProvider.getStartupFilter() defaultFilterProvider.getStartupFilter()
} else { } else {
defaultFilterProvider.getFilterFromPreference(filterString) defaultFilterProvider.getFilterFromPreference(loadFilter)
} }
clearUi() clearUi()
openTaskListFragment(filter) openTaskListFragment(filter)
openTask(filter) openTask(filter)
} }
} else if (openFilter) { } else if (openFilter != null) {
val filter: Filter? = intent.getParcelableExtra(OPEN_FILTER)
intent.removeExtra(OPEN_FILTER)
clearUi() clearUi()
openTaskListFragment(filter) openTaskListFragment(openFilter)
openTask(filter) openTask(openFilter)
} else { } else {
val existing = taskListFragment val existing = taskListFragment
openTaskListFragment( openTaskListFragment(
@ -290,11 +294,6 @@ class MainActivity : InjectingAppCompatActivity(), TaskListFragmentCallbackHandl
} }
} }
override fun onResumeFragments() {
super.onResumeFragments()
handleIntent()
}
private val nightMode: Int private val nightMode: Int
get() = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK get() = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
@ -445,5 +444,10 @@ class MainActivity : InjectingAppCompatActivity(), TaskListFragmentCallbackHandl
private const val FRAG_TAG_TASK_LIST = "frag_tag_task_list" private const val FRAG_TAG_TASK_LIST = "frag_tag_task_list"
private const val FRAG_TAG_WHATS_NEW = "frag_tag_whats_new" private const val FRAG_TAG_WHATS_NEW = "frag_tag_whats_new"
private const val EXTRA_FILTER = "extra_filter" private const val EXTRA_FILTER = "extra_filter"
private const val FLAG_FROM_HISTORY
= Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
val Intent.isFromHistory: Boolean
get() = flags and (FLAG_FROM_HISTORY) == FLAG_FROM_HISTORY
} }
} }
Loading…
Cancel
Save