package com.ihateflyingbugs.kidsm.gallery; 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.graphics.Color; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.animation.AnimationUtils; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.ViewFlipper; import com.ihateflyingbugs.kidsm.ExpandableHeightGridView; import com.ihateflyingbugs.kidsm.NetworkActivity; import com.ihateflyingbugs.kidsm.R; import com.ihateflyingbugs.kidsm.WrappingSlidingDrawer; import com.ihateflyingbugs.kidsm.gallery.Album.ALBUMTYPE; import com.ihateflyingbugs.kidsm.menu.SlidingMenuMaker; import com.ihateflyingbugs.kidsm.showimage.ShowImageActivity; import com.ihateflyingbugs.kidsm.uploadphoto.UploadPhotoActivity; import com.localytics.android.LocalyticsSession; public class AlbumActivity extends NetworkActivity { ExpandableHeightGridView gridView; AlbumAdapter adapter; int albumMode; String prevTitle; int selectedPhotoCounter; WrappingSlidingDrawer drawer; Menu menu; ExpandableHeightGridView albumGridView; GalleryAdapter albumAdapter; Album selectedAlbum; ArrayList<Album> albumList; ArrayList<Album> newAlbumList; ViewFlipper viewFlipper; int sizeOfView; ArrayList<Photo> photoList; int requestCounter; Album modifiedData; private LocalyticsSession localyticsSession; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_album); getActionBar().setHomeButtonEnabled(true); getActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.general_actionbar_bg)); getActionBar().setIcon(R.drawable.general_actionbar_back_btnset); selectedAlbum = getIntent().getParcelableExtra("album"); newAlbumList = new ArrayList<Album>(); albumList = getIntent().getParcelableArrayListExtra("albumList"); int indexForRemove = -1; for(int i = 0; i < albumList.size(); i++) { albumList.get(i).needSetting = false; if(selectedAlbum.album_srl.equals(albumList.get(i).album_srl)) indexForRemove = i; } if( indexForRemove != -1) albumList.remove(indexForRemove); setTitle(selectedAlbum.getTitle()); photoList = new ArrayList<Photo>(); for(int i = 0; i < selectedAlbum.photoList.size(); i++) { photoList.add(selectedAlbum.photoList.get(selectedAlbum.photoList.size()-1-i)); } gridView = (ExpandableHeightGridView) findViewById(R.id.gallery_photolist); adapter = new AlbumAdapter(photoList, this, 3); gridView.setExpanded(true); gridView.setAdapter(adapter); drawer = (WrappingSlidingDrawer)findViewById(R.id.album_drawer); drawer.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub return true; } }); albumMode = 0; selectedPhotoCounter = 0; albumGridView = (ExpandableHeightGridView) findViewById(R.id.movephoto_albumlist); int numOfColumn = 3; DisplayMetrics displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); sizeOfView = (displaymetrics.widthPixels - 10*(numOfColumn+1))/numOfColumn; albumAdapter = new GalleryAdapter(albumList, this, sizeOfView); albumGridView.setExpanded(true); albumGridView.setAdapter(albumAdapter); viewFlipper = (ViewFlipper)findViewById(R.id.album_flipper); switch(SlidingMenuMaker.getProfile().member_type.charAt(0)) { case 'P': this.request_Scrap_getScraps(SlidingMenuMaker.getProfile().getCurrentChildren().student_member_srl, 1, 10000, "P"); break; case 'T': case 'M': this.request_Scrap_getScraps(SlidingMenuMaker.getProfile().member_srl, 1, 10000, "P"); break; } 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(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. if( selectedAlbum.type == ALBUMTYPE.NORMAL) { getMenuInflater().inflate(R.menu.photo_multiselect, menu); this.menu = menu; } return true; } @Override public boolean onKeyDown(int keyCode, KeyEvent event){ if( albumMode == 2 && keyCode == KeyEvent.KEYCODE_BACK) { getActionBar().setTitle(R.string.select_photo); MenuItem item = menu.findItem(R.id.select_or_cancel); item.setTitle(R.string.cancel); getActionBar().setDisplayShowHomeEnabled(false); viewFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.viewin_right)); viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.viewout_right)); viewFlipper.showPrevious(); albumMode = 1; return true; } else return super.onKeyDown(keyCode, event); } public boolean onOptionsItemSelected(MenuItem item) { Intent intent; switch(item.getItemId()) { case android.R.id.home: switch( albumMode ) { case 2: getActionBar().setTitle(R.string.select_photo); menu.findItem(R.id.select_or_cancel).setTitle(R.string.cancel); getActionBar().setDisplayShowHomeEnabled(false); viewFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.viewin_right)); viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.viewout_right)); viewFlipper.showPrevious(); albumMode = 1; break; default: finish(); break; } return true; case R.id.select_or_cancel: switch(albumMode) { case 2: viewFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.viewin_right)); viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.viewout_right)); viewFlipper.showPrevious(); albumMode = 0; case 0: prevTitle = getActionBar().getTitle().toString(); getActionBar().setTitle(R.string.select_photo); item.setTitle(R.string.cancel); getActionBar().setDisplayShowHomeEnabled(false); for(int i = 0; i < adapter.getCount(); i++) { gridView.findViewWithTag(i).setVisibility(View.INVISIBLE); gridView.findViewWithTag(-i-1).setVisibility(View.VISIBLE); } break; case 1: getActionBar().setTitle(prevTitle); item.setTitle(R.string.select); getActionBar().setDisplayShowHomeEnabled(true); for(int i = 0; i < adapter.getCount(); i++) { gridView.findViewWithTag(i).setVisibility(View.VISIBLE); gridView.findViewWithTag(-i-1).setVisibility(View.INVISIBLE); } break; } albumMode = (albumMode+1)%2; return true; } return false; } public void OnSelectImage(View v) { switch(albumMode) { case 0: int position = Integer.parseInt(v.getTag().toString()); Intent intent = new Intent(this, ShowImageActivity.class); intent.putExtra("photo_url", photoList.get(position).photo_path); intent.putExtra("photo_srl", photoList.get(position).photo_srl); startActivity(intent); break; case 1: CheckBox cb = (CheckBox)v; int photoIndex = -((Integer)cb.getTag() + 1); if(photoList.get(photoIndex).isSelected == false && cb.isChecked()) selectedPhotoCounter++; else if( photoList.get(photoIndex).isSelected == true && cb.isChecked() == false ) selectedPhotoCounter--; photoList.get(photoIndex).isSelected = cb.isChecked(); if( drawer.isOpened() == false && selectedPhotoCounter > 0 ) drawer.animateOpen(); else if( drawer.isOpened() == true && selectedPhotoCounter == 0 ) drawer.animateClose(); break; } } public void OnMovePhoto(View v) { getActionBar().setTitle(R.string.select_album); MenuItem item = menu.findItem(R.id.select_or_cancel); item.setTitle(R.string.close); getActionBar().setDisplayShowHomeEnabled(true); viewFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.viewin_left)); viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.viewout_left)); viewFlipper.showNext(); albumMode = 2; } public void OnDeletePhoto(View v) { new AlertDialog.Builder(this) .setMessage("������ ������ �����ϰڽ��ϱ�?") .setPositiveButton("Ȯ��", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub requestCounter = 0; modifiedData = new Album(ALBUMTYPE.DELETED, selectedAlbum.album_srl, "", "", "", "", "", ""); ArrayList<String> photo_srl_list = new ArrayList<String>(); for(int i = 0; i < photoList.size(); i++) { if( photoList.get(i).isSelected ) { photo_srl_list.add(photoList.get(i).photo_srl); requestCounter++; } } for(int i = 0; i < photo_srl_list.size(); i++) { request_Album_delPhotoAlbum(selectedAlbum.album_srl, photo_srl_list.get(i)); } } }) .setNegativeButton("���", null) .show(); } public void OnNewAlbum(View v) { final EditText txt = new EditText(this); new AlertDialog.Builder(this) .setView(txt) .setMessage("�� ����ø �̸��� �Է��ϼ���") .setNegativeButton("���", null) .setPositiveButton("Ȯ��", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // albumList.add(new Album(1, txt.getText().toString())); // albumAdapter = new GalleryAdapter(albumList, AlbumActivity.this, sizeOfView); // albumGridView.setExpanded(true); // albumGridView.setAdapter(albumAdapter); request_Album_setAlbum(txt.getText().toString(), SlidingMenuMaker.getProfile().member_srl, "N"); // getActionBar().setTitle(txt.getText().toString()); // menu.findItem(R.id.select_or_cancel).setTitle(R.string.select); // getActionBar().setDisplayShowHomeEnabled(true); // for(int i = 0; i < adapter.getCount(); i++) { // gridView.findViewWithTag(i).setVisibility(View.VISIBLE); // gridView.findViewWithTag(-i-1).setVisibility(View.INVISIBLE); // ((CheckBox)gridView.findViewWithTag(-i-1)).setChecked(false); // photoList.get(i).isSelected = false; // selectedPhotoCounter = 0; // } // drawer.animateClose(); // viewFlipper.setInAnimation(AnimationUtils.loadAnimation(AlbumActivity.this, R.anim.viewin_right)); // viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(AlbumActivity.this, R.anim.viewout_right)); // viewFlipper.showPrevious(); // albumMode = 0; } }) .show(); } public void OnSeeAlbum(View v) { // getActionBar().setTitle(((Button)v).getText()); // menu.findItem(R.id.select_or_cancel).setTitle(R.string.select); // getActionBar().setDisplayShowHomeEnabled(true); // for(int i = 0; i < adapter.getCount(); i++) { // gridView.findViewWithTag(i).setVisibility(View.VISIBLE); // gridView.findViewWithTag(-i-1).setVisibility(View.INVISIBLE); // ((CheckBox)gridView.findViewWithTag(-i-1)).setChecked(false); // photoList.get(i).isSelected = false; // selectedPhotoCounter = 0; // } // drawer.animateClose(); // viewFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.viewin_right)); // viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.viewout_right)); // viewFlipper.showPrevious(); // albumMode = 0; requestCounter = 0; modifiedData = new Album(ALBUMTYPE.MODIFIED, v.getTag().toString(), "", "", "", "", "", ""); ArrayList<String> photo_srl_list = new ArrayList<String>(); for(int i = 0; i < photoList.size(); i++) { if( photoList.get(i).isSelected ) { photo_srl_list.add(photoList.get(i).photo_srl); requestCounter++; } } for(int i = 0; i < photo_srl_list.size(); i++) { request_Album_setPhotoAlbum(v.getTag().toString(), photo_srl_list.get(i)); } } public void OnScrapClick(View v) { final int position = Integer.parseInt(v.getTag().toString()); final String member_srl; switch(SlidingMenuMaker.getProfile().member_type.charAt(0)) { case 'P': member_srl = SlidingMenuMaker.getProfile().getCurrentChildren().student_member_srl; break; case 'T': case 'M': member_srl = SlidingMenuMaker.getProfile().member_srl; break; default: member_srl = ""; break; } if(photoList.get(position).member_scrap_srl.isEmpty()) { new AlertDialog.Builder(this) .setMessage("������ ���ã�� ������ �߰��Ͻðڽ��ϱ�?") .setPositiveButton("��", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { AlbumActivity.this.request_Scrap_setScrap(member_srl, "P", photoList.get(position).photo_srl); } }) .setNegativeButton("�ƴϿ�", null) .show(); } else { new AlertDialog.Builder(this) .setMessage("������ ���ã�� �������� �����Ͻðڽ��ϱ�?") .setPositiveButton("��", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { AlbumActivity.this.request_Scrap_delScrap(member_srl, photoList.get(position).member_scrap_srl, photoList.get(position).photo_srl); } }) .setNegativeButton("�ƴϿ�", null) .show(); } } @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("Album/setAlbum")) { String nativeData = jsonObj.getString("data"); jsonObj = new JSONObject(nativeData); String album_srl = jsonObj.getString("album_srl"); String album_member_srl = jsonObj.getString("album_member_srl"); final String album_name = jsonObj.getString("album_name"); String album_type = jsonObj.getString("album_type"); String album_created = jsonObj.getString("album_created"); String album_updated = jsonObj.getString("album_updated"); String album_count = jsonObj.getString("album_count"); albumList.add(new Album(ALBUMTYPE.NORMAL, album_srl, album_member_srl, album_name, album_type, album_created, album_updated, album_count)); newAlbumList.add(new Album(ALBUMTYPE.NORMAL, album_srl, album_member_srl, album_name, album_type, album_created, album_updated, album_count)); new Thread(new Runnable() { @Override public void run() { runOnUiThread(new Runnable(){ @Override public void run() { albumAdapter.notifyDataSetChanged(); } }); } }).start(); } else if(uri.equals("Album/setPhotoAlbum")) { String nativeData = jsonObj.getString("data"); jsonObj = new JSONObject(nativeData); String photo_srl = jsonObj.getString("photo_srl"); String photo_member_srl = jsonObj.getString("photo_member_srl"); String photo_album_srl = jsonObj.getString("photo_album_srl"); String photo_tag = jsonObj.getString("photo_tag"); String photo_path = jsonObj.getString("photo_path"); String photo_thumbnail = photo_path.substring(0, photo_path.length()-4 ) + "_96x96.png"; String photo_like = jsonObj.getString("photo_like"); String photo_private = jsonObj.getString("photo_private"); String photo_created = jsonObj.getString("photo_created"); String photo_updated = jsonObj.getString("photo_updated"); this.request_Album_delPhotoAlbum(selectedAlbum.album_srl, photo_srl); } else if(uri.equals("Album/delPhotoAlbum")) { String nativeData = jsonObj.getString("data"); jsonObj = new JSONObject(nativeData); String photo_srl = jsonObj.getString("photo_srl"); String photo_member_srl = jsonObj.getString("photo_member_srl"); String photo_album_srl = jsonObj.getString("photo_album_srl"); String photo_timeline_srl = jsonObj.getString("photo_timeline_srl"); String photo_tag = jsonObj.getString("photo_tag"); String photo_path = jsonObj.getString("photo_path"); String photo_thumbnail = photo_path.substring(0, photo_path.length()-4 ) + "_96x96.png"; String photo_like = jsonObj.getString("photo_like"); String photo_private = jsonObj.getString("photo_private"); String photo_created = jsonObj.getString("photo_created"); String photo_updated = jsonObj.getString("photo_updated"); modifiedData.photoList.add(new Photo(photo_srl, photo_member_srl, photo_album_srl, photo_timeline_srl, photo_tag, photo_path, photo_thumbnail, photo_like, photo_private, photo_created, photo_updated)); this.request_Timeline_delTimelineMessage(photo_member_srl, photo_timeline_srl); if(--requestCounter == 0) { Intent intent = new Intent(); if(modifiedData.type == ALBUMTYPE.MODIFIED) intent.putExtra("modified_album_srl", selectedAlbum.album_srl); intent.putExtra("modifiedData", modifiedData); intent.putExtra("newAlbumList", newAlbumList); setResult(Activity.RESULT_OK, intent); finish(); } } else if(uri.equals("Scrap/getScraps")) { String nativeData = jsonObj.getString("data"); JSONArray dataArray = new JSONArray(nativeData); for(int i = 0; i < dataArray.length(); i++) { String scrap_srl = dataArray.getJSONObject(i).getString("scrap_srl"); String scrap_member_srl = dataArray.getJSONObject(i).getString("scrap_member_srl"); String scrap_type = dataArray.getJSONObject(i).getString("scrap_type"); String scrap_target_srl = dataArray.getJSONObject(i).getString("scrap_target_srl"); String scrap_created = dataArray.getJSONObject(i).getString("scrap_created"); for(int j = 0; j < photoList.size(); j++) { if( photoList.get(j).photo_srl.equals(scrap_target_srl) ) { photoList.get(j).member_scrap_srl = scrap_srl; new Thread(new Runnable() { @Override public void run() { runOnUiThread(new Runnable(){ @Override public void run() { adapter.notifyDataSetChanged(); } }); } }).start(); break; } } } } else if( uri.equals("Scrap/setScrap") ) { String nativeData = jsonObj.getString("data"); jsonObj = new JSONObject(nativeData); String scrap_srl = jsonObj.getString("scrap_srl"); String scrap_member_srl = jsonObj.getString("scrap_member_srl"); String scrap_type = jsonObj.getString("scrap_type"); String scrap_target_srl = jsonObj.getString("scrap_target_srl"); String scrap_created = jsonObj.getString("scrap_created"); for(int i = 0; i < photoList.size(); i++) { if( photoList.get(i).photo_srl.equals(scrap_target_srl) ) { photoList.get(i).member_scrap_srl = scrap_srl; new Thread(new Runnable() { @Override public void run() { runOnUiThread(new Runnable(){ @Override public void run() { adapter.notifyDataSetChanged(); } }); } }).start(); break; } } } else if( uri.equals("Scrap/delScrap") ) { String nativeData = jsonObj.getString("data"); jsonObj = new JSONObject(nativeData); String scrap_srl = jsonObj.getString("scrap_srl"); String scrap_member_srl = jsonObj.getString("scrap_member_srl"); String scrap_type = jsonObj.getString("scrap_type"); String scrap_target_srl = jsonObj.getString("scrap_target_srl"); String scrap_created = jsonObj.getString("scrap_created"); for(int i = 0; i < photoList.size(); i++) { if( photoList.get(i).photo_srl.equals(scrap_target_srl) ) { photoList.get(i).member_scrap_srl = ""; new Thread(new Runnable() { @Override public void run() { runOnUiThread(new Runnable(){ @Override public void run() { adapter.notifyDataSetChanged(); } }); } }).start(); break; } } } } else { } } catch(JSONException e) { StringWriter errors = new StringWriter(); e.printStackTrace(new PrintWriter(errors)); String s = errors.toString(); System.out.println(s); } } }