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 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 새로고침 }
protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data) { base.OnActivityResult(requestCode, resultCode, data); switch (requestCode) { case REQUEST_NEWWELCOME_COMPLETE: Setup(); break; case REQUEST_RECATEGORIZE_COMPLETE: LableDBManager.Get().Load(); LoadMessageDB(); _TabFragManager.RefreshLayout(); break; } }
//툴바 선택시 public override bool OnOptionsItemSelected(IMenuItem item) { if (item.ItemId == Resource.Id.toolbar_search) { RunOnUiThread(() => { Toast.MakeText(this, "준비중인 기능입니다.", ToastLength.Short).Show(); }); } else if (item.ItemId == Resource.Id.toolbar_recategorize) { DataStorageManager.SaveBoolData(this, "needRecategorize", true); LableDBManager.Get().Drop(); StartActivityForResult(typeof(WelcomeActivity), REQUEST_RECATEGORIZE_COMPLETE); } else { RunOnUiThread(() => { Toast.MakeText(this, "준비중인 기능입니다.", ToastLength.Short).Show(); }); } return(base.OnOptionsItemSelected(item)); }
//웰컴페이지가 끝나거나, 처음사용자가 아닌경우 바로 이 메소드로 옮. public async void Setup() { Task contactLoadTsk = Task.Run(() => ContactDBManager.Get()); //연락처를 모두 메모리에 올림 Task lableLoadTsk = Task.Run(() => LableDBManager.Get().Load()); //레이블 DB를 모두 메모리에 올림 CreateNotificationChannel(); SetupLayout(); await contactLoadTsk; SetupContactLayout(); await lableLoadTsk; Task messageLoadTsk = Task.Run(() => LoadMessageDB()); //메시지를 모두 메모리에 올림 SetupDialogueLayout(messageLoadTsk); }
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)); } }