package com.avoscloud.beijing.push.demo.keepalive; import java.util.LinkedList; import java.util.List; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.avos.avoscloud.AVException; import com.avos.avoscloud.AVInstallation; import com.avos.avoscloud.AVObject; import com.avos.avoscloud.AVQuery; import com.avos.avoscloud.AVUtils; import com.avos.avoscloud.FindCallback; import com.avos.avoscloud.GetCallback; import com.avos.avoscloud.Group; import com.avos.avoscloud.Session; import com.avos.avoscloud.SessionManager; import com.avoscloud.beijing.push.demo.keepalive.data.ChatDemoMessage; import com.avoscloud.beijing.push.demo.keepalive.data.ChatDemoMessage.MessageType; import android.app.Activity; import android.os.Bundle; import android.text.TextUtils; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ListView; import android.widget.Toast; public class GroupChatActivity extends Activity implements OnClickListener, MessageListener { public static final String DATA_EXTRA_SINGLE_DIALOG_TARGET = "single_target_peerId"; String groupId; private ImageButton sendBtn; private EditText composeZone; String currentName; ListView chatList; ChatDataAdapter adapter; List<ChatDemoMessage> messages = new LinkedList<ChatDemoMessage>(); Group group; String selfId; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.heartbeat); groupId = this.getIntent().getStringExtra(DATA_EXTRA_SINGLE_DIALOG_TARGET); this.setTitle(HTBApplication.lookupname(groupId)); chatList = (ListView) this.findViewById(R.id.avoscloud_chat_list); adapter = new ChatDataAdapter(this, messages); chatList.setAdapter(adapter); sendBtn = (ImageButton) this.findViewById(R.id.sendBtn); composeZone = (EditText) this.findViewById(R.id.chatText); selfId = AVInstallation.getCurrentInstallation().getInstallationId(); currentName = HTBApplication.lookupname(selfId); group = SessionManager.getInstance(selfId).getGroup(groupId); // 您可以在这里读取本地的聊天记录,并且加载进来。 //  我们会在未来加入这些代码 sendBtn.setOnClickListener(this); if (!AVUtils.isBlankString(getIntent().getExtras() .getString(Session.AV_SESSION_INTENT_DATA_KEY))) { String msg = getIntent().getExtras().getString(Session.AV_SESSION_INTENT_DATA_KEY); ChatDemoMessage message = JSON.parseObject(msg, ChatDemoMessage.class); messages.add(message); adapter.notifyDataSetChanged(); } } @Override public void onClick(View v) { String text = composeZone.getText().toString(); if (TextUtils.isEmpty(text)) { return; } composeZone.getEditableText().clear(); ChatDemoMessage message = new ChatDemoMessage(); message.setMessageContent(text); message.setMessageType(MessageType.Text); message.setMessageFrom(currentName); group.sendMessage(message.makeMessage()); messages.add(message); adapter.notifyDataSetChanged(); } private String makeMessage(String msg) { JSONObject obj = new JSONObject(); obj.put("msg", msg); obj.put("dn", currentName); return obj.toJSONString(); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_kick: AVObject groupObject = AVObject.createWithoutData(ChatGroupListFragment.GROUP_TABLE_NAME, this.groupId); groupObject.fetchInBackground(new GetCallback<AVObject>() { @Override public void done(AVObject object, AVException e) { if (e == null) { List<String> joinedMember = object.getList("m"); joinedMember.remove(selfId); System.out.println(joinedMember); group.kickMember(joinedMember); } else { Toast.makeText(GroupChatActivity.this, "查询异常", Toast.LENGTH_SHORT).show(); } } }); return true; case R.id.action_invite: AVQuery<AVObject> aviq = new AVQuery<AVObject>("_Installation"); aviq.whereEqualTo("valid", true).findInBackground(new FindCallback<AVObject>() { @Override public void done(List<AVObject> parseObjects, AVException parseException) { if (parseException == null) { List<String> inviteList = new LinkedList<String>(); for (AVObject o : parseObjects) { if (!selfId.equals(o.getString("installationId"))) { inviteList.add(o.getString("installationId")); } } System.out.println(inviteList); group.inviteMember(inviteList); } else { Toast.makeText(GroupChatActivity.this, "查询异常", Toast.LENGTH_SHORT).show(); } } }); return true; } return super.onOptionsItemSelected(item); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.groupchat, menu); return true; } @Override public void onBackPressed() { group.quit(); super.onBackPressed(); overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right); } @Override public void onMessage(String msg) { ChatDemoMessage message = JSON.parseObject(msg, ChatDemoMessage.class); messages.add(message); adapter.notifyDataSetChanged(); } @Override public void onResume() { super.onResume(); ChatDemoGroupMessageReceiver.registerGroupListener(groupId, this); } @Override public void onPause() { super.onPause(); ChatDemoGroupMessageReceiver.unregisterGroupListener(groupId); } }