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