Skip to content

Commit

Permalink
Fix oppia#3780: [RTL] Image region selection. (oppia#3815)
Browse files Browse the repository at this point in the history
* Update selection_interaction_item.xml

* Update selection_interaction_item.xml

* Update return_to_topic_button_item.xml

* Update return_to_topic_button_item.xml

* Update image_region_selection_interaction_item.xml

* Update image_region_selection_interaction_item.xml

* Update image_region_selection_interaction_item.xml

* Update image_region_selection_interaction_item.xml

* Update image_region_selection_interaction_item.xml

* fixed image region selection

* Add tests

* Update ImageRegionSelectionInteractionViewTest.kt

* Update ImageRegionSelectionInteractionViewTest.kt

* Update ImageRegionSelectionInteractionViewTest.kt

* Update ImageRegionSelectionInteractionViewTest.kt

* Update app/src/main/java/org/oppia/android/app/utility/ClickableAreasImage.kt

Co-authored-by: Ben Henning <[email protected]>

* Update ClickableAreasImage.kt

* Update ClickableAreasImage.kt

* Remove ignore and add RunOn Expresso platform

* Update ImageRegionSelectionInteractionViewTest.kt

* Add oppiaTest rule

* Update ImageRegionSelectionInteractionViewTest.kt

Co-authored-by: Ben Henning <[email protected]>
  • Loading branch information
veena14cs and BenHenning committed Sep 27, 2021
1 parent 3b67e0e commit 713584a
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.graphics.RectF
import android.view.MotionEvent
import android.view.View
import android.widget.FrameLayout
import androidx.core.view.ViewCompat
import androidx.core.view.forEachIndexed
import androidx.core.view.isVisible
import org.oppia.android.R
Expand Down Expand Up @@ -109,6 +110,10 @@ class ClickableAreasImage(
imageRect.height().roundToInt()
)
val newView = View(it.context)
// ClickableArea coordinates are not laid-out properly in RTL. The image region coordinates are
// from left-to-right with an upper left origin and touch coordinates from Android start from the
// right in RTL mode. Thus, to avoid this situation, force layout direction to LTR in all situations.
ViewCompat.setLayoutDirection(it, ViewCompat.LAYOUT_DIRECTION_LTR)
newView.layoutParams = layoutParams
newView.x = imageRect.left
newView.y = imageRect.top
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package org.oppia.android.app.testing
import android.app.Application
import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.test.core.app.ActivityScenario.launch
import androidx.test.core.app.ApplicationProvider
import androidx.test.espresso.Espresso.onView
Expand All @@ -18,6 +19,7 @@ import org.hamcrest.CoreMatchers.not
import org.hamcrest.Matchers.allOf
import org.junit.Before
import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor
Expand Down Expand Up @@ -68,7 +70,10 @@ import org.oppia.android.domain.platformparameter.PlatformParameterModule
import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.RunOn
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.TestPlatform
import org.oppia.android.testing.mockito.capture
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
Expand Down Expand Up @@ -107,6 +112,9 @@ class ImageRegionSelectionInteractionViewTest {
@Captor
lateinit var regionClickedEvent: ArgumentCaptor<RegionClickedEvent>

@get:Rule
val oppiaTestRule = OppiaTestRule()

@Before
fun setUp() {
setUpTestApplicationComponent()
Expand All @@ -119,7 +127,7 @@ class ImageRegionSelectionInteractionViewTest {

@Test
// TODO(#1611): Fix ImageRegionSelectionInteractionViewTest
@Ignore
@RunOn(TestPlatform.ESPRESSO)
fun testImageRegionSelectionInteractionView_clickRegion3_region3Clicked() {
launch(ImageRegionSelectionTestActivity::class.java).use {
it.onActivity {
Expand All @@ -141,7 +149,7 @@ class ImageRegionSelectionInteractionViewTest {

@Test
// TODO(#1611): Fix ImageRegionSelectionInteractionViewTest
@Ignore
@RunOn(TestPlatform.ESPRESSO)
fun testImageRegionSelectionInteractionView_clickRegion3_clickRegion2_region2Clicked() {
launch(ImageRegionSelectionTestActivity::class.java).use {
it.onActivity {
Expand Down Expand Up @@ -179,7 +187,7 @@ class ImageRegionSelectionInteractionViewTest {

@Test
// TODO(#1611): Fix ImageRegionSelectionInteractionViewTest
@Ignore
@RunOn(TestPlatform.ESPRESSO)
fun testImageRegionSelectionInteractionView_clickOnDefaultRegion_defaultRegionClicked() {
launch(ImageRegionSelectionTestActivity::class.java).use {
it.onActivity {
Expand All @@ -201,7 +209,7 @@ class ImageRegionSelectionInteractionViewTest {
}

@Test
@Ignore("Move to Robolectric")
@RunOn(TestPlatform.ESPRESSO)
fun testView_withTalkbackEnabled_clickRegion3_clickRegion2_region2Clicked() {
launch(ImageRegionSelectionTestActivity::class.java).use {
it.onActivity {
Expand Down Expand Up @@ -238,7 +246,7 @@ class ImageRegionSelectionInteractionViewTest {
}

@Test
@Ignore("Move to Robolectric")
@RunOn(TestPlatform.ESPRESSO)
fun testImageRegionSelectionInteractionView_withTalkbackEnabled_clickRegion3_region3Clicked() {
launch(ImageRegionSelectionTestActivity::class.java).use {
it.onActivity {
Expand Down Expand Up @@ -281,6 +289,68 @@ class ImageRegionSelectionInteractionViewTest {
}
}

@Test
// TODO(#1611): Fix ImageRegionSelectionInteractionViewTest
@RunOn(TestPlatform.ESPRESSO)
fun testImageRegionSelectionInteractionView_rtl_clickRegion3_region3Clicked() {
launch(ImageRegionSelectionTestActivity::class.java).use {
it.onActivity {
it.window.decorView.layoutDirection = ViewCompat.LAYOUT_DIRECTION_RTL
it.findViewById<ImageRegionSelectionInteractionView>(R.id.clickable_image_view)
.setListener(onClickableAreaClickedListener)
}
onView(withId(R.id.clickable_image_view)).perform(
clickPoint(pointX = 0.3f, pointY = 0.3f)
)

verify(onClickableAreaClickedListener)
.onClickableAreaTouched(
capture(regionClickedEvent)
)
assertThat(regionClickedEvent.value)
.isEqualTo(NamedRegionClickedEvent(regionLabel = "Region 3"))
}
}

@Test
// TODO(#1611): Fix ImageRegionSelectionInteractionViewTest
@RunOn(TestPlatform.ESPRESSO)
fun testImageRegionSelectionInteractionView_rtl_clickRegion3_clickRegion2_region2Clicked() {
launch(ImageRegionSelectionTestActivity::class.java).use {
it.onActivity {
it.window.decorView.layoutDirection = ViewCompat.LAYOUT_DIRECTION_RTL
it.findViewById<ImageRegionSelectionInteractionView>(R.id.clickable_image_view)
.setListener(onClickableAreaClickedListener)
}
onView(withId(R.id.clickable_image_view)).perform(
clickPoint(pointX = 0.3f, pointY = 0.3f)
)
onView(allOf(withTagValue(`is`("Region 3"))))
.check(
matches(isDisplayed())
)

onView(withId(R.id.clickable_image_view)).perform(
clickPoint(pointX = 0.7f, pointY = 0.3f)
)
onView(allOf(withTagValue(`is`("Region 2"))))
.check(
matches(isDisplayed())
)

verify(
onClickableAreaClickedListener,
times(2)
).onClickableAreaTouched(
capture(
regionClickedEvent
)
)
assertThat(regionClickedEvent.value)
.isEqualTo(NamedRegionClickedEvent(regionLabel = "Region 2"))
}
}

// TODO(#59): Figure out a way to reuse modules instead of needing to re-declare them.
@Singleton
@Component(
Expand Down

0 comments on commit 713584a

Please sign in to comment.