Esempio n. 1
0
        //-----------------------------------------------------------------
        //Message Sent

        //문자 전송 이후 호출됨
        private void _SmsSentReceiver_SentCompleteEvent(int resultCode)
        {
            //문자 전송 성공
            if (resultCode.Equals((int)Result.Ok))
            {
                //DB에 삽입
                MessageDBManager.Get().InsertMessage(_AddressBox.Text, _MsgBox.Text, 1, (int)TextMessage.MESSAGE_TYPE.SENT);

                //메세지 DB 새로고침. 느리다. 최적화나 쓰레딩 필요.
                MessageDBManager.Get().RefreshLastMessageAll();

                //MainFragActivity.RefreshUI();

                Context context = MainActivity._Instance;

                Intent intent = new Intent(context, typeof(DialogueActivity));
                intent.PutExtra("address", _AddressBox.Text);

                context.StartActivity(intent);
            }
            else
            {
                //문자 전송 실패시
                Toast.MakeText(this, "문자 전송에 실패하였습니다.", ToastLength.Long).Show();
                //throw new Exception("문자 전송 실패시 코드 짜라");
            }
        }
Esempio n. 2
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            SetContentView(Resource.Layout.DialogueActivity);

            _Instance = this;

            if (MessageDBManager.Get().IsLoaded == false)
            {
                ContactDBManager.Get();                                 //연락처를 모두 메모리에 올림
                LableDBManager.Get().Load();                            //레이블 DB를 모두 메모리에 올림
                MessageDBManager.Get().RefreshLastMessageAll();
            }


            _CurAddress   = Intent.GetStringExtra("address");                                                            //액티비티 인자로 전화번호를 받는다.
            _CurThread_id = MessageDBManager.Get().GetThreadId(_CurAddress);                                             //해당 전화번호로 등록된 thread_id를 찾는다.

            _CurDialogue = MessageDBManager.Get().LoadDialogue(_CurThread_id, false, (int)TextMessage.MESSAGE_TYPE.ALL); //thread_id로 기존에 대화가 존재하는지 찾는다.
            if (_CurDialogue == null)                                                                                    //대화가 없으면 새로 만든다.
            {
                CreateNewDialogue(_CurAddress);
            }

            SetupLayout();

            SetupToolbar();

            //문자 전송 브로드캐스트 리시버 초기화
            _SmsSentReceiver = new SmsSentReceiver();
            _SmsSentReceiver.SentCompleteEvent += _SmsSentReceiver_SentCompleteEvent;
        }
Esempio n. 3
0
        public ActionResult EditMessageView(Message message, string userName)
        {
            MessageDBManager messageDBManager = new MessageDBManager();
            UserDBManager    userDBManager    = new UserDBManager();

            ViewBag.orgMessage = (Message)TempData["orgMessage"];
            ViewBag.orgUser    = (User)TempData["orgUser"];
            User user = userDBManager.GetUserByName(userName);

            if (user == null)
            {
                userDBManager.InsertUser(new User(userName));
            }

            try
            {
                message.UserId = userDBManager.GetUserByName(userName).UserId;
                messageDBManager.UpdataMessageById(message.MessageId, message);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            return(RedirectToAction("Index"));
        }
Esempio n. 4
0
        private void UpdateNotiCount()
        {
            foreach (TabFrag objTab in tabFrags)
            {
                int         totalUnreadCnt = 0;
                DialogueSet objDialogueSet;

                if (objTab.Category == (int)Dialogue.LableType.ALL)
                {
                    objDialogueSet = MessageDBManager.Get().TotalDialogueSet;
                }
                else if (objTab.Category == (int)Dialogue.LableType.UNKNOWN)
                {
                    objDialogueSet = MessageDBManager.Get().UnknownDialogueSet;
                }
                else
                {
                    objDialogueSet = MessageDBManager.Get().DialogueSets[objTab.Category];
                }

                foreach (Dialogue objDialogue in objDialogueSet.DialogueList.Values)
                {
                    totalUnreadCnt += objDialogue.UnreadCnt;
                }
                objTab.NotiCount = totalUnreadCnt;
            }
        }
Esempio n. 5
0
        public ActionResult DeleteMessageDialog(int id)
        {
            int messageId = id;
            MessageDBManager messageDBManager = new MessageDBManager();

            messageDBManager.DeleteMessageById(id);
            return(RedirectToAction("Index"));
        }
Esempio n. 6
0
        public ActionResult EditView(int id)
        {
            MessageDBManager messageDBManager = new MessageDBManager();
            UserDBManager    userDBManager    = new UserDBManager();

            Message orgMessage = messageDBManager.GetMessageById(id);
            User    user       = userDBManager.GetUserById(orgMessage.UserId);

            TempData["orgMessage"] = orgMessage;
            TempData["orgUser"]    = user;
            return(RedirectToAction("EditMessageView"));
        }
Esempio n. 7
0
        private void LoadMessageDBAsync()
        {
            MessageDBManager.Get().UnknownDialogueSet.Clear();

            //전체탭에 들어간 대화 중 연락처가 없는 대화는 모두 로드하여 Unknown 카테고리에 넣음.
            MessageDBManager.Get().LoadUnknownMetaDatas();

            //Unknown 카테고리에 들어간 대화의 내용을 모두 로드
            foreach (Dialogue objDialogue in MessageDBManager.Get().UnknownDialogueSet.DialogueList.Values)
            {
                MessageDBManager.Get().ReLoadDialogue(objDialogue, (int)TextMessage.MESSAGE_TYPE.RECEIVED);
            }
        }
Esempio n. 8
0
        public override void OnReceive(Context context, Intent intent)
        {
            var msgs = Telephony.Sms.Intents.GetMessagesFromIntent(intent);

            string      displayName = string.Empty;
            int         unreadCnt   = 0;
            TextMessage objMsg      = null;

            foreach (var msg in msgs)
            {
                objMsg = ConvertToCustomMessageType(msg);                                                      //시스템 메시지 형식을 레뜨레 메시지 형식으로 변환

                UpdateMessage(context, objMsg);                                                                //메시지를 안드로이드 메시지 DB에 삽입

                ContactData objContact = ContactDBManager.Get().GetContactDataByAddress(objMsg.Address, true); //연락처에 있는지 조회

                //연락처에 없으면 서버에 전송.
                if (objContact == null)
                {
                    if (DataStorageManager.LoadBoolData(context, "useOfflineMode", false) == true)
                    {
                        //오프라인 모드 사용 시
                    }
                    else
                    {
                        //온라인 모드 사용 시
                        LableDBManager.Get().AccumulateLableDB(objMsg);                                 //서버에서 레이블 데이터 받은 후 레이블 DB에 저장
                    }

                    displayName = objMsg.Address;                                                   //연락처에 없으면 전화번호로 이름 표시
                }
                else
                {
                    displayName = objContact.Name;                                                  //연락처에 있으면 표시될 이름 변경
                }

                unreadCnt++;                                                                                                                          //읽지않은 개수 카운트

                NotificationHandler.ShowNotification(context, "Lettre Channel 1", displayName, objMsg.Msg, objMsg.Address, "Ticker", 101, unreadCnt); //알림 표시

                //IsLoaded가 true이면 어플이 포그라운드, 메시지 목록이 메모리에 올라와있는 상태임.
                //false이면 최근 메시지목록을 불러오지 않는다. (메모리에 올라간 메시지가 없기 때문에 Refresh하려면 크래시남)
                if (MessageDBManager.Get().IsLoaded == true)
                {
                    long thread_id = MessageDBManager.Get().GetThreadId(objMsg.Address);
                    MessageDBManager.Get().RefreshLastMessage(thread_id);                       //해당 메시지가 속하는 대화를 찾아 최신문자를 새로고침함.
                }
            }

            MainFragActivity.RefreshUI();               //UI 새로고침
        }
Esempio n. 9
0
        public ActionResult SearchByText(string text)
        {
            MessageDBManager           messageDBManager    = new MessageDBManager();
            UserDBManager              userDBManager       = new UserDBManager();
            List <Message>             messageList         = messageDBManager.GetMessageByText(text);
            Dictionary <Message, User> messageWithUserList = new Dictionary <Message, User>();

            foreach (Message message in messageList)
            {
                messageWithUserList.Add(message, userDBManager.GetUserById(message.UserId));
            }

            TempData["messageList"] = messageWithUserList;
            return(RedirectToAction("Index"));
        }
Esempio n. 10
0
        private TextMessage ConvertToCustomMessageType(SmsMessage msg)
        {
            TextMessage objMessage = new TextMessage();

            objMessage.Address = msg.OriginatingAddress;
            objMessage.Msg     = msg.MessageBody;

            DateTimeUtillity dtu = new DateTimeUtillity();

            objMessage.Time = dtu.getCurrentMilTime();

            objMessage.ReadState = (int)TextMessage.MESSAGE_READSTATE.UNREAD;
            objMessage.Type      = (int)TextMessage.MESSAGE_TYPE.RECEIVED;
            objMessage.Thread_id = MessageDBManager.Get().GetThreadId(msg.OriginatingAddress);

            return(objMessage);
        }
Esempio n. 11
0
        //----controller
        public ActionResult Index()
        {
            MessageDBManager           messageDBManager    = new MessageDBManager();
            List <Message>             messageList         = messageDBManager.GetAllMessage();
            Dictionary <Message, User> messageWithUserList = new Dictionary <Message, User>();

            if (TempData["messageList"] == null)
            {
                UserDBManager userDBManager = new UserDBManager();
                foreach (Message message in messageList)
                {
                    messageWithUserList.Add(message, userDBManager.GetUserById(message.UserId));
                }

                TempData["messageList"] = messageWithUserList;
            }
            return(View());
        }
Esempio n. 12
0
        private void CreateNewDialogue(string address)
        {
            _CurDialogue         = new Dialogue();
            _CurDialogue.Address = address;
            _CurDialogue.Contact = ContactDBManager.Get().GetContactDataByAddress(address, false);

            if (_CurDialogue.Contact != null)
            {
                _CurDialogue.DisplayName = _CurDialogue.Contact.Name;
                _CurDialogue.MajorLable  = (int)Dialogue.LableType.COMMON;
            }
            else
            {
                _CurDialogue.DisplayName = address;
                _CurDialogue.MajorLable  = (int)Dialogue.LableType.UNKNOWN;
            }

            _CurDialogue.UnreadCnt = 0;
            _CurDialogue.Thread_id = MessageDBManager.Get().GetThreadId(address);
        }
        // 연락처를 클릭했을 때 대화액티비티를 보여준다.
        void OnClick(int iPosition)
        {
            //해당 연락처와의 대화가 있었는지 탐색
            ContactData objContact  = _FilteredItem[iPosition].PrimaryContactData;
            long        thread_id   = MessageDBManager.Get().GetThreadId(objContact.Address);
            Dialogue    objDialogue = MessageDBManager.Get().FindDialogue(thread_id);

            //연락처와의 대화 페이지를 보여준다.
            Context context = MainActivity._Instance;
            Intent  intent  = new Intent(context, typeof(DialogueActivity));

            //기존 대화가 존재하면 기존 대화를 보여준다.
            if (objDialogue != null)
            {
                intent.PutExtra("thread_id", objDialogue.Thread_id);
            }
            intent.PutExtra("category", (int)Dialogue.LableType.COMMON);        //연락처로부터 나온 대화이므로, 레이블은 일반 대화임.
            intent.PutExtra("address", objContact.Address);

            context.StartActivity(intent);
        }
Esempio n. 14
0
        public void RefreshRecyclerView()
        {
            //데이터 준비 : 현재 탭에 해당되는 대화목록을 가져온다.
            if (_Category == (int)Dialogue.LableType.ALL)
            {
                _DialogueSet = MessageDBManager.Get().TotalDialogueSet;
            }
            else if (_Category == (int)Dialogue.LableType.UNKNOWN)
            {
                _DialogueSet = MessageDBManager.Get().UnknownDialogueSet;
            }
            else
            {
                _DialogueSet = MessageDBManager.Get().DialogueSets[_Category];
            }

            //대화가 있으면 리사이클러 뷰 내용안에 표시하도록 함
            if (_DialogueSet.Count > 0)
            {
                DialogueSetAdpater adapter = new DialogueSetAdpater(_DialogueSet, _Category, _LayoutManager);
                _RecyclerView.SetAdapter(adapter);
            }
            else
            {
                //문자가 없으면 없다고 알려준다.
                _GuideText.Visibility    = ViewStates.Visible;
                _RecyclerView.Visibility = ViewStates.Gone;

                if (MainActivity._Instance._MessageLoadedOnce)
                {
                    _GuideText.Text = "메시지가 존재하지 않습니다";
                }
                else
                {
                    _GuideText.Text = "메시지를 불러오는 중";
                }
            }
        }
Esempio n. 15
0
        private async void CreateLableDB()
        {
            //메시지 DB가 로드될때까지 대기
            RunOnUiThread(() => { Toast.MakeText(this, "메시지 DB를 불러오는중...[1/4]", ToastLength.Short).Show(); });
            await _MessageDBLoadTsk;

            //미분류 메시지가 하나도 없는 경우
            if (MessageDBManager.Get().UnknownDialogueSet.Count <= 0)
            {
                _OnCategorizeComplete.Invoke(this, new CategorizeEventArgs((int)CategorizeEventArgs.RESULT.EMPTY));
                return;
            }

            //서버와 통신해서 Lable DB 생성 후 메모리에 올림.
            LableDBManager.Get().CreateDBProgressEvent += WelcomeActivity_CreateDBProgressEvent;

            bool isOffline = DataStorageManager.LoadBoolData(this, "useOfflineMode", false);

            if (isOffline)
            {
                LableDBManager.Get().CreateLableDB_Offline(MessageDBManager.Get().UnknownDialogueSet);
            }
            else
            {
                LableDBManager.Get().CreateLableDB(MessageDBManager.Get().UnknownDialogueSet);
            }

            //레이블 DB가 생성되었나?
            if (LableDBManager.Get().IsDBExist())
            {
                _OnCategorizeComplete.Invoke(this, new CategorizeEventArgs((int)CategorizeEventArgs.RESULT.SUCCESS));
            }
            else
            {
                _OnCategorizeComplete.Invoke(this, new CategorizeEventArgs((int)CategorizeEventArgs.RESULT.FAIL));
            }
        }
Esempio n. 16
0
        public ActionResult MessageAdd(Message message, string userName)
        {
            UserDBManager userDBManager = new UserDBManager();

            User user = userDBManager.GetUserByName(userName);

            if (user == null)
            {
                userDBManager.InsertUser(new User(userName));
            }

            MessageDBManager messageDBManager = new MessageDBManager();

            try
            {
                message.UserId = userDBManager.GetUserByName(userName).UserId;
                messageDBManager.InsertMessage(message);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            return(RedirectToAction("Index"));
        }
Esempio n. 17
0
        public void RefreshRecyclerView()
        {
            //기존에 대화가 있었다면 업데이트, 없으면 새로만들어진 경우이므로 유지
            Dialogue updatedDialogue = MessageDBManager.Get().LoadDialogue(_CurThread_id, true, (int)TextMessage.MESSAGE_TYPE.ALL);

            if (updatedDialogue != null)
            {
                _CurDialogue = updatedDialogue;
            }

            //대화를 모두 읽음으로 처리
            _CurDialogue.UnreadCnt = 0;
            foreach (TextMessage msg in _CurDialogue.TextMessageList)
            {
                if (msg.ReadState == (int)TextMessage.MESSAGE_READSTATE.UNREAD)
                {
                    msg.ReadState = (int)TextMessage.MESSAGE_READSTATE.READ;
                    MessageDBManager.Get().ChangeReadState(msg, (int)TextMessage.MESSAGE_READSTATE.READ);
                }
            }

            //대화를 리사이클러 뷰에 넣게 알맞은 형태로 변환. 헤더도 이때 포함시킨다.
            _RecyclerItems = GetRecyclerItem(_CurDialogue);

            //리사이클러 뷰 내용안에 표시함
            LinearLayoutManager layoutManager = new LinearLayoutManager(Application.Context);

            layoutManager.ReverseLayout = true;
            layoutManager.StackFromEnd  = true;

            RecyclerItemAdpater Adapter = new RecyclerItemAdpater(_RecyclerItems, _CurDialogue.Contact);

            _RecyclerView.SetAdapter(Adapter);
            _RecyclerView.SetLayoutManager(layoutManager);
            _RecyclerView.ScrollToPosition(0);
        }
Esempio n. 18
0
        //-----------------------------------------------------------------
        //리시버

        //문자 전송 이후 호출됨
        private void _SmsSentReceiver_SentCompleteEvent(int resultCode)
        {
            //문자 전송 성공
            if (resultCode.Equals((int)Result.Ok))
            {
                //메시지를 DB에 삽입
                MessageDBManager.Get().InsertMessage(_CurDialogue.Address, _MsgBox.Text, 1, (int)TextMessage.MESSAGE_TYPE.SENT);

                //입력칸 비우기
                _MsgBox.Text = string.Empty;

                //해당 대화의 모든 메시지를 DB로부터 가져와 메모리에 다시 올림.
                _CurDialogue = MessageDBManager.Get().RefreshLastMessage(_CurDialogue.Thread_id);

                //UI 업데이트
                MainFragActivity.RefreshUI();
            }
            else
            {
                //문자 전송 실패시
                Toast.MakeText(this, "문자 전송에 실패하였습니다.", ToastLength.Long).Show();
                //throw new Exception("문자 전송 실패시 코드 짜라");
            }
        }
Esempio n. 19
0
 private void LoadMessageDB()
 {
     MessageDBManager.Get().RefreshLastMessageAll();
     _MessageLoadedOnce = true;
 }
Esempio n. 20
0
 //문자 수신 이후 현재 대화를 업데이트 해야하는 경우 호출됨.
 public void ReloadCurrentDialogue()
 {
     _CurDialogue = MessageDBManager.Get().LoadDialogue(_CurThread_id, true, (int)TextMessage.MESSAGE_TYPE.ALL);
 }