package com.ihateflyingbugs.kidsm.showimage; 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.content.Context; import android.content.Intent; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Rect; import android.os.Bundle; import android.os.Handler; import android.view.Display; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.ihateflyingbugs.kidsm.ImageLoader; import com.ihateflyingbugs.kidsm.NetworkActivity; import com.ihateflyingbugs.kidsm.R; import com.ihateflyingbugs.kidsm.gallery.Photo; import com.ihateflyingbugs.kidsm.menu.SlidingMenuMaker; import com.ihateflyingbugs.kidsm.newsfeed.LikeMember; import com.ihateflyingbugs.kidsm.newsfeed.News; import com.ihateflyingbugs.kidsm.newsfeed.NewsfeedFragment; import com.ihateflyingbugs.kidsm.newsfeed.PhotoNews; import com.ihateflyingbugs.kidsm.newsfeed.Reply; import com.ihateflyingbugs.kidsm.newsfeed.ReplyActivity; import com.ihateflyingbugs.kidsm.newsfeed.News.NEWSTYPE; import com.ihateflyingbugs.kidsm.uploadphoto.InputTag; import com.localytics.android.LocalyticsSession; class CustomImage { ImageView view; float width; float height; float baseWidth; float baseHeight; CustomImage(ImageView view) { this.view = view; baseWidth = this.width = view.getDrawable().getIntrinsicWidth(); baseHeight = this.height = view.getDrawable().getIntrinsicHeight(); //this.view.setBackgroundColor(Color.WHITE); } void setScale(float ratio) { width = baseWidth*ratio; height = baseHeight*ratio; } } public class ShowImageActivity extends NetworkActivity{ final static float STEP = 200; float mRatio = 1.0f; int mBaseDist; float mBaseRatio; CustomImage image; int screenWidth; int screenHeight; float minScale; float maxScale; float prevPositionX; float prevPositionY; //News news; LinearLayout linear; ImageLoader imageLoader; //Toast testToast = Toast.makeText(this, "���� Ȯ�� ���� ������Ʈ �����Դϴ�^^ 10�� 13��", Toast.LENGTH_LONG); Photo photo; ArrayList<String> likeList; ArrayList<Reply> commentList; String member_scrap_srl; int scrapCount; private LocalyticsSession localyticsSession; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_showimage); imageLoader = new ImageLoader(this, R.drawable.photo_in_album_default); LayoutInflater inflater = (LayoutInflater)getSystemService( Context.LAYOUT_INFLATER_SERVICE); linear = (LinearLayout)inflater.inflate(R.layout.showimage_overlay, null); LinearLayout.LayoutParams paramlinear = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); addContentView(linear, paramlinear); //key = getIntent().getStringExtra("key"); //news = NewsfeedFragment.getNews(key); initiateLayout(); Display newDisplay = getWindowManager().getDefaultDisplay(); screenWidth = newDisplay.getWidth(); screenHeight = newDisplay.getHeight(); ImageView view = (ImageView)findViewById(R.id.image); imageLoader.DisplayImage(getString(R.string.image_url)+getIntent().getStringExtra("photo_url"), view); likeList = new ArrayList<String>(); commentList = new ArrayList<Reply>(); requestPhotoInfo(); image = new CustomImage(view); minScale = mRatio = Math.min(screenWidth/image.width, screenHeight/image.height); //view.setScaleX(mRatio); //view.setScaleY(mRatio); 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 requestPhotoInfo() { likeList.clear(); commentList.clear(); member_scrap_srl = ""; scrapCount = 0; this.request_Album_getPhoto(getIntent().getStringExtra("photo_srl")); } void initiateLayout() { // View btn = linear.findViewById(R.id.image_like); // btn.setTag(key); // btn = linear.findViewById(R.id.image_reply); // btn.setTag(key); // btn = linear.findViewById(R.id.image_scrap); // btn.setTag(key); //news.setReplyLinear(linear); //news.updateLayout(); } public void onActivityResult(int requestCode, int resultCode, Intent data) { if( resultCode == RESULT_OK ) { switch(requestCode) { case 1: //news.updateLayout(); //NewsfeedActivity.setNews(key, news); //finish(); break; } } } public void OnLikeClick(View v) { 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; } if( likeList.contains(member_srl) == false ) this.request_Album_setPhotoLike(photo.photo_srl, member_srl); else this.request_Album_delPhotoLike(photo.photo_srl, member_srl); } public void OnReplyClick(View v) { 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; } this.request_Timeline_getTimelineMessage(member_srl, photo.photo_timeline_srl); } public void OnScrapClick(View v) { 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; } if( member_scrap_srl.isEmpty() ) this.request_Scrap_setScrap(member_srl, "P", photo.photo_srl); else this.request_Scrap_delScrap(member_srl, member_scrap_srl, photo.photo_srl); } public void OnModify(View v) { Intent intent = new Intent(this, ModifyImageActivity.class); intent.putExtra("photo_url", getString(R.string.image_url)+getIntent().getStringExtra("photo_url")); intent.putExtra("photo_srl", getIntent().getStringExtra("photo_srl")); startActivityForResult(intent, 1); //Toast.makeText(this, "������Ʈ �����Դϴ�^^ 10�� 13��", Toast.LENGTH_LONG).show(); } public void OnClose(View v) { // news.updateLayout(); // NewsfeedFragment.setNews(key, news); finish(); } public void mOnClick(View v) { finish(); } public boolean onTouchEvent(MotionEvent event) { // float leftWall = -screenWidth/2; // float rightWall = screenWidth/2; // float topWall = -screenHeight/2; // float bottomWall = screenHeight/2; // float width = image.view.getDrawable().getIntrinsicWidth()*mRatio; // float height = image.view.getDrawable().getIntrinsicHeight()*mRatio; // float translationX = image.view.getTranslationX(); // float translationY = image.view.getTranslationY(); // float gapX = event.getX() - prevPositionX; // float gapY = event.getY() - prevPositionY; // if( event.getPointerCount() == 1 ) { // int action = event.getAction(); // int pureaction = action & MotionEvent.ACTION_MASK; // if( pureaction == MotionEvent.ACTION_DOWN) { // prevPositionX = event.getX(); // prevPositionY = event.getY(); // } // if (pureaction == MotionEvent.ACTION_MOVE) { // if( translationX + gapX < width/2+leftWall && translationX + gapX > -width/2+rightWall ) // image.view.setTranslationX(translationX + gapX); // if( translationY + gapY < height/2+topWall && translationY + gapY > -height/2+bottomWall ) // image.view.setTranslationY(translationY + gapY); // prevPositionX = event.getX(); // prevPositionY = event.getY(); // } // } // else if (event.getPointerCount() == 2) { // int action = event.getAction(); // int pureaction = action & MotionEvent.ACTION_MASK; // if (pureaction == MotionEvent.ACTION_POINTER_DOWN) { // mBaseDist = getDistance(event); // mBaseRatio = mRatio; // } else { // float delta = (getDistance(event) - mBaseDist) / STEP; // float multi = (float)Math.pow(2, delta); // mRatio = Math.min(2*minScale, Math.max(minScale, mBaseRatio * multi)); // width = image.view.getDrawable().getIntrinsicWidth()*mRatio; // height = image.view.getDrawable().getIntrinsicHeight()*mRatio; // if(screenWidth/image.width <= screenHeight/image.height) { // if( translationX > width/2+leftWall ) // image.view.setTranslationX(leftWall+width/2); // if( translationX < -width/2+rightWall ) // image.view.setTranslationX(rightWall-width/2); // if( height >= screenHeight ) { // if( translationY > height/2+topWall ) // image.view.setTranslationY(topWall+height/2); // if( translationY < -height/2+bottomWall ) // image.view.setTranslationY(bottomWall-height/2); // } // } // if(screenWidth/image.width >= screenHeight/image.height){ // if( translationY > height/2+topWall ) // image.view.setTranslationY(topWall+height/2); // if( translationY < -height/2+bottomWall ) // image.view.setTranslationY(bottomWall-height/2); // if( width >= screenWidth ) { // if( translationX > width/2+leftWall ) // image.view.setTranslationX(leftWall+width/2); // if( translationX < -width/2+rightWall ) // image.view.setTranslationX(rightWall-width/2); // } // } // image.view.setScaleX(mRatio); // image.view.setScaleY(mRatio); // } // } return true; } int getDistance(MotionEvent event) { int dx = (int)(event.getX(0) - event.getX(1)); int dy = (int)(event.getY(0) - event.getY(1)); return (int)(Math.sqrt(dx * dx + dy * dy)); } private void updateLayout() { new Thread(new Runnable() { @Override public void run() { runOnUiThread(new Runnable(){ @Override public void run() { TextView txt; txt = (TextView)linear.findViewById(R.id.image_numoflike); txt.setText(""+likeList.size()); txt = (TextView)linear.findViewById(R.id.image_numofreply); txt.setText(""+commentList.size()); txt = (TextView)linear.findViewById(R.id.image_numofscrap); txt.setText(""+scrapCount); 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; } txt = (TextView)linear.findViewById(R.id.image_liketext); final CheckBox cblike = (CheckBox) linear.findViewById(R.id.image_like_animation); if(likeList.contains(member_srl)) { txt.setText(R.string.news_likecancel); new Handler().postDelayed(new Runnable() { public void run() { cblike.setChecked(true); } }, 100); } else { txt.setText(R.string.news_like); cblike.setChecked(false); } txt = (TextView)linear.findViewById(R.id.image_scraptext); final CheckBox cbscrap = (CheckBox) linear.findViewById(R.id.image_scrap_animation); if(member_scrap_srl.isEmpty() == false) { txt.setText(R.string.news_donescrap); new Handler().postDelayed(new Runnable() { public void run() { cbscrap.setChecked(true); } }, 100); } else { txt.setText(R.string.news_scrap); cbscrap.setChecked(false); } } }); } }).start(); } @Override public void response(String uri, String response) { try { if( response.isEmpty() ) return; if(response.startsWith("<!DOCTYPE html>")) { return; } JSONObject jsonObj = new JSONObject(response); String result = jsonObj.getString("result"); if( result.equals("OK") ) { if(uri.equals("Album/getPhoto")) { 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"); photo = 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); if( photo_like.isEmpty() == false ) { String[] likeMemberData = photo_like.split(","); for(int i = 0; i < likeMemberData.length; i++) { if(likeMemberData[i] != null && likeMemberData[i].isEmpty() == false) likeList.add(likeMemberData[i]); } } 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; } if( photo_member_srl.equals(member_srl)) { new Thread(new Runnable() { @Override public void run() { runOnUiThread(new Runnable(){ @Override public void run() { findViewById(R.id.image_modify).setVisibility(View.VISIBLE); } }); } }).start(); } updateLayout(); this.request_Timeline_getTimelineComments(photo_timeline_srl, 1, 100000); this.request_Scrap_getScraps(member_srl, 1, 10000, "P"); this.request_Scrap_getScrapCount(photo_srl, "P"); } else if( uri.equals("Timeline/getTimelineComments") ) { String nativeData = jsonObj.getString("data"); JSONArray dataArray = new JSONArray(nativeData); for(int i = 0; i < dataArray.length(); i++ ) { JSONObject dataObj = dataArray.getJSONObject(i); String tcomment_srl = dataObj.getJSONObject("_id").getString("$oid"); String tcomment_member_srl = dataObj.getString("tcomment_member_srl"); String tcomment_timeline_srl = dataObj.getString("tcomment_timeline_srl"); String tcomment_message = dataObj.getString("tcomment_message"); String tcomment_created = dataObj.getString("tcomment_created"); commentList.add(new Reply(tcomment_srl, tcomment_member_srl, tcomment_timeline_srl, tcomment_message, tcomment_created)); updateLayout(); } } 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"); if( scrap_type.equals("P") && photo.photo_srl.equals(scrap_target_srl) ) { member_scrap_srl = scrap_srl; updateLayout(); } } } else if( uri.equals("Scrap/getScrapCount") ) { String type = jsonObj.getString("type"); String target_srl = jsonObj.getString("target_srl"); String count = jsonObj.getString("count"); scrapCount = Integer.parseInt(count); updateLayout(); } else if( uri.equals("Timeline/getTimelineMessage") ) { String nativeData = jsonObj.getString("data"); JSONArray dataArray = new JSONArray(nativeData); for(int i = 0; i < dataArray.length(); i++ ) { JSONObject dataObj = dataArray.getJSONObject(i); final String timeline_type = dataObj.getString("timeline_type"); final String timeline_srl = dataObj.getJSONObject("_id").getString("$oid"); final String timeline_member_srl = dataObj.getString("timeline_member_srl"); final String timeline_target_member_srl = dataObj.getString("timeline_target_member_srl"); final String timeline_target_srl = dataObj.getString("timeline_target_srl"); final String timeline_like = dataObj.getString("timeline_like"); final String timeline_comment = dataObj.getString("timeline_comment"); final String timeline_created = dataObj.getString("timeline_created"); new Thread(new Runnable() { @Override public void run() { runOnUiThread(new Runnable(){ @Override public void run() { Intent intent = new Intent(ShowImageActivity.this, ReplyActivity.class); intent.putExtra("type", "T"); intent.putExtra("timeline_srl", timeline_srl); intent.putExtra("timeline_member_srl", timeline_member_srl); startActivity(intent); } }); } }).start(); break; } } else if( uri.equals("Album/setPhotoLike") ) { String nativeData = jsonObj.getString("data"); jsonObj = new JSONObject(nativeData); String photo_srl = jsonObj.getString("photo_srl"); 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; } likeList.add(member_srl); updateLayout(); } else if( uri.equals("Album/delPhotoLike") ) { String nativeData = jsonObj.getString("data"); jsonObj = new JSONObject(nativeData); String photo_srl = jsonObj.getString("photo_srl"); 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; } likeList.remove(member_srl); updateLayout(); } 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"); member_scrap_srl = scrap_srl; scrapCount++; updateLayout(); } 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"); member_scrap_srl = ""; scrapCount--; updateLayout(); } } else { } } catch(JSONException e) { StringWriter errors = new StringWriter(); e.printStackTrace(new PrintWriter(errors)); String s = errors.toString(); System.out.println(s); } } }