10327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu/* 20327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu * Copyright (C) 2016 The Android Open Source Project 30327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu * 40327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu * Licensed under the Apache License, Version 2.0 (the "License"); 50327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu * you may not use this file except in compliance with the License. 60327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu * You may obtain a copy of the License at 70327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu * 80327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu * http://www.apache.org/licenses/LICENSE-2.0 90327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu * 100327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu * Unless required by applicable law or agreed to in writing, software 110327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu * distributed under the License is distributed on an "AS IS" BASIS, 120327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu * See the License for the specific language governing permissions and 140327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu * limitations under the License. 150327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu */ 16ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.appcompat.app; 170327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu 180327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhuimport static org.junit.Assert.assertEquals; 190327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu 200327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhuimport android.app.Activity; 210327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhuimport android.graphics.Bitmap; 220327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhuimport android.graphics.Canvas; 230327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhuimport android.graphics.Color; 240327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhuimport android.graphics.drawable.Drawable; 250327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhuimport android.os.Build; 260327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhuimport android.support.test.annotation.UiThreadTest; 273f8f2df1dc73b4936b8f77ec4acdae7bb4950539Aurimas Liutikasimport android.support.test.filters.SmallTest; 288d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikasimport android.support.test.rule.ActivityTestRule; 298d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikasimport android.support.test.runner.AndroidJUnit4; 300327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhuimport android.view.View; 310327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhuimport android.widget.ImageView; 320327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu 333de8a4e8305507475d7890205184946a25cf45e7Aurimas Liutikasimport androidx.appcompat.test.R; 343de8a4e8305507475d7890205184946a25cf45e7Aurimas Liutikas 350327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhuimport org.junit.Before; 368d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikasimport org.junit.Rule; 370327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhuimport org.junit.Test; 388d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikasimport org.junit.runner.RunWith; 390327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu 400327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu@SmallTest 418d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikas@RunWith(AndroidJUnit4.class) 428d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikaspublic class AppCompatVectorDrawableIntegrationTest { 438d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikas @Rule 448d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikas public final ActivityTestRule<AppCompatVectorDrawableIntegrationActivity> mActivityTestRule; 450327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu 460327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu private Bitmap mBitmap; 470327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu private Canvas mCanvas; 480327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu 490327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu private static final int WIDTH = 64; 500327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu private static final int HEIGHT = 64; 510327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu private static final int LEFT_CENTER_X = WIDTH / 4; 520327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu private static final int RIGHT_CENTER_X = WIDTH * 3 / 4; 530327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu private static final int CENTER_Y = HEIGHT / 2; 540327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu 550327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu public AppCompatVectorDrawableIntegrationTest() { 568d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikas mActivityTestRule = 578d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikas new ActivityTestRule<>(AppCompatVectorDrawableIntegrationActivity.class); 580327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu } 590327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu 600327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu @Before 610327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu public void setup() { 620327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu mBitmap = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ARGB_8888); 630327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu mCanvas = new Canvas(mBitmap); 640327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu } 650327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu 660327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu @Test 670327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu @UiThreadTest 680327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu public void testVectorDrawableAutoMirrored() { 690327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu Activity activity = mActivityTestRule.getActivity(); 700327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu ImageView view1 = (ImageView) activity.findViewById(R.id.view_vector_1); 710327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu Drawable vectorDrawable = view1.getDrawable(); 720327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu // We update the bounds here for writing into the bitmap correctly. 730327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu vectorDrawable.setBounds(0, 0, WIDTH, HEIGHT); 740327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu vectorDrawable.draw(mCanvas); 750327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu 760327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu int leftColor = mBitmap.getPixel(LEFT_CENTER_X, CENTER_Y); 770327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu int rightColor = mBitmap.getPixel(RIGHT_CENTER_X, CENTER_Y); 780327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu 790327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu // Gingerbread seems treating the alpha differently, so checking red channel only here. 800327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu // It is enough to tell the difference. 810327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu assertEquals("Left side should be white", Color.red(leftColor), 255); 820327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu assertEquals("Right side should be black", Color.red(rightColor), 0); 830327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu 84b4eff1600a5731105aff6a3063b583a906e7601aTeng-Hui Zhu if (Build.VERSION.SDK_INT >= 19) { 85b4eff1600a5731105aff6a3063b583a906e7601aTeng-Hui Zhu // setLayoutDirection is only available after API 17. However, it correctly set its 86b4eff1600a5731105aff6a3063b583a906e7601aTeng-Hui Zhu // drawable's layout direction until API 19. 870327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu view1.setLayoutDirection(View.LAYOUT_DIRECTION_RTL); 880327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu vectorDrawable.draw(mCanvas); 890327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu 900327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu leftColor = mBitmap.getPixel(LEFT_CENTER_X, CENTER_Y); 910327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu rightColor = mBitmap.getPixel(RIGHT_CENTER_X, CENTER_Y); 920327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu 930327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu assertEquals("Left side should be black", Color.red(leftColor), 0); 940327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu assertEquals("Right side should be white", Color.red(rightColor), 255); 950327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu } 960327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu } 970327a65adda49ea1f39440a3127836b41ff43084Teng-Hui Zhu} 98