SelectCategory.java :  » Log » mhfinance » com » forsir » android » mhfinance » Android Open Source

Android Open Source » Log » mhfinance 
mhfinance » com » forsir » android » mhfinance » SelectCategory.java
package com.forsir.android.mhfinance;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
import android.widget.ExpandableListView;
import android.widget.SimpleExpandableListAdapter;
import android.widget.Toast;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ExpandableListView.OnGroupClickListener;

import com.forsir.android.mhfinance.helper.DbAdapter;
import com.forsir.android.mhfinance.helper.ManageExpandableItemActivity;
import com.forsir.android.mhfinance.storeObjects.Category;
import com.forsir.android.mhfinance.storeObjects.CategoryList;
import com.forsir.android.mhfinance.storeObjects.IStorable;
import com.forsir.android.mhfinance.storeObjects.Payment;
import com.forsir.android.mhfinance.storeObjects.Repeating;
import com.forsir.android.mhfinance.storeObjects.Subcategory;

public class SelectCategory extends ManageExpandableItemActivity {
  public final static String REQUEST_SELECTED_CATEGORY_ID = "selected_category_id";
  public final static String REQUEST_ALL_CATEGORIES = "all_categories";
  public final static String RETURN_SELECTED_CATEGORY_ID = "selected_category_id";
  public final static String RETURN_CATEGORY_POSITION = "category_position";
  public final static String RETURN_SUBCATEGORY_POSITION = "subcategory_position";

  protected ExpandableListView categoriesListView;
  protected boolean allCategories = false;

  public void onSuperCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
  }

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.select_category);
    // setTheme(android.R.style.Widget_ListView_Menu);

    categoriesListView = (ExpandableListView) findViewById(R.id.select_category);
    registerForContextMenu(categoriesListView);

    if (savedInstanceState != null) {
      allCategories = savedInstanceState.getBoolean(REQUEST_ALL_CATEGORIES, false);
    } else {
      final Bundle extras = getIntent().getExtras();
      if (extras != null) {
        allCategories = extras.getBoolean(REQUEST_ALL_CATEGORIES, false);
        lastMenuChildPos = CategoryList.getSubcategoryParentPosById(extras.getLong(SelectCategory.REQUEST_SELECTED_CATEGORY_ID, -1));
      }
    }

    fillCategoryData();
    if (!allCategories) {
      categoriesListView.setOnItemLongClickListener(itemLongClickListener);
    }
    categoriesListView.setOnChildClickListener(onChildClickListener);
    categoriesListView.setOnGroupClickListener(groupClickListener);
  }

  protected void fillCategoryData() {
    Category newCategory = new Category(getString(R.string.menu_category_new));
    Subcategory newSubcategory = new Subcategory(getString(R.string.menu_subcategory_new));
    boolean onlyIfEmpty = false;

    if (mAddNewType.contentEquals("ever")) {
      onlyIfEmpty = false;
    } else if (mAddNewType.contentEquals("empty")) {
      onlyIfEmpty = true;
    } else if (mAddNewType.contentEquals("never")) {
      newSubcategory = null;
      onlyIfEmpty = true;
    }

    if (allCategories) {
      newCategory = new Category(getString(R.string.all_categories));
      newSubcategory = null;
      onlyIfEmpty = false;
    }

    final SimpleExpandableListAdapter categories = new SimpleExpandableListAdapter(this, CategoryList.getMainGroup(newCategory, onlyIfEmpty),
            android.R.layout.simple_expandable_list_item_1, new String[] { "name" }, new int[] { android.R.id.text1 }, CategoryList.getChildGroup(newSubcategory,
                    onlyIfEmpty), android.R.layout.simple_expandable_list_item_2, new String[] { "name" }, new int[] { android.R.id.text1 });

    categoriesListView.setAdapter(categories);
    if (lastMenuChildPos >= 0) {
      categoriesListView.expandGroup(lastMenuChildPos);
    }
  }

  protected OnItemLongClickListener itemLongClickListener = new OnItemLongClickListener() {
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
      // Category category = mCategoryList.getCategoryAtAbsolute(position, true);
      return false;
    }
  };

  OnChildClickListener onChildClickListener = new OnChildClickListener() {
    public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
      final Subcategory subcategory = CategoryList.getSubcategory(groupPosition, childPosition);
      if (subcategory != null) {
        final Intent data = new Intent();

        data.putExtra(SelectCategory.RETURN_SELECTED_CATEGORY_ID, CategoryList.getSubcategory(groupPosition, childPosition).getId());
        data.putExtra(SelectCategory.RETURN_CATEGORY_POSITION, groupPosition);
        data.putExtra(SelectCategory.RETURN_SUBCATEGORY_POSITION, childPosition);

        SelectCategory.this.setResult(Activity.RESULT_OK, data);
        SelectCategory.this.finish();
      } else {
        final Category category = CategoryList.getCategory(groupPosition);
        parentItemId = category.getId();
        addNewSubCategory();
      }
      return false;
    }
  };

  protected final OnGroupClickListener groupClickListener = new OnGroupClickListener() {
    public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
      final Category category = CategoryList.getCategory(groupPosition);
      if (category == null) {
        if (allCategories) {
          final Intent data = new Intent();
          SelectCategory.this.setResult(Activity.RESULT_OK, data);
          SelectCategory.this.finish();
          return true;
        }

        addNewItem(new Category());
        return true;
      }
      return false;
    }
  };

  @Override
  public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    final ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) menuInfo;

    final int type = ExpandableListView.getPackedPositionType(info.packedPosition);
    if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
      final int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);
      final int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition);
      if (!CategoryList.isAddNew(groupPos, childPos)) {
        final MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_subcategory, menu);
      }
    } else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {
      final MenuInflater inflater = getMenuInflater();
      inflater.inflate(R.menu.menu_category, menu);
    }
  }

  @Override
  protected void processAddNewItem(String name) {
    final Category category = new Category();
    category.setName(name);
    if (mDbHelper.createEntry(category) > 0) {
      Toast.makeText(this, String.format(getString(R.string.category_was_created), category.getName()), Toast.LENGTH_LONG).show();
    }

    CategoryList.loadAll(mDbHelper);
    fillCategoryData();
    checkTexts();
  };

  @Override
  protected void processAddNewItem(String name, long parentId) {
    final Subcategory subcategory = new Subcategory();
    subcategory.setName(name);
    subcategory.setParentId(parentId);
    if (mDbHelper.createEntry(subcategory) > 0) {
      Toast.makeText(this, String.format(getString(R.string.subcategory_was_created), subcategory.getName()), Toast.LENGTH_LONG).show();
    }
    CategoryList.loadAll(mDbHelper);
    fillCategoryData();
    checkTexts();
  }

  @Override
  protected void processDeleteItem(IStorable item) {
    if (item.getClass() == Category.class) {
      final Category category = (Category) item;
      if (category != null) {
        if (mDbHelper.deleteEntry(category)) {
          Toast.makeText(this, String.format(getString(R.string.category_was_deleted), category.getName()), Toast.LENGTH_LONG).show();
        }
      }
    }

    if (item.getClass() == Subcategory.class) {
      final Subcategory subcategory = (Subcategory) item;
      if (subcategory != null) {
        // delete all subcategory payments
        mDbHelper.deleteEntries(new Payment(), DbAdapter.PAYMENT_CATEGORY + "=" + subcategory.getId());
        if (mDbHelper.deleteEntry(subcategory)) {
          Toast.makeText(this, String.format(getString(R.string.subcategory_was_deleted), subcategory.getName()), Toast.LENGTH_LONG).show();
        } else {
          Toast.makeText(this, getString(R.string.error_database_error), Toast.LENGTH_LONG).show();
        }
      }
    }

    Repeating.deleteUnused(mDbHelper);
    CategoryList.loadAll(mDbHelper);
    fillCategoryData();
    checkTexts();
  }

  @Override
  protected void processEditItem(IStorable item, String name) {
    if (item.getClass() == Category.class) {
      final Category category = (Category) item;
      category.setName(name);
      if (mDbHelper.updateEntry(category)) {
        Toast.makeText(this, String.format(getString(R.string.category_was_changed), category.getName()), Toast.LENGTH_LONG).show();
      } else {
        Toast.makeText(this, String.format(getString(R.string.error_database_error), category.getName()), Toast.LENGTH_LONG).show();
      }
    }
    if (item.getClass() == Subcategory.class) {
      final Subcategory subcategory = (Subcategory) item;
      if (subcategory != null) {
        subcategory.setName(name);
        if (mDbHelper.updateEntry(subcategory)) {
          Toast.makeText(this, String.format(getString(R.string.subcategory_was_changed), subcategory.getName()), Toast.LENGTH_LONG).show();
        } else {
          Toast.makeText(this, String.format(getString(R.string.error_database_error), subcategory.getName()), Toast.LENGTH_LONG).show();
        }
      }
    }

    CategoryList.loadAll(mDbHelper);
    fillCategoryData();
    // categoriesListView.expandGroup(groupPos)
  }

  @Override
  protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
  }

  public void checkTexts() {
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.