/* * Copyright (C) 2016 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.tv.dvr.ui; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Matrix; import android.graphics.drawable.BitmapDrawable; import android.transition.ChangeImageTransform; import android.transition.TransitionValues; import android.util.AttributeSet; import android.view.View; import android.widget.ImageView; import android.widget.ImageView.ScaleType; import com.android.tv.R; import java.util.Map; /** * TODO: Remove this class once b/32405620 is fixed. * This class is for the workaround of b/32405620 and only for the shared element transition between * {@link com.android.tv.dvr.ui.browse.RecordingCardView} and * {@link com.android.tv.dvr.ui.browse.DvrDetailsActivity}. */ public class ChangeImageTransformWithScaledParent extends ChangeImageTransform { private static final String PROPNAME_MATRIX = "android:changeImageTransform:matrix"; public ChangeImageTransformWithScaledParent(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void captureStartValues(TransitionValues transitionValues) { super.captureStartValues(transitionValues); applyParentScale(transitionValues); } @Override public void captureEndValues(TransitionValues transitionValues) { super.captureEndValues(transitionValues); applyParentScale(transitionValues); } private void applyParentScale(TransitionValues transitionValues) { View view = transitionValues.view; Map values = transitionValues.values; Matrix matrix = (Matrix) values.get(PROPNAME_MATRIX); if (matrix != null && view.getId() == R.id.details_overview_image && view instanceof ImageView) { ImageView imageView = (ImageView) view; if (imageView.getScaleType() == ScaleType.CENTER_INSIDE && imageView.getDrawable() instanceof BitmapDrawable) { Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap(); if (bitmap.getWidth() < imageView.getWidth() && bitmap.getHeight() < imageView.getHeight()) { float scale = imageView.getContext().getResources().getFraction( R.fraction.lb_focus_zoom_factor_medium, 1, 1); matrix.postScale(scale, scale, imageView.getWidth() / 2, imageView.getHeight() / 2); } } } } }