CardPresenter.java revision c84c57a1fdf1866ec0406e4723e49b0a1a32ab58
112d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn/*
212d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn * Copyright (C) 2014 The Android Open Source Project
312d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn *
412d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
512d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn * in compliance with the License. You may obtain a copy of the License at
612d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn *
712d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn * http://www.apache.org/licenses/LICENSE-2.0
812d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn *
912d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn * Unless required by applicable law or agreed to in writing, software distributed under the License
1012d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
1112d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn * or implied. See the License for the specific language governing permissions and limitations under
1212d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn * the License.
1312d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn */
1412d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbournpackage com.example.android.leanback;
1512d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn
167f3028385b0349cfc6c0d6784840be148943b296Dake Guimport android.content.Context;
177f3028385b0349cfc6c0d6784840be148943b296Dake Guimport android.graphics.drawable.Drawable;
1812d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbournimport android.support.v17.leanback.widget.ImageCardView;
1912d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbournimport android.support.v17.leanback.widget.Presenter;
2012d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbournimport android.util.Log;
2112d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbournimport android.view.ViewGroup;
227f3028385b0349cfc6c0d6784840be148943b296Dake Guimport android.view.View.MeasureSpec;
237f3028385b0349cfc6c0d6784840be148943b296Dake Guimport android.view.ViewGroup.LayoutParams;
2412d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbournimport android.widget.TextView;
2512d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn
26c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Guimport java.util.Random;
27c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu
2812d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbournpublic class CardPresenter extends Presenter {
2912d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn    private static final String TAG = "CardPresenter";
3012d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn
317f3028385b0349cfc6c0d6784840be148943b296Dake Gu    private static final int IMAGE_HEIGHT_DP = 120;
327f3028385b0349cfc6c0d6784840be148943b296Dake Gu
33c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu    private static Random sRand = new Random();
347f3028385b0349cfc6c0d6784840be148943b296Dake Gu    private static int sRowHeight = 0;
357f3028385b0349cfc6c0d6784840be148943b296Dake Gu    private static int sExpandedRowHeight = 0;
367f3028385b0349cfc6c0d6784840be148943b296Dake Gu
377f3028385b0349cfc6c0d6784840be148943b296Dake Gu    private static void setupRowHeights(Context context) {
387f3028385b0349cfc6c0d6784840be148943b296Dake Gu        if (sRowHeight == 0) {
397f3028385b0349cfc6c0d6784840be148943b296Dake Gu            float density = context.getResources().getDisplayMetrics().density;
407f3028385b0349cfc6c0d6784840be148943b296Dake Gu            int height = (int) (IMAGE_HEIGHT_DP * density + 0.5f);
417f3028385b0349cfc6c0d6784840be148943b296Dake Gu
427f3028385b0349cfc6c0d6784840be148943b296Dake Gu            ImageCardView v = new ImageCardView(context);
437f3028385b0349cfc6c0d6784840be148943b296Dake Gu            v.setMainImageDimensions(LayoutParams.WRAP_CONTENT, height);
447f3028385b0349cfc6c0d6784840be148943b296Dake Gu            v.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
457f3028385b0349cfc6c0d6784840be148943b296Dake Gu            sRowHeight = v.getMeasuredHeight();
467f3028385b0349cfc6c0d6784840be148943b296Dake Gu            v.setActivated(true);
477f3028385b0349cfc6c0d6784840be148943b296Dake Gu            v.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
487f3028385b0349cfc6c0d6784840be148943b296Dake Gu            sExpandedRowHeight = v.getMeasuredHeight();
497f3028385b0349cfc6c0d6784840be148943b296Dake Gu        }
507f3028385b0349cfc6c0d6784840be148943b296Dake Gu    }
517f3028385b0349cfc6c0d6784840be148943b296Dake Gu
527f3028385b0349cfc6c0d6784840be148943b296Dake Gu    public static int getRowHeight(Context context) {
537f3028385b0349cfc6c0d6784840be148943b296Dake Gu        setupRowHeights(context);
547f3028385b0349cfc6c0d6784840be148943b296Dake Gu        return sRowHeight;
557f3028385b0349cfc6c0d6784840be148943b296Dake Gu    }
567f3028385b0349cfc6c0d6784840be148943b296Dake Gu
577f3028385b0349cfc6c0d6784840be148943b296Dake Gu    public static int getExpandedRowHeight(Context context) {
587f3028385b0349cfc6c0d6784840be148943b296Dake Gu        setupRowHeights(context);
597f3028385b0349cfc6c0d6784840be148943b296Dake Gu        return sExpandedRowHeight;
607f3028385b0349cfc6c0d6784840be148943b296Dake Gu    }
617f3028385b0349cfc6c0d6784840be148943b296Dake Gu
627f3028385b0349cfc6c0d6784840be148943b296Dake Gu    @Override
6312d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn    public ViewHolder onCreateViewHolder(ViewGroup parent) {
6412d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn        Log.d(TAG, "onCreateViewHolder");
6512d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn        ImageCardView v = new ImageCardView(parent.getContext());
6612d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn        v.setFocusable(true);
6712d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn        v.setFocusableInTouchMode(true);
68c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu        // Randomly makes image view crop as a square or just stretch to original
69c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu        // aspect ratio.
70c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu        if (sRand.nextBoolean()) {
71c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu            v.setMainImageAdjustViewBounds(false);
72c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu            v.setMainImageDimensions(getRowHeight(parent.getContext()),
73c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu                    getRowHeight(parent.getContext()));
74c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu        } else {
75c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu            v.setMainImageAdjustViewBounds(true);
76c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu            v.setMainImageDimensions(LayoutParams.WRAP_CONTENT,
77c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu                    getRowHeight(parent.getContext()));
78c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu        }
7912d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn        return new ViewHolder(v);
8012d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn    }
8112d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn
827f3028385b0349cfc6c0d6784840be148943b296Dake Gu    @Override
8312d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn    public void onBindViewHolder(ViewHolder viewHolder, Object item) {
8412d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn        Log.d(TAG, "onBindViewHolder for " + item.toString());
857f3028385b0349cfc6c0d6784840be148943b296Dake Gu        PhotoItem photoItem = (PhotoItem) item;
867f3028385b0349cfc6c0d6784840be148943b296Dake Gu        Drawable drawable =  viewHolder.view.getContext().getResources()
877f3028385b0349cfc6c0d6784840be148943b296Dake Gu                .getDrawable(photoItem.getImageResourceId());
887f3028385b0349cfc6c0d6784840be148943b296Dake Gu        ((ImageCardView) viewHolder.view).setMainImage(drawable);
897f3028385b0349cfc6c0d6784840be148943b296Dake Gu        ((ImageCardView) viewHolder.view).setTitleText(photoItem.getTitle());
9012d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn    }
9112d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn
927f3028385b0349cfc6c0d6784840be148943b296Dake Gu    @Override
9312d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn    public void onUnbindViewHolder(ViewHolder viewHolder) {
9412d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn        Log.d(TAG, "onUnbindViewHolder");
9512d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn    }
9612d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn}
97