CardPresenter.java revision f1f489269da4b349125df56d54d3259929d48a7d
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; 20f1f489269da4b349125df56d54d3259929d48a7dTim Kilbournimport android.text.TextUtils; 2112d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbournimport android.util.Log; 2212d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbournimport android.view.ViewGroup; 237f3028385b0349cfc6c0d6784840be148943b296Dake Guimport android.view.View.MeasureSpec; 247f3028385b0349cfc6c0d6784840be148943b296Dake Guimport android.view.ViewGroup.LayoutParams; 2512d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbournimport android.widget.TextView; 2612d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn 27c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Guimport java.util.Random; 28c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu 2912d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbournpublic class CardPresenter extends Presenter { 3012d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn private static final String TAG = "CardPresenter"; 3112d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn 327f3028385b0349cfc6c0d6784840be148943b296Dake Gu private static final int IMAGE_HEIGHT_DP = 120; 337f3028385b0349cfc6c0d6784840be148943b296Dake Gu 34c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu private static Random sRand = new Random(); 357f3028385b0349cfc6c0d6784840be148943b296Dake Gu private static int sRowHeight = 0; 367f3028385b0349cfc6c0d6784840be148943b296Dake Gu private static int sExpandedRowHeight = 0; 377f3028385b0349cfc6c0d6784840be148943b296Dake Gu 387f3028385b0349cfc6c0d6784840be148943b296Dake Gu private static void setupRowHeights(Context context) { 397f3028385b0349cfc6c0d6784840be148943b296Dake Gu if (sRowHeight == 0) { 407f3028385b0349cfc6c0d6784840be148943b296Dake Gu float density = context.getResources().getDisplayMetrics().density; 417f3028385b0349cfc6c0d6784840be148943b296Dake Gu int height = (int) (IMAGE_HEIGHT_DP * density + 0.5f); 427f3028385b0349cfc6c0d6784840be148943b296Dake Gu 437f3028385b0349cfc6c0d6784840be148943b296Dake Gu ImageCardView v = new ImageCardView(context); 447f3028385b0349cfc6c0d6784840be148943b296Dake Gu v.setMainImageDimensions(LayoutParams.WRAP_CONTENT, height); 457f3028385b0349cfc6c0d6784840be148943b296Dake Gu v.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); 467f3028385b0349cfc6c0d6784840be148943b296Dake Gu sRowHeight = v.getMeasuredHeight(); 477f3028385b0349cfc6c0d6784840be148943b296Dake Gu v.setActivated(true); 487f3028385b0349cfc6c0d6784840be148943b296Dake Gu v.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); 497f3028385b0349cfc6c0d6784840be148943b296Dake Gu sExpandedRowHeight = v.getMeasuredHeight(); 507f3028385b0349cfc6c0d6784840be148943b296Dake Gu } 517f3028385b0349cfc6c0d6784840be148943b296Dake Gu } 527f3028385b0349cfc6c0d6784840be148943b296Dake Gu 537f3028385b0349cfc6c0d6784840be148943b296Dake Gu public static int getRowHeight(Context context) { 547f3028385b0349cfc6c0d6784840be148943b296Dake Gu setupRowHeights(context); 557f3028385b0349cfc6c0d6784840be148943b296Dake Gu return sRowHeight; 567f3028385b0349cfc6c0d6784840be148943b296Dake Gu } 577f3028385b0349cfc6c0d6784840be148943b296Dake Gu 587f3028385b0349cfc6c0d6784840be148943b296Dake Gu public static int getExpandedRowHeight(Context context) { 597f3028385b0349cfc6c0d6784840be148943b296Dake Gu setupRowHeights(context); 607f3028385b0349cfc6c0d6784840be148943b296Dake Gu return sExpandedRowHeight; 617f3028385b0349cfc6c0d6784840be148943b296Dake Gu } 627f3028385b0349cfc6c0d6784840be148943b296Dake Gu 637f3028385b0349cfc6c0d6784840be148943b296Dake Gu @Override 6412d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn public ViewHolder onCreateViewHolder(ViewGroup parent) { 6512d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn Log.d(TAG, "onCreateViewHolder"); 6612d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn ImageCardView v = new ImageCardView(parent.getContext()); 6712d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn v.setFocusable(true); 6812d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn v.setFocusableInTouchMode(true); 69c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu // Randomly makes image view crop as a square or just stretch to original 70c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu // aspect ratio. 71c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu if (sRand.nextBoolean()) { 72c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu v.setMainImageAdjustViewBounds(false); 73c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu v.setMainImageDimensions(getRowHeight(parent.getContext()), 74c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu getRowHeight(parent.getContext())); 75c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu } else { 76c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu v.setMainImageAdjustViewBounds(true); 77c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu v.setMainImageDimensions(LayoutParams.WRAP_CONTENT, 78c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu getRowHeight(parent.getContext())); 79c84c57a1fdf1866ec0406e4723e49b0a1a32ab58Dake Gu } 8012d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn return new ViewHolder(v); 8112d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn } 8212d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn 837f3028385b0349cfc6c0d6784840be148943b296Dake Gu @Override 8412d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn public void onBindViewHolder(ViewHolder viewHolder, Object item) { 8512d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn Log.d(TAG, "onBindViewHolder for " + item.toString()); 867f3028385b0349cfc6c0d6784840be148943b296Dake Gu PhotoItem photoItem = (PhotoItem) item; 877f3028385b0349cfc6c0d6784840be148943b296Dake Gu Drawable drawable = viewHolder.view.getContext().getResources() 887f3028385b0349cfc6c0d6784840be148943b296Dake Gu .getDrawable(photoItem.getImageResourceId()); 897f3028385b0349cfc6c0d6784840be148943b296Dake Gu ((ImageCardView) viewHolder.view).setMainImage(drawable); 907f3028385b0349cfc6c0d6784840be148943b296Dake Gu ((ImageCardView) viewHolder.view).setTitleText(photoItem.getTitle()); 91f1f489269da4b349125df56d54d3259929d48a7dTim Kilbourn if (!TextUtils.isEmpty(photoItem.getContent())) { 92f1f489269da4b349125df56d54d3259929d48a7dTim Kilbourn ((ImageCardView) viewHolder.view).setContentText(photoItem.getContent()); 93f1f489269da4b349125df56d54d3259929d48a7dTim Kilbourn } 9412d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn } 9512d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn 967f3028385b0349cfc6c0d6784840be148943b296Dake Gu @Override 9712d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn public void onUnbindViewHolder(ViewHolder viewHolder) { 9812d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn Log.d(TAG, "onUnbindViewHolder"); 9912d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn } 10012d4d450a8057b6d640fbe32fde63667ec2c8e83Tim Kilbourn} 101