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