public override View GetView(int position, View convertView, ViewGroup parent) { MessageBean item = MsgList.ElementAt(position); int type = item.Type; SendTextViewHolder sendTextViewHolder = null; ReceiveTextViewHolder receiveTextViewHolder = null; switch (type) { case MessageBean.TYPE_SEND_TEXT: sendTextViewHolder = new SendTextViewHolder(); var inflater1 = Context.GetSystemService(Context.LayoutInflaterService).JavaCast <LayoutInflater>(); convertView = inflater1.Inflate(Resource.Layout.send_message_item, parent, false); sendTextViewHolder.SendTextView = (TextView)convertView.FindViewById(Resource.Id.tv_send); sendTextViewHolder.SendTextView.Text = item.Msg; convertView.Tag = sendTextViewHolder; break; case MessageBean.TYPE_RECEIVE_TEXT: receiveTextViewHolder = new ReceiveTextViewHolder(); var inflater2 = Context.GetSystemService(Context.LayoutInflaterService).JavaCast <LayoutInflater>(); convertView = inflater2.Inflate(Resource.Layout.receive_message_item, parent, false); receiveTextViewHolder.ReceiveTextView = (TextView)convertView.FindViewById(Resource.Id.tv_receive); receiveTextViewHolder.ReceiveTextView.Text = item.Msg; convertView.Tag = receiveTextViewHolder; break; default: break; } return(convertView); }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.ChatLayout); FriendName = (TextView)FindViewById(Resource.Id.textView1); send = (Button)FindViewById(Resource.Id.btn_send); input = (EditText)FindViewById(Resource.Id.chat_text); device = MainActivity.AvaliableDevicesList.ElementAt(Intent.GetIntExtra("DeviceID", 0)); ChatList = (ListView)FindViewById(Resource.Id.listChat); if (!FriendName.Text.Equals("Chatting with") && !FriendName.Text.Equals(device.Name)) { MessageBean message = MainActivity.MsgList.ElementAt(MainActivity.MsgList.Count() - 1); MainActivity.MsgList.Clear(); MainActivity.MsgList.Add(message); } FriendName.Text = device.Name; adapter = new ChatAdapter(this, MainActivity.MsgList); ChatList.Adapter = adapter; adapter.NotifyDataSetChanged(); ChatList.SetSelection(ChatList.Bottom); send.Click += delegate { if (device.Status) { if (!input.Text.Equals("")) { Message = input.Text + ":msg input"; Data data = Data.FromBytes(System.Text.Encoding.UTF8.GetBytes(Message)); Log.Debug(TAG, "myEndpointId " + device.EndPoint); MainActivity.mTransferEngine.SendData(device.EndPoint, data).AddOnSuccessListener(new TaskListener(this, "Send Message ")).AddOnFailureListener(new TaskListener(this, "Send Message")); MessageBean item = new MessageBean(); item.MyName = MainActivity.MyEndPoint; item.FriendName = device.Name; item.Msg = Message.Split(":")[0]; item.Type = (MessageBean.TYPE_SEND_TEXT); MainActivity.MsgList.Add(item); adapter.NotifyDataSetChanged(); input.Text = ""; ChatList.SetSelection(ChatList.Bottom); } else { Toast.MakeText(this, "Enter a Message", ToastLength.Long).Show(); } } else { Toast.MakeText(this, "The device is not connected, try again", ToastLength.Long).Show(); MainActivity.InitiateConnection(device); } }; }
public void ReceiveMessage(Data data, string Endpoint) { if (MsgList.Count == 0 || !ChatActivity.device.EndPoint.Equals(Endpoint)) { MsgList.Clear(); Android.App.AlertDialog.Builder builder = new Android.App.AlertDialog.Builder(this); builder.SetTitle("You got a message !"); builder.SetMessage(Endpoint + " is trying to send a message to you. do you want to accept?"); builder.SetNegativeButton("Cancel", (senderAlert, args) => { string msgStr = "Refuse"; Data data = Data.FromBytes(System.Text.Encoding.UTF8.GetBytes(msgStr)); mTransferEngine.SendData(Endpoint, data).AddOnSuccessListener(new TaskListener(this, "Refuse Connection")).AddOnFailureListener(new TaskListener(this, "Refuse Connection")); return; }); builder.SetPositiveButton("Yes", (senderAlert, args) => { string str = System.Text.Encoding.UTF8.GetString(data.AsBytes()); Log.Debug(TAG, "OnReceived [Message] success. msgStr-------->>>>" + str); if (!str.EndsWith(":msg input")) { return; } str = str.Split(":")[0]; MessageBean item = new MessageBean(); item.MyName = MyEndPoint; item.FriendName = FindDevice(Endpoint).Name; item.Msg = str; item.Type = (MessageBean.TYPE_RECEIVE_TEXT); MsgList.Add(item); Intent chat = new Intent(); chat.SetClass(this, typeof(ChatActivity)); chat.SetFlags(ActivityFlags.ClearTop); chat.PutExtra("DeviceID", AvaliableDevicesList.IndexOf(FindDevice(Endpoint))); StartActivity(chat); }); Dialog dialog = builder.Create(); dialog.Show(); } else { string str = System.Text.Encoding.UTF8.GetString(data.AsBytes()); Log.Debug(TAG, "OnReceived [Message] success. msgStr-------->>>>" + str); if (!str.EndsWith(":msg input")) { return; } str = str.Split(":")[0]; MessageBean item = new MessageBean(); item.MyName = MyEndPoint; item.FriendName = FindDevice(Endpoint).Name; item.Msg = str; item.Type = (MessageBean.TYPE_RECEIVE_TEXT); MsgList.Add(item); Intent chat = new Intent(); chat.SetClass(this, typeof(ChatActivity)); chat.SetFlags(ActivityFlags.ClearTop); chat.PutExtra("DeviceID", AvaliableDevicesList.IndexOf(FindDevice(Endpoint))); StartActivity(chat); } }