diff --git a/app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsDownloadPermissionsViewModel.kt b/app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsDownloadPermissionsViewModel.kt index 2c93d84c7a6..8dded74ea84 100644 --- a/app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsDownloadPermissionsViewModel.kt +++ b/app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsDownloadPermissionsViewModel.kt @@ -23,9 +23,11 @@ class AdministratorControlsDownloadPermissionsViewModel( val isTopicAutoUpdatePermission = ObservableField(deviceSettings.automaticallyUpdateTopics) - fun onTopicWifiUpdatePermissionChanged(checked: Boolean) { - profileManagementController.updateWifiPermissionDeviceSettings(userProfileId, checked) - .toLiveData() + fun onTopicWifiUpdatePermissionChanged() { + profileManagementController.updateWifiPermissionDeviceSettings( + userProfileId, + !isTopicWifiUpdatePermission.get()!! + ).toLiveData() .observe( fragment, Observer { @@ -40,10 +42,10 @@ class AdministratorControlsDownloadPermissionsViewModel( ) } - fun onTopicAutoUpdatePermissionChanged(checked: Boolean) { + fun onTopicAutoUpdatePermissionChanged() { profileManagementController.updateTopicAutomaticallyPermissionDeviceSettings( userProfileId, - checked + !isTopicAutoUpdatePermission.get()!! ).toLiveData().observe( fragment, Observer { diff --git a/app/src/main/res/layout-land/administrator_controls_download_permissions_view.xml b/app/src/main/res/layout-land/administrator_controls_download_permissions_view.xml index 9a8ff98e16e..6d7b8b7f825 100644 --- a/app/src/main/res/layout-land/administrator_controls_download_permissions_view.xml +++ b/app/src/main/res/layout-land/administrator_controls_download_permissions_view.xml @@ -34,6 +34,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/white" + android:clickable="true" + android:focusable="true" + android:importantForAccessibility="yes" + android:onClick="@{(view) -> viewModel.onTopicWifiUpdatePermissionChanged()}" android:paddingStart="36dp" android:paddingTop="20dp" android:paddingEnd="36dp" @@ -69,10 +73,11 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="40dp" + android:checked="@{viewModel.isTopicWifiUpdatePermission}" + android:clickable="false" + android:focusable="false" android:minWidth="48dp" android:minHeight="48dp" - android:checked="@{viewModel.isTopicWifiUpdatePermission}" - android:onCheckedChanged="@{(switch, checked) -> viewModel.onTopicWifiUpdatePermissionChanged(checked)}" android:theme="@style/SwitchCompatTheme" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" @@ -95,6 +100,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/white" + android:clickable="true" + android:focusable="true" + android:importantForAccessibility="yes" + android:onClick="@{(view) -> viewModel.onTopicAutoUpdatePermissionChanged()}" android:paddingStart="36dp" android:paddingTop="20dp" android:paddingEnd="36dp" @@ -131,10 +140,11 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="40dp" + android:checked="@{viewModel.isTopicAutoUpdatePermission}" + android:clickable="false" + android:focusable="false" android:minWidth="48dp" android:minHeight="48dp" - android:checked="@{viewModel.isTopicAutoUpdatePermission}" - android:onCheckedChanged="@{(switch, checked) -> viewModel.onTopicAutoUpdatePermissionChanged(checked)}" android:theme="@style/SwitchCompatTheme" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout-sw600dp/administrator_controls_download_permissions_view.xml b/app/src/main/res/layout-sw600dp/administrator_controls_download_permissions_view.xml index fbe1e490a40..02d36f95ec8 100644 --- a/app/src/main/res/layout-sw600dp/administrator_controls_download_permissions_view.xml +++ b/app/src/main/res/layout-sw600dp/administrator_controls_download_permissions_view.xml @@ -34,6 +34,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/white" + android:clickable="true" + android:focusable="true" + android:importantForAccessibility="yes" + android:onClick="@{(view) -> viewModel.onTopicWifiUpdatePermissionChanged()}" android:paddingStart="16dp" android:paddingTop="20dp" android:paddingEnd="16dp" @@ -70,10 +74,11 @@ android:layout_height="wrap_content" android:layout_marginStart="40dp" android:layout_marginEnd="4dp" + android:checked="@{viewModel.isTopicWifiUpdatePermission}" + android:clickable="false" + android:focusable="false" android:minWidth="48dp" android:minHeight="48dp" - android:checked="@{viewModel.isTopicWifiUpdatePermission}" - android:onCheckedChanged="@{(switch, checked) -> viewModel.onTopicWifiUpdatePermissionChanged(checked)}" android:theme="@style/SwitchCompatTheme" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" @@ -96,6 +101,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/white" + android:clickable="true" + android:focusable="true" + android:importantForAccessibility="yes" + android:onClick="@{(view) -> viewModel.onTopicAutoUpdatePermissionChanged()}" android:paddingStart="16dp" android:paddingTop="20dp" android:paddingEnd="16dp" @@ -133,10 +142,11 @@ android:layout_height="wrap_content" android:layout_marginStart="40dp" android:layout_marginEnd="4dp" + android:checked="@{viewModel.isTopicAutoUpdatePermission}" + android:clickable="false" + android:focusable="false" android:minWidth="48dp" android:minHeight="48dp" - android:checked="@{viewModel.isTopicAutoUpdatePermission}" - android:onCheckedChanged="@{(switch, checked) -> viewModel.onTopicAutoUpdatePermissionChanged(checked)}" android:theme="@style/SwitchCompatTheme" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/administrator_controls_download_permissions_view.xml b/app/src/main/res/layout/administrator_controls_download_permissions_view.xml index 486ba666802..abb54e9ac31 100644 --- a/app/src/main/res/layout/administrator_controls_download_permissions_view.xml +++ b/app/src/main/res/layout/administrator_controls_download_permissions_view.xml @@ -34,6 +34,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/white" + android:clickable="true" + android:focusable="true" + android:importantForAccessibility="yes" + android:onClick="@{(view) -> viewModel.onTopicWifiUpdatePermissionChanged()}" android:paddingStart="16dp" android:paddingTop="20dp" android:paddingEnd="16dp" @@ -70,10 +74,11 @@ android:layout_height="wrap_content" android:layout_marginStart="40dp" android:layout_marginEnd="4dp" + android:checked="@{viewModel.isTopicWifiUpdatePermission}" + android:clickable="false" + android:focusable="false" android:minWidth="48dp" android:minHeight="48dp" - android:checked="@{viewModel.isTopicWifiUpdatePermission}" - android:onCheckedChanged="@{(switch, checked) -> viewModel.onTopicWifiUpdatePermissionChanged(checked)}" android:theme="@style/SwitchCompatTheme" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" @@ -96,6 +101,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/white" + android:clickable="true" + android:focusable="true" + android:importantForAccessibility="yes" + android:onClick="@{(view) -> viewModel.onTopicAutoUpdatePermissionChanged()}" android:paddingStart="16dp" android:paddingTop="20dp" android:paddingEnd="16dp" @@ -133,10 +142,11 @@ android:layout_height="wrap_content" android:layout_marginStart="40dp" android:layout_marginEnd="4dp" + android:checked="@{viewModel.isTopicAutoUpdatePermission}" + android:clickable="false" + android:focusable="false" android:minWidth="48dp" android:minHeight="48dp" - android:checked="@{viewModel.isTopicAutoUpdatePermission}" - android:onCheckedChanged="@{(switch, checked) -> viewModel.onTopicAutoUpdatePermissionChanged(checked)}" android:theme="@style/SwitchCompatTheme" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityTest.kt index 69082b0e1e7..72ec2fec44f 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityTest.kt @@ -27,6 +27,7 @@ import androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent import androidx.test.espresso.matcher.RootMatchers.isDialog import androidx.test.espresso.matcher.ViewMatchers import androidx.test.espresso.matcher.ViewMatchers.isChecked +import androidx.test.espresso.matcher.ViewMatchers.isClickable import androidx.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed import androidx.test.espresso.matcher.ViewMatchers.isDisplayed import androidx.test.espresso.matcher.ViewMatchers.isRoot @@ -269,7 +270,7 @@ class AdministratorControlsActivityTest { } @Test - fun testAdministratorControlsFragment_clickWifiSwitch_configChange_wifiSwitchIsChecked() { + fun testAdministratorControlsFragment_clickWifiContainer_configChange_wifiSwitchIsChecked() { launch( createAdministratorControlsActivityIntent( profileId = internalProfileId @@ -295,9 +296,10 @@ class AdministratorControlsActivityTest { atPositionOnView( recyclerViewId = R.id.administrator_controls_list, position = 2, - targetViewId = R.id.topic_update_on_wifi_switch + targetViewId = R.id.topic_update_on_wifi_constraint_layout ) ).perform(click()) + testCoroutineDispatchers.runCurrent() onView(isRoot()).perform(orientationLandscape()) scrollToPosition(position = 2) onView( @@ -333,6 +335,98 @@ class AdministratorControlsActivityTest { } } + @Test + fun testAdministratorControlsFragment_clickWifiContainer_wifiSwitchIsChecked() { + launch( + createAdministratorControlsActivityIntent( + profileId = internalProfileId + ) + ).use { + testCoroutineDispatchers.runCurrent() + scrollToPosition(position = 2) + onView( + atPositionOnView( + recyclerViewId = R.id.administrator_controls_list, + position = 2, + targetViewId = R.id.topic_update_on_wifi_constraint_layout + ) + ).perform(click()) + testCoroutineDispatchers.runCurrent() + onView( + atPositionOnView( + recyclerViewId = R.id.administrator_controls_list, + position = 2, + targetViewId = R.id.topic_update_on_wifi_switch + ) + ).check(matches(isChecked())) + } + } + + @Test + fun testAdministratorControlsFragment_clickAutoUpdateContainer_autoUpdateSwitchIsChecked() { + launch( + createAdministratorControlsActivityIntent( + profileId = internalProfileId + ) + ).use { + testCoroutineDispatchers.runCurrent() + scrollToPosition(position = 2) + onView( + atPositionOnView( + recyclerViewId = R.id.administrator_controls_list, + position = 2, + targetViewId = R.id.auto_update_topic_constraint_layout + ) + ).perform(click()) + testCoroutineDispatchers.runCurrent() + onView( + atPositionOnView( + recyclerViewId = R.id.administrator_controls_list, + position = 2, + targetViewId = R.id.auto_update_topic_switch + ) + ).check(matches(isChecked())) + } + } + + @Test + fun testAdministratorControlsFragment_wifiSwitchIsNonClickable() { + launch( + createAdministratorControlsActivityIntent( + profileId = internalProfileId + ) + ).use { + testCoroutineDispatchers.runCurrent() + scrollToPosition(position = 2) + onView( + atPositionOnView( + recyclerViewId = R.id.administrator_controls_list, + position = 2, + targetViewId = R.id.topic_update_on_wifi_switch + ) + ).check(matches(not(isClickable()))) + } + } + + @Test + fun testAdministratorControlsFragment_autoUpdateSwitchIsNonClickable() { + launch( + createAdministratorControlsActivityIntent( + profileId = internalProfileId + ) + ).use { + testCoroutineDispatchers.runCurrent() + scrollToPosition(position = 2) + onView( + atPositionOnView( + recyclerViewId = R.id.administrator_controls_list, + position = 2, + targetViewId = R.id.auto_update_topic_switch + ) + ).check(matches(not(isClickable()))) + } + } + @Test fun testAdministratorControlsFragment_clickEditProfile_opensProfileListActivity() { launch(