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());
        }