/*******************************************************************************
* Copyright (c) 2010 Denis Solonenko.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v2.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* Contributors:
* Denis Solonenko - initial API and implementation
******************************************************************************/
package ru.orangesoftware.financisto2.activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.database.Cursor;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.TextView;
import java.util.List;
import ru.orangesoftware.financisto2.R;
import ru.orangesoftware.financisto2.model.MultiChoiceItem;
import ru.orangesoftware.financisto2.utils.Utils;
import ru.orangesoftware.financisto2.view.NodeInflater;
import ru.orangesoftware.financisto2.view.NodeInflater.Builder;
import ru.orangesoftware.financisto2.view.NodeInflater.CheckBoxBuilder;
import ru.orangesoftware.financisto2.view.NodeInflater.EditBuilder;
import ru.orangesoftware.financisto2.view.NodeInflater.ListBuilder;
import ru.orangesoftware.financisto2.view.NodeInflater.PictureBuilder;
public class ActivityLayout {
public final NodeInflater inflater;
private final ActivityLayoutListener listener;
public ActivityLayout(NodeInflater inflater, ActivityLayoutListener listener) {
this.inflater = inflater;
this.listener = listener;
}
public View addTitleNode(LinearLayout layout, int labelId) {
Builder b = inflater.new Builder(layout, R.layout.select_entry_title);
return b.withLabel(labelId).create();
}
public View addTitleNode(LinearLayout layout, String label) {
Builder b = inflater.new Builder(layout, R.layout.select_entry_title);
return b.withLabel(label).create();
}
public View addTitleNodeNoDivider(LinearLayout layout, int labelId) {
Builder b = inflater.new Builder(layout, R.layout.select_entry_title);
return b.withLabel(labelId).withNoDivider().create();
}
public View addTitleNodeNoDivider(LinearLayout layout, String label) {
Builder b = inflater.new Builder(layout, R.layout.select_entry_title);
return b.withLabel(label).withNoDivider().create();
}
public void addListNodeSingle(LinearLayout layout, int id, int labelId) {
Builder b = inflater.new Builder(layout, R.layout.select_entry_simple_list);
b.withId(id, listener).withLabel(labelId).create();
}
public void addInfoNodeSingle(LinearLayout layout, int id, int labelId) {
Builder b = inflater.new Builder(layout, R.layout.select_entry_single);
b.withId(id, listener).withLabel(labelId).create();
}
public TextView addInfoNodeSingle(LinearLayout layout, int id, String label) {
Builder b = inflater.new Builder(layout, R.layout.select_entry_single);
View v = b.withId(id, listener).withLabel(label).create();
TextView labelView = (TextView)v.findViewById(R.id.label);
labelView.setTag(v);
return labelView;
}
public TextView addInfoNode(LinearLayout layout, int id, int labelId, int defaultValueResId) {
Builder b = inflater.new Builder(layout, R.layout.select_entry_simple);
View v = b.withId(id, listener).withLabel(labelId).withData(defaultValueResId).create();
TextView data = (TextView)v.findViewById(R.id.data);
data.setTag(v);
return data;
}
public TextView addInfoNode(LinearLayout layout, int id, int labelId, String defaultValue) {
Builder b = inflater.new Builder(layout, R.layout.select_entry_simple);
View v = b.withId(id, listener).withLabel(labelId).withData(defaultValue).create();
return (TextView)v.findViewById(R.id.data);
}
public TextView addInfoNode(LinearLayout layout, int id, String label, String defaultValue) {
Builder b = inflater.new Builder(layout, R.layout.select_entry_simple);
View v = b.withId(id, listener).withLabel(label).withData(defaultValue).create();
TextView data = (TextView)v.findViewById(R.id.data);
data.setTag(v);
return data;
}
public View addListNodeIcon(LinearLayout layout, int id, int labelId, int defaultValueResId) {
Builder b = inflater.new Builder(layout, R.layout.select_entry_icon);
return b.withId(id, listener).withLabel(labelId).withData(defaultValueResId).create();
}
public View addListNodeIcon(LinearLayout layout, int id, int labelId, String defaultValue) {
Builder b = inflater.new Builder(layout, R.layout.select_entry_icon);
return b.withId(id, listener).withLabel(labelId).withData(defaultValue).create();
}
public View addListNode(LinearLayout layout, int id) {
Builder b = inflater.new Builder(layout, R.layout.select_entry);
return b.withId(id, listener).create();
}
public TextView addListNode(LinearLayout layout, int id, int labelId, int defaultValueResId) {
Builder b = inflater.new Builder(layout, R.layout.select_entry);
View v = b.withId(id, listener).withLabel(labelId).withData(defaultValueResId).create();
TextView data = (TextView)v.findViewById(R.id.data);
data.setTag(v);
return data;
}
public TextView addListNode(LinearLayout layout, int id, int labelId, String defaultValue) {
Builder b = inflater.new Builder(layout, R.layout.select_entry);
View v = b.withId(id, listener).withLabel(labelId).withData(defaultValue).create();
return (TextView)v.findViewById(R.id.data);
}
public TextView addListNode(LinearLayout layout, int id, String label, String defaultValue) {
Builder b = inflater.new Builder(layout, R.layout.select_entry);
View v = b.withId(id, listener).withLabel(label).withData(defaultValue).create();
return (TextView)v.findViewById(R.id.data);
}
public View addCheckboxNode(LinearLayout layout, int id) {
Builder b = inflater.new Builder(layout, R.layout.select_entry_checkbox);
return b.withId(id, listener).create();
}
public CheckBox addCheckboxNode(LinearLayout layout, int id, int labelId, int dataId, boolean checked) {
CheckBoxBuilder b = inflater.new CheckBoxBuilder(layout);
View v = b.withCheckbox(checked).withLabel(labelId).withId(id, listener).withData(dataId).create();
return (CheckBox)v.findViewById(R.id.checkbox);
}
public void addInfoNodePlus(LinearLayout layout, int id, int plusId, int labelId) {
ListBuilder b = inflater.new ListBuilder(layout, R.layout.select_entry_simple_plus);
b.withButtonId(plusId, listener).withLabel(labelId).withId(id, listener).create();
}
public TextView addListNodePlusWithoutDivider(LinearLayout layout, int id, int plusId, int labelId, int defaultValueResId) {
ListBuilder b = inflater.new ListBuilder(layout, R.layout.select_entry_plus);
View v = b.withButtonId(plusId, listener).withId(id, listener).withLabel(labelId).withData(defaultValueResId).withNoDivider().create();
return (TextView)v.findViewById(R.id.data);
}
public TextView addListNodePlusWithoutLabel(LinearLayout layout, int id, int plusId, int defaultValueResId) {
ListBuilder b = inflater.new ListBuilder(layout, R.layout.select_entry_plus_no_label);
View v = b.withButtonId(plusId, listener).withId(id, listener).withData(defaultValueResId).create();
return (TextView)v.findViewById(R.id.data);
}
public TextView addListNodePlus(LinearLayout layout, int id, int plusId, int labelId, int defaultValueResId) {
ListBuilder b = inflater.new ListBuilder(layout, R.layout.select_entry_plus);
View v = b.withButtonId(plusId, listener).withId(id, listener).withLabel(labelId).withData(defaultValueResId).create();
TextView textView = (TextView) v.findViewById(R.id.data);
textView.setTag(v);
return textView;
}
public TextView addListNodeCategory(LinearLayout layout) {
ListBuilder b = inflater.new ListBuilder(layout, R.layout.select_entry_category);
View v = b.withButtonId(R.id.category_add, listener).withId(R.id.category, listener).withLabel(R.string.category).withData(R.string.select_category).create();
ImageView transferImageView = (ImageView)v.findViewById(R.id.split);
transferImageView.setId(R.id.category_split);
transferImageView.setOnClickListener(listener);
return (TextView)v.findViewById(R.id.data);
}
public View addNodeUnsplit(LinearLayout layout) {
ListBuilder b = inflater.new ListBuilder(layout, R.layout.select_entry_unsplit);
View v = b.withButtonId(R.id.add_split, listener).withId(R.id.unsplit_action, listener).withLabel(R.string.unsplit_amount).withData("0").create();
ImageView transferImageView = (ImageView)v.findViewById(R.id.add_split_transfer);
transferImageView.setOnClickListener(listener);
return v;
}
public View addSplitNodeMinus(LinearLayout layout, int id, int minusId, int labelId, String defaultValue) {
ListBuilder b = inflater.new ListBuilder(layout, R.layout.select_entry_minus);
return b.withButtonId(minusId, listener).withoutMoreButton().withId(id, listener).withLabel(labelId).withData(defaultValue).create();
}
public TextView addFilterNodeMinus(LinearLayout layout, int id, int minusId, int labelId, int defaultValueResId) {
ListBuilder b = inflater.new ListBuilder(layout, R.layout.select_entry_minus);
View v = b.withButtonId(minusId, listener).withId(id, listener).withLabel(labelId).withData(defaultValueResId).create();
hideMinusButton(v, minusId);
return (TextView)v.findViewById(R.id.data);
}
public TextView addFilterNodeMinus(LinearLayout layout, int id, int minusId, int labelId, String defaultValue) {
ListBuilder b = inflater.new ListBuilder(layout, R.layout.select_entry_minus);
View v = b.withButtonId(minusId, listener).withId(id, listener).withLabel(labelId).withData(defaultValue).create();
hideMinusButton(v, minusId);
return (TextView)v.findViewById(R.id.data);
}
private void hideMinusButton(View v, int minusId) {
ImageView plusImageView = (ImageView)v.findViewById(minusId);
plusImageView.setVisibility(View.GONE);
}
public ImageView addPictureNodeMinus(Context context, LinearLayout layout, int id, int minusId, int labelId, int defaultLabelResId) {
PictureBuilder b = inflater.new PictureBuilder(layout);
View v = b.withPicture(context, null).withButtonId(minusId, listener).withId(id, listener)
.withLabel(labelId).withData(defaultLabelResId).create();
return (ImageView)v.findViewById(R.id.picture);
}
public View addEditNode(LinearLayout layout, int labelId, View view) {
EditBuilder b = inflater.new EditBuilder(layout, view);
return b.withLabel(labelId).create();
}
private void selectSingleChoice(Context context, int titleId, ListAdapter adapter, int checkedItem,
DialogInterface.OnClickListener onClickListener) {
new AlertDialog.Builder(context)
.setSingleChoiceItems(adapter, checkedItem, onClickListener)
.setTitle(titleId)
.show();
}
public void selectMultiChoice(Context context, final int id, int titleId, final List<? extends MultiChoiceItem> items) {
int count = items.size();
String[] titles = new String[count];
boolean[] checked = new boolean[count];
for (int i=0; i<count; i++) {
titles[i] = items.get(i).getTitle();
checked[i] = items.get(i).isChecked();
}
new AlertDialog.Builder(context)
.setMultiChoiceItems(titles, checked, new DialogInterface.OnMultiChoiceClickListener(){
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
items.get(which).setChecked(isChecked);
}
})
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
listener.onSelected(id, items);
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.setTitle(titleId)
.show();
}
public void selectPosition(Context context, final int id, int titleId,
final ListAdapter adapter, int selectedPosition) {
selectSingleChoice(context, titleId, adapter, selectedPosition,
new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
listener.onSelectedPos(id, which);
}
});
}
public void selectItemId(Context context, final int id, int titleId,
final ListAdapter adapter, int selectedPosition) {
selectSingleChoice(context, titleId, adapter, selectedPosition,
new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
long selectedId = adapter.getItemId(which);
listener.onSelectedId(id, selectedId);
}
});
}
public void select(Context context, final int id, int titleId,
final Cursor cursor, final ListAdapter adapter,
final String idColumn, long valueId) {
int pos = Utils.moveCursor(cursor, idColumn, valueId);
selectSingleChoice(context, titleId, adapter, pos,
new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
cursor.moveToPosition(which);
long selectedId = cursor.getLong(cursor.getColumnIndexOrThrow(idColumn));
listener.onSelectedId(id, selectedId);
}
});
}
public void addDivider(LinearLayout layout) {
inflater.addDivider(layout);
}
public View addRateNode(LinearLayout layout) {
return inflater.new Builder(layout, R.layout.select_entry_rate)
.withLabel(R.string.rate)
.withData(R.string.no_rate)
.create();
}
}