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