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