14bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin/*
24bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin * Copyright (C) 2017 The Android Open Source Project
34bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin *
44bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin * Licensed under the Apache License, Version 2.0 (the "License");
54bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin * you may not use this file except in compliance with the License.
64bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin * You may obtain a copy of the License at
74bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin *
84bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin *      http://www.apache.org/licenses/LICENSE-2.0
94bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin *
104bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin * Unless required by applicable law or agreed to in writing, software
114bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin * distributed under the License is distributed on an "AS IS" BASIS,
124bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin * See the License for the specific language governing permissions and
144bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin * limitations under the License
154bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin */
164bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin
174bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupinpackage android.app;
184bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin
194bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupinimport android.graphics.Bitmap;
204bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupinimport android.graphics.Canvas;
214bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupinimport android.graphics.Color;
224bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupinimport android.graphics.Paint;
234bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupinimport android.support.test.filters.SmallTest;
244bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupinimport android.support.test.runner.AndroidJUnit4;
254bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin
264bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupinimport org.junit.Assert;
274bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupinimport org.junit.Test;
284bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupinimport org.junit.runner.RunWith;
294bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin
304bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin@SmallTest
314bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin@RunWith(AndroidJUnit4.class)
324bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupinpublic class WallpaperColorsTest {
334bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin
344bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin    @Test
354bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin    public void supportsDarkTextOverrideTest() {
364bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        final Color color = Color.valueOf(Color.WHITE);
374bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        // Default should not support dark text!
384bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        WallpaperColors colors = new WallpaperColors(color, null, null, 0);
39e2efebc8a25d1bd44e588cc81f825d6337d87a23Lucas Dupin        Assert.assertTrue("Default behavior is not to support dark text.",
404bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin                (colors.getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) == 0);
414bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin
424bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        // Override it
434bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        colors = new WallpaperColors(color, null, null, WallpaperColors.HINT_SUPPORTS_DARK_TEXT);
44e2efebc8a25d1bd44e588cc81f825d6337d87a23Lucas Dupin        Assert.assertFalse("Forcing dark text support doesn't work.",
454bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin                (colors.getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) == 0);
464bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin    }
474bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin
484bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin    /**
494bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin     * Sanity check to guarantee that white supports dark text and black doesn't
504bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin     */
514bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin    @Test
524bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin    public void colorHintsTest() {
534bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        Bitmap image = Bitmap.createBitmap(30, 30, Bitmap.Config.ARGB_8888);
544bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        Canvas canvas = new Canvas(image);
554bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin
564bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        canvas.drawColor(Color.WHITE);
574bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        int hints = WallpaperColors.fromBitmap(image).getColorHints();
584bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        boolean supportsDarkText = (hints & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) != 0;
594bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        boolean supportsDarkTheme = (hints & WallpaperColors.HINT_SUPPORTS_DARK_THEME) != 0;
60e2efebc8a25d1bd44e588cc81f825d6337d87a23Lucas Dupin        boolean fromBitmap = (hints & WallpaperColors.HINT_FROM_BITMAP) != 0;
61e2efebc8a25d1bd44e588cc81f825d6337d87a23Lucas Dupin        Assert.assertTrue("White surface should support dark text.", supportsDarkText);
62e2efebc8a25d1bd44e588cc81f825d6337d87a23Lucas Dupin        Assert.assertFalse("White surface shouldn't support dark theme.", supportsDarkTheme);
63e2efebc8a25d1bd44e588cc81f825d6337d87a23Lucas Dupin        Assert.assertTrue("From bitmap should be true if object was created "
64e2efebc8a25d1bd44e588cc81f825d6337d87a23Lucas Dupin                + "using WallpaperColors#fromBitmap.", fromBitmap);
654bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin
664bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        canvas.drawColor(Color.BLACK);
674bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        hints = WallpaperColors.fromBitmap(image).getColorHints();
684bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        supportsDarkText = (hints & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) != 0;
694bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        supportsDarkTheme = (hints & WallpaperColors.HINT_SUPPORTS_DARK_THEME) != 0;
70e2efebc8a25d1bd44e588cc81f825d6337d87a23Lucas Dupin        Assert.assertFalse("Black surface shouldn't support dark text.", supportsDarkText);
71e2efebc8a25d1bd44e588cc81f825d6337d87a23Lucas Dupin        Assert.assertTrue("Black surface should support dark theme.", supportsDarkTheme);
724bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin
734bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        Paint paint = new Paint();
744bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        paint.setStyle(Paint.Style.FILL);
754bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        paint.setColor(Color.BLACK);
764bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        canvas.drawColor(Color.WHITE);
774bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        canvas.drawRect(0, 0, 8, 8, paint);
784bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        supportsDarkText = (WallpaperColors.fromBitmap(image)
794bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin                .getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) != 0;
804bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin        Assert.assertFalse("Light surface shouldn't support dark text "
81e2efebc8a25d1bd44e588cc81f825d6337d87a23Lucas Dupin                + "when it contains dark pixels.", supportsDarkText);
82e2efebc8a25d1bd44e588cc81f825d6337d87a23Lucas Dupin
83e2efebc8a25d1bd44e588cc81f825d6337d87a23Lucas Dupin        WallpaperColors colors = new WallpaperColors(Color.valueOf(Color.GREEN), null, null);
84e2efebc8a25d1bd44e588cc81f825d6337d87a23Lucas Dupin        fromBitmap = (colors.getColorHints() & WallpaperColors.HINT_FROM_BITMAP) != 0;
85e2efebc8a25d1bd44e588cc81f825d6337d87a23Lucas Dupin        Assert.assertFalse("Object created from public constructor should not contain "
86e2efebc8a25d1bd44e588cc81f825d6337d87a23Lucas Dupin                + "HINT_FROM_BITMAP.", fromBitmap);
874bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin    }
8842acf6009ade4314f3cd782d68db6ab7ad4c8da3Lucas Dupin
8942acf6009ade4314f3cd782d68db6ab7ad4c8da3Lucas Dupin    /**
9042acf6009ade4314f3cd782d68db6ab7ad4c8da3Lucas Dupin     * WallpaperColors should not recycle bitmaps that it didn't create.
9142acf6009ade4314f3cd782d68db6ab7ad4c8da3Lucas Dupin     */
9242acf6009ade4314f3cd782d68db6ab7ad4c8da3Lucas Dupin    @Test
9342acf6009ade4314f3cd782d68db6ab7ad4c8da3Lucas Dupin    public void wallpaperRecycleBitmapTest() {
9442acf6009ade4314f3cd782d68db6ab7ad4c8da3Lucas Dupin        Bitmap image = Bitmap.createBitmap(300, 300, Bitmap.Config.ARGB_8888);
9542acf6009ade4314f3cd782d68db6ab7ad4c8da3Lucas Dupin        WallpaperColors.fromBitmap(image);
9642acf6009ade4314f3cd782d68db6ab7ad4c8da3Lucas Dupin        Canvas canvas = new Canvas();
9742acf6009ade4314f3cd782d68db6ab7ad4c8da3Lucas Dupin        // This would crash:
9842acf6009ade4314f3cd782d68db6ab7ad4c8da3Lucas Dupin        canvas.drawBitmap(image, 0, 0, new Paint());
9942acf6009ade4314f3cd782d68db6ab7ad4c8da3Lucas Dupin    }
1004bd24f36c5c4845bc9fda9c7211d1be2937a748aLucas Dupin}
101