1cb13a318e577e14461eb008071dddf762847de42Dake Gu/* 2cb13a318e577e14461eb008071dddf762847de42Dake Gu * Copyright (C) 2014 The Android Open Source Project 3cb13a318e577e14461eb008071dddf762847de42Dake Gu * 4cb13a318e577e14461eb008071dddf762847de42Dake Gu * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5cb13a318e577e14461eb008071dddf762847de42Dake Gu * in compliance with the License. You may obtain a copy of the License at 6cb13a318e577e14461eb008071dddf762847de42Dake Gu * 7cb13a318e577e14461eb008071dddf762847de42Dake Gu * http://www.apache.org/licenses/LICENSE-2.0 8cb13a318e577e14461eb008071dddf762847de42Dake Gu * 9cb13a318e577e14461eb008071dddf762847de42Dake Gu * Unless required by applicable law or agreed to in writing, software distributed under the License 10cb13a318e577e14461eb008071dddf762847de42Dake Gu * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11cb13a318e577e14461eb008071dddf762847de42Dake Gu * or implied. See the License for the specific language governing permissions and limitations under 12cb13a318e577e14461eb008071dddf762847de42Dake Gu * the License. 13cb13a318e577e14461eb008071dddf762847de42Dake Gu */ 14cb13a318e577e14461eb008071dddf762847de42Dake Gupackage android.support.v17.leanback.widget; 15cb13a318e577e14461eb008071dddf762847de42Dake Gu 16cb13a318e577e14461eb008071dddf762847de42Dake Guimport android.content.Context; 17b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Guimport android.graphics.Canvas; 18b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Guimport android.graphics.drawable.ColorDrawable; 19b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Guimport android.graphics.drawable.Drawable; 2070acb0c19be3831a2080e4f902324de16bfbf62eTor Norbyeimport android.support.annotation.ColorInt; 213c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.support.v17.leanback.R; 22cb13a318e577e14461eb008071dddf762847de42Dake Guimport android.util.AttributeSet; 233c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.view.LayoutInflater; 24cb13a318e577e14461eb008071dddf762847de42Dake Guimport android.view.View; 253c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.view.ViewGroup; 26cb13a318e577e14461eb008071dddf762847de42Dake Guimport android.widget.LinearLayout; 27cb13a318e577e14461eb008071dddf762847de42Dake Gu 28cb13a318e577e14461eb008071dddf762847de42Dake Gu/** 29cb13a318e577e14461eb008071dddf762847de42Dake Gu * RowContainerView wraps header and user defined row view 30cb13a318e577e14461eb008071dddf762847de42Dake Gu */ 31cb13a318e577e14461eb008071dddf762847de42Dake Gufinal class RowContainerView extends LinearLayout { 32cb13a318e577e14461eb008071dddf762847de42Dake Gu 333c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu private ViewGroup mHeaderDock; 34b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu private Drawable mForeground; 35b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu private boolean mForegroundBoundsChanged = true; 363c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 37cb13a318e577e14461eb008071dddf762847de42Dake Gu public RowContainerView(Context context) { 38cb13a318e577e14461eb008071dddf762847de42Dake Gu this(context, null, 0); 39cb13a318e577e14461eb008071dddf762847de42Dake Gu } 40cb13a318e577e14461eb008071dddf762847de42Dake Gu 41cb13a318e577e14461eb008071dddf762847de42Dake Gu public RowContainerView(Context context, AttributeSet attrs) { 42cb13a318e577e14461eb008071dddf762847de42Dake Gu this(context, attrs, 0); 43cb13a318e577e14461eb008071dddf762847de42Dake Gu } 44cb13a318e577e14461eb008071dddf762847de42Dake Gu 45cb13a318e577e14461eb008071dddf762847de42Dake Gu public RowContainerView(Context context, AttributeSet attrs, int defStyle) { 46cb13a318e577e14461eb008071dddf762847de42Dake Gu super(context, attrs, defStyle); 47cb13a318e577e14461eb008071dddf762847de42Dake Gu setOrientation(VERTICAL); 483c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu LayoutInflater inflater = LayoutInflater.from(context); 493c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu inflater.inflate(R.layout.lb_row_container, this); 503c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 513c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu mHeaderDock = (ViewGroup) findViewById(R.id.lb_row_container_header_dock); 52cb13a318e577e14461eb008071dddf762847de42Dake Gu setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 53cb13a318e577e14461eb008071dddf762847de42Dake Gu } 54cb13a318e577e14461eb008071dddf762847de42Dake Gu 55cb13a318e577e14461eb008071dddf762847de42Dake Gu public void addHeaderView(View headerView) { 563c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu if (mHeaderDock.indexOfChild(headerView) < 0) { 573c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu mHeaderDock.addView(headerView, 0); 58cb13a318e577e14461eb008071dddf762847de42Dake Gu } 59cb13a318e577e14461eb008071dddf762847de42Dake Gu } 60cb13a318e577e14461eb008071dddf762847de42Dake Gu 61cb13a318e577e14461eb008071dddf762847de42Dake Gu public void removeHeaderView(View headerView) { 623c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu if (mHeaderDock.indexOfChild(headerView) >= 0) { 633c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu mHeaderDock.removeView(headerView); 64cb13a318e577e14461eb008071dddf762847de42Dake Gu } 65cb13a318e577e14461eb008071dddf762847de42Dake Gu } 66cb13a318e577e14461eb008071dddf762847de42Dake Gu 67cb13a318e577e14461eb008071dddf762847de42Dake Gu public void addRowView(View view) { 68cb13a318e577e14461eb008071dddf762847de42Dake Gu addView(view); 69cb13a318e577e14461eb008071dddf762847de42Dake Gu } 70cb13a318e577e14461eb008071dddf762847de42Dake Gu 712f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu public void showHeader(boolean show) { 722f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu mHeaderDock.setVisibility(show ? View.VISIBLE : View.GONE); 732f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu } 74b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu 75b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu public void setForeground(Drawable d) { 76b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu mForeground = d; 77b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu setWillNotDraw(mForeground == null); 78b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu invalidate(); 79b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu } 80b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu 8170acb0c19be3831a2080e4f902324de16bfbf62eTor Norbye public void setForegroundColor(@ColorInt int color) { 82b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu if (mForeground instanceof ColorDrawable) { 83b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu ((ColorDrawable) mForeground.mutate()).setColor(color); 84b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu invalidate(); 85b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu } else { 86b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu setForeground(new ColorDrawable(color)); 87b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu } 88b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu } 89b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu 90b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu public Drawable getForeground() { 91b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu return mForeground; 92b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu } 93b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu 94b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu @Override 95b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu protected void onSizeChanged(int w, int h, int oldw, int oldh) { 96b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu super.onSizeChanged(w, h, oldw, oldh); 97b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu mForegroundBoundsChanged = true; 98b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu } 99b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu 100b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu @Override 101b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu public void draw(Canvas canvas) { 102b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu super.draw(canvas); 103b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu if (mForeground != null) { 104b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu if (mForegroundBoundsChanged) { 105b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu mForegroundBoundsChanged = false; 106b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu mForeground.setBounds(0, 0, getWidth(), getHeight()); 107b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu } 108b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu mForeground.draw(canvas); 109b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu } 110b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu } 111cb13a318e577e14461eb008071dddf762847de42Dake Gu} 112