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