@Override
  public void onActivityResult(int reqCode, int resultCode, Intent data) {
    Log.w(TAG, "onActivityResult called: " + reqCode + ", " + resultCode + " , " + data);
    super.onActivityResult(reqCode, resultCode, data);

    if (data == null || resultCode != RESULT_OK) return;
    switch (reqCode) {
      case PICK_IMAGE:
        addAttachmentImage(data.getData());
        break;
      case PICK_VIDEO:
        addAttachmentVideo(data.getData());
        break;
      case PICK_AUDIO:
        addAttachmentAudio(data.getData());
        break;
      case PICK_CONTACT_INFO:
        addContactInfo(data.getData());
        break;
      case GROUP_EDIT:
        this.recipients = data.getParcelableExtra(GroupCreateActivity.GROUP_RECIPIENT_EXTRA);
        initializeTitleBar();
        break;
    }
  }
 @Override
 protected void onDestroy() {
   unregisterReceiver(securityUpdateReceiver);
   unregisterReceiver(groupUpdateReceiver);
   saveDraft();
   MemoryCleaner.clean(masterSecret);
   super.onDestroy();
 }
 @Override
 public void onBackPressed() {
   if (emojiDrawer.getVisibility() == View.VISIBLE) {
     emojiDrawer.setVisibility(View.GONE);
     emojiToggle.toggle();
   } else {
     super.onBackPressed();
   }
 }
  @Override
  protected void onCreate(Bundle icicle) {
    super.onCreate(icicle);

    ActionBar actionBar = this.getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.setDisplayHomeAsUpEnabled(true);

    setContentView(R.layout.contact_selection_activity);

    setupContactsTab();
    setupGroupsTab();
    setupRecentTab();
  }
  @Override
  protected void onCreate(Bundle state) {
    overridePendingTransition(R.anim.slide_from_right, R.anim.fade_scale_out);
    dynamicTheme.onCreate(this);
    dynamicLanguage.onCreate(this);
    super.onCreate(state);

    setContentView(R.layout.conversation_activity);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    initializeReceivers();
    initializeResources();
    initializeDraft();
    initializeTitleBar();
  }
  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    super.onOptionsItemSelected(item);
    switch (item.getItemId()) {
      case R.id.menu_call:
        handleDial(getRecipients().getPrimaryRecipient());
        return true;
      case R.id.menu_delete_thread:
        handleDeleteThread();
        return true;
      case R.id.menu_add_contact_info:
        handleAddContactInfo();
        return true;
      case R.id.menu_add_attachment:
        handleAddAttachment();
        return true;
      case R.id.menu_start_secure_session:
        handleStartSecureSession();
        return true;
      case R.id.menu_abort_session:
        handleAbortSecureSession();
        return true;
      case R.id.menu_verify_identity:
        handleVerifyIdentity();
        return true;
      case R.id.menu_group_recipients:
        handleDisplayGroupRecipients();
        return true;
      case R.id.menu_distribution_broadcast:
        handleDistributionBroadcastEnabled(item);
        return true;
      case R.id.menu_distribution_conversation:
        handleDistributionConversationEnabled(item);
        return true;
      case R.id.menu_edit_group:
        handleEditPushGroup();
        return true;
      case R.id.menu_leave:
        handleLeavePushGroup();
        return true;
      case android.R.id.home:
        handleReturnToConversationList();
        return true;
    }

    return false;
  }
  @Override
  protected void onResume() {
    super.onResume();
    dynamicTheme.onResume(this);
    dynamicLanguage.onResume(this);

    initializeSecurity();
    initializeScreenshotSecurity();
    initializeTitleBar();
    initializeEnabledCheck();
    initializeMmsEnabledCheck();
    initializeIme();
    initializeCharactersLeftViewEnabledCheck();
    calculateCharactersRemaining();

    MessageNotifier.setVisibleThread(threadId);
    markThreadAsRead();
  }
  @Override
  public boolean onPrepareOptionsMenu(Menu menu) {
    MenuInflater inflater = this.getSupportMenuInflater();
    menu.clear();

    boolean pushRegistered = TextSecurePreferences.isPushRegistered(this);

    if (isSingleConversation() && isEncryptedConversation) {
      inflater.inflate(R.menu.conversation_secure_identity, menu);
      inflater.inflate(
          R.menu.conversation_secure_sms, menu.findItem(R.id.menu_security).getSubMenu());
    } else if (isSingleConversation() && !pushRegistered) {
      inflater.inflate(R.menu.conversation_insecure, menu);
    }

    if (isSingleConversation()) {
      inflater.inflate(R.menu.conversation_callable, menu);
    } else if (isGroupConversation()) {
      inflater.inflate(R.menu.conversation_group_options, menu);

      if (!isPushGroupConversation()) {
        inflater.inflate(R.menu.conversation_mms_group_options, menu);
        if (distributionType == ThreadDatabase.DistributionTypes.BROADCAST) {
          menu.findItem(R.id.menu_distribution_broadcast).setChecked(true);
        } else {
          menu.findItem(R.id.menu_distribution_conversation).setChecked(true);
        }
      } else if (isActiveGroup()) {
        inflater.inflate(R.menu.conversation_push_group_options, menu);
      }
    }

    inflater.inflate(R.menu.conversation, menu);
    super.onPrepareOptionsMenu(menu);
    return true;
  }
 @Override
 protected void onPause() {
   super.onPause();
   MessageNotifier.setVisibleThread(-1L);
   if (isFinishing()) overridePendingTransition(R.anim.fade_scale_in, R.anim.slide_to_right);
 }
 @Override
 protected void onStart() {
   super.onStart();
 }