diff --git a/app/src/main/java/org/openobservatory/ooniprobe/activity/runtests/RunTestsActivity.kt b/app/src/main/java/org/openobservatory/ooniprobe/activity/runtests/RunTestsActivity.kt index ad2c69c40..fc40b4733 100644 --- a/app/src/main/java/org/openobservatory/ooniprobe/activity/runtests/RunTestsActivity.kt +++ b/app/src/main/java/org/openobservatory/ooniprobe/activity/runtests/RunTestsActivity.kt @@ -18,7 +18,10 @@ import org.openobservatory.ooniprobe.activity.runtests.adapter.RunTestsExpandabl import org.openobservatory.ooniprobe.activity.runtests.models.ChildItem import org.openobservatory.ooniprobe.activity.runtests.models.GroupItem import org.openobservatory.ooniprobe.common.OONIDescriptor +import org.openobservatory.ooniprobe.common.OONITests import org.openobservatory.ooniprobe.common.PreferenceManager +import org.openobservatory.ooniprobe.common.enableTest +import org.openobservatory.ooniprobe.common.disableTest import org.openobservatory.ooniprobe.databinding.ActivityRunTestsBinding import java.io.Serializable import javax.inject.Inject @@ -104,6 +107,7 @@ class RunTestsActivity : AbstractActivity() { private fun onMenuItemClickListener(menuItem: MenuItem): Boolean { return when (menuItem.itemId) { R.id.runButton -> { + updatePreferences() val selectedChildItems: List = getChildItemsSelectedIdList() if (selectedChildItems.isNotEmpty()) { val testSuitesToRun = getGroupItemsAtLeastOneChildEnabled().map { groupItem -> @@ -124,6 +128,31 @@ class RunTestsActivity : AbstractActivity() { } } + /** + * Update the preferences based on the selected tests. + * This method is used to update the preferences when the user has selected the tests that they want to run. + */ + private fun updatePreferences() { + for (i in 0 until adapter.groupCount) { + val group = adapter.getGroup(i) + when (group.name) { + OONITests.EXPERIMENTAL.label -> { + val testNames = OONITests.EXPERIMENTAL.nettests.map { it.name }; + when(group.nettests.filter { testNames.contains(it.name) }.map { it.selected }.all { it }) { + true -> preferenceManager.enableTest(OONITests.EXPERIMENTAL.label) + false -> preferenceManager.disableTest(OONITests.EXPERIMENTAL.label) + } + } + else -> group.nettests.forEach { nettest -> + when(nettest.selected) { + true -> preferenceManager.enableTest(nettest.name) + false -> preferenceManager.disableTest(nettest.name) + } + } + } + } + } + private fun selectAllBtnStatusObserver(selectAllBtnStatus: String?) { if (!TextUtils.isEmpty(selectAllBtnStatus)) { when (selectAllBtnStatus) { diff --git a/app/src/main/java/org/openobservatory/ooniprobe/activity/runtests/RunTestsViewModel.kt b/app/src/main/java/org/openobservatory/ooniprobe/activity/runtests/RunTestsViewModel.kt index 61ec6df97..ffb1d95f3 100644 --- a/app/src/main/java/org/openobservatory/ooniprobe/activity/runtests/RunTestsViewModel.kt +++ b/app/src/main/java/org/openobservatory/ooniprobe/activity/runtests/RunTestsViewModel.kt @@ -25,41 +25,6 @@ class RunTestsViewModel() : ViewModel() { fun setSelectedAllBtnStatus(selectedStatus: String) { selectedAllBtnStatus.postValue(selectedStatus) - when (selectedStatus) { - SELECT_ALL -> { - OONITests.INSTANT_MESSAGING.nettests.forEach { - enableTest(it.name) - } - OONITests.CIRCUMVENTION.nettests.forEach { - enableTest(it.name) - } - OONITests.PERFORMANCE.nettests.forEach { - enableTest(it.name) - } - enableTest(OONITests.EXPERIMENTAL.label) - } - - SELECT_NONE -> { - OONITests.INSTANT_MESSAGING.nettests.forEach { - disableTest(it.name) - } - OONITests.CIRCUMVENTION.nettests.forEach { - disableTest(it.name) - } - OONITests.PERFORMANCE.nettests.forEach { - disableTest(it.name) - } - disableTest(OONITests.EXPERIMENTAL.label) - } - } - } - - fun disableTest(name: String) { - preferenceManager.disableTest(name) - } - - fun enableTest(name: String) { - preferenceManager.enableTest(name) } companion object { diff --git a/app/src/main/java/org/openobservatory/ooniprobe/activity/runtests/adapter/RunTestsExpandableListViewAdapter.kt b/app/src/main/java/org/openobservatory/ooniprobe/activity/runtests/adapter/RunTestsExpandableListViewAdapter.kt index 9291be328..aa690592e 100644 --- a/app/src/main/java/org/openobservatory/ooniprobe/activity/runtests/adapter/RunTestsExpandableListViewAdapter.kt +++ b/app/src/main/java/org/openobservatory/ooniprobe/activity/runtests/adapter/RunTestsExpandableListViewAdapter.kt @@ -103,22 +103,11 @@ class RunTestsExpandableListViewAdapter( if (groupItem.selected) { if (isSelectAllChildItems(groupItem.nettests)) { groupSelectionIndicator.setImageResource(R.drawable.check_box) - // NOTE: This is the only place where OONITests.EXPERIMENTAL.label is used. - // This doesn't follow the normal rule where the component tests make up the suite. - if (groupItem.name == OONITests.EXPERIMENTAL.label) { - viewModel.enableTest(OONITests.EXPERIMENTAL.label) - } } else { groupSelectionIndicator.setImageResource(R.drawable.check_box_outline_blank) - if (groupItem.name == OONITests.EXPERIMENTAL.label) { - viewModel.disableTest(OONITests.EXPERIMENTAL.label) - } } } else { groupSelectionIndicator.setImageResource(R.drawable.check_box_outline_blank) - if (groupItem.name == OONITests.EXPERIMENTAL.label) { - viewModel.disableTest(OONITests.EXPERIMENTAL.label) - } } groupSelectionIndicator.setOnClickListener { if (groupItem.selected && isSelectAllChildItems(groupItem.nettests)) { @@ -193,7 +182,6 @@ class RunTestsExpandableListViewAdapter( setOnClickListener { if (childItem.selected) { childItem.selected = false - viewModel.disableTest(childItem.name) if (isNotSelectedAnyChildItems(groupItem.nettests)) { groupItem.selected = false } @@ -204,7 +192,6 @@ class RunTestsExpandableListViewAdapter( } } else { childItem.selected = true - viewModel.enableTest(childItem.name) groupItem.selected = true if (isSelectedAllItems(groupedListData)) { viewModel.setSelectedAllBtnStatus(SELECT_ALL)