Android Open Source - ccardstats Card List Activity






From Project

Back to project page ccardstats.

License

The source code is released under:

GNU General Public License

If you think the Android project ccardstats listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.github.marwinxxii.ccardstats.gui;
/*from   w  w w  . j a  v  a  2s.c o  m*/
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.github.marwinxxii.ccardstats.db.Card;
import com.github.marwinxxii.ccardstats.db.DBHelper;
import com.github.marwinxxii.ccardstats.helpers.DateHelper;
import com.github.marwinxxii.ccardstats.helpers.MoneyHelper;
import com.github.marwinxxii.ccardstats.notifications.NotificationReader;
import com.github.marwinxxii.ccardstats.R;

import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;

public class CardListActivity extends SimpleListActivity implements OnItemLongClickListener,
        OnItemClickListener {

    private static final int[] ids = { R.id.card_item_name,
            R.id.card_item_total_in, R.id.card_item_total_out,
            R.id.card_item_month_in, R.id.card_item_month_out,
            R.id.card_item_today_in, R.id.card_item_today_out,
            R.id.card_item_balance };

    private static List<Card> cards;
    private static Map<Integer, List<Integer>> cardYears;
    private int selectedCardIndex;
    private boolean forceUpdate = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setDialogParams(R.string.read_sms_dialog_title,
                getString(R.string.read_sms_dialog_message));
        mItemsList.setOnItemLongClickListener(this);
        mItemsList.setOnItemClickListener(this);
        registerForContextMenu(mItemsList);
    }

    @Override
    public void setListTitle() {
        super.setTitleResId(R.string.cards_list_title);
    }

    @Override
    protected void getItems() {
        new ReadSmsTask().execute();
    }

    @Override
    protected int getItemLayout() {
        return R.layout.card_item;
    }

    @Override
    protected int[] getItemFieldsIds() {
        return ids;
    }

    public static List<String[]> prepareCardsInfo(DBHelper helper, List<Card> cards) {
        List<String[]> values = new ArrayList<String[]>();
        cardYears = new HashMap<Integer, List<Integer>>(cards.size());
        int k = 0;
        for (Card c : cards) {
            String[] buf = new String[8];
            double[] vals = helper.getAllStats(c, DateHelper.year,
                    DateHelper.month, DateHelper.day);
            buf[0] = c.getAlias();
            for (int i = 0; i < vals.length; i += 2) {
                buf[i + 1] = MoneyHelper.formatMoney(vals[i], true);
                buf[i + 2] = MoneyHelper.formatMoney(vals[i + 1], false);
            }
            buf[7] = String.format("%.2f", c.getBalance());
            values.add(buf);
            cardYears.put(k++, helper.getYears(c));
        }
        return values;
    }

    public class ReadSmsTask extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... params) {
            Context context = getApplicationContext();
            DBHelper helper = new DBHelper(context);
            cards = helper.getCards();
            if (helper.wasCreated() || forceUpdate) {
                NotificationReader reader = new NotificationReader(context, helper);
                reader.readNotificationsToDB();
                cards = helper.getCards();
                forceUpdate = false;
            }
            cacheValues(prepareCardsInfo(helper, cards));
            if (DBHelper.storeMonth)
                helper.deleteOldEntries(cards);
            helper.close();
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            setListAdapter();
            progressDialog.dismiss();
        }

    }

    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        selectedCardIndex = position;
        parent.performLongClick();
        return true;
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        startActivity(MonthStatsActivity.getStartingIntent(this, cards.get(position).getName(),
                DateHelper.year, DateHelper.month));
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.card, menu);
        menu.setHeaderTitle(R.string.card_item_menu_title);
        List<Integer> years = cardYears.get(selectedCardIndex);
        for (Integer year : years) {
            menu.add(year.toString());
        }
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        String card = cards.get(selectedCardIndex).getName();
        int year = Integer.parseInt(item.getTitle().toString());
        startActivity(YearStatsActivity.getStartingIntent(this, card, year));
        return true;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.cards, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (!super.onOptionsItemSelected(item)) {
            switch (item.getItemId()) {
                case R.id.menu_cards_reread:
                    if (progressDialog != null)
                        progressDialog.show();
                    forceUpdate = true;
                    new ReadSmsTask().execute();
                    // TODO rewrite this in another way
                    return true;
                case R.id.menu_cards_delete:
                    DBHelper helper = new DBHelper(this);
                    helper.deleteAll();
                    helper.close();
                    clearCache();
                    mItemsList.removeAllViewsInLayout();
                    setNoItemsTextId(R.string.list_activity_noitems);
                    return true;
            }
        } else {
            return true;
        }
        return false;
    }
}




Java Source Code List

com.github.marwinxxii.ccardstats.Application.java
com.github.marwinxxii.ccardstats.SmsReceiver.java
com.github.marwinxxii.ccardstats.db.Card.java
com.github.marwinxxii.ccardstats.db.DBHelper.java
com.github.marwinxxii.ccardstats.gui.CardListActivity.java
com.github.marwinxxii.ccardstats.gui.GetStatsTask.java
com.github.marwinxxii.ccardstats.gui.ListActivity.java
com.github.marwinxxii.ccardstats.gui.MonthStatsActivity.java
com.github.marwinxxii.ccardstats.gui.PreferencesActivity.java
com.github.marwinxxii.ccardstats.gui.SimpleListActivity.java
com.github.marwinxxii.ccardstats.gui.TextMappingAdapter.java
com.github.marwinxxii.ccardstats.gui.YearStatsActivity.java
com.github.marwinxxii.ccardstats.helpers.DateHelper.java
com.github.marwinxxii.ccardstats.helpers.MoneyHelper.java
com.github.marwinxxii.ccardstats.notifications.NotificationReader.java
com.github.marwinxxii.ccardstats.notifications.NotificationService.java
com.github.marwinxxii.ccardstats.notifications.SberbankService.java
com.github.marwinxxii.ccardstats.notifications.SmsNotification.java
com.github.marwinxxii.ccardstats.notifications.SmsParser.java
com.github.marwinxxii.ccardstats.notifications.SmsReader.java