blob: cb466b069f1c6cf067a194add453e8771cfb5fa8 [file] [log] [blame]
/*
* 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<Bitmap> bitmapEqualTo(Bitmap expected) {
return new BaseMatcher<Bitmap>() {
@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 makeExpectedTopInfoDrawable(int color) {
int swiperTheme = new SwiperThemeMatcher(mActivity, new ColorMatcher()).findTheme(color);
ContextThemeWrapper wrapper = new ContextThemeWrapper(mActivity, swiperTheme);
return mActivity.getResources().getDrawable(
R.drawable.topinfo_animation, wrapper.getTheme());
}
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)));
}
}