/* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.gallery3d.filtershow.category; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListView; import com.android.gallery3d.R; import com.android.gallery3d.filtershow.FilterShowActivity; import com.android.gallery3d.filtershow.filters.FilterRepresentation; import com.android.gallery3d.filtershow.filters.FilterTinyPlanetRepresentation; import com.android.gallery3d.filtershow.pipeline.ImagePreset; public class CategoryAdapter extends ArrayAdapter { private static final String LOGTAG = "CategoryAdapter"; private int mItemHeight; private View mContainer; private int mItemWidth = ListView.LayoutParams.MATCH_PARENT; private int mSelectedPosition; int mCategory; private int mOrientation; private boolean mShowAddButton = false; private String mAddButtonText; public CategoryAdapter(Context context, int textViewResourceId) { super(context, textViewResourceId); mItemHeight = (int) (context.getResources().getDisplayMetrics().density * 100); } public CategoryAdapter(Context context) { this(context, 0); } @Override public void clear() { for (int i = 0; i < getCount(); i++) { Action action = getItem(i); action.clearBitmap(); } super.clear(); } public void setItemHeight(int height) { mItemHeight = height; } public void setItemWidth(int width) { mItemWidth = width; } @Override public void add(Action action) { super.add(action); action.setAdapter(this); } public void initializeSelection(int category) { mCategory = category; mSelectedPosition = -1; if (category == MainPanel.LOOKS) { mSelectedPosition = 0; mAddButtonText = getContext().getString(R.string.filtershow_add_button_looks); } if (category == MainPanel.BORDERS) { mSelectedPosition = 0; } if (category == MainPanel.VERSIONS) { mAddButtonText = getContext().getString(R.string.filtershow_add_button_versions); } } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = new CategoryView(getContext()); } CategoryView view = (CategoryView) convertView; view.setOrientation(mOrientation); Action action = getItem(position); view.setAction(action, this); int width = mItemWidth; int height = mItemHeight; if (action.getType() == Action.SPACER) { if (mOrientation == CategoryView.HORIZONTAL) { width = width / 2; } else { height = height / 2; } } if (action.getType() == Action.ADD_ACTION && mOrientation == CategoryView.VERTICAL) { height = height / 2; } view.setLayoutParams( new ListView.LayoutParams(width, height)); view.setTag(position); view.invalidate(); return view; } public void setSelected(View v) { int old = mSelectedPosition; mSelectedPosition = (Integer) v.getTag(); if (old != -1) { invalidateView(old); } invalidateView(mSelectedPosition); } public boolean isSelected(View v) { return (Integer) v.getTag() == mSelectedPosition; } private void invalidateView(int position) { View child = null; if (mContainer instanceof ListView) { ListView lv = (ListView) mContainer; child = lv.getChildAt(position - lv.getFirstVisiblePosition()); } else { CategoryTrack ct = (CategoryTrack) mContainer; child = ct.getChildAt(position); } if (child != null) { child.invalidate(); } } public void setContainer(View container) { mContainer = container; } public void imageLoaded() { notifyDataSetChanged(); } public FilterRepresentation getTinyPlanet() { for (int i = 0; i < getCount(); i++) { Action action = getItem(i); if (action.getRepresentation() != null && action.getRepresentation() instanceof FilterTinyPlanetRepresentation) { return action.getRepresentation(); } } return null; } public void removeTinyPlanet() { for (int i = 0; i < getCount(); i++) { Action action = getItem(i); if (action.getRepresentation() != null && action.getRepresentation() instanceof FilterTinyPlanetRepresentation) { super.remove(action); return; } } } @Override public void remove(Action action) { if (!(mCategory == MainPanel.VERSIONS || mCategory == MainPanel.LOOKS)) { return; } super.remove(action); FilterShowActivity activity = (FilterShowActivity) getContext(); if (mCategory == MainPanel.LOOKS) { activity.removeLook(action); } else if (mCategory == MainPanel.VERSIONS) { activity.removeVersion(action); } } public void setOrientation(int orientation) { mOrientation = orientation; } public void reflectImagePreset(ImagePreset preset) { if (preset == null) { return; } int selected = 0; // if nothing found, select "none" (first element) FilterRepresentation rep = null; if (mCategory == MainPanel.LOOKS) { int pos = preset.getPositionForType(FilterRepresentation.TYPE_FX); if (pos != -1) { rep = preset.getFilterRepresentation(pos); } } else if (mCategory == MainPanel.BORDERS) { int pos = preset.getPositionForType(FilterRepresentation.TYPE_BORDER); if (pos != -1) { rep = preset.getFilterRepresentation(pos); } } if (rep != null) { for (int i = 0; i < getCount(); i++) { FilterRepresentation itemRep = getItem(i).getRepresentation(); if (itemRep == null) { continue; } if (rep.getName().equalsIgnoreCase( itemRep.getName())) { selected = i; break; } } } if (mSelectedPosition != selected) { mSelectedPosition = selected; this.notifyDataSetChanged(); } } public boolean showAddButton() { return mShowAddButton; } public void setShowAddButton(boolean showAddButton) { mShowAddButton = showAddButton; } public String getAddButtonText() { return mAddButtonText; } }