CategoryAdapter.java revision 32cc4dd751569721aa19218b4d947145577060d0
1/*
2 * Copyright (C) 2013 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.gallery3d.filtershow.category;
18
19import android.content.Context;
20import android.view.View;
21import android.view.ViewGroup;
22import android.widget.ArrayAdapter;
23import android.widget.ListView;
24
25import com.android.gallery3d.R;
26import com.android.gallery3d.filtershow.FilterShowActivity;
27import com.android.gallery3d.filtershow.filters.FilterRepresentation;
28import com.android.gallery3d.filtershow.filters.FilterTinyPlanetRepresentation;
29import com.android.gallery3d.filtershow.pipeline.ImagePreset;
30
31public class CategoryAdapter extends ArrayAdapter<Action> {
32
33    private static final String LOGTAG = "CategoryAdapter";
34    private int mItemHeight;
35    private View mContainer;
36    private int mItemWidth = ListView.LayoutParams.MATCH_PARENT;
37    private int mSelectedPosition;
38    int mCategory;
39    private int mOrientation;
40    private boolean mShowAddButton = false;
41    private String mAddButtonText;
42
43    public CategoryAdapter(Context context, int textViewResourceId) {
44        super(context, textViewResourceId);
45        mItemHeight = (int) (context.getResources().getDisplayMetrics().density * 100);
46    }
47
48    public CategoryAdapter(Context context) {
49        this(context, 0);
50    }
51
52    @Override
53    public void clear() {
54        for (int i = 0; i < getCount(); i++) {
55            Action action = getItem(i);
56            action.clearBitmap();
57        }
58        super.clear();
59    }
60
61    public void setItemHeight(int height) {
62        mItemHeight = height;
63    }
64
65    public void setItemWidth(int width) {
66        mItemWidth = width;
67    }
68
69    @Override
70    public void add(Action action) {
71        super.add(action);
72        action.setAdapter(this);
73    }
74
75    public void initializeSelection(int category) {
76        mCategory = category;
77        mSelectedPosition = -1;
78        if (category == MainPanel.LOOKS) {
79            mSelectedPosition = 0;
80            mAddButtonText = getContext().getString(R.string.filtershow_add_button_looks);
81        }
82        if (category == MainPanel.BORDERS) {
83            mSelectedPosition = 0;
84        }
85        if (category == MainPanel.VERSIONS) {
86            mAddButtonText = getContext().getString(R.string.filtershow_add_button_versions);
87        }
88    }
89
90    @Override
91    public View getView(int position, View convertView, ViewGroup parent) {
92        if (convertView == null) {
93            convertView = new CategoryView(getContext());
94        }
95        CategoryView view = (CategoryView) convertView;
96        view.setOrientation(mOrientation);
97        Action action = getItem(position);
98        view.setAction(action, this);
99        int width = mItemWidth;
100        int height = mItemHeight;
101        if (action.getType() == Action.SPACER) {
102            if (mOrientation == CategoryView.HORIZONTAL) {
103                width = width / 2;
104            } else {
105                height = height / 2;
106            }
107        }
108        if (action.getType() == Action.ADD_ACTION
109                && mOrientation == CategoryView.VERTICAL) {
110            height = height / 2;
111        }
112        view.setLayoutParams(
113                new ListView.LayoutParams(width, height));
114        view.setTag(position);
115        view.invalidate();
116        return view;
117    }
118
119    public void setSelected(View v) {
120        int old = mSelectedPosition;
121        mSelectedPosition = (Integer) v.getTag();
122        if (old != -1) {
123            invalidateView(old);
124        }
125        invalidateView(mSelectedPosition);
126    }
127
128    public boolean isSelected(View v) {
129        return (Integer) v.getTag() == mSelectedPosition;
130    }
131
132    private void invalidateView(int position) {
133        View child = null;
134        if (mContainer instanceof ListView) {
135            ListView lv = (ListView) mContainer;
136            child = lv.getChildAt(position - lv.getFirstVisiblePosition());
137        } else {
138            CategoryTrack ct = (CategoryTrack) mContainer;
139            child = ct.getChildAt(position);
140        }
141        if (child != null) {
142            child.invalidate();
143        }
144    }
145
146    public void setContainer(View container) {
147        mContainer = container;
148    }
149
150    public void imageLoaded() {
151        notifyDataSetChanged();
152    }
153
154    public FilterRepresentation getTinyPlanet() {
155        for (int i = 0; i < getCount(); i++) {
156            Action action = getItem(i);
157            if (action.getRepresentation() != null
158                    && action.getRepresentation()
159                    instanceof FilterTinyPlanetRepresentation) {
160                return action.getRepresentation();
161            }
162        }
163        return null;
164    }
165
166    public void removeTinyPlanet() {
167        for (int i = 0; i < getCount(); i++) {
168            Action action = getItem(i);
169            if (action.getRepresentation() != null
170                    && action.getRepresentation()
171                    instanceof FilterTinyPlanetRepresentation) {
172                super.remove(action);
173                return;
174            }
175        }
176    }
177
178    @Override
179    public void remove(Action action) {
180        if (!(mCategory == MainPanel.VERSIONS
181                || mCategory == MainPanel.LOOKS)) {
182            return;
183        }
184        super.remove(action);
185        FilterShowActivity activity = (FilterShowActivity) getContext();
186        if (mCategory == MainPanel.LOOKS) {
187            activity.removeLook(action);
188        } else if (mCategory == MainPanel.VERSIONS) {
189            activity.removeVersion(action);
190        }
191    }
192
193    public void setOrientation(int orientation) {
194        mOrientation = orientation;
195    }
196
197    public void reflectImagePreset(ImagePreset preset) {
198        if (preset == null) {
199            return;
200        }
201        int selected = 0; // if nothing found, select "none" (first element)
202        FilterRepresentation rep = null;
203        if (mCategory == MainPanel.LOOKS) {
204            int pos = preset.getPositionForType(FilterRepresentation.TYPE_FX);
205            if (pos != -1) {
206                rep = preset.getFilterRepresentation(pos);
207            }
208        } else if (mCategory == MainPanel.BORDERS) {
209            int pos = preset.getPositionForType(FilterRepresentation.TYPE_BORDER);
210            if (pos != -1) {
211                rep = preset.getFilterRepresentation(pos);
212            }
213        }
214        if (rep != null) {
215            for (int i = 0; i < getCount(); i++) {
216                FilterRepresentation itemRep = getItem(i).getRepresentation();
217                if (itemRep == null) {
218                    continue;
219                }
220                if (rep.getName().equalsIgnoreCase(
221                        itemRep.getName())) {
222                    selected = i;
223                    break;
224                }
225            }
226        }
227        if (mSelectedPosition != selected) {
228            mSelectedPosition = selected;
229            this.notifyDataSetChanged();
230        }
231    }
232
233    public boolean showAddButton() {
234        return mShowAddButton;
235    }
236
237    public void setShowAddButton(boolean showAddButton) {
238        mShowAddButton = showAddButton;
239    }
240
241    public String getAddButtonText() {
242        return mAddButtonText;
243    }
244}
245