private void CreateUI() { if (MessageConversations.clearView) { RunOnUiThread (() => listWrapper.RemoveAllViewsInLayout ()); MessageConversations.clearView = false; } int c = 0; List<int> unreadMessages = new List<int> (); int numberInConversation = 0; foreach (LOLMessageConversation conversation in MessageConversations.conversationsList) { unreadMessages.Add (conversation.MessageIDs.Count - conversation.ReadMessageIDs.Count); int t = 0; } if (unknownUsers == null) unknownUsers = new List<Guid> (); else unknownUsers.Clear (); List<Guid> unknownMessages = new List<Guid> (); foreach (MessageDB latestMessage in MessageConversations.initialMessages) { UserDB whoFrom = new UserDB (); whoFrom = dbm.GetUserWithAccountID (MessageConversations.conversationsList [c].Recipients [0].ToString ()); if (latestMessage.MessageRecipientDBList.Count != 0) { if (whoFrom == null && latestMessage.MessageRecipientDBList [0].AccountGuid == AndroidData.CurrentUser.AccountID.ToString ()) whoFrom = UserDB.ConvertFromUser (AndroidData.CurrentUser); if (whoFrom != null) { #if DEBUG System.Diagnostics.Debug.WriteLine ("c = {0}, Recipient[0] Guid = {1}, whoFrom name = {2} {3}", c, MessageConversations.conversationsList [c].Recipients [0], whoFrom.FirstName, whoFrom.LastName); #endif List<UserDB> users = new List<UserDB> (); numberInConversation = latestMessage.MessageRecipientDBList.Count; for (int i = 0; i < (numberInConversation > 3 ? 3 : numberInConversation); ++i) { if (latestMessage.MessageRecipientDBList [i] != null) { UserDB current = dbm.GetUserWithAccountID (latestMessage.MessageRecipientDBList [i].AccountGuid.ToString ()); if (current == null && latestMessage.MessageRecipientDBList [i].AccountGuid != AndroidData.CurrentUser.AccountID.ToString ()) unknownUsers.Add (new Guid (latestMessage.MessageRecipientDBList [i].AccountGuid)); else users.Add (current); } } int leftOver = (int)wowZapp.LaffOutOut.Singleton.ScreenXWidth - (int)ImageHelper.convertDpToPixel (imageSize [0] + 30f, context); LinearLayout shell = new LinearLayout (context); shell.Orientation = Orientation.Horizontal; shell.SetGravity (GravityFlags.CenterVertical); shell.LayoutParameters = new LinearLayout.LayoutParams (LinearLayout.LayoutParams.FillParent, (int)ImageHelper.convertDpToPixel (imageSize [1] + 40f, context)); shell.SetPadding (0, 0, 0, (int)ImageHelper.convertDpToPixel (5f, context)); ImageView imageLayout = new ImageView (context); using (LinearLayout.LayoutParams layParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WrapContent, LinearLayout.LayoutParams.WrapContent)) { layParams.SetMargins (3, 3, 3, 3); imageLayout.LayoutParameters = layParams; } imageLayout.SetPadding ((int)ImageHelper.convertDpToPixel (5f, context), 0, (int)ImageHelper.convertDpToPixel (10f, context), (int)ImageHelper.convertDpToPixel (10f, context)); imageLayout = generateUserImage (users); RunOnUiThread (() => shell.AddView (imageLayout)); LinearLayout information = new LinearLayout (context); information.LayoutParameters = new LinearLayout.LayoutParams (LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.FillParent); information.Orientation = Orientation.Vertical; LinearLayout topLayout = new LinearLayout (context); topLayout.Orientation = Orientation.Vertical; using (LinearLayout.LayoutParams layParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, (int)ImageHelper.convertDpToPixel(28f, context))) { layParams.Weight = 10f; layParams.SetMargins (0, 0, 0, (int)ImageHelper.convertDpToPixel (3f, context)); topLayout.LayoutParameters = layParams; } TextView whoAmI = new TextView (context); using (LinearLayout.LayoutParams layParams= new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.WrapContent)) { layParams.SetMargins (10, 0, 10, 5); whoAmI.LayoutParameters = layParams; } string myName = whoFrom.FirstName + " " + whoFrom.LastName; if (numberInConversation != 1) { myName += string.Format (" and {0} other{1}", numberInConversation == 2 ? "1" : (numberInConversation - 1).ToString (), numberInConversation == 2 ? "." : "s."); } whoAmI.SetTextColor (Android.Graphics.Color.Black); whoAmI.Text = myName; whoAmI.SetTextSize (Android.Util.ComplexUnitType.Dip, 12f); RunOnUiThread (() => topLayout.AddView (whoAmI)); LinearLayout messageLayout = new LinearLayout (context); using (LinearLayout.LayoutParams linParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.FillParent)) { linParams.Weight = 80f; messageLayout.LayoutParameters = linParams; } messageLayout.Orientation = Orientation.Horizontal; TextView txtMessage = new TextView (context); using (LinearLayout.LayoutParams linParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, (int)ImageHelper.convertDpToPixel(70f, context))) { linParams.SetMargins (0, 0, (int)ImageHelper.convertDpToPixel (8f, context), 0); txtMessage.LayoutParameters = linParams; } txtMessage.SetPadding ((int)ImageHelper.convertDpToPixel (10f, context), (int)ImageHelper.convertDpToPixel (5f, context), (int)ImageHelper.convertDpToPixel (10f, context), (int)ImageHelper.convertDpToPixel (5f, context)); if (latestMessage.MessageStepDBList.Count == 1 && latestMessage.MessageStepDBList [0].StepType == MessageStep.StepTypes.Text) { txtMessage = messageTextBox (latestMessage, 0, leftOver); } else { for (int n = 0; n < latestMessage.MessageStepDBList.Count; ++n) { if (latestMessage.MessageStepDBList [n].StepType == MessageStep.StepTypes.Text) { txtMessage = messageTextBox (latestMessage, n, leftOver); break; } } } txtMessage.ContentDescription = latestMessage.MessageID.ToString (); #if DEBUG System.Diagnostics.Debug.WriteLine ("ContentDesctription = {0}, ID = {1}", txtMessage.ContentDescription, latestMessage.ID); #endif txtMessage.Click += textMessage_Click; RunOnUiThread (() => messageLayout.AddView (txtMessage)); LinearLayout bottomLayout = new LinearLayout (context); using (LinearLayout.LayoutParams linParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.WrapContent)) { linParams.SetMargins (0, (int)ImageHelper.convertDpToPixel (3f, context), 0, 0); bottomLayout.LayoutParameters = linParams; } bottomLayout.SetGravity (GravityFlags.Right); TextView txtMessageUnread = new TextView (context); using (LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, (int)ImageHelper.convertDpToPixel(12f, context))) { layoutParams.SetMargins (10, 0, 10, 0); txtMessageUnread.LayoutParameters = layoutParams; } txtMessageUnread.LayoutParameters = new LinearLayout.LayoutParams (LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.WrapContent); txtMessageUnread.SetTextColor (Color.Black); txtMessageUnread.SetTextSize (Android.Util.ComplexUnitType.Dip, 10f); if (unreadMessages [c] == 0) txtMessageUnread.Text = "0 unread messages."; else txtMessageUnread.Text = string.Format ("({0}) unread message{1}", unreadMessages [c], unreadMessages [c] == 1 ? "." : "s."); txtMessageUnread.Gravity = GravityFlags.Right; RunOnUiThread (() => bottomLayout.AddView (txtMessageUnread)); LinearLayout messageItems = new LinearLayout (context); if (latestMessage.MessageStepDBList.Count > 0) { messageItems.Orientation = Orientation.Horizontal; float messageBarSize = wowZapp.LaffOutOut.Singleton.resizeFonts == true ? ImageHelper.convertPixelToDp (((55f * imageSize [0]) / 100), context) : ImageHelper.convertDpToPixel (40f, context); using (LinearLayout.LayoutParams layParams = new LinearLayout.LayoutParams (leftOver, (int)messageBarSize)) { layParams.SetMargins ((int)ImageHelper.convertDpToPixel (14f, context), (int)ImageHelper.convertDpToPixel (3.3f, context), (int)ImageHelper.convertDpToPixel (12.7f, context), (int)ImageHelper.convertDpToPixel (4f, context)); messageItems.LayoutParameters = layParams; } messageItems.SetPadding ((int)ImageHelper.convertDpToPixel (10f, context), (int)ImageHelper.convertDpToPixel (3.3f, context), (int)ImageHelper.convertDpToPixel (10f, context), 0); messageItems.SetGravity (GravityFlags.Left); messageItems.SetBackgroundResource (Resource.Drawable.attachmentspreviewbkgr); messageItems = createMessageBar (messageItems, latestMessage, leftOver); messageItems.ContentDescription = latestMessage.MessageGuid; messageItems.Click += messageBar_Click; } else { messageItems.Orientation = Orientation.Horizontal; float messageBarSize = wowZapp.LaffOutOut.Singleton.resizeFonts == true ? ImageHelper.convertPixelToDp (((55f * imageSize [0]) / 100), context) : ImageHelper.convertDpToPixel (40f, context); using (LinearLayout.LayoutParams layParams = new LinearLayout.LayoutParams (leftOver, (int)messageBarSize)) { layParams.SetMargins ((int)ImageHelper.convertDpToPixel (14f, context), (int)ImageHelper.convertDpToPixel (3.3f, context), (int)ImageHelper.convertDpToPixel (12.7f, context), (int)ImageHelper.convertDpToPixel (4f, context)); messageItems.LayoutParameters = layParams; messageItems.SetBackgroundResource (Resource.Drawable.attachmentspreviewbkgr); } } RunOnUiThread (delegate { information.AddView (topLayout); if (!string.IsNullOrEmpty (txtMessage.Text)) information.AddView (messageLayout); if (latestMessage.MessageStepDBList.Count > 1) information.AddView (messageItems); information.AddView (bottomLayout); shell.AddView (information); listWrapper.AddView (shell); }); #if DEBUG System.Diagnostics.Debug.WriteLine ("done a loop"); #endif } } if (c < MessageConversations.initialMessages.Count - 2) c++; } //}); if (unknownUsers.Count != 0) { Contacts.AddUnknownUser auu = new Contacts.AddUnknownUser (unknownUsers, context); } if (progress != null) RunOnUiThread (() => progress.Dismiss ()); }
private void Message_ConversationsListComplete(object s, MessageGetConversationListCompletedEventArgs e) { LOLMessageClient client = (LOLMessageClient)s; client.MessageGetConversationListCompleted -= Message_ConversationsListComplete; if (e.Error == null) { if (MessageConversations.conversationsList.Count > 0) MessageConversations.conversationsList.Clear(); MessageConversations.conversationsList = e.Result; AndroidData.LastConvChecked = DateTime.Now; if (MessageConversations.initialMessages == null) MessageConversations.initialMessages = new List<MessageDB>(); else MessageConversations.initialMessages.Clear(); List<Guid> messagesToGet = new List<Guid>(); for (int i = 0; i < MessageConversations.conversationsList.Count; ++i) { MessageDB message = new MessageDB(); message = dbm.GetMessage(MessageConversations.conversationsList [i].MessageIDs [0].ToString()); if (message == null) { messagesToGet.Add(MessageConversations.conversationsList [i].MessageIDs [0]); #if DEBUG System.Diagnostics.Debug.WriteLine("MessageID (being sucked) = {0}", MessageConversations.conversationsList [i].MessageIDs [0]); #endif } else { MessageConversations.initialMessages.Add(message); #if DEBUG System.Diagnostics.Debug.WriteLine("MessageID (already stored) = {0}", message.MessageGuid); #endif } } if (messagesToGet.Count != 0) { client.MessageGetByListCompleted += Message_GetByListCompleted; client.MessageGetByListAsync(AndroidData.CurrentUser.AccountID, messagesToGet, AndroidData.CurrentUser.AccountID, new Guid(AndroidData.ServiceAuthToken)); } else { List<Guid> users = new List<Guid>(); for (int i = 0; i < MessageConversations.initialMessages.Count; ++i) { foreach (MessageRecipientDB guid in MessageConversations.initialMessages[i].MessageRecipientDBList) { UserDB user = new UserDB(); user = dbm.GetUserWithAccountID(guid.AccountGuid); if (user == null && (guid.AccountGuid != AndroidData.CurrentUser.AccountID.ToString())) users.Add(new Guid(guid.AccountGuid)); } } if (users.Count == 0) { RunOnUiThread(delegate { if (progress != null) progress.Dismiss(); CreateUI(); }); } else { createIt = true; Contacts.AddUnknownUser auu = new Contacts.AddUnknownUser(users, context); } } } else { int threadCount = waitThreadCount; for (int i = 0; i < threadCount; i++) { signal.Set(); }//end for isRefreshing = false; RunOnUiThread(() => GeneralUtils.Alert(context, Application.Context.GetString(Resource.String.errorConversationGrabTitle), Application.Context.GetString(Resource.String.errorConversationGrabMessage))); } }
public void Message_GetByListCompleted(object s, MessageGetByListCompletedEventArgs e) { LOLMessageClient client = (LOLMessageClient)s; client.MessageGetByListCompleted -= Message_GetByListCompleted; if (e.Error == null) { MessageDB msgDB = new MessageDB(); foreach (LOLMessageDelivery.Message message in e.Result) { msgDB = MessageDB.ConvertFromMessage(message); MessageConversations.initialMessages.Add(msgDB); } List<MessageDB> sortedList = new List<MessageDB>(); sortedList = MessageConversations.initialMessages.OrderBy(t => t.MessageSent).ToList(); MessageConversations.initialMessages = sortedList; dbm.InsertOrUpdateMessages(sortedList); List<Guid> users = new List<Guid>(); for (int i = 0; i < MessageConversations.initialMessages.Count; ++i) { foreach (MessageRecipientDB guid in MessageConversations.initialMessages[i].MessageRecipientDBList) { UserDB user = new UserDB(); user = dbm.GetUserWithAccountID(guid.AccountGuid); if (user == null && (guid.AccountGuid != AndroidData.CurrentUser.AccountID.ToString())) users.Add(new Guid(guid.AccountGuid)); } } if (users.Count == 0) { RunOnUiThread(delegate { if (progress != null) progress.Dismiss(); CreateUI(); }); } else { createIt = true; Contacts.AddUnknownUser auu = new Contacts.AddUnknownUser(users, context); //createNewUsers (users); } } }
private void CreateUI() { if (MessageConversations.clearView) { RunOnUiThread(() => listWrapper.RemoveAllViewsInLayout()); MessageConversations.clearView = false; } int c = 0; List<int> unreadMessages = new List<int>(); int numberInConversation = 0; foreach (LOLMessageConversation conversation in MessageConversations.conversationsList) { unreadMessages.Add(conversation.MessageIDs.Count - conversation.ReadMessageIDs.Count); int t = 0; } if (unknownUsers == null) unknownUsers = new List<Guid>(); else unknownUsers.Clear(); myView = null; LayoutInflater factory = LayoutInflater.From(this); List<Guid> unknownMessages = new List<Guid>(); foreach (MessageDB latestMessage in MessageConversations.initialMessages) { UserDB whoFrom = new UserDB(); whoFrom = dbm.GetUserWithAccountID(MessageConversations.conversationsList [c].Recipients [0].ToString()); if (latestMessage.MessageRecipientDBList.Count != 0) { if (whoFrom == null && latestMessage.MessageRecipientDBList [0].AccountGuid == AndroidData.CurrentUser.AccountID.ToString()) whoFrom = UserDB.ConvertFromUser(AndroidData.CurrentUser); if (whoFrom != null) { #if DEBUG System.Diagnostics.Debug.WriteLine("c = {0}, Recipient[0] Guid = {1}, whoFrom name = {2} {3}", c, MessageConversations.conversationsList [c].Recipients [0], whoFrom.FirstName, whoFrom.LastName); #endif List<UserDB> users = new List<UserDB>(); numberInConversation = latestMessage.MessageRecipientDBList.Count; for (int i = 0; i < (numberInConversation > 3 ? 3 : numberInConversation); ++i) { if (latestMessage.MessageRecipientDBList [i] != null) { UserDB current = dbm.GetUserWithAccountID(latestMessage.MessageRecipientDBList [i].AccountGuid.ToString()); if (current == null && latestMessage.MessageRecipientDBList [i].AccountGuid != AndroidData.CurrentUser.AccountID.ToString()) unknownUsers.Add(new Guid(latestMessage.MessageRecipientDBList [i].AccountGuid)); else { //users.Add (current); if (current == null && latestMessage.MessageRecipientDBList [i].AccountGuid == AndroidData.CurrentUser.AccountID.ToString()) users.Add(UserDB.ConvertFromUser(AndroidData.CurrentUser)); else users.Add(current); } } } UserDB sender = new UserDB(); sender = dbm.GetUserWithAccountID(latestMessage.FromAccountGuid); if (sender == null) sender = UserDB.ConvertFromUser(AndroidData.CurrentUser); if (numberInConversation == 1) myView = factory.Inflate(Resource.Layout.lstConversation, null); else myView = factory.Inflate(Resource.Layout.lstConversationMulti, null); int leftOver = (int)wowZapp.LaffOutOut.Singleton.ScreenXWidth - (int)ImageHelper.convertDpToPixel(imageSize [0] + 30f, context); LinearLayout shell = new LinearLayout(context); shell.Orientation = Orientation.Horizontal; shell.SetGravity(GravityFlags.CenterVertical); shell.LayoutParameters = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.WrapContent); shell.SetPadding(0, 0, 0, (int)ImageHelper.convertDpToPixel(5f, context)); RunOnUiThread(() => shell.AddView(myView)); if (users.Count != 0) generateUserImage(users, shell); TextView whoAmI = shell.FindViewById<TextView>(Resource.Id.textNames); string myName = sender.FirstName + " " + sender.LastName; if (numberInConversation != 1) { myName += string.Format(" and {0} other{1}", numberInConversation == 2 ? "1" : (numberInConversation - 1).ToString(), numberInConversation == 2 ? "." : "s."); } whoAmI.Text = myName; whoAmI.SetTextSize(Android.Util.ComplexUnitType.Dip, 12f); TextView txtMessage = shell.FindViewById<TextView>(Resource.Id.textMessageBubble); if (latestMessage.MessageStepDBList.Count == 1 && latestMessage.MessageStepDBList [0].StepType == MessageStep.StepTypes.Text) { txtMessage = messageTextBox(txtMessage, latestMessage, 0, leftOver); } else { for (int n = 0; n < latestMessage.MessageStepDBList.Count; ++n) { if (latestMessage.MessageStepDBList [n].StepType == MessageStep.StepTypes.Text) { txtMessage = messageTextBox(txtMessage, latestMessage, n, leftOver); break; } } } txtMessage.ContentDescription = latestMessage.MessageID.ToString(); #if DEBUG System.Diagnostics.Debug.WriteLine("ContentDesctription = {0}, ID = {1}", txtMessage.ContentDescription, latestMessage.ID); #endif txtMessage.Click += textMessage_Click; TextView txtDateSent = shell.FindViewById<TextView>(Resource.Id.textDateSent); txtDateSent.Text = latestMessage.MessageSent.ToShortDateString(); TextView txtMessageUnread = shell.FindViewById<TextView>(Resource.Id.txtMessageUnread); txtMessageUnread.SetTextSize(Android.Util.ComplexUnitType.Dip, 10f); if (unreadMessages [c] == 0) txtMessageUnread.Text = context.Resources.GetString(Resource.String.conversationUINoUnreadMessages); else txtMessageUnread.Text = string.Format("({0}) {1}{2}", unreadMessages [c], context.Resources.GetString(Resource.String.conversationUIUnreadMessages), unreadMessages [c] == 1 ? "." : "s."); LinearLayout messageItems = shell.FindViewById<LinearLayout>(Resource.Id.linearLayout7); if (latestMessage.MessageStepDBList.Count > 0) { createMessageBar(messageItems, latestMessage, leftOver); messageItems.ContentDescription = latestMessage.MessageGuid; messageItems.Click += messageBar_Click; } RunOnUiThread(delegate { listWrapper.AddView(shell); shell = null; }); #if DEBUG System.Diagnostics.Debug.WriteLine("done a loop"); #endif } } if (c < MessageConversations.initialMessages.Count - 2) c++; } //}); if (unknownUsers.Count != 0) { Contacts.AddUnknownUser auu = new Contacts.AddUnknownUser(unknownUsers, context); } if (progress != null) RunOnUiThread(() => progress.Dismiss()); }