/* * Copyright (C) 2007-2015 FBReader.ORG Limited <contact@fbreader.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ package org.geometerplus.android.util; import java.util.ArrayList; import android.app.AlertDialog; import android.app.ListActivity; import android.content.*; import android.os.Bundle; import android.view.*; import android.widget.*; import android.text.InputType; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import org.geometerplus.zlibrary.core.resources.ZLResource; import org.geometerplus.zlibrary.ui.android.R; public class EditAuthorsDialogActivity extends EditListDialogActivity { public static final int REQ_CODE = 002; private final String AUTHOR_NAME_FILTER = "[\\p{L}0-9_\\-& ]*"; private AutoCompleteTextView myInputField; private int myEditPosition = -1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.edit_authors_dialog); myResource = ZLResource.resource("dialog").getResource("editAuthors"); final Intent intent = getIntent(); ArrayList<String> allAuthorList = intent.getStringArrayListExtra(EditListDialogActivity.Key.ALL_ITEMS_LIST); myInputField = (AutoCompleteTextView)findViewById(R.id.edit_authors_input_field); myInputField.setHint(myResource.getResource("addAuthor").getValue()); myInputField.setOnEditorActionListener(new TextView.OnEditorActionListener(){ public boolean onEditorAction (TextView v, int actionId, KeyEvent event){ if(actionId == EditorInfo.IME_ACTION_DONE){ addAuthor(myInputField.getText().toString().trim(), myEditPosition); myInputField.setText(""); myEditPosition = -1; return false; } return true; } }); myInputField.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, allAuthorList)); parseUIElements(); final AuthorsAdapter adapter = new AuthorsAdapter(); setListAdapter(adapter); getListView().setOnItemClickListener(adapter); getListView().setOnItemLongClickListener(adapter); setResult(RESULT_CANCELED); } private void addAuthor(String author, int position){ if(author.length() != 0 && author.matches(AUTHOR_NAME_FILTER)){ if(position < 0){ if(!myEditList.contains(author)){ myEditList.add(author); } }else{ myEditList.set(position, author); } ((BaseAdapter)getListAdapter()).notifyDataSetChanged(); } } @Override protected void onChooseContextMenu(int index, int itemPosition){ switch(index){ case 0: editAuthor(itemPosition); break; case 1: deleteItem(itemPosition); break; } } private void editAuthor(int position){ myEditPosition = position; String s = (String)getListAdapter().getItem(position); myInputField.setText(s); myInputField.setSelection(myInputField.getText().length()); myInputField.requestFocus(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(myInputField, InputMethodManager.SHOW_IMPLICIT); } private class AuthorsAdapter extends EditListAdapter { @Override public View getView(final int position, View convertView, ViewGroup parent) { final View view = super.getView(position, convertView, parent); final View deleteButton = view.findViewById(R.id.edit_item_remove); if (myEditList.size() > 1) { deleteButton.setVisibility(View.VISIBLE); deleteButton.setOnClickListener(new View.OnClickListener() { public void onClick(final View v) { deleteItem(position); } }); }else{ deleteButton.setVisibility(View.INVISIBLE); } return view; } } }