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