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 17 package com.android.gallery3d.filtershow.presets; 18 19 import android.content.Context; 20 import android.graphics.Rect; 21 import android.view.LayoutInflater; 22 import android.view.View; 23 import android.view.ViewGroup; 24 import android.widget.ArrayAdapter; 25 import android.widget.EditText; 26 import android.widget.ImageButton; 27 import android.widget.ImageView; 28 import com.android.gallery3d.R; 29 import com.android.gallery3d.filtershow.category.Action; 30 import com.android.gallery3d.filtershow.category.CategoryView; 31 import com.android.gallery3d.filtershow.filters.FilterRepresentation; 32 import com.android.gallery3d.filtershow.filters.FilterUserPresetRepresentation; 33 34 import java.util.ArrayList; 35 36 public class UserPresetsAdapter extends ArrayAdapter<Action> 37 implements View.OnClickListener, View.OnFocusChangeListener { 38 private static final String LOGTAG = "UserPresetsAdapter"; 39 private LayoutInflater mInflater; 40 private int mIconSize = 160; 41 private ArrayList<FilterUserPresetRepresentation> mDeletedRepresentations = 42 new ArrayList<FilterUserPresetRepresentation>(); 43 private ArrayList<FilterUserPresetRepresentation> mChangedRepresentations = 44 new ArrayList<FilterUserPresetRepresentation>(); 45 private EditText mCurrentEditText; 46 UserPresetsAdapter(Context context, int textViewResourceId)47 public UserPresetsAdapter(Context context, int textViewResourceId) { 48 super(context, textViewResourceId); 49 mInflater = LayoutInflater.from(context); 50 mIconSize = context.getResources().getDimensionPixelSize(R.dimen.category_panel_icon_size); 51 } 52 UserPresetsAdapter(Context context)53 public UserPresetsAdapter(Context context) { 54 this(context, 0); 55 } 56 57 @Override add(Action action)58 public void add(Action action) { 59 super.add(action); 60 action.setAdapter(this); 61 } 62 deletePreset(Action action)63 private void deletePreset(Action action) { 64 FilterRepresentation rep = action.getRepresentation(); 65 if (rep instanceof FilterUserPresetRepresentation) { 66 mDeletedRepresentations.add((FilterUserPresetRepresentation) rep); 67 } 68 remove(action); 69 notifyDataSetChanged(); 70 } 71 changePreset(Action action)72 private void changePreset(Action action) { 73 FilterRepresentation rep = action.getRepresentation(); 74 rep.setName(action.getName()); 75 if (rep instanceof FilterUserPresetRepresentation) { 76 mChangedRepresentations.add((FilterUserPresetRepresentation) rep); 77 } 78 } 79 updateCurrent()80 public void updateCurrent() { 81 if (mCurrentEditText != null) { 82 updateActionFromEditText(mCurrentEditText); 83 } 84 } 85 86 static class UserPresetViewHolder { 87 ImageView imageView; 88 EditText editText; 89 ImageButton deleteButton; 90 } 91 92 @Override getView(int position, View convertView, ViewGroup parent)93 public View getView(int position, View convertView, ViewGroup parent) { 94 UserPresetViewHolder viewHolder; 95 if (convertView == null) { 96 convertView = mInflater.inflate(R.layout.filtershow_presets_management_row, null); 97 viewHolder = new UserPresetViewHolder(); 98 viewHolder.imageView = (ImageView) convertView.findViewById(R.id.imageView); 99 viewHolder.editText = (EditText) convertView.findViewById(R.id.editView); 100 viewHolder.deleteButton = (ImageButton) convertView.findViewById(R.id.deleteUserPreset); 101 viewHolder.editText.setOnClickListener(this); 102 viewHolder.editText.setOnFocusChangeListener(this); 103 viewHolder.deleteButton.setOnClickListener(this); 104 convertView.setTag(viewHolder); 105 } else { 106 viewHolder = (UserPresetViewHolder) convertView.getTag(); 107 } 108 Action action = getItem(position); 109 viewHolder.imageView.setImageBitmap(action.getImage()); 110 if (action.getImage() == null) { 111 // queue image rendering for this action 112 action.setImageFrame(new Rect(0, 0, mIconSize, mIconSize), CategoryView.VERTICAL); 113 } 114 viewHolder.deleteButton.setTag(action); 115 viewHolder.editText.setTag(action); 116 viewHolder.editText.setHint(action.getName()); 117 118 return convertView; 119 } 120 getDeletedRepresentations()121 public ArrayList<FilterUserPresetRepresentation> getDeletedRepresentations() { 122 return mDeletedRepresentations; 123 } 124 clearDeletedRepresentations()125 public void clearDeletedRepresentations() { 126 mDeletedRepresentations.clear(); 127 } 128 getChangedRepresentations()129 public ArrayList<FilterUserPresetRepresentation> getChangedRepresentations() { 130 return mChangedRepresentations; 131 } 132 clearChangedRepresentations()133 public void clearChangedRepresentations() { 134 mChangedRepresentations.clear(); 135 } 136 137 @Override onClick(View v)138 public void onClick(View v) { 139 switch (v.getId()) { 140 case R.id.editView: 141 v.requestFocus(); 142 break; 143 case R.id.deleteUserPreset: 144 Action action = (Action) v.getTag(); 145 deletePreset(action); 146 break; 147 } 148 } 149 150 @Override onFocusChange(View v, boolean hasFocus)151 public void onFocusChange(View v, boolean hasFocus) { 152 if (v.getId() != R.id.editView) { 153 return; 154 } 155 EditText editText = (EditText) v; 156 if (!hasFocus) { 157 updateActionFromEditText(editText); 158 } else { 159 mCurrentEditText = editText; 160 } 161 } 162 updateActionFromEditText(EditText editText)163 private void updateActionFromEditText(EditText editText) { 164 Action action = (Action) editText.getTag(); 165 String newName = editText.getText().toString(); 166 if (newName.length() > 0) { 167 action.setName(editText.getText().toString()); 168 changePreset(action); 169 } 170 } 171 } 172