package ca.grocerygo.android.fragment; import android.app.Activity; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ProgressBar; import android.widget.TextView; import ca.grocerygo.android.R; import ca.grocerygo.android.database.*; import com.actionbarsherlock.app.SherlockListFragment; import java.util.ArrayList; public class ShopCartSummaryFragment extends SherlockListFragment { //implements LoaderManager.LoaderCallbacks<Cursor> private Context mContext; private GroceryotgDatabaseHelper database; private ShopCartSummaryArrayAdapter mAdapter; private ProgressBar mProgressView; private TextView mEmptyTextView; private View mHeaderView; @Override public void onAttach(Activity activity) { super.onAttach(activity); this.mContext = activity; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.shopcart_summary_fragment_list, container, false); mHeaderView = inflater.inflate(R.layout.shopcart_summary_list_header, container, false); mProgressView = (ProgressBar) v.findViewById(R.id.refresh_progress); mEmptyTextView = (TextView) v.findViewById(R.id.empty_shopcart_list); if (mProgressView != null) mProgressView.setVisibility(View.VISIBLE); if (mEmptyTextView != null) mEmptyTextView.setVisibility(View.INVISIBLE); return v; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (mHeaderView != null) { this.getListView().addHeaderView(mHeaderView); } // Construct a raw query because SimpleCursorAdapter doesn't support // aggregate statements like SUM() in the from column spec database = new GroceryotgDatabaseHelper(mContext); SQLiteDatabase db = database.getWritableDatabase(); String[] from = new String[]{StoreParentTable.TABLE_STORE_PARENT + "." + StoreParentTable.COLUMN_ID, StoreParentTable.TABLE_STORE_PARENT + "." + StoreParentTable.COLUMN_STORE_PARENT_ID, StoreParentTable.TABLE_STORE_PARENT + "." + StoreParentTable.COLUMN_STORE_PARENT_NAME, "SUM(" + GroceryTable.TABLE_GROCERY + "." + GroceryTable.COLUMN_GROCERY_PRICE + ") AS sumTotal", "COUNT(" + GroceryTable.TABLE_GROCERY + "." + GroceryTable.COLUMN_GROCERY_PRICE + ") AS countItems"}; String whereClause = CartTable.TABLE_CART + "." + CartTable.COLUMN_CART_GROCERY_ID + " IS NOT NULL"; String groupByClause = StoreParentTable.TABLE_STORE_PARENT + "." + StoreParentTable.COLUMN_STORE_PARENT_ID; StringBuilder sb = new StringBuilder(); String delim_comma = ","; for (String s : from) { sb.append(s).append(delim_comma); } sb.deleteCharAt(sb.length()-1); // delete last delimiter String sqlQuery = "SELECT " + sb.toString() + " FROM " + CartTable.TABLE_CART + " INNER JOIN " + GroceryTable.TABLE_GROCERY + " ON " + CartTable.TABLE_CART + "." + CartTable.COLUMN_CART_GROCERY_ID + " = " + GroceryTable.TABLE_GROCERY + "." + GroceryTable.COLUMN_GROCERY_ID + " INNER JOIN " + FlyerTable.TABLE_FLYER + " ON " + GroceryTable.TABLE_GROCERY + "." + GroceryTable.COLUMN_GROCERY_FLYER + "=" + FlyerTable.TABLE_FLYER + "." + FlyerTable.COLUMN_FLYER_ID + " INNER JOIN " + StoreParentTable.TABLE_STORE_PARENT + " ON " + FlyerTable.TABLE_FLYER + "." + FlyerTable.COLUMN_FLYER_STOREPARENT + "=" + StoreParentTable.TABLE_STORE_PARENT + "." + StoreParentTable.COLUMN_STORE_PARENT_ID + " WHERE " + whereClause + " GROUP BY " + groupByClause; String[] selection = new String[]{}; Cursor cur = db.rawQuery(sqlQuery, selection); ArrayList<ShopCartSummaryItem> values = new ArrayList<ShopCartSummaryItem>(); if (cur != null && cur.moveToFirst()) { boolean beforeEnd = true; while (cur != null && beforeEnd) { // Bind the results to the view elements ShopCartSummaryItem nextItem = new ShopCartSummaryItem(); for (int columnIndex = 0; columnIndex < cur.getColumnCount(); columnIndex++) { if (columnIndex == cur.getColumnIndex(StoreParentTable.COLUMN_ID)) { } else if (columnIndex == cur.getColumnIndex(StoreParentTable.COLUMN_STORE_PARENT_ID)) { nextItem.setStoreParentId(cur.getString(columnIndex)); } else if (columnIndex == cur.getColumnIndex(StoreParentTable.COLUMN_STORE_PARENT_NAME)) { nextItem.setStoreParentName(cur.getString(columnIndex)); } else if (columnIndex == cur.getColumnIndex("countItems")) { nextItem.setStoreTotalItems(cur.getString(columnIndex)); } else if (columnIndex == cur.getColumnIndex("sumTotal")) { // aggregation column nextItem.setStoreTotal(cur.getString(columnIndex)); } } values.add(nextItem); beforeEnd = cur.moveToNext(); } } mAdapter = new ShopCartSummaryArrayAdapter(mContext, R.layout.shopcart_summary_list_row, values); setListAdapter(mAdapter); if (mProgressView != null) mProgressView.setVisibility(View.INVISIBLE); if (values.size() <= 0) { this.getListView().removeHeaderView(mHeaderView); if (mEmptyTextView != null) mEmptyTextView.setVisibility(View.VISIBLE); } } @Override public void onResume() { super.onResume(); } @Override public void onPause() { super.onPause(); } @Override public void onDestroyView() { super.onDestroyView(); } @Override public void onDestroy() { super.onDestroy(); } }