package com.ihateflyingbugs.kidsm.menu;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.AnimationUtils;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.ViewFlipper;
import com.ihateflyingbugs.kidsm.NetworkActivity;
import com.ihateflyingbugs.kidsm.R;
import com.ihateflyingbugs.kidsm.login.LoginActivity;
import com.ihateflyingbugs.kidsm.login.RegisterAddressAdapter;
import com.ihateflyingbugs.kidsm.login.RegisterAddressItem;
import com.ihateflyingbugs.kidsm.login.RegisterChildAdapter;
import com.ihateflyingbugs.kidsm.login.RegisterChildItem;
import com.ihateflyingbugs.kidsm.login.RegisterClassAdapter;
import com.ihateflyingbugs.kidsm.login.RegisterClassItem;
import com.ihateflyingbugs.kidsm.login.RegisterInfoTakerActivity;
import com.ihateflyingbugs.kidsm.login.RegisterInviteTeacherAdapter;
import com.ihateflyingbugs.kidsm.login.RegisterInviteTeacherItem;
import com.ihateflyingbugs.kidsm.login.RegisterOrgAdapter;
import com.ihateflyingbugs.kidsm.login.RegisterOrgItem;
import com.localytics.android.LocalyticsSession;
public class AddChildInfoTakerActivity extends NetworkActivity {
ViewFlipper flipper;
Menu menu;
ArrayList<RegisterOrgItem> orgList_pool;
int currentPageNumber;
ArrayList<RegisterOrgItem> orgList;
RegisterOrgAdapter orgAdapter;
int indexOfOrg, indexOfClass, indexOfChild;
RegisterChildAdapter currentChildAdapter;
private LocalyticsSession localyticsSession;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register_infotaker);
getActionBar().setHomeButtonEnabled(true);
getActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.general_actionbar_bg));
getActionBar().setIcon(R.drawable.general_actionbar_back_btnset);
flipper = (ViewFlipper)findViewById(R.id.register_infotaker_flipper);
orgList_pool = new ArrayList<RegisterOrgItem>();
this.localyticsSession = new LocalyticsSession(this.getApplicationContext()); // Context used to access device resources
this.localyticsSession.open(); // open the session
this.localyticsSession.upload(); // upload any data
switch(SlidingMenuMaker.getProfile().member_type.charAt(0)) {
case 'P':
setTitle(getString(R.string.register_find_org));
flipper.addView(LayoutInflater.from(this).inflate(R.layout.register_infotaker_org, null));
flipper.addView(LayoutInflater.from(this).inflate(R.layout.register_infotaker_class, null));
flipper.addView(LayoutInflater.from(this).inflate(R.layout.register_infotaker_child, null));
this.request_Organization_getOrganizations(1, 1000);
break;
case 'M':
break;
}
setListResources();
currentPageNumber = 0;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case android.R.id.home:
if(currentPageNumber == 0)
finish();
else
goPrevPage();
return true;
case R.id.register_onebutton:
switch(SlidingMenuMaker.getProfile().member_type.charAt(0)) {
case 'P':
Intent result = new Intent();
result.putExtra("org", orgList.get(indexOfOrg).getName());
result.putExtra("class", orgList.get(indexOfOrg).classList.get(indexOfClass).getName());
result.putExtra("childname", orgList.get(indexOfOrg).classList.get(indexOfClass).getChildList().get(indexOfChild).getName());
result.putExtra("birthday", orgList.get(indexOfOrg).classList.get(indexOfClass).getChildList().get(indexOfChild).getBirthday());
result.putExtra("org_srl", orgList.get(indexOfOrg).getOrg_srl());
result.putExtra("student_srl", orgList.get(indexOfOrg).classList.get(indexOfClass).getChildList().get(indexOfChild).getStudent_srl());
result.putExtra("member_srl", orgList.get(indexOfOrg).classList.get(indexOfClass).getChildList().get(indexOfChild).getMember_srl());
result.putExtra("class_srl", orgList.get(indexOfOrg).classList.get(indexOfClass).getChildList().get(indexOfChild).getClass_srl());
result.putExtra("teacher_srl", orgList.get(indexOfOrg).classList.get(indexOfClass).getChildList().get(indexOfChild).getTeacher_srl());
result.putExtra("shuttle_srl", orgList.get(indexOfOrg).classList.get(indexOfClass).getChildList().get(indexOfChild).getShuttle_srl());
setResult(Activity.RESULT_OK, result);
finish();
break;
}
return true;
}
return false;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.register_onebutton, menu);
this.menu = menu;
MenuItem item = menu.findItem(R.id.register_onebutton);
switch(SlidingMenuMaker.getProfile().member_type.charAt(0)) {
case 'P':
item.setTitle(R.string.finish);
item.setVisible(false);
break;
}
return true;
}
private void setListResources() {
ListView listView;
EditText editText;
switch(SlidingMenuMaker.getProfile().member_type.charAt(0)) {
case 'P':
editText = (EditText)flipper.findViewById(R.id.register_infotaker_org_search);
editText.addTextChangedListener(textWatcher);
listView = (ListView) flipper.findViewById(R.id.register_infotaker_org_list);
orgList = new ArrayList<RegisterOrgItem>();
refreshListData();
orgAdapter = new RegisterOrgAdapter(this, orgList);
listView.setAdapter(orgAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
indexOfOrg = position;
ListView classListView = (ListView) flipper.findViewById(R.id.register_infotaker_class_list);
final ArrayList<RegisterClassItem> selectedClassList = orgList.get(position).classList;
RegisterClassAdapter classAdapter = new RegisterClassAdapter(AddChildInfoTakerActivity.this, selectedClassList);
classListView.setAdapter(classAdapter);
classListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
indexOfClass = position;
ListView childListView = (ListView) flipper.findViewById(R.id.register_infotaker_child_list);
final ArrayList<RegisterChildItem> selectedChildList = selectedClassList.get(position).getChildList();
final RegisterChildAdapter childAdapter = new RegisterChildAdapter(AddChildInfoTakerActivity.this, selectedChildList);
currentChildAdapter = childAdapter;
childListView.setAdapter(childAdapter);
childListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
indexOfChild = Integer.parseInt(view.getTag().toString());
MenuItem item = menu.findItem(R.id.register_onebutton);
//CheckBox cb = (CheckBox)view.findViewById(R.id.register_info_namechecker_checker);
int index = Integer.parseInt(view.getTag().toString());
if( selectedChildList.get(index).isChecked() ) {
selectedChildList.get(index).setChecked(false);
item.setVisible(false);
}
else {
int count = selectedChildList.size();
for(int i = 0; i < selectedChildList.size(); i++) {
//if( selectedChildList.get(i).layout != null ) {
selectedChildList.get(i).setChecked(false);
//}
}
if( selectedChildList.get(position).getParent_srl().equals("0")) {
selectedChildList.get(index).setChecked(true);
item.setVisible(true);
}
else {
item.setVisible(false);
}
}
childAdapter.notifyDataSetChanged();
}
});
goNextPage();
}
});
goNextPage();
}
});
break;
}
}
TextWatcher textWatcher = new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
EditText edit;
switch(SlidingMenuMaker.getProfile().member_type.charAt(0)) {
case 'P':
edit = (EditText)flipper.findViewById(R.id.register_infotaker_org_search);
if(edit.isFocused()) {
for(int i = 0; i < orgList_pool.size(); i++) {
if(orgList_pool.get(i).getName().contains(edit.getText()))
orgList_pool.get(i).setVisible(true);
else
orgList_pool.get(i).setVisible(false);
}
refreshListData();
orgAdapter.notifyDataSetChanged();
}
break;
}
}
};
private void refreshListData() {
switch(SlidingMenuMaker.getProfile().member_type.charAt(0)) {
case 'P':
orgList.clear();
for(RegisterOrgItem item : orgList_pool) {
if(item.isVisible()) {
orgList.add(new RegisterOrgItem(""+item.getOrg_srl(), item.getName(), item.getOrg_address(), item.getOrg_teacher_key(), item.classList));
}
}
break;
}
}
public void OnNameCheckerClick(View v) {
CheckBox cb = (CheckBox)v;
int position = Integer.parseInt(v.getTag().toString());
switch(SlidingMenuMaker.getProfile().member_type.charAt(0)) {
case 'P':
ArrayList<RegisterChildItem> childList = orgList.get(indexOfOrg).classList.get(indexOfClass).getChildList();
MenuItem item = menu.findItem(R.id.register_onebutton);
if( cb.isChecked() ) {
for(int i = 0; i < childList.size(); i++) {
childList.get(i).setChecked(false);
}
if( childList.get(position).getParent_srl().equals("0")) {
childList.get(position).setChecked(true);
item.setVisible(true);
indexOfChild = position;
}
else {
item.setVisible(false);
}
}
else {
item.setVisible(false);
childList.get(position).setChecked(false);
}
currentChildAdapter.notifyDataSetChanged();
break;
}
}
private void goPrevPage() {
flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.viewin_right));
flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.viewout_right));
flipper.showPrevious();
currentPageNumber--;
}
private void goNextPage() {
flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.viewin_left));
flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.viewout_left));
flipper.showNext();
currentPageNumber++;
}
public void onResume() {
super.onResume();
this.localyticsSession.open();
}
public void onPause() {
this.localyticsSession.close();
this.localyticsSession.upload();
super.onPause();
}
@Override
public void response(String uri, String response) {
try {
if( response.isEmpty() )
return;
JSONObject jsonObj = new JSONObject(response);
String result = jsonObj.getString("result");
if( result.equals("OK") ) {
if(uri.equals("Organization/getOrganizations")) {
String nativeData = jsonObj.getString("data");
JSONArray dataArray = new JSONArray(nativeData);
for(int i = 0; i < dataArray.length(); i++) {
String org_srl = dataArray.getJSONObject(i).getString("org_srl");
String org_name = dataArray.getJSONObject(i).getString("org_name");
String org_phone = dataArray.getJSONObject(i).getString("org_phone");
String org_address = dataArray.getJSONObject(i).getString("org_address");
String org_teacher_key = dataArray.getJSONObject(i).getString("org_teacher_key");
String org_created = dataArray.getJSONObject(i).getString("org_created");
String org_updated = dataArray.getJSONObject(i).getString("org_updated");
orgList_pool.add(new RegisterOrgItem(org_srl, org_name, org_address, org_teacher_key));
request_Class_getClasses(org_srl, 1, 100);
}
}
else if(uri.equals("Class/getClasses")) {
String nativeData = jsonObj.getString("data");
JSONArray dataArray = new JSONArray(nativeData);
for(int i = 0; i < dataArray.length(); i++) {
String class_srl = dataArray.getJSONObject(i).getString("class_srl");
String class_org_srl = dataArray.getJSONObject(i).getString("class_org_srl");
String class_name = dataArray.getJSONObject(i).getString("class_name");
for(int j = 0; j < orgList_pool.size(); j++) {
if( orgList_pool.get(j).getOrg_srl().equals(class_org_srl) ) {
orgList_pool.get(j).addClass(new RegisterClassItem(class_srl, class_name));
break;
}
}
request_Class_getClassStudent(class_org_srl, class_srl);
}
}
else if(uri.equals("Class/getClassStudent")) {
String nativeData = jsonObj.getString("data");
JSONArray dataArray = new JSONArray(nativeData);
String class_srl = "";
int numOfStudentHavingParent = 0;
for(int i = 0; i < dataArray.length(); i++) {
String member_srl = dataArray.getJSONObject(i).getString("member_srl");
String member_name = dataArray.getJSONObject(i).getString("member_name");
String member_type = dataArray.getJSONObject(i).getString("member_type");
String member_org_srl = dataArray.getJSONObject(i).getString("member_org_srl");
String member_picture = dataArray.getJSONObject(i).getString("member_picture");
JSONObject studentObj = dataArray.getJSONObject(i).getJSONObject("student");
String student_srl = studentObj.getString("student_srl");
String student_member_srl = studentObj.getString("student_member_srl");
String student_class_srl = studentObj.getString("student_class_srl");
String student_parent_srl = studentObj.getString("student_parent_srl");
String student_teacher_srl = studentObj.getString("student_teacher_srl");
String student_shuttle_srl = studentObj.getString("student_shuttle_srl");
String student_birthday = studentObj.getString("student_birthday");
String student_parent_key = studentObj.getString("student_parent_key");
class_srl = student_class_srl;
if(student_parent_srl.equals("0") == false)
numOfStudentHavingParent++;
for(int j = 0; j < orgList_pool.size(); j++) {
if( orgList_pool.get(j).getOrg_srl().equals(member_org_srl) ) {
for(int k = 0; k < orgList_pool.get(j).classList.size(); k++) {
if( orgList_pool.get(j).classList.get(k).getClass_srl().equals(student_class_srl)) {
orgList_pool.get(j).classList.get(k).addChild(new RegisterChildItem(member_srl, student_srl, member_name, member_org_srl,
student_class_srl, student_parent_srl, student_teacher_srl, student_shuttle_srl, student_birthday));
break;
}
}
break;
}
}
new Thread(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable(){
@Override
public void run() {
refreshListData();
orgAdapter.notifyDataSetChanged();
}
});
}
}).start();
}
}
}
else {
}
}
catch(JSONException e) {
StringWriter errors = new StringWriter();
e.printStackTrace(new PrintWriter(errors));
String s = errors.toString();
System.out.println(s);
}
}
}