Skip to content

Commit

Permalink
Updated auto run preferences
Browse files Browse the repository at this point in the history
  • Loading branch information
aanorbel committed Feb 7, 2024
1 parent 090d4ba commit 513020d
Show file tree
Hide file tree
Showing 5 changed files with 120 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import static org.openobservatory.ooniprobe.activity.overview.OverviewViewModel.SELECT_ALL;
import static org.openobservatory.ooniprobe.activity.overview.OverviewViewModel.SELECT_NONE;
import static org.openobservatory.ooniprobe.activity.overview.OverviewViewModel.SELECT_SOME;
import static org.openobservatory.ooniprobe.common.PreferenceManagerExtensionKt.resolveStatus;

import android.content.Context;
import android.content.Intent;
Expand Down Expand Up @@ -110,12 +111,16 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
}
});

if (adapter.isSelectedAllItems()) {
binding.switchTests.setCheckedState(MaterialCheckBox.STATE_CHECKED);
} else if (adapter.isNotSelectedAnyGroupItem()) {
binding.switchTests.setCheckedState(MaterialCheckBox.STATE_UNCHECKED);
if (descriptor.getName().equals(OONITests.EXPERIMENTAL.getLabel())) {
binding.switchTests.setChecked(resolveStatus(preferenceManager, descriptor.getName(), descriptor.preferencePrefix(), true));
} else {
binding.switchTests.setCheckedState(MaterialCheckBox.STATE_INDETERMINATE);
if (adapter.isSelectedAllItems()) {
binding.switchTests.setCheckedState(MaterialCheckBox.STATE_CHECKED);
} else if (adapter.isNotSelectedAnyGroupItem()) {
binding.switchTests.setCheckedState(MaterialCheckBox.STATE_UNCHECKED);
} else {
binding.switchTests.setCheckedState(MaterialCheckBox.STATE_INDETERMINATE);
}
}
// Expand all groups
for (int i = 0; i < adapter.getGroupCount(); i++) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ class OverviewTestsExpandableListViewAdapter(
when (viewModel.descriptor.value?.name) {
OONITests.EXPERIMENTAL.label -> {
view.findViewById<TextView>(R.id.group_name).text = groupItem.name
view.findViewById<ImageView>(R.id.group_icon).visibility = View.GONE
}

else -> {
Expand Down Expand Up @@ -97,6 +98,20 @@ class OverviewTestsExpandableListViewAdapter(

groupCheckBox.isChecked = groupItem.selected

/**
* Hide checkbox for experimental tests.
* Experimental tests are not configurable in the settings.
* Tests in this category are not permanent and are subject to change.
* The checkbox is hidden to prevent the user from mistakenly thinking they can be configured.
*/
viewModel.descriptor.value?.run {
if (name == OONITests.EXPERIMENTAL.label) {
groupCheckBox.visibility = View.GONE
} else {
groupCheckBox.visibility = View.VISIBLE
}
}

if (groupItem.inputs?.isNotEmpty() == true) {
if (isExpanded) {
groupIndicator.setImageResource(R.drawable.expand_less)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package org.openobservatory.ooniprobe.activity.overview
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import org.openobservatory.engine.BaseNettest
import org.openobservatory.ooniprobe.activity.runtests.RunTestsViewModel
import org.openobservatory.ooniprobe.common.OONIDescriptor
import org.openobservatory.ooniprobe.common.OONITests
import org.openobservatory.ooniprobe.common.PreferenceManager
import org.openobservatory.ooniprobe.common.disableTest
import org.openobservatory.ooniprobe.common.enableTest
Expand All @@ -28,22 +28,50 @@ class OverviewViewModel() : ViewModel() {
val selectedAllBtnStatus: MutableLiveData<String> = MutableLiveData()

init {
selectedAllBtnStatus.postValue(RunTestsViewModel.SELECT_SOME)
selectedAllBtnStatus.postValue(SELECT_SOME)
}


/**
* Set the status of the selected all button.
* This method will also update the preference of the tests based on the selected status.
* For experimental tests, a single button is used to enable/disable all tests.
* @param selectedStatus the status of the selected all button
*/
fun setSelectedAllBtnStatus(selectedStatus: String) {
selectedAllBtnStatus.postValue(selectedStatus)
when (selectedStatus) {
SELECT_ALL -> {
descriptor.value?.nettests?.forEach {
enableTest(it.name)
descriptor.value?.let { desc ->

when (selectedStatus) {
SELECT_ALL -> {
when (desc.name) {
OONITests.EXPERIMENTAL.label -> {
enableTest(name = desc.name)
}

else -> {
descriptor.value?.nettests?.forEach {
enableTest(name = it.name)
}
}
}
}
}

SELECT_NONE -> {
descriptor.value?.nettests?.forEach {
disableTest(it.name)
SELECT_NONE -> {
when (desc.name) {
OONITests.EXPERIMENTAL.label -> {
disableTest(name = desc.name)
}

else -> {
descriptor.value?.nettests?.forEach {
disableTest(name = it.name)
}
}
}
}

else -> {}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -347,41 +347,74 @@ enum class OONITests(
fun autoRunTests(context: Context, preferenceManager: PreferenceManager): List<DynamicTestSuite> {

return ooniDescriptors(context).filter { ooniDescriptor ->
ooniDescriptor.nettests.any { nettest ->
preferenceManager.resolveStatus(
name = nettest.name,
when (ooniDescriptor.name) {
OONITests.EXPERIMENTAL.label -> preferenceManager.resolveStatus(
name = ooniDescriptor.name,
prefix = ooniDescriptor.preferencePrefix(),
autoRun = true
)
}
}.map { ooniDescriptor ->
DynamicTestSuite(
name = ooniDescriptor.name,
title = ooniDescriptor.title,
shortDescription = ooniDescriptor.shortDescription,
description = ooniDescriptor.description,
icon = ooniDescriptor.getDisplayIcon(context),
icon_24 = ooniDescriptor.getDisplayIcon(context),
color = ooniDescriptor.color,
animation = ooniDescriptor.animation,
dataUsage = ooniDescriptor.dataUsage,
nettest = (ooniDescriptor.nettests).filter { nettest ->

else -> ooniDescriptor.nettests.any { nettest ->
preferenceManager.resolveStatus(
name = nettest.name,
prefix = ooniDescriptor.preferencePrefix(),
autoRun = true
)
}.run {
this + (ooniDescriptor.longRunningTests?.filter { nettest ->
}
}
}.map { ooniDescriptor ->
when (ooniDescriptor.name) {
OONITests.EXPERIMENTAL.label -> DynamicTestSuite(
name = ooniDescriptor.name,
title = ooniDescriptor.title,
shortDescription = ooniDescriptor.shortDescription,
description = ooniDescriptor.description,
icon = ooniDescriptor.getDisplayIcon(context),
icon_24 = ooniDescriptor.getDisplayIcon(context),
color = ooniDescriptor.color,
animation = ooniDescriptor.animation,
dataUsage = ooniDescriptor.dataUsage,
nettest = (ooniDescriptor.nettests).run {
this + (ooniDescriptor.longRunningTests?.filter { nettest ->
preferenceManager.resolveStatus(
name = nettest.name,
prefix = ooniDescriptor.preferencePrefix(),
autoRun = true
)
} ?: listOf())
}
).apply {
autoRun = true
}

else -> DynamicTestSuite(
name = ooniDescriptor.name,
title = ooniDescriptor.title,
shortDescription = ooniDescriptor.shortDescription,
description = ooniDescriptor.description,
icon = ooniDescriptor.getDisplayIcon(context),
icon_24 = ooniDescriptor.getDisplayIcon(context),
color = ooniDescriptor.color,
animation = ooniDescriptor.animation,
dataUsage = ooniDescriptor.dataUsage,
nettest = (ooniDescriptor.nettests).filter { nettest ->
preferenceManager.resolveStatus(
name = nettest.name,
prefix = ooniDescriptor.preferencePrefix(),
autoRun = true
)
} ?: listOf())
}.run {
this + (ooniDescriptor.longRunningTests?.filter { nettest ->
preferenceManager.resolveStatus(
name = nettest.name,
prefix = ooniDescriptor.preferencePrefix(),
autoRun = true
)
} ?: listOf())
}
).apply {
autoRun = true
}
).apply {
autoRun = true
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ fun PreferenceManager.resolveStatus(
return isExperimentalOn
}
}
val key = getPreferenceKey(name = name, prefix = prefix, autoRun = autoRun)
return if (autoRun) {
sp.getBoolean(
getPreferenceKey(name = name, prefix = prefix, autoRun = autoRun),
Expand Down Expand Up @@ -78,6 +79,8 @@ private fun PreferenceManager.setValue(
if (experimentalTestList().contains(name) && !autoRun) {
return false
}
val key = getPreferenceKey(name = name, prefix = prefix, autoRun = autoRun)

return with(sp.edit()) {
putBoolean(getPreferenceKey(name = name, prefix = prefix, autoRun = autoRun), value)
commit()
Expand Down

0 comments on commit 513020d

Please sign in to comment.