17899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov/* 2ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * Copyright 2018 The Android Open Source Project 37899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov * 47899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov * Licensed under the Apache License, Version 2.0 (the "License"); 57899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov * you may not use this file except in compliance with the License. 67899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov * You may obtain a copy of the License at 77899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov * 87899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov * http://www.apache.org/licenses/LICENSE-2.0 97899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov * 107899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov * Unless required by applicable law or agreed to in writing, software 117899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov * distributed under the License is distributed on an "AS IS" BASIS, 127899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov * See the License for the specific language governing permissions and 147899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov * limitations under the License. 157899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov */ 16ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.core.view; 177899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov 184c0cac8cbf22f47465eec7a75d723fa0e0ebf1dcAurimas Liutikasimport static org.junit.Assert.assertEquals; 194c0cac8cbf22f47465eec7a75d723fa0e0ebf1dcAurimas Liutikas 200945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikovimport android.graphics.Rect; 217899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikovimport android.os.Build; 22754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport android.support.test.filters.SmallTest; 23d5bac09cd05be314f4c38435572a3fc01c2c8d4fKirill Grouchnikovimport android.support.test.runner.AndroidJUnit4; 240945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikovimport android.support.v4.testutils.TestUtils; 2539e84476b45f10ed4929e307372d6f7a2103e9d5Kirill Grouchnikovimport android.view.Gravity; 264c0cac8cbf22f47465eec7a75d723fa0e0ebf1dcAurimas Liutikas 27d5bac09cd05be314f4c38435572a3fc01c2c8d4fKirill Grouchnikovimport org.junit.Test; 28d5bac09cd05be314f4c38435572a3fc01c2c8d4fKirill Grouchnikovimport org.junit.runner.RunWith; 297899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov 30d5bac09cd05be314f4c38435572a3fc01c2c8d4fKirill Grouchnikov@RunWith(AndroidJUnit4.class) 31d5bac09cd05be314f4c38435572a3fc01c2c8d4fKirill Grouchnikov@SmallTest 32d5bac09cd05be314f4c38435572a3fc01c2c8d4fKirill Grouchnikovpublic class GravityCompatTest { 33d5bac09cd05be314f4c38435572a3fc01c2c8d4fKirill Grouchnikov @Test 347899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov public void testConstants() { 357899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov // Compat constants must match core constants since they can be OR'd with 367899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov // other core constants. 37bdfb4eaebe24e9b4478f4cad3fb12e68493ffd70Kirill Grouchnikov assertEquals("Start constants", Gravity.START, GravityCompat.START); 38bdfb4eaebe24e9b4478f4cad3fb12e68493ffd70Kirill Grouchnikov assertEquals("End constants", Gravity.END, GravityCompat.END); 397899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov } 407899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov 41d5bac09cd05be314f4c38435572a3fc01c2c8d4fKirill Grouchnikov @Test 427899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov public void testGetAbsoluteGravity() { 437899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov assertEquals("Left under LTR", 447899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov GravityCompat.getAbsoluteGravity(Gravity.LEFT, ViewCompat.LAYOUT_DIRECTION_LTR), 457899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov Gravity.LEFT); 467899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov assertEquals("Right under LTR", 477899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov GravityCompat.getAbsoluteGravity(Gravity.RIGHT, ViewCompat.LAYOUT_DIRECTION_LTR), 487899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov Gravity.RIGHT); 497899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov assertEquals("Left under RTL", 507899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov GravityCompat.getAbsoluteGravity(Gravity.LEFT, ViewCompat.LAYOUT_DIRECTION_RTL), 517899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov Gravity.LEFT); 527899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov assertEquals("Right under RTL", 537899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov GravityCompat.getAbsoluteGravity(Gravity.RIGHT, ViewCompat.LAYOUT_DIRECTION_RTL), 547899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov Gravity.RIGHT); 557899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov 567899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov assertEquals("Start under LTR", 577899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov GravityCompat.getAbsoluteGravity(GravityCompat.START, 587899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov ViewCompat.LAYOUT_DIRECTION_LTR), 597899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov Gravity.LEFT); 607899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov assertEquals("End under LTR", 617899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov GravityCompat.getAbsoluteGravity(GravityCompat.END, 627899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov ViewCompat.LAYOUT_DIRECTION_LTR), 637899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov Gravity.RIGHT); 647899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov 657899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov if (Build.VERSION.SDK_INT >= 17) { 667899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov // The following tests are only expected to pass on v17+ devices 677899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov assertEquals("Start under RTL", 687899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov GravityCompat.getAbsoluteGravity(GravityCompat.START, 697899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov ViewCompat.LAYOUT_DIRECTION_RTL), 707899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov Gravity.RIGHT); 717899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov assertEquals("End under RTL", 727899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov GravityCompat.getAbsoluteGravity(GravityCompat.END, 737899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov ViewCompat.LAYOUT_DIRECTION_RTL), 747899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov Gravity.LEFT); 757899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov } else { 767899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov // And on older devices START is always LEFT, END is always RIGHT 777899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov assertEquals("Start under RTL", 787899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov GravityCompat.getAbsoluteGravity(GravityCompat.START, 797899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov ViewCompat.LAYOUT_DIRECTION_RTL), 807899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov Gravity.LEFT); 817899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov assertEquals("End under RTL", 827899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov GravityCompat.getAbsoluteGravity(GravityCompat.END, 837899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov ViewCompat.LAYOUT_DIRECTION_RTL), 847899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov Gravity.RIGHT); 857899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov } 867899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov } 870945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 88d5bac09cd05be314f4c38435572a3fc01c2c8d4fKirill Grouchnikov @Test 890945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov public void testApplyNoOffsetsLtr() { 900945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov Rect outRect = new Rect(); 910945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 920945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Left / top aligned under LTR direction 930945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(Gravity.LEFT | Gravity.TOP, 100, 50, 940945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR); 950945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Left / top aligned under LTR: ", 960945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 0, 0, 100, 50); 970945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 980945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Center / top aligned under LTR direction 990945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(Gravity.CENTER_HORIZONTAL | Gravity.TOP, 100, 50, 1000945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR); 1010945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Center / top aligned under LTR: ", 1020945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 50, 0, 150, 50); 1030945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 1040945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Right / top aligned under LTR direction 1050945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(Gravity.RIGHT | Gravity.TOP, 100, 50, 1060945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR); 1070945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Right / top aligned under LTR: ", 1080945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 100, 0, 200, 50); 1090945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 1100945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Left / center aligned under LTR direction 1110945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(Gravity.LEFT | Gravity.CENTER_VERTICAL, 100, 50, 1120945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR); 1130945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Left / center aligned under LTR: ", 1140945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 0, 25, 100, 75); 1150945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 1160945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Center / center aligned under LTR direction 1170945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(Gravity.CENTER, 100, 50, 1180945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR); 1190945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Center / center aligned under LTR: ", 1200945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 50, 25, 150, 75); 1210945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 1220945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Right / center aligned under LTR direction 1230945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(Gravity.RIGHT | Gravity.CENTER_VERTICAL, 100, 50, 1240945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR); 1250945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Right / center aligned under LTR: ", 1260945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 100, 25, 200, 75); 1270945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 1280945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Left / bottom aligned under LTR direction 1290945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(Gravity.LEFT | Gravity.BOTTOM, 100, 50, 1300945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR); 1310945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Left / bottom aligned under LTR: ", 1320945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 0, 50, 100, 100); 1330945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 1340945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Center / bottom aligned under LTR direction 1350945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM, 100, 50, 1360945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR); 1370945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Center / bottom aligned under LTR: ", 1380945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 50, 50, 150, 100); 1390945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 1400945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Right / bottom aligned under LTR direction 1410945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(Gravity.RIGHT | Gravity.BOTTOM, 100, 50, 1420945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR); 1430945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Right / bottom aligned under LTR: ", 1440945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 100, 50, 200, 100); 1450945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 1460945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // The following tests are expected to pass on all devices since START under LTR is LEFT 1470945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // and END under LTR is RIGHT on pre-v17 and v17+ versions of the platform. 1480945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 1490945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Start / top aligned under LTR direction 1500945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(GravityCompat.START | Gravity.TOP, 100, 50, 1510945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR); 1520945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Start / top aligned under LTR: ", 1530945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 0, 0, 100, 50); 1540945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 1550945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // End / top aligned under LTR direction 1560945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(GravityCompat.END | Gravity.TOP, 100, 50, 1570945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR); 1580945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("End / top aligned under LTR: ", 1590945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 100, 0, 200, 50); 1600945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 1610945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Start / center aligned under LTR direction 1620945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(GravityCompat.START | Gravity.CENTER_VERTICAL, 100, 50, 1630945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR); 1640945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Start / center aligned under LTR: ", 1650945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 0, 25, 100, 75); 1660945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 1670945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // End / center aligned under LTR direction 1680945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(GravityCompat.END | Gravity.CENTER_VERTICAL, 100, 50, 1690945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR); 1700945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("End / center aligned under LTR: ", 1710945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 100, 25, 200, 75); 1720945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 1730945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Start / bottom aligned under LTR direction 1740945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(GravityCompat.START | Gravity.BOTTOM, 100, 50, 1750945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR); 1760945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Start / bottom aligned under LTR: ", 1770945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 0, 50, 100, 100); 1780945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 1790945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // End / bottom aligned under LTR direction 1800945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(GravityCompat.END | Gravity.BOTTOM, 100, 50, 1810945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR); 1820945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("End / bottom aligned under LTR: ", 1830945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 100, 50, 200, 100); 1840945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov } 1850945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 186d5bac09cd05be314f4c38435572a3fc01c2c8d4fKirill Grouchnikov @Test 1870945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov public void testApplyNoOffsetsRtl() { 1880945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov Rect outRect = new Rect(); 1890945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 1900945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // The following tests are expected to pass on all devices since they are using 1910945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Gravity constants that are not RTL-aware 1920945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 1930945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Left / top aligned under RTL direction 1940945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(Gravity.LEFT | Gravity.TOP, 100, 50, 1950945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL); 1960945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Left / top aligned under RTL: ", 1970945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 0, 0, 100, 50); 1980945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 1990945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Center / top aligned under RTL direction 2000945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(Gravity.CENTER_HORIZONTAL | Gravity.TOP, 100, 50, 2010945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL); 2020945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Center / top aligned under RTL: ", 2030945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 50, 0, 150, 50); 2040945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 2050945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Right / top aligned under RTL direction 2060945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(Gravity.RIGHT | Gravity.TOP, 100, 50, 2070945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL); 2080945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Right / top aligned under RTL: ", 2090945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 100, 0, 200, 50); 2100945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 2110945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Left / center aligned under RTL direction 2120945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(Gravity.LEFT | Gravity.CENTER_VERTICAL, 100, 50, 2130945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL); 2140945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Left / center aligned under RTL: ", 2150945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 0, 25, 100, 75); 2160945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 2170945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Center / center aligned under RTL direction 2180945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(Gravity.CENTER, 100, 50, 2190945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL); 2200945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Center / center aligned under RTL: ", 2210945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 50, 25, 150, 75); 2220945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 2230945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Right / center aligned under RTL direction 2240945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(Gravity.RIGHT | Gravity.CENTER_VERTICAL, 100, 50, 2250945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL); 2260945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Right / center aligned under RTL: ", 2270945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 100, 25, 200, 75); 2280945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 2290945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Left / bottom aligned under RTL direction 2300945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(Gravity.LEFT | Gravity.BOTTOM, 100, 50, 2310945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL); 2320945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Left / bottom aligned under RTL: ", 2330945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 0, 50, 100, 100); 2340945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 2350945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Center / bottom aligned under RTL direction 2360945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM, 100, 50, 2370945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL); 2380945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Center / bottom aligned under RTL: ", 2390945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 50, 50, 150, 100); 2400945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 2410945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Right / bottom aligned under RTL direction 2420945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(Gravity.RIGHT | Gravity.BOTTOM, 100, 50, 2430945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL); 2440945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Right / bottom aligned under RTL: ", 2450945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 100, 50, 200, 100); 2460945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 2470945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 2480945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov if (Build.VERSION.SDK_INT >= 17) { 2490945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // The following tests are only expected to pass on v17+ devices since START under 2500945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // RTL is RIGHT and END under RTL is LEFT only on those devices. 2510945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 2520945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Start / top aligned under RTL direction 2530945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(GravityCompat.START | Gravity.TOP, 100, 50, 2540945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL); 2550945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Start / top aligned under RTL: ", 2560945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 100, 0, 200, 50); 2570945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 2580945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // End / top aligned under RTL direction 2590945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(GravityCompat.END | Gravity.TOP, 100, 50, 2600945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL); 2610945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("End / top aligned under RTL: ", 2620945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 0, 0, 100, 50); 2630945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 2640945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Start / center aligned under RTL direction 2650945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(GravityCompat.START | Gravity.CENTER_VERTICAL, 100, 50, 2660945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL); 2670945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Start / center aligned under RTL: ", 2680945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 100, 25, 200, 75); 2690945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 2700945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // End / center aligned under RTL direction 2710945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(GravityCompat.END | Gravity.CENTER_VERTICAL, 100, 50, 2720945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL); 2730945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("End / center aligned under RTL: ", 2740945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 0, 25, 100, 75); 2750945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 2760945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Start / bottom aligned under RTL direction 2770945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(GravityCompat.START | Gravity.BOTTOM, 100, 50, 2780945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL); 2790945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Start / bottom aligned under RTL: ", 2800945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 100, 50, 200, 100); 2810945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 2820945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // End / bottom aligned under RTL direction 2830945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(GravityCompat.END | Gravity.BOTTOM, 100, 50, 2840945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL); 2850945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("End / bottom aligned under RTL: ", 2860945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 0, 50, 100, 100); 2870945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov } else { 2880945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // And on older devices START is always LEFT, END is always RIGHT 2890945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 2900945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Start / top aligned under RTL direction 2910945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(GravityCompat.START | Gravity.TOP, 100, 50, 2920945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL); 2930945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Start / top aligned under RTL: ", 2940945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 0, 0, 100, 50); 2950945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 2960945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // End / top aligned under RTL direction 2970945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(GravityCompat.END | Gravity.TOP, 100, 50, 2980945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL); 2990945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("End / top aligned under RTL: ", 3000945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 100, 0, 200, 50); 3010945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 3020945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Start / center aligned under RTL direction 3030945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(GravityCompat.START | Gravity.CENTER_VERTICAL, 100, 50, 3040945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL); 3050945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Start / center aligned under RTL: ", 3060945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 0, 25, 100, 75); 3070945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 3080945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // End / center aligned under RTL direction 3090945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(GravityCompat.END | Gravity.CENTER_VERTICAL, 100, 50, 3100945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL); 3110945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("End / center aligned under RTL: ", 3120945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 100, 25, 200, 75); 3130945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 3140945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // Start / bottom aligned under RTL direction 3150945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(GravityCompat.START | Gravity.BOTTOM, 100, 50, 3160945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL); 3170945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("Start / bottom aligned under RTL: ", 3180945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 0, 50, 100, 100); 3190945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov 3200945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov // End / bottom aligned under RTL direction 3210945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov GravityCompat.apply(GravityCompat.END | Gravity.BOTTOM, 100, 50, 3220945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL); 3230945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov TestUtils.assertRectangleBounds("End / bottom aligned under RTL: ", 3240945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov outRect, 100, 50, 200, 100); 3250945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov } 3260945b2238447028b9d274cccccd7fc61042bf03bKirill Grouchnikov } 3277899d6f64ae6585a79c7c1844d4a5e8f894bf2d7Kirill Grouchnikov} 328