1fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard/*
2fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard * Copyright (C) 2013 The Android Open Source Project
3fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard *
4fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard * Licensed under the Apache License, Version 2.0 (the "License");
5fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard * you may not use this file except in compliance with the License.
6fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard * You may obtain a copy of the License at
7fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard *
8fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard *      http://www.apache.org/licenses/LICENSE-2.0
9fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard *
10fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard * Unless required by applicable law or agreed to in writing, software
11fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard * distributed under the License is distributed on an "AS IS" BASIS,
12fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard * See the License for the specific language governing permissions and
14fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard * limitations under the License.
15fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard */
16fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
17fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardpackage com.android.gallery3d.filtershow.presets;
18fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
19fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport android.content.Context;
20fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport android.graphics.Rect;
21fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport android.view.LayoutInflater;
22fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport android.view.View;
23fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport android.view.ViewGroup;
24fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport android.widget.ArrayAdapter;
25fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport android.widget.EditText;
26fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport android.widget.ImageButton;
27fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport android.widget.ImageView;
28fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport com.android.gallery3d.R;
29fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport com.android.gallery3d.filtershow.category.Action;
30fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport com.android.gallery3d.filtershow.category.CategoryView;
31fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport com.android.gallery3d.filtershow.filters.FilterRepresentation;
32fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport com.android.gallery3d.filtershow.filters.FilterUserPresetRepresentation;
33fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
34fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardimport java.util.ArrayList;
35fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
36fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroardpublic class UserPresetsAdapter extends ArrayAdapter<Action>
37fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        implements View.OnClickListener, View.OnFocusChangeListener {
38fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private static final String LOGTAG = "UserPresetsAdapter";
39fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private LayoutInflater mInflater;
40fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private int mIconSize = 160;
41fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private ArrayList<FilterUserPresetRepresentation> mDeletedRepresentations =
42fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            new ArrayList<FilterUserPresetRepresentation>();
43fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private ArrayList<FilterUserPresetRepresentation> mChangedRepresentations =
44fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            new ArrayList<FilterUserPresetRepresentation>();
45fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private EditText mCurrentEditText;
46fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
47fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    public UserPresetsAdapter(Context context, int textViewResourceId) {
48fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        super(context, textViewResourceId);
49fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mInflater = LayoutInflater.from(context);
50fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mIconSize = context.getResources().getDimensionPixelSize(R.dimen.category_panel_icon_size);
51fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
52fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
53fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    public UserPresetsAdapter(Context context) {
54fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        this(context, 0);
55fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
56fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
57fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    @Override
58fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    public void add(Action action) {
59fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        super.add(action);
60fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        action.setAdapter(this);
61fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
62fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
63fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private void deletePreset(Action action) {
64fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        FilterRepresentation rep = action.getRepresentation();
65fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        if (rep instanceof FilterUserPresetRepresentation) {
66fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            mDeletedRepresentations.add((FilterUserPresetRepresentation) rep);
67fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        }
68fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        remove(action);
69fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        notifyDataSetChanged();
70fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
71fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
72fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private void changePreset(Action action) {
73fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        FilterRepresentation rep = action.getRepresentation();
74fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        rep.setName(action.getName());
75fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        if (rep instanceof FilterUserPresetRepresentation) {
76fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            mChangedRepresentations.add((FilterUserPresetRepresentation) rep);
77fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        }
78fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
79fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
80fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    public void updateCurrent() {
81fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        if (mCurrentEditText != null) {
82fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            updateActionFromEditText(mCurrentEditText);
83fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        }
84fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
85fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
86fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    static class UserPresetViewHolder {
87fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        ImageView imageView;
88fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        EditText editText;
89fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        ImageButton deleteButton;
90fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
91fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
92fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    @Override
93fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    public View getView(int position, View convertView, ViewGroup parent) {
94fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        UserPresetViewHolder viewHolder;
95fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        if (convertView == null) {
96fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            convertView = mInflater.inflate(R.layout.filtershow_presets_management_row, null);
97fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            viewHolder = new UserPresetViewHolder();
98fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            viewHolder.imageView = (ImageView) convertView.findViewById(R.id.imageView);
99fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            viewHolder.editText = (EditText) convertView.findViewById(R.id.editView);
100fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            viewHolder.deleteButton = (ImageButton) convertView.findViewById(R.id.deleteUserPreset);
101fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            viewHolder.editText.setOnClickListener(this);
102fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            viewHolder.editText.setOnFocusChangeListener(this);
103fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            viewHolder.deleteButton.setOnClickListener(this);
104fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            convertView.setTag(viewHolder);
105fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        } else {
106fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            viewHolder = (UserPresetViewHolder) convertView.getTag();
107fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        }
108fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        Action action = getItem(position);
109fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        viewHolder.imageView.setImageBitmap(action.getImage());
110fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        if (action.getImage() == null) {
111fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            // queue image rendering for this action
112fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            action.setImageFrame(new Rect(0, 0, mIconSize, mIconSize), CategoryView.VERTICAL);
113fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        }
114fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        viewHolder.deleteButton.setTag(action);
115fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        viewHolder.editText.setTag(action);
116fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        viewHolder.editText.setHint(action.getName());
117fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
118fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        return convertView;
119fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
120fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
121fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    public ArrayList<FilterUserPresetRepresentation> getDeletedRepresentations() {
122fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        return mDeletedRepresentations;
123fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
124fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
125fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    public void clearDeletedRepresentations() {
126fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mDeletedRepresentations.clear();
127fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
128fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
129fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    public ArrayList<FilterUserPresetRepresentation> getChangedRepresentations() {
130fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        return mChangedRepresentations;
131fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
132fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
133fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    public void clearChangedRepresentations() {
134fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        mChangedRepresentations.clear();
135fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
136fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
137fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    @Override
138fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    public void onClick(View v) {
139fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        switch (v.getId()) {
140fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            case R.id.editView:
141fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard                v.requestFocus();
142fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard                break;
143fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            case R.id.deleteUserPreset:
144fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard                Action action = (Action) v.getTag();
145fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard                deletePreset(action);
146fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard                break;
147fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        }
148fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
149fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
150fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    @Override
151fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    public void onFocusChange(View v, boolean hasFocus) {
152fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        if (v.getId() != R.id.editView) {
153fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            return;
154fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        }
155fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        EditText editText = (EditText) v;
156fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        if (!hasFocus) {
157fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            updateActionFromEditText(editText);
158fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        } else {
159fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            mCurrentEditText = editText;
160fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        }
161fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
162fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard
163fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    private void updateActionFromEditText(EditText editText) {
164fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        Action action = (Action) editText.getTag();
165fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        String newName = editText.getText().toString();
166fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        if (newName.length() > 0) {
167fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            action.setName(editText.getText().toString());
168fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard            changePreset(action);
169fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard        }
170fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard    }
171fa474a198019851ecc3824a1dfbac94cd1928efcnicolasroard}
172