Removed unused adapter

This commit is contained in:
Helena Rodriguez 2012-12-16 16:00:00 +01:00
parent c65dec8b91
commit 163cd2a5bf

View File

@ -1,296 +0,0 @@
/*
* This file is part of SWADroid.
*
* Copyright (C) 2012 Helena Rodriguez Gijon <hrgijon@gmail.com>
*
* SWADroid is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* SWADroid is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with SWADroid. If not, see <http://www.gnu.org/licenses/>.
*/
package es.ugr.swad.swadroid.modules.groups;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import android.content.Context;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CursorTreeAdapter;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.TextView;
import es.ugr.swad.swadroid.R;
/**
* Adapter to populate with cursors data an expandable list.
* The groups represent group types and their child represent every group of this group type.
* There are two kind of layout: one for the groups and one for the childs
* @author Helena Rodriguez Gijon <hrgijon@gmail.com>
*/
public class GroupsCursorTreeAdapter extends CursorTreeAdapter {
private LayoutInflater mInflater;
private int groupLayout = 0;
private int childLayout = 0;
//Cursor with the group types
private Cursor groupsCursor = null;
//Map group type and cursor with the groups data of this kind of group type
private HashMap<Long,Cursor> childCursors = null;
//Map group code and its checked state
private HashMap<Long,Integer> childChecked = new HashMap<Long,Integer>();
//Map group code to its kind of enrollment
private HashMap<Long, Integer> childMultiple = new HashMap<Long,Integer>();
/**
* Constructor
* @param context The context
* @param groupsCursor cursor over the database with data of group types.
* @param childCursors Map the group types id and the cursor that contains all the groups of this group type.
* @param groupLayout Layout for groups
* @param childLayou Layout for child's
*
* */
public GroupsCursorTreeAdapter(Context context,Cursor groupsCursor,HashMap<Long,Cursor> childCursors, int groupLayout, int childlayout) {
super(groupsCursor, context);
this.groupsCursor = groupsCursor;
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.groupLayout = groupLayout;
this.childLayout = childlayout;
this.childCursors = childCursors;
setCheckedStateToDB();
//store what kind of enrollment type is each group
getMultipleGroups();
}
private void getMultipleGroups(){
groupsCursor.moveToFirst();
for(int i = 0; i < groupsCursor.getCount(); ++i){
int multiple = groupsCursor.getInt(groupsCursor.getColumnIndex("multiple"));
Long groupTypeCode = groupsCursor.getLong(groupsCursor.getColumnIndex("id"));
Cursor child = childCursors.get(groupTypeCode);
child.moveToFirst();
for(int j = 0; j < child.getCount(); ++j){
Long groupCode = child.getLong(child.getColumnIndex("id"));
childMultiple.put(groupCode, Integer.valueOf(multiple));
child.moveToNext();
}
groupsCursor.moveToNext();
}
}
/**
* Until the user clicks on any groups, the selected items are the groups to which the user is actually enrolled, like the database shows.
* This method set the initial check state of every child
* */
private void setCheckedStateToDB(){
for(Map.Entry<Long, Cursor> entry : this.childCursors.entrySet()){
Cursor c = entry.getValue();
long l = entry.getKey().longValue();
c.moveToFirst();
for(int i = 0; i < c.getCount() ; ++i){
long code = c.getLong(c.getColumnIndex("id"));
int checked = c.getInt(c.getColumnIndex("member"));
childChecked.put(Long.valueOf(code),Integer.valueOf(checked));
c.moveToNext();
}
}
}
/**
* Set the initial selected items to groups to which the user is actually enrolled.
* */
public void resetChecked(){
setCheckedStateToDB();
}
@Override
protected void bindChildView(View view, Context context, Cursor cursor,
boolean isLastChild) {
ImageView imagePadlock = (ImageView) view.findViewById(R.id.padlockIcon);
CheckBox checkBoxGroup = (CheckBox) view.findViewById(R.id.checkBox);
RadioButton radioButtonGroup = (RadioButton) view.findViewById(R.id.radioButton);
TextView nStudentText = (TextView) view.findViewById(R.id.nStudentText);
TextView vacantsText = (TextView) view.findViewById(R.id.vacantsText);
//Data from Group
long groupCode = cursor.getLong(cursor.getColumnIndex("id"));
String groupName = cursor.getString(cursor.getColumnIndex("groupName"));
int maxStudents = cursor.getInt(cursor.getColumnIndex("maxStudents"));
int students = cursor.getInt(cursor.getColumnIndex("students"));
int open = cursor.getInt(cursor.getColumnIndex("open"));
int member = childChecked.get(Long.valueOf(groupCode)).intValue();
if(open != 0)
imagePadlock.setImageResource(R.drawable.padlock_green);
else
imagePadlock.setImageResource(R.drawable.padlock_red);
//Multiple or single inscription? it comes from the group type
int multiple = childMultiple.get(Long.valueOf(groupCode)).intValue();
//for multiple inscriptions the groups should be checkboxes to allow multiple choice
//otherwise the groups should be radio button to allow just a single choice
if(multiple == 0){ //single inscriptions:
checkBoxGroup.setVisibility(View.GONE);
radioButtonGroup.setVisibility(View.VISIBLE);
radioButtonGroup.setText(groupName);
if(member != 0)
radioButtonGroup.setChecked(true);
else
radioButtonGroup.setChecked(false);
}else{ //multiple inscriptions :
checkBoxGroup.setVisibility(View.VISIBLE);
radioButtonGroup.setVisibility(View.GONE);
checkBoxGroup.setText(groupName);
if(member != 0)
checkBoxGroup.setChecked(true);
else
checkBoxGroup.setChecked(false);
}
nStudentText.setText( context.getString(R.string.numStudent)+" : "+ String.valueOf(students));
if(maxStudents != -1) vacantsText.setText( context.getString(R.string.vacants)+" : "+String.valueOf(maxStudents - students));
else vacantsText.setText(context.getString(R.string.vacants)+ " : -");
}
@Override
protected void bindGroupView(View view, Context context, Cursor cursor,
boolean isExpanded) {
TextView textViewGroupTypeName = (TextView) view.findViewById(R.id.groupTypeText);
textViewGroupTypeName.setText(cursor.getString(cursor.getColumnIndex("groupTypeName")));
long unixTime = cursor.getLong(cursor.getColumnIndex("openTime"));
TextView openTimeText = (TextView)view.findViewById(R.id.openTimeText);
if(unixTime != 0){
openTimeText.setVisibility(View.VISIBLE);
Date d = new Date(unixTime * 1000);
java.text.DateFormat dateShortFormat = android.text.format.DateFormat.getDateFormat(context);
java.text.DateFormat timeFormat = android.text.format.DateFormat.getTimeFormat(context);
openTimeText.setText(context.getString(R.string.openingTime)+ " "+ dateShortFormat.format(d)+ " "+(timeFormat.format(d)));
}else{
openTimeText.setVisibility(View.GONE);
}
}
@Override
protected Cursor getChildrenCursor(Cursor groupCursor) {
Long groupTypeCode = groupCursor.getLong(groupCursor.getColumnIndex("id"));
Cursor childCursor = childCursors.get(groupTypeCode);
return childCursor;
}
@Override
protected View newChildView(Context context, Cursor cursor,
boolean isLastChild, ViewGroup parent) {
return mInflater.inflate(childLayout, parent, false);
}
@Override
protected View newGroupView(Context context, Cursor cursor,
boolean isExpanded, ViewGroup parent) {
return mInflater.inflate(groupLayout, parent,false);
}
/**
* The implementation of expandable list recycle the view. Therefore the selected items should be stored.
* This method stores that information and maintains mutual exclusion between the radio buttons.
* NOTE: It is necessary to call to notifyDataSetChanged to update the views.
* */
public boolean checkItem(int groupPosition, int childPosition){
boolean result = true;
if( groupPosition < groupsCursor.getCount()){
groupsCursor.moveToPosition(groupPosition);
long gTCode = groupsCursor.getLong(groupsCursor.getColumnIndex("id"));
boolean multiple;
if (groupsCursor.getInt(groupsCursor.getColumnIndex("multiple")) == 0)
multiple = false;
else
multiple = true;
Cursor childCursor = childCursors.get(Long.valueOf(gTCode));
if(childPosition < childCursor.getCount()){
//get current state of selected child
childCursor.moveToPosition(childPosition);
Long code = childCursor.getLong(childCursor.getColumnIndex("id"));
int current = childChecked.get(code);
if(!multiple){ //unique enrollment. Only an option is checked.
if (current == 0) { //it was unchecked, now it is checked. So that disable the others
childCursor.moveToFirst();
for(int i = 0; i < childCursor.getCount() ; ++i){
Long c = childCursor.getLong(childCursor.getColumnIndex("id"));
if(i != childPosition){
childChecked.put(c, 0);
//childChecked.put(childCursor.getLong(childCursor.getColumnIndex("id")), 0);
}else{
childChecked.put(c, 1);
//childChecked.put(childCursor.getLong(childCursor.getColumnIndex("id")), 1);
}
childCursor.moveToNext();
}
}else //it was checked, now it is unchecked
childChecked.put(code, 0);
}else{ //multiple enrollment. Just changes the state
childChecked.put(code , (current + 1)%2);
}
}
}
return result;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
public String getChosenGroupCodes(){
String groupCodes="";
for(Map.Entry<Long, Integer> entry : this.childChecked.entrySet()){
Integer checked = entry.getValue();
long code = entry.getKey().longValue();
if(checked.intValue() != 0)
if(groupCodes.compareTo("") != 0 )
groupCodes = groupCodes.concat(","+String.valueOf(code));
else
groupCodes = groupCodes.concat(String.valueOf(code));
}
return groupCodes;
}
}