//----------------------------------------------------------------- //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("문자 전송 실패시 코드 짜라"); } }
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; }
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")); }
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; } }
public ActionResult DeleteMessageDialog(int id) { int messageId = id; MessageDBManager messageDBManager = new MessageDBManager(); messageDBManager.DeleteMessageById(id); return(RedirectToAction("Index")); }
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")); }
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); } }
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 새로고침 }
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")); }
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); }
//----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()); }
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); }
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 = "메시지를 불러오는 중"; } } }
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)); } }
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")); }
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); }
//----------------------------------------------------------------- //리시버 //문자 전송 이후 호출됨 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("문자 전송 실패시 코드 짜라"); } }
private void LoadMessageDB() { MessageDBManager.Get().RefreshLastMessageAll(); _MessageLoadedOnce = true; }
//문자 수신 이후 현재 대화를 업데이트 해야하는 경우 호출됨. public void ReloadCurrentDialogue() { _CurDialogue = MessageDBManager.Get().LoadDialogue(_CurThread_id, true, (int)TextMessage.MESSAGE_TYPE.ALL); }