package jm.org.data.area; import static jm.org.data.area.AreaConstants.S_INDICATORS; import static jm.org.data.area.DBConstants.*; import static jm.org.data.area.DBConstants.INDICATOR_NAME; import static jm.org.data.area.DBConstants.SELECTION_ID; import static jm.org.data.area.DBConstants.SELECTION_NAME; import static jm.org.data.area.DBConstants.WB_CATEGORY_ID; import static jm.org.data.area.DBConstants.WB_INDICATOR_ID; import com.google.analytics.tracking.android.EasyTracker; import com.google.analytics.tracking.android.MapBuilder; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.graphics.Color; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ExpandableListView; import android.widget.ImageView; import android.widget.SimpleCursorTreeAdapter; import android.widget.TextView; public class AreaExpandableListAdapter extends SimpleCursorTreeAdapter { private static final String TAG = AreaExpandableListAdapter.class .getSimpleName(); private Context mContext; private Cursor mCursor, group, child; private final String GROUP_POSITION = "group_position"; private final String CHILD_POSITION = "child_position"; IndicatorActivity act; HomeActivity hAct; protected AreaApplication area; private int mSelectedPosition = 0, lastmSelectedPosition = 0, mSelectedChildPosition; private ExpandableListView parentView; private SimpleCursorTreeAdapter thisAdapter; public AreaExpandableListAdapter(Context context, int GroupLayout, int childLayout, String[] groupFrom, int[] groupTo, String[] childFrom, int[] childTo, ExpandableListView parent) { super(context, null, GroupLayout, groupFrom, groupTo, childLayout, childFrom, childTo); parentView =(ExpandableListView) parent; mContext = context; group = runQueryOnBackgroundThread("group"); this.setGroupCursor(group); // TODO Auto-generated constructor stub } @Override protected Cursor getChildrenCursor(Cursor groupCursor) { child = runQueryOnBackgroundThread(groupCursor.getString(groupCursor.getColumnIndex(WB_CATEGORY_ID))); return child; } @Override public Cursor runQueryOnBackgroundThread(CharSequence constraint) { area = (AreaApplication) mContext.getApplicationContext(); if(constraint.toString().equals("group")){ mCursor = area.areaData.getCategoryList(); Log.d(TAG, String.format("Cursor size returned: %d", mCursor.getCount())); }else{ Log.d(TAG, "getting indicators:"); mCursor = area.areaData.getIndicatorList(constraint.toString()); Log.d(TAG, String.format("Cursor size returned: %d", mCursor.getCount())); } return mCursor; } public void setSelectedPosition(int position) { if (mSelectedPosition != position) { // View view = (View) l.getItemAtPosition(position); lastmSelectedPosition = mSelectedPosition + 1 -1; mSelectedPosition = position; Log.d(TAG, String.format("previous position: %d, Selected Position %d", lastmSelectedPosition, mSelectedPosition)); } } public void setSelectedPosition(int group, int child) { //if (mSelectedPosition != group) { // View view = (View) l.getItemAtPosition(position); Log.e(TAG, String.format("Current position: %d. New position: %d. Child position: %d", mSelectedPosition, group, child)); //notifyDataSetChanged(); //this.setSelectedPosition(group, child); mSelectedPosition = group; mSelectedChildPosition = child; //} } @Override protected void bindGroupView(View view, Context context, Cursor groupCursor, boolean isExpanded){ group = groupCursor; TextView list_item = (TextView) view.findViewById(R.id.textView1); list_item.setText( groupCursor.getString(groupCursor.getColumnIndex(CATEGORY_NAME))); int position = groupCursor.getPosition(); if (mSelectedPosition == position) { view.setBackgroundColor(Color.parseColor("#015F69")); Log.d(TAG, String.format("Current position: %d, Selected Parent Position %d", position, mSelectedPosition)); } else { view.setBackgroundColor(Color.parseColor("#167A72")); } } @Override protected void bindChildView (View view, Context context, Cursor childCursor, boolean isLastChild){ child = childCursor; TextView list_item = (TextView) view.findViewById(R.id.textView1); list_item.setText( childCursor.getString(childCursor.getColumnIndex(INDICATOR_NAME))); int position = childCursor.getPosition(); if (mSelectedChildPosition == position) { view.setBackgroundColor(Color.parseColor("#015F69")); Log.d(TAG, String.format("current position: %d, Selected Child Position %d", position, mSelectedChildPosition)); } else { view.setBackgroundColor(Color.parseColor("#017885")); } view.setOnClickListener(new OnClickListener(){ @Override public void onClick(View view) { // TODO Auto-generated method stub thisAdapter = (SimpleCursorTreeAdapter) parentView.getExpandableListAdapter(); // Get Cursor at list item row child = thisAdapter.getChild(mSelectedPosition, parentView.getPositionForView(view)-(mSelectedPosition+1)); group = thisAdapter.getGroup(mSelectedPosition); Log.d(TAG, "Child Position is : " + (parentView.getPositionForView(view)- (mSelectedPosition + 1)) + "\nParent Position is : " + mSelectedPosition + "\nView Position is : " + parentView.getPositionForView(view)); String item = child.getString(child.getColumnIndex(INDICATOR_NAME)); String item_id = child.getString(child .getColumnIndex(WB_INDICATOR_ID)); int id = child.getInt(child.getColumnIndex(INDICATOR_ID)); Log.d(TAG, "Indicator selected is: " + item + "-> ID: " + item_id); // May return null if a EasyTracker has not yet been initialized with a // property ID. EasyTracker easyTracker = EasyTracker.getInstance(mContext); // MapBuilder.createEvent().build() returns a Map of event fields and values // that are set and sent with the hit. easyTracker.send(MapBuilder .createEvent("ui_action", // Event category (required) "Indicator_Expandable_List_Selction", // Event action (required) "Indicator selected is: " + item + " Unique ID is: " + item_id + "From Group" + group.getString(group.getColumnIndex(CATEGORY_NAME)), // Event label null) // Event value .build() ); try { // Check if the parent activity is the IndicatorActivity act = (IndicatorActivity) mContext; Intent intent = new Intent(mContext.getApplicationContext(), IndicatorActivity.class); intent.putExtra(WB_INDICATOR_ID, item_id); intent.putExtra("ind_id", id); intent.putExtra(GROUP_POSITION, mSelectedPosition); intent.putExtra(CHILD_POSITION, child.getPosition()); intent.putExtra(SELECTION_ID, S_INDICATORS); intent.putExtra(SELECTION_NAME, "Indicators"); mContext.startActivity(intent); act.finish(); } catch (ClassCastException actException) { Intent intent = new Intent( mContext.getApplicationContext(), IndicatorActivity.class); intent.putExtra(WB_INDICATOR_ID, item_id); intent.putExtra("ind_id", id); intent.putExtra(GROUP_POSITION, mSelectedPosition); intent.putExtra(CHILD_POSITION, child.getPosition()); intent.putExtra(SELECTION_ID, S_INDICATORS); intent.putExtra(SELECTION_NAME, "Indicators"); mContext.startActivity(intent); } if (act != null) { act.setIndicator(item); act.setPosition(mSelectedPosition, child.getPosition()); act.setSelection(S_INDICATORS); act.setSelection("Indicators"); } } }); } @Override public void onGroupExpanded(int groupPosition) { setSelectedPosition(groupPosition); if(lastmSelectedPosition == groupPosition){ }else{ parentView.collapseGroup(lastmSelectedPosition); } super.onGroupExpanded(groupPosition); } }