/* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.managedprovisioning.common; import static android.graphics.PorterDuff.Mode.SRC_ATOP; import static androidx.test.espresso.matcher.ViewMatchers.assertThat; import static junit.framework.Assert.assertTrue; import static org.hamcrest.CoreMatchers.equalTo; import android.annotation.LayoutRes; import android.app.Activity; import android.content.res.ColorStateList; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.PorterDuffColorFilter; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.view.ContextThemeWrapper; import android.widget.ImageView; import android.widget.ProgressBar; import com.android.managedprovisioning.R; import com.android.managedprovisioning.preprovisioning.anim.ColorMatcher; import com.android.managedprovisioning.preprovisioning.anim.SwiperThemeMatcher; import org.hamcrest.BaseMatcher; import org.hamcrest.Description; import org.hamcrest.Matcher; public class CustomizationVerifier { private final Activity mActivity; public CustomizationVerifier(Activity activity) { mActivity = activity; } public void assertStatusBarColorCorrect(int targetColor) { int statusBarColor = mActivity.getWindow().getStatusBarColor(); assertThat(statusBarColor, equalTo(targetColor)); } // Disabled for b/73157813. public void assertSwiperColorCorrect(int targetSwiperColor) { // Drawable expectedDrawable = makeExpectedTopInfoDrawable(targetSwiperColor); // ImageView animatedView = mActivity.findViewById(R.id.animated_info); // Drawable actualDrawable = animatedView.getDrawable(); // assertDrawableEquals(expectedDrawable, actualDrawable); } public void assertDefaultLogoCorrect(int targetColor) { Drawable actualLogo = extractLogo(); Drawable expectedLogo = makeDefaultLogo(targetColor); assertThat(actualLogo.getConstantState(), equalTo(expectedLogo.getConstantState())); assertThat(actualLogo.getColorFilter(), equalTo(expectedLogo.getColorFilter())); } public void assertCustomLogoCorrect(Bitmap targetLogo) { Bitmap actualLogo = ((BitmapDrawable) extractLogo()).getBitmap(); assertThat(targetLogo, bitmapEqualTo(actualLogo)); } public void assertProgressBarColorCorrect(@LayoutRes int progressBarLayoutId, int targetColor) { ProgressBar progressBar = mActivity.findViewById(progressBarLayoutId); ColorStateList expected = ColorStateList.valueOf(targetColor); assertThat(progressBar.getIndeterminateTintList(), equalTo(expected)); assertThat(progressBar.getProgressBackgroundTintList(), equalTo(expected)); } private Matcher bitmapEqualTo(Bitmap expected) { return new BaseMatcher() { @Override public void describeTo(Description description) { description.appendText("Bitmap different from expected."); } @Override public boolean matches(Object actual) { return expected.sameAs((Bitmap) actual); } }; } private Drawable makeDefaultLogo(int color) { Drawable logo = mActivity.getDrawable(R.drawable.ic_enterprise_blue_24dp); logo.setColorFilter(new PorterDuffColorFilter(color, SRC_ATOP)); return logo; } private Drawable extractLogo() { return ((ImageView) mActivity.findViewById(R.id.sud_layout_icon)).getDrawable(); } private Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); return bitmap; } private void assertDrawableEquals(Drawable expected, Drawable actual) { assertTrue(drawableToBitmap(expected).sameAs(drawableToBitmap(actual))); } }