package com.miris.ui.activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.miris.net.MessageListData; import com.parse.GetCallback; import com.parse.ParseException; import com.parse.ParseFile; import com.parse.ParseObject; import com.parse.ParseQuery; import com.miris.R; import com.miris.ui.adapter.MessageAdapter; import java.util.ArrayList; import java.util.List; import butterknife.InjectView; /** * class : MessageActivity2(보낸 쪽지함) * Created by miris on 2016-07-25. */ public class MessageActivity2 extends BaseActivity implements MessageAdapter.OnMsgItemClickListener{ @InjectView(R.id.msg_view) RecyclerView rvMessage; @InjectView(R.id.tileBox) TextView titleView; ArrayList<MessageListData> messageData; /* LinearLayoutManager : 리스트 항목들이 수평 또는 수직의 스크롤 가능한 리스트 레이아웃 */ LinearLayoutManager linearLayoutManager; ProgressDialog myLoadingDialog; Context context; RecyclerView recyclerView; private MessageAdapter messageAdapter; String userid = memberData.get(0).getuserId(); String titleName = null; String objectId = null; String flag = null; AlertDialog.Builder builder; List<ParseObject> ob; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_message); Intent intent = this.getIntent(); flag = intent.getStringExtra("flag"); if("1".equals(flag)){ titleName = "내게쓴쪽지함"; } else if("2".equals(flag)){ titleName = "보낸쪽지함"; } titleView.setText(titleName); Button button = (Button)findViewById(R.id.sendViewButton); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getApplication(), MessageSendActivity.class); startActivity(intent); } }); setupMessage(); Button mButton = (Button)findViewById(R.id.msgBox); mButton.setText(titleName); mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showDialog(1); } }); } @Override protected Dialog onCreateDialog(int id) { final String [] items = {"받은쪽지함", "내게쓴쪽지함", "보낸쪽지함"}; switch(id) { case 1: builder = new AlertDialog.Builder(this); builder.setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Log.i("msgMenu", items[which]); Intent mIntent = null; switch (which) { /* 받은쪽지함*/ case 0: mIntent = new Intent(getApplication(), MessageActivity.class); mIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(mIntent); break; /* 내게쓴쪽지함*/ case 1: if ("2".equals(flag)) { mIntent = new Intent(getApplication(), MessageActivity2.class); mIntent.putExtra("flag", "1"); startActivity(mIntent); } break; /* 보낸 쪽지함*/ case 2: if ("1".equals(flag)) { mIntent = new Intent(getApplication(), MessageActivity2.class); mIntent.putExtra("flag", "2"); startActivity(mIntent); } break; } } }); break; case 2: builder = new AlertDialog.Builder(this); builder.setTitle("삭제"); builder.setMessage("쪽지를 삭제하시겠습니까?"); Log.i("삭제할 objectid ", objectId); builder.setPositiveButton("확인", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ParseQuery<ParseObject> query = ParseQuery.getQuery("miris_message"); query.getInBackground(objectId, new GetCallback<ParseObject>() { @Override public void done(ParseObject parseObject, com.parse.ParseException e) { if (e == null) { parseObject.put("to_delete_yn", "Y"); parseObject.saveInBackground(); } } }); } }); builder.setNegativeButton("취소", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); break; } return builder.create(); } /* private void init() { recyclerView = (RecyclerView) findViewById(R.id.msg_view); recyclerView.setHasFixedSize(true); //recyclerView.setAdapter(new MessageAdapter); } */ private void setupMessage(){ linearLayoutManager = new LinearLayoutManager(this) { @Override protected int getExtraLayoutSpace(RecyclerView.State state) { return 300; } }; rvMessage.setLayoutManager(linearLayoutManager); new loadDataTask().execute(); } /* 휴지통 버튼 누를시 메시지 삭제*/ @Override public void onDeleteMsg(View v, int position) { objectId = messageData.get(position).getObjectId(); showDialog(2); } /* 메시지 상세 보기 */ @Override public void onDetailMsg(View v, int position) { Intent intent = new Intent(getApplication(), MessageDetail.class); intent.putExtra("objectid",messageData.get(position).getObjectId()); intent.putExtra("flag",flag); startActivity(intent); } private void showDialog() { myLoadingDialog = new ProgressDialog(MessageActivity2.this); myLoadingDialog.setMessage(getString(R.string.show_lodingbar)); myLoadingDialog.setIndeterminate(false); myLoadingDialog.setCancelable(false); myLoadingDialog.show(); } /* AsyncTask 클래스 사용하여 스레드 처리 : 쪽지 리스트 추출*/ class loadDataTask extends AsyncTask<Void, Void, Void>{ /* onPreExecute() : 백그라운드 작업실행전 수행할 동작 구현 */ @Override protected void onPreExecute() { showDialog(); } /*doInBackground() : 메인 스레드의 execute 메소드에 의해서 작업스레드가 수행*/ @Override protected Void doInBackground(Void... arg0) { messageData = new ArrayList<MessageListData>(); try { /* MIRIS_MESSAGE 테이블 SELECT */ ParseQuery<ParseObject> query = ParseQuery.getQuery("miris_message"); if("1".equals(flag)){ query.whereEqualTo("from_id", userid); query.whereEqualTo("to_id", userid); } else if("2".equals(flag)) { query.whereEqualTo("from_id", userid); query.whereNotEqualTo("to_id", userid); } query.whereEqualTo("to_delete_yn", "N"); query.orderByDescending("sendtime"); //ob.addAll(query.find()); // 읽어온 데이터를 list(ob)에 저장 ob = query.find(); // 읽어온 데이터를 list(ob)에 저장 int i=0; for(ParseObject object : ob){ messageData.add(new MessageListData( object.get("to_id").toString(), object.get("from_id").toString(), object.get("from_name").toString(), object.get("content").toString(), object.get("receipt_yn").toString(), object.get("to_delete_yn").toString(), object.get("from_delete_yn").toString(), object.get("sendtime").toString(), object.getObjectId())); Log.i("MessageData", messageData.get(i).getSendId() + "," + messageData.get(i).getReceiptId()); } } catch (ParseException e) { Log.e("Error", e.getMessage()); e.printStackTrace(); } return null ; } /* onPostExecute() : 백그라운드 실행 완료 즉 스레드 작업이 끝났을때의 동작 구현(doInBackground의 결과값 사용) */ @Override protected void onPostExecute(Void result) { Log.i("onPostExecute","start"); messageAdapter = new MessageAdapter(MessageActivity2.this, messageData, flag); rvMessage.setAdapter(messageAdapter); messageAdapter.setOnMsgItemClickListener(MessageActivity2.this); /* setOnScrollListener : 리스트뷰 스크롤시에 발생하는 이벤트를 처리하는 리스너*/ rvMessage.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); } }); messageAdapter.updateItems(true); Log.i("onPostExecute", "end"); if (myLoadingDialog != null) { myLoadingDialog.dismiss(); } } } }