1f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard/*
2f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard * Copyright (C) 2013 The Android Open Source Project
3f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard *
4f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard * Licensed under the Apache License, Version 2.0 (the "License");
5f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard * you may not use this file except in compliance with the License.
6f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard * You may obtain a copy of the License at
7f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard *
8f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard *      http://www.apache.org/licenses/LICENSE-2.0
9f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard *
10f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard * Unless required by applicable law or agreed to in writing, software
11f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard * distributed under the License is distributed on an "AS IS" BASIS,
12f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard * See the License for the specific language governing permissions and
14f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard * limitations under the License.
15f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard */
16f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
17f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardpackage com.android.gallery3d.filtershow.category;
18f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
19f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.content.Context;
20f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.content.res.TypedArray;
21acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroardimport android.database.DataSetObserver;
22860af325f2030a03c526e8551a85230d17df7b15nicolasroardimport android.graphics.Rect;
23f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.util.AttributeSet;
24acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroardimport android.util.Log;
25860af325f2030a03c526e8551a85230d17df7b15nicolasroardimport android.view.MotionEvent;
26f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.view.View;
27f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.widget.LinearLayout;
28f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport com.android.gallery3d.R;
29f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
30f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardpublic class CategoryTrack extends LinearLayout {
31f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
32f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    private CategoryAdapter mAdapter;
33f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    private int mElemSize;
34860af325f2030a03c526e8551a85230d17df7b15nicolasroard    private View mSelectedView;
35860af325f2030a03c526e8551a85230d17df7b15nicolasroard    private float mStartTouchY;
36acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard    private DataSetObserver mDataSetObserver = new DataSetObserver() {
37acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard        @Override
38acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard        public void onChanged() {
39acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard            super.onChanged();
40860af325f2030a03c526e8551a85230d17df7b15nicolasroard            if (getChildCount() != mAdapter.getCount()) {
41860af325f2030a03c526e8551a85230d17df7b15nicolasroard                fillContent();
42860af325f2030a03c526e8551a85230d17df7b15nicolasroard            } else {
43860af325f2030a03c526e8551a85230d17df7b15nicolasroard                invalidate();
44860af325f2030a03c526e8551a85230d17df7b15nicolasroard            }
45acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard        }
46fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        @Override
47fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        public void onInvalidated() {
48fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            super.onInvalidated();
49fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            fillContent();
50fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        }
51acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard    };
52f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
53f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    public CategoryTrack(Context context, AttributeSet attrs) {
54f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        super(context, attrs);
55f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.CategoryTrack);
56f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        mElemSize = a.getDimensionPixelSize(R.styleable.CategoryTrack_iconSize, 0);
57f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    }
58f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
59f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    public void setAdapter(CategoryAdapter adapter) {
60f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        mAdapter = adapter;
61acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard        mAdapter.registerDataSetObserver(mDataSetObserver);
62f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        fillContent();
63f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    }
64f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
65f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    public void fillContent() {
66f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        removeAllViews();
67fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mAdapter.setItemWidth(mElemSize);
68fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mAdapter.setItemHeight(LayoutParams.MATCH_PARENT);
69f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        int n = mAdapter.getCount();
70f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        for (int i = 0; i < n; i++) {
71f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard            View view = mAdapter.getView(i, null, this);
72f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard            addView(view, i);
73f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        }
74f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard        requestLayout();
75f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard    }
76f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard
77acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard    @Override
78acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard    public void invalidate() {
79acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard        for (int i = 0; i < this.getChildCount(); i++) {
80acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard            View child = getChildAt(i);
81acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard            child.invalidate();
82acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard        }
83acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard    }
84acc00f8fed8960b079448db8f05c3fbac8642ca4nicolasroard
85f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard}
86