Removed unused adapter
This commit is contained in:
parent
c65dec8b91
commit
163cd2a5bf
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user