blob: 924975d5197ceddf90687d2dd9e4672832cf7798 [file] [log] [blame]
/*
* Copyright (C) 2014 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.example.android.leanback;
import android.content.Context;
import android.graphics.drawable.Drawable;
import com.example.android.leanback.R;
import android.support.v17.leanback.widget.ImageCardView;
import android.support.v17.leanback.widget.Presenter;
import android.text.TextUtils;
import android.util.Log;
import android.view.ViewGroup;
import android.view.ContextThemeWrapper;
import android.view.View.MeasureSpec;
import android.view.ViewGroup.LayoutParams;
import android.widget.TextView;
import java.util.Random;
public class CardPresenter extends Presenter {
private static final String TAG = "CardPresenter";
private static final int IMAGE_HEIGHT_DP = 120;
private static Random sRand = new Random();
private int mRowHeight = 0;
private int mExpandedRowHeight = 0;
private int mCardThemeResId;
private Context mContextThemeWrapper;
public CardPresenter(int cardThemeResId) {
mCardThemeResId = cardThemeResId;
}
public CardPresenter() {
mCardThemeResId = 0;
}
private void setupRowHeights(Context context) {
if (mRowHeight == 0) {
float density = context.getResources().getDisplayMetrics().density;
int height = (int) (IMAGE_HEIGHT_DP * density + 0.5f);
ImageCardView v = new ImageCardView(context);
v.setMainImageDimensions(LayoutParams.WRAP_CONTENT, height);
v.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
mRowHeight = v.getMeasuredHeight();
v.setActivated(true);
v.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
mExpandedRowHeight = v.getMeasuredHeight();
}
}
public int getRowHeight(Context context) {
setupRowHeights(context);
return mRowHeight;
}
public int getExpandedRowHeight(Context context) {
setupRowHeights(context);
return mExpandedRowHeight;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent) {
Log.d(TAG, "onCreateViewHolder");
Context context = parent.getContext();
if (mCardThemeResId != 0) {
if (mContextThemeWrapper == null) {
mContextThemeWrapper = new ContextThemeWrapper(context, mCardThemeResId);
}
context = mContextThemeWrapper;
}
ImageCardView v = new ImageCardView(context);
v.setFocusable(true);
v.setFocusableInTouchMode(true);
// Randomly makes image view crop as a square or just stretch to original
// aspect ratio.
if (sRand.nextBoolean()) {
v.setMainImageAdjustViewBounds(false);
v.setMainImageDimensions(getRowHeight(parent.getContext()),
getRowHeight(parent.getContext()));
} else {
v.setMainImageAdjustViewBounds(true);
v.setMainImageDimensions(LayoutParams.WRAP_CONTENT,
getRowHeight(parent.getContext()));
}
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, Object item) {
Log.d(TAG, "onBindViewHolder for " + item.toString());
PhotoItem photoItem = (PhotoItem) item;
Drawable drawable = viewHolder.view.getContext().getResources()
.getDrawable(photoItem.getImageResourceId());
((ImageCardView) viewHolder.view).setMainImage(drawable);
((ImageCardView) viewHolder.view).setTitleText(photoItem.getTitle());
if (!TextUtils.isEmpty(photoItem.getContent())) {
((ImageCardView) viewHolder.view).setContentText(photoItem.getContent());
}
}
@Override
public void onUnbindViewHolder(ViewHolder viewHolder) {
Log.d(TAG, "onUnbindViewHolder");
}
}