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; 203c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.support.v17.leanback.R; 21cb13a318e577e14461eb008071dddf762847de42Dake Guimport android.util.AttributeSet; 223c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.view.LayoutInflater; 23cb13a318e577e14461eb008071dddf762847de42Dake Guimport android.view.View; 243c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Guimport android.view.ViewGroup; 25cb13a318e577e14461eb008071dddf762847de42Dake Guimport android.widget.LinearLayout; 26cb13a318e577e14461eb008071dddf762847de42Dake Gu 27cb13a318e577e14461eb008071dddf762847de42Dake Gu/** 28cb13a318e577e14461eb008071dddf762847de42Dake Gu * RowContainerView wraps header and user defined row view 29cb13a318e577e14461eb008071dddf762847de42Dake Gu */ 30cb13a318e577e14461eb008071dddf762847de42Dake Gufinal class RowContainerView extends LinearLayout { 31cb13a318e577e14461eb008071dddf762847de42Dake Gu 323c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu private ViewGroup mHeaderDock; 33b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu private Drawable mForeground; 34b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu private boolean mForegroundBoundsChanged = true; 353c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 36cb13a318e577e14461eb008071dddf762847de42Dake Gu public RowContainerView(Context context) { 37cb13a318e577e14461eb008071dddf762847de42Dake Gu this(context, null, 0); 38cb13a318e577e14461eb008071dddf762847de42Dake Gu } 39cb13a318e577e14461eb008071dddf762847de42Dake Gu 40cb13a318e577e14461eb008071dddf762847de42Dake Gu public RowContainerView(Context context, AttributeSet attrs) { 41cb13a318e577e14461eb008071dddf762847de42Dake Gu this(context, attrs, 0); 42cb13a318e577e14461eb008071dddf762847de42Dake Gu } 43cb13a318e577e14461eb008071dddf762847de42Dake Gu 44cb13a318e577e14461eb008071dddf762847de42Dake Gu public RowContainerView(Context context, AttributeSet attrs, int defStyle) { 45cb13a318e577e14461eb008071dddf762847de42Dake Gu super(context, attrs, defStyle); 46cb13a318e577e14461eb008071dddf762847de42Dake Gu setOrientation(VERTICAL); 473c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu LayoutInflater inflater = LayoutInflater.from(context); 483c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu inflater.inflate(R.layout.lb_row_container, this); 493c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu 503c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu mHeaderDock = (ViewGroup) findViewById(R.id.lb_row_container_header_dock); 51cb13a318e577e14461eb008071dddf762847de42Dake Gu setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 52cb13a318e577e14461eb008071dddf762847de42Dake Gu } 53cb13a318e577e14461eb008071dddf762847de42Dake Gu 54cb13a318e577e14461eb008071dddf762847de42Dake Gu public void addHeaderView(View headerView) { 553c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu if (mHeaderDock.indexOfChild(headerView) < 0) { 563c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu mHeaderDock.addView(headerView, 0); 57cb13a318e577e14461eb008071dddf762847de42Dake Gu } 58cb13a318e577e14461eb008071dddf762847de42Dake Gu } 59cb13a318e577e14461eb008071dddf762847de42Dake Gu 60cb13a318e577e14461eb008071dddf762847de42Dake Gu public void removeHeaderView(View headerView) { 613c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu if (mHeaderDock.indexOfChild(headerView) >= 0) { 623c23ada8bc25a05bbaa8c479a9df72e8172c4349Dake Gu mHeaderDock.removeView(headerView); 63cb13a318e577e14461eb008071dddf762847de42Dake Gu } 64cb13a318e577e14461eb008071dddf762847de42Dake Gu } 65cb13a318e577e14461eb008071dddf762847de42Dake Gu 66cb13a318e577e14461eb008071dddf762847de42Dake Gu public void addRowView(View view) { 67cb13a318e577e14461eb008071dddf762847de42Dake Gu addView(view); 68cb13a318e577e14461eb008071dddf762847de42Dake Gu } 69cb13a318e577e14461eb008071dddf762847de42Dake Gu 702f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu public void showHeader(boolean show) { 712f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu mHeaderDock.setVisibility(show ? View.VISIBLE : View.GONE); 722f97594742886d045ca1ce409ebc6e6e780452f6Dake Gu } 73b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu 74b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu public void setForeground(Drawable d) { 75b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu mForeground = d; 76b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu setWillNotDraw(mForeground == null); 77b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu invalidate(); 78b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu } 79b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu 80b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu public void setForegroundColor(int color) { 81b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu if (mForeground instanceof ColorDrawable) { 82b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu ((ColorDrawable) mForeground.mutate()).setColor(color); 83b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu invalidate(); 84b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu } else { 85b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu setForeground(new ColorDrawable(color)); 86b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu } 87b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu } 88b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu 89b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu public Drawable getForeground() { 90b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu return mForeground; 91b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu } 92b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu 93b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu @Override 94b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu protected void onSizeChanged(int w, int h, int oldw, int oldh) { 95b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu super.onSizeChanged(w, h, oldw, oldh); 96b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu mForegroundBoundsChanged = true; 97b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu } 98b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu 99b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu @Override 100b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu public void draw(Canvas canvas) { 101b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu super.draw(canvas); 102b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu if (mForeground != null) { 103b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu if (mForegroundBoundsChanged) { 104b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu mForegroundBoundsChanged = false; 105b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu mForeground.setBounds(0, 0, getWidth(), getHeight()); 106b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu } 107b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu mForeground.draw(canvas); 108b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu } 109b23ee09bf4aee03bc403abf39016c8ca5ecf301cDake Gu } 110cb13a318e577e14461eb008071dddf762847de42Dake Gu} 111