package com.ihateflyingbugs.kidsm.login;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
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.MotionEvent;
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.uploadphoto.UploadPhotoActivity;
import com.localytics.android.LocalyticsSession;
public class RegisterInfoTakerActivity extends NetworkActivity {
ViewFlipper flipper;
Menu menu;
int type;
int currentPageNumber;
ArrayList<RegisterInviteTeacherItem> inviteTeacherList;
ArrayList<RegisterInviteTeacherItem> inviteTeacherList_pool;
RegisterInviteTeacherAdapter inviteTeacherAdapter;
ArrayList<RegisterAddressItem> addressList;
RegisterAddressAdapter addressAdapter;
ArrayList<RegisterOrgItem> orgList;
RegisterOrgAdapter orgAdapter;
int indexOfOrg, indexOfClass, indexOfChild;
int classDataLoadRequestCounter, classDataLoadResponseCounter;
RegisterChildAdapter currentChildAdapter;
private LocalyticsSession localyticsSession;
@Override
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);
type = getIntent().getIntExtra("type", -1);
switch(type) {
case 0:
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));
break;
case 1:
setTitle(getString(R.string.register_find_orglocation));
flipper.addView(LayoutInflater.from(this).inflate(R.layout.register_infotaker_orglocation, null));
break;
case 2:
setTitle(getString(R.string.register_invite_teacher));
flipper.addView(LayoutInflater.from(this).inflate(R.layout.register_infotaker_invite_teacher, null));
((TextView)flipper.findViewById(R.id.register_infotaker_invite_guide)).setText(R.string.register_infotaker_invite_guide_manager);
break;
case 3:
setTitle(getString(R.string.register_invite_parent));
flipper.addView(LayoutInflater.from(this).inflate(R.layout.register_infotaker_invite_teacher, null));
break;
}
setListResources();
currentPageNumber = 0;
this.localyticsSession = new LocalyticsSession(this.getApplicationContext()); // Context used to access device resources
this.localyticsSession.open(); // open the session
this.localyticsSession.upload(); // upload any data
}
public void onResume() {
super.onResume();
this.localyticsSession.open();
}
public void onPause() {
this.localyticsSession.close();
this.localyticsSession.upload();
super.onPause();
}
private void setListResources() {
ListView listView;
EditText editText;
switch(type) {
case 0:
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(RegisterInfoTakerActivity.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(RegisterInfoTakerActivity.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;
case 1:
editText = (EditText)flipper.findViewById(R.id.register_infotaker_orglocation_search);
editText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_ENTER) {
flipper.findViewById(R.id.register_infotaker_orglocation_loading).setVisibility(View.VISIBLE);
flipper.findViewById(R.id.register_infotaker_orglocation_not_found).setVisibility(View.INVISIBLE);
GET_POSTAL_CODE(((EditText)v).getText().toString());
}
return false;
}
});
listView = (ListView) flipper.findViewById(R.id.register_infotaker_orglocation_list);
addressList = new ArrayList<RegisterAddressItem>();
addressAdapter = new RegisterAddressAdapter(this, addressList);
listView.setAdapter(addressAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent result = new Intent();
result.putExtra("address", ((TextView)view.findViewById(R.id.register_info_text)).getText().toString());
setResult(Activity.RESULT_OK, result);
finish();
}
});
break;
case 2:
case 3:
editText = (EditText)flipper.findViewById(R.id.register_infotaker_invite_teacher_search);
editText.addTextChangedListener(textWatcher);
listView = (ListView) flipper.findViewById(R.id.register_infotaker_invite_teacher_list);
inviteTeacherList = new ArrayList<RegisterInviteTeacherItem>();
inviteTeacherList_pool = new ArrayList<RegisterInviteTeacherItem>();
setInviteTeacherList();
refreshListData();
inviteTeacherAdapter = new RegisterInviteTeacherAdapter(this, inviteTeacherList);
listView.setAdapter(inviteTeacherAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CheckBox cb = (CheckBox)view.findViewById(R.id.register_info_namechecker_checker);
cb.setChecked(!cb.isChecked());
int tag = Integer.parseInt(cb.getTag().toString());
inviteTeacherList_pool.get(tag).isChecked = cb.isChecked();
}
});
break;
}
}
private void refreshListData() {
switch(type) {
case 0:
orgList.clear();
for(RegisterOrgItem item : LoginActivity.orgList_pool) {
if(item.isVisible()) {
orgList.add(new RegisterOrgItem(""+item.getOrg_srl(), item.getName(), item.getOrg_address(), item.getOrg_teacher_key(), item.classList));
}
}
break;
case 1:
break;
case 2:
case 3:
inviteTeacherList.clear();
for(RegisterInviteTeacherItem item : inviteTeacherList_pool) {
if(item.isVisible)
inviteTeacherList.add(new RegisterInviteTeacherItem(item.tag, item.type, item.getName(), item.isChecked, item.number));
}
break;
}
}
public void OnNameCheckerClick(View v) {
CheckBox cb = (CheckBox)v;
int position = Integer.parseInt(v.getTag().toString());
switch(type) {
case 0:
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++) {
//if( childList.get(i).layout == null )
// continue;
//cb = (CheckBox) childList.get(i).layout.findViewById(R.id.register_info_namechecker_checker);
//cb.setChecked(false);
childList.get(i).setChecked(false);
}
//cb = (CheckBox)v;
//cb.setChecked(true);
if( childList.get(position).getParent_srl().equals("0")) {
childList.get(position).setChecked(true);
item.setVisible(true);
indexOfChild = position;
}
else {
item.setVisible(false);
}
// for(int i = 0; i < childList.size(); i++) {
// if( childList.get(i).layout == null )
// continue;
// cb = (CheckBox) childList.get(i).layout.findViewById(R.id.register_info_namechecker_checker);
// if( cb.isChecked() ) {
// indexOfChild = i;
// }
// }
}
else {
item.setVisible(false);
childList.get(position).setChecked(false);
}
currentChildAdapter.notifyDataSetChanged();
break;
case 2:
case 3:
cb = (CheckBox)v;
int tag = Integer.parseInt(cb.getTag().toString());
inviteTeacherList_pool.get(tag).isChecked = cb.isChecked();
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(type) {
case 0:
edit = (EditText)flipper.findViewById(R.id.register_infotaker_org_search);
if(edit.isFocused()) {
for(int i = 0; i < LoginActivity.orgList_pool.size(); i++) {
if(LoginActivity.orgList_pool.get(i).getName().contains(edit.getText()))
LoginActivity.orgList_pool.get(i).setVisible(true);
else
LoginActivity.orgList_pool.get(i).setVisible(false);
}
refreshListData();
orgAdapter.notifyDataSetChanged();
}
break;
case 1:
break;
case 2:
case 3:
edit = (EditText)flipper.findViewById(R.id.register_infotaker_invite_teacher_search);
if(edit.isFocused()) {
for(int i = 0; i < inviteTeacherList_pool.size(); i++) {
if(inviteTeacherList_pool.get(i).type == 0)
continue;
if(inviteTeacherList_pool.get(i).getName().contains(edit.getText()))
inviteTeacherList_pool.get(i).isVisible = true;
else
inviteTeacherList_pool.get(i).isVisible = false;
}
int nametagIndex = 0;
int numOfName = 0;
for(int i = 0; i < inviteTeacherList_pool.size(); i++) {
if(inviteTeacherList_pool.get(i).type == 0) {
if(i != 0 && numOfName == 0)
inviteTeacherList_pool.get(nametagIndex).isVisible = false;
else
inviteTeacherList_pool.get(nametagIndex).isVisible = true;
nametagIndex = i;
numOfName = 0;
}
else {
if(inviteTeacherList_pool.get(i).isVisible)
numOfName++;
}
}
if(numOfName == 0)
inviteTeacherList_pool.get(nametagIndex).isVisible = false;
else
inviteTeacherList_pool.get(nametagIndex).isVisible = true;
refreshListData();
inviteTeacherAdapter.notifyDataSetChanged();
}
break;
}
}
};
@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(type) {
case 0:
Intent result = new Intent();
result.putExtra("formNumber", getIntent().getIntExtra("formNumber", -1));
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());
for(int i = 0; i < LoginActivity.orgList_pool.size(); i++) {
if( orgList.get(indexOfOrg).getOrg_srl().equals(LoginActivity.orgList_pool.get(i).getOrg_srl())) {
result.putExtra("index_org", i);
break;
}
}
result.putExtra("index_class", indexOfClass);
result.putExtra("index_child", indexOfChild);
setResult(Activity.RESULT_OK, result);
finish();
break;
case 2:
case 3:
new AlertDialog.Builder(this)
.setMessage("초대하실 명단을 모두 선택하셨나요?")
.setPositiveButton("예", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent result = new Intent();
EditText editText = (EditText)flipper.findViewById(R.id.register_infotaker_invite_teacher_search);
if(editText.isFocused()) {
InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}
ArrayList<String> phoneList = new ArrayList<String>();
for(int i = 0; i < inviteTeacherList_pool.size(); i++) {
if( inviteTeacherList_pool.get(i).isChecked )
phoneList.add(inviteTeacherList_pool.get(i).number);
}
result.putExtra("phoneList", phoneList);
setResult(Activity.RESULT_OK, result);
finish();
}
})
.setNegativeButton("아니오", null)
.show();
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(type) {
case 0:
item.setTitle(R.string.finish);
item.setVisible(false);
break;
case 1:
item.setVisible(false);
break;
case 2:
case 3:
item.setTitle(R.string.invite);
break;
}
return true;
}
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 response(String uri, String response) {
// override it plz.
if(uri.equals("POSTAL_CODE")) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(response)));
doc.getDocumentElement().normalize();
final NodeList nodeList = doc.getElementsByTagName("item");
addressList.clear();
for(int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if(node.getNodeType() == Node.ELEMENT_NODE) {
Element headLineElement = (Element)node;
NodeList addressElement = headLineElement.getElementsByTagName("address");
Element subItem = (Element) addressElement.item(0);
NodeList subElement1 = subItem.getChildNodes();
NodeList codeElement = headLineElement.getElementsByTagName("postcd");
subItem = (Element) codeElement.item(0);
NodeList subElement2 = subItem.getChildNodes();
String address = subElement1.item(0).getNodeValue();
String postcd = subElement2.item(0).getNodeValue();
postcd = "["+postcd.substring(0, 3)+"-"+postcd.substring(3)+"]";
addressList.add(new RegisterAddressItem(address));
}
}
new Thread(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable(){
@Override
public void run() {
if(nodeList.getLength() == 0)
flipper.findViewById(R.id.register_infotaker_orglocation_not_found).setVisibility(View.VISIBLE);
flipper.findViewById(R.id.register_infotaker_orglocation_loading).setVisibility(View.INVISIBLE);
addressAdapter.notifyDataSetChanged();
}
});
}
}).start();
} catch (Exception e) {
e.printStackTrace();
}
}
else {
try {
if( response.isEmpty() )
return;
JSONObject jsonObj = new JSONObject(response);
String result = jsonObj.getString("result");
if( result.equals("OK") ) {
}
}
catch(JSONException e) {
StringWriter errors = new StringWriter();
e.printStackTrace(new PrintWriter(errors));
String s = errors.toString();
System.out.println(s);
}
}
}
private void setInviteTeacherList() {
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String[] projection = new String[] {
ContactsContract.CommonDataKinds.Phone.CONTACT_ID, // 占쏙옙占쏙옙처 ID -> 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占승듸옙 占쏙옙占�
ContactsContract.CommonDataKinds.Phone.NUMBER, // 占쏙옙占쏙옙처
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME }; // 占쏙옙占쏙옙처 占싱몌옙.
String[] selectionArgs = null;
String sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC";
Cursor contactCursor = getContentResolver().query(uri, projection, null,
selectionArgs, sortOrder);
char currentNameTag = ' ';
if (contactCursor.moveToFirst()) {
do {
// String phonenumber = contactCursor.getString(1).replaceAll("-",
// "");
// if (phonenumber.length() == 10) {
// phonenumber = phonenumber.substring(0, 3) + "-"
// + phonenumber.substring(3, 6) + "-"
// + phonenumber.substring(6);
// } else if (phonenumber.length() > 8) {
// phonenumber = phonenumber.substring(0, 3) + "-"
// + phonenumber.substring(3, 7) + "-"
// + phonenumber.substring(7);
// }
// acontact = new Contact();
//acontact.setPhotoid(contactCursor.getLong(0));
//acontact.setPhonenum(phonenumber);
//acontact.setName(contactCursor.getString(2));
//inviteTeacherList_pool.add(new RegisterInviteTeacherItem(0, "占쏙옙"));
if( currentNameTag != checkNameTag(contactCursor.getString(2)) ) {
currentNameTag = checkNameTag(contactCursor.getString(2));
inviteTeacherList_pool.add(new RegisterInviteTeacherItem(inviteTeacherList_pool.size(), 0, ""+currentNameTag, false, contactCursor.getString(1)));
}
inviteTeacherList_pool.add(new RegisterInviteTeacherItem(inviteTeacherList_pool.size(), 1, contactCursor.getString(2), false, contactCursor.getString(1)));
} while (contactCursor.moveToNext());
}
}
private char checkNameTag(String name) {
// typo占쏙옙트占쏙옙占쏙옙 占쏙옙占쌘쇽옙 占쏙옙큼 list占쏙옙 占쏙옙틉鍛求占�
//for (int i = 0; i < name.length(); i++) {
// String source = "" + name.charAt(0);
// char result;
// if( source.matches("[0-9|a-z|A-Z|占쏙옙-占쏙옙|占쏙옙-占쏙옙|占쏙옙-占쏙옙]*"))
char source = name.charAt(0);
char result = source;
char comVal = (char) (source-0xAC00);
if (comVal >= 0 && comVal <= 11172){
char uniVal = (char)comVal;
char cho = (char) ((((uniVal - (uniVal % 28)) / 28) / 21) + 0x1100);
if(cho!=4519)
result = cho;
}
else {
if((source >= 'a' && source <= 'z') || (source >= 'A' && source <= 'Z')) {
result = source;
if(source >= 'a' && source <= 'z')
result += 'A'-'a';
}
else {
String s = ""+source;
if(Character.isDigit(source) || Character.isSpace(source) || !s.matches("[0-9|a-z|A-Z|ㄱ-ㅎ|ㅏ-ㅣ|가-힝]*") )
result = '#';
else
result = source;
}
}
return result;
}
//}
}