/*
* Copyright (c) 2012 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
*/
package ru.orangesoftware.financisto2.activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.format.DateUtils;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ListAdapter;
import android.widget.TextView;
import ru.orangesoftware.financisto2.R;
import ru.orangesoftware.financisto2.adapter.ScheduledListAdapter;
import ru.orangesoftware.financisto2.datetime.Period;
import ru.orangesoftware.financisto2.datetime.PeriodType;
import ru.orangesoftware.financisto2.db.DatabaseHelper;
import ru.orangesoftware.financisto2.filter.Criteria;
import ru.orangesoftware.financisto2.filter.WhereFilter;
import ru.orangesoftware.financisto2.filter.DateTimeCriteria;
import ru.orangesoftware.financisto2.model.Total;
import ru.orangesoftware.financisto2.utils.FuturePlanner;
import ru.orangesoftware.financisto2.utils.TransactionList;
import ru.orangesoftware.financisto2.utils.Utils;
import java.util.Calendar;
import java.util.Date;
/**
* Created by IntelliJ IDEA.
* User: denis.solonenko
* Date: 10/20/12 2:22 PM
*/
public class PlannerActivity extends AbstractListActivity {
private TextView totalText;
private TextView filterText;
private WhereFilter filter = WhereFilter.empty();
public PlannerActivity() {
super(R.layout.planner);
}
@Override
protected void internalOnCreate(Bundle savedInstanceState) {
totalText = (TextView)findViewById(R.id.total);
filterText = (TextView)findViewById(R.id.period);
ImageButton bFilter = (ImageButton) findViewById(R.id.bFilter);
bFilter.setImageResource(R.drawable.ic_menu_filter_on);
bFilter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showFilter();
}
});
loadFilter();
setupFilter();
}
private void loadFilter() {
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
filter = WhereFilter.fromSharedPreferences(preferences);
applyDateTimeCriteria(filter.getDateTime());
}
private void setupFilter() {
if (filter.isEmpty()) {
applyDateTimeCriteria(null);
}
}
private void applyDateTimeCriteria(DateTimeCriteria criteria) {
if (criteria == null) {
Calendar date = Calendar.getInstance();
date.add(Calendar.MONTH, 1);
criteria = new DateTimeCriteria(PeriodType.THIS_MONTH);
}
long now = System.currentTimeMillis();
if (now > criteria.getLongValue1()) {
Period period = criteria.getPeriod();
period.start = now;
criteria = new DateTimeCriteria(period);
}
filter.put(criteria);
}
private void showFilter() {
Intent intent = new Intent(this, DateFilterActivity.class);
intent.putExtra(DateFilterActivity.EXTRA_FILTER_DONT_SHOW_NO_FILTER, true);
intent.putExtra(DateFilterActivity.EXTRA_FILTER_SHOW_PLANNER, true);
filter.toIntent(intent);
startActivityForResult(intent, 1);
}
private void saveFilter() {
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
filter.toSharedPreferences(preferences);
SharedPreferences.Editor editor = preferences.edit();
editor.commit();
}
@Override
protected Cursor createCursor() {
retrieveData();
return null;
}
@Override
protected ListAdapter createAdapter(Cursor cursor) {
return null;
}
@Override
protected void deleteItem(View v, int position, long id) {
}
@Override
protected void editItem(View v, int position, long id) {
}
@Override
protected void viewItem(View v, int position, long id) {
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
DateTimeCriteria c = WhereFilter.dateTimeFromIntent(data);
applyDateTimeCriteria(c);
saveFilter();
retrieveData();
}
}
private PlannerTask task;
private void retrieveData() {
if (task != null) {
task.cancel(true);
}
task = new PlannerTask(filter);
task.execute();
}
private class PlannerTask extends AsyncTask<Void, Void, TransactionList> {
private final WhereFilter filter;
private PlannerTask(WhereFilter filter) {
this.filter = WhereFilter.copyOf(filter);
}
@Override
protected TransactionList doInBackground(Void... voids) {
FuturePlanner planner = new FuturePlanner(db, filter, new Date());
return planner.getPlannedTransactionsWithTotals();
}
@Override
protected void onPostExecute(TransactionList data) {
ScheduledListAdapter adapter = new ScheduledListAdapter(PlannerActivity.this, data.transactions);
setListAdapter(adapter);
setTotals(data.totals);
updateFilterText(filter);
}
}
private void updateFilterText(WhereFilter filter) {
Criteria c = filter.get(DatabaseHelper.ReportColumns.DATETIME);
if (c != null) {
filterText.setText(DateUtils.formatDateRange(this, c.getLongValue1(), c.getLongValue2(),
DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_MONTH));
} else {
filterText.setText(R.string.no_filter);
}
}
private void setTotals(Total[] totals) {
Utils u = new Utils(this);
u.setTotal(totalText, totals[0]);
}
}