aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.java')
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.java216
1 files changed, 216 insertions, 0 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.java b/app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.java
new file mode 100644
index 00000000..f967ce04
--- /dev/null
+++ b/app/src/main/java/net/lacolaco/smileessence/activity/EditExtractionActivity.java
@@ -0,0 +1,216 @@
+/*
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2012-2014 lacolaco.net
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package net.lacolaco.smileessence.activity;
+
+import android.app.ActionBar;
+import android.app.Activity;
+import android.os.Bundle;
+import android.support.v4.app.NavUtils;
+import android.text.TextUtils;
+import android.util.SparseBooleanArray;
+import android.view.*;
+import android.widget.AbsListView;
+import android.widget.AdapterView;
+import android.widget.ListView;
+
+import net.lacolaco.smileessence.Application;
+import net.lacolaco.smileessence.R;
+import net.lacolaco.smileessence.entity.ExtractionWord;
+import net.lacolaco.smileessence.logging.Logger;
+import net.lacolaco.smileessence.util.Themes;
+import net.lacolaco.smileessence.view.adapter.CustomListAdapter;
+import net.lacolaco.smileessence.view.dialog.DialogHelper;
+import net.lacolaco.smileessence.view.dialog.EditTextDialogFragment;
+
+import java.util.List;
+
+public class EditExtractionActivity extends Activity implements AdapterView.OnItemClickListener,
+ AbsListView.MultiChoiceModeListener {
+
+ // ------------------------------ FIELDS ------------------------------
+
+ private CustomListAdapter<ExtractionWord> adapter;
+
+ // --------------------- GETTER / SETTER METHODS ---------------------
+
+ private ExtractionWord[] getExtractionWords() {
+ List<ExtractionWord> all = ExtractionWord.getAll();
+ return all.toArray(new ExtractionWord[all.size()]);
+ }
+
+ private ListView getListView() {
+ return (ListView) findViewById(R.id.listview_edit_list);
+ }
+
+ // ------------------------ INTERFACE METHODS ------------------------
+
+
+ // --------------------- Interface Callback ---------------------
+
+ @Override
+ public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+ menu.clear();
+ MenuInflater inflater = mode.getMenuInflater();
+ inflater.inflate(R.menu.edit_list, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+ return false;
+ }
+
+ @Override
+ public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.menu_edit_list_delete: {
+ deleteSelectedItems();
+ }
+ }
+ mode.finish();
+ return true;
+ }
+
+ @Override
+ public void onDestroyActionMode(ActionMode mode) {
+ }
+
+ // --------------------- Interface MultiChoiceModeListener ---------------------
+
+ @Override
+ public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
+ }
+
+ // --------------------- Interface OnItemClickListener ---------------------
+
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ openEditExtractionWordDialog(position);
+ }
+
+ // ------------------------ OVERRIDE METHODS ------------------------
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ setTheme(Themes.getTheme(((Application) getApplication()).getThemeIndex()));
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.layout_edit_list);
+ ActionBar actionBar = getActionBar();
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ initializeViews();
+ Logger.debug("EditExtractionWordActivity:onCreate");
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ MenuItem add = menu.add(Menu.NONE, R.id.menu_edit_list_add, Menu.NONE, "");
+ add.setIcon(android.R.drawable.ic_menu_add);
+ add.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.menu_edit_list_add: {
+ addNewExtractionWord();
+ break;
+ }
+ case android.R.id.home: {
+ NavUtils.navigateUpFromSameTask(this);
+ return true;
+ }
+ }
+ return true;
+ }
+
+ // -------------------------- OTHER METHODS --------------------------
+
+ public void deleteSelectedItems() {
+ SparseBooleanArray checkedItems = getListView().getCheckedItemPositions();
+ adapter.setNotifiable(false);
+ for (int i = adapter.getCount() - 1; i > -1; i--) {
+ if (checkedItems.get(i)) {
+ ExtractionWord extractionWord = adapter.removeItem(i);
+ extractionWord.delete();
+ }
+ }
+ adapter.setNotifiable(true);
+ adapter.notifyDataSetChanged();
+ updateListView();
+ }
+
+ public void openEditExtractionWordDialog(int position) {
+ final ExtractionWord extractionWord = (ExtractionWord) adapter.getItem(position);
+ EditTextDialogFragment dialogFragment = new EditTextDialogFragment() {
+ @Override
+ public void onTextInput(String text) {
+ if (TextUtils.isEmpty(text.trim())) {
+ return;
+ }
+ extractionWord.text = text;
+ extractionWord.save();
+ adapter.notifyDataSetChanged();
+ updateListView();
+ }
+ };
+ dialogFragment.setParams(getString(R.string.dialog_title_edit), extractionWord.text);
+ DialogHelper.showDialog(this, dialogFragment);
+ }
+
+ private void addNewExtractionWord() {
+ final ExtractionWord extractionWord = new ExtractionWord();
+ EditTextDialogFragment dialogFragment = new EditTextDialogFragment() {
+ @Override
+ public void onTextInput(String text) {
+ if (TextUtils.isEmpty(text.trim())) {
+ return;
+ }
+ extractionWord.text = text;
+ extractionWord.save();
+ adapter.addToBottom(extractionWord);
+ adapter.notifyDataSetChanged();
+ updateListView();
+ }
+ };
+ dialogFragment.setParams(getString(R.string.dialog_title_add), "");
+ DialogHelper.showDialog(this, dialogFragment);
+ }
+
+ private void initializeViews() {
+ ListView listView = getListView();
+ adapter = new CustomListAdapter<>(this, ExtractionWord.class);
+ listView.setAdapter(adapter);
+ adapter.addToTop(getExtractionWords());
+ adapter.update();
+ listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
+ listView.setOnItemClickListener(this);
+ listView.setMultiChoiceModeListener(this);
+ }
+
+ private void updateListView() {
+ getListView().requestLayout();
+ }
+}