@Override
 public void onBackPressed() {
   if (chatActivityEnterView.isEmojiPopupShowing()) {
     chatActivityEnterView.hideEmojiPopup();
     return;
   }
   super.onBackPressed();
 }
 @Override
 protected void onPause() {
   super.onPause();
   overridePendingTransition(0, 0);
   if (chatActivityEnterView != null) {
     chatActivityEnterView.hideEmojiPopup();
     chatActivityEnterView.setFieldFocused(false);
   }
   ConnectionsManager.getInstance().setAppPaused(true, false);
 }
  private void getNewMessage() {
    if (NotificationsController.getInstance().popupMessages.isEmpty()) {
      onFinish();
      finish();
      return;
    }

    boolean found = false;
    if ((currentMessageNum != 0 || chatActivityEnterView.hasText() || startedMoving)
        && currentMessageObject != null) {
      for (int a = 0; a < NotificationsController.getInstance().popupMessages.size(); a++) {
        if (NotificationsController.getInstance().popupMessages.get(a).getId()
            == currentMessageObject.getId()) {
          currentMessageNum = a;
          found = true;
          break;
        }
      }
    }
    if (!found) {
      currentMessageNum = 0;
      currentMessageObject = NotificationsController.getInstance().popupMessages.get(0);
      updateInterfaceForCurrentMessage(0);
    } else if (startedMoving) {
      if (currentMessageNum == NotificationsController.getInstance().popupMessages.size() - 1) {
        prepareLayouts(3);
      } else if (currentMessageNum == 1) {
        prepareLayouts(4);
      }
    }
    countText.setText(
        String.format(
            "%d/%d",
            currentMessageNum + 1, NotificationsController.getInstance().popupMessages.size()));
  }
 @Override
 protected void onResume() {
   super.onResume();
   if (chatActivityEnterView != null) {
     chatActivityEnterView.setFieldFocused(true);
   }
   ConnectionsManager.getInstance().setAppPaused(false, false);
   fixLayout();
   checkAndUpdateAvatar();
   wakeLock.acquire(7000);
 }
  private void updateInterfaceForCurrentMessage(int move) {
    if (actionBar == null) {
      return;
    }
    currentChat = null;
    currentUser = null;
    long dialog_id = currentMessageObject.getDialogId();
    chatActivityEnterView.setDialogId(dialog_id);
    if ((int) dialog_id != 0) {
      int lower_id = (int) dialog_id;
      if (lower_id > 0) {
        currentUser = MessagesController.getInstance().getUser(lower_id);
      } else {
        currentChat = MessagesController.getInstance().getChat(-lower_id);
        currentUser =
            MessagesController.getInstance().getUser(currentMessageObject.messageOwner.from_id);
      }
    } else {
      TLRPC.EncryptedChat encryptedChat =
          MessagesController.getInstance().getEncryptedChat((int) (dialog_id >> 32));
      currentUser = MessagesController.getInstance().getUser(encryptedChat.user_id);
    }

    if (currentChat != null && currentUser != null) {
      nameTextView.setText(currentChat.title);
      onlineTextView.setText(
          ContactsController.formatName(currentUser.first_name, currentUser.last_name));
      nameTextView.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
      nameTextView.setCompoundDrawablePadding(0);
    } else if (currentUser != null) {
      nameTextView.setText(
          ContactsController.formatName(currentUser.first_name, currentUser.last_name));
      if ((int) dialog_id == 0) {
        nameTextView.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_white, 0, 0, 0);
        nameTextView.setCompoundDrawablePadding(AndroidUtilities.dp(4));
      } else {
        nameTextView.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
        nameTextView.setCompoundDrawablePadding(0);
      }
    }

    prepareLayouts(move);
    updateSubtitle();
    checkAndUpdateAvatar();
    applyViewsLayoutParams(0);
  }
 protected void onFinish() {
   if (finished) {
     return;
   }
   finished = true;
   NotificationCenter.getInstance().removeObserver(this, NotificationCenter.appDidLogout);
   NotificationCenter.getInstance().removeObserver(this, NotificationCenter.pushMessagesUpdated);
   NotificationCenter.getInstance().removeObserver(this, NotificationCenter.updateInterfaces);
   NotificationCenter.getInstance()
       .removeObserver(this, NotificationCenter.audioProgressDidChanged);
   NotificationCenter.getInstance().removeObserver(this, NotificationCenter.audioDidReset);
   NotificationCenter.getInstance().removeObserver(this, NotificationCenter.contactsDidLoaded);
   NotificationCenter.getInstance().removeObserver(this, NotificationCenter.emojiDidLoaded);
   if (chatActivityEnterView != null) {
     chatActivityEnterView.onDestroy();
   }
   if (wakeLock.isHeld()) {
     wakeLock.release();
   }
 }
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    classGuid = ConnectionsManager.getInstance().generateClassGuid();
    NotificationCenter.getInstance().addObserver(this, NotificationCenter.appDidLogout);
    NotificationCenter.getInstance().addObserver(this, NotificationCenter.pushMessagesUpdated);
    NotificationCenter.getInstance().addObserver(this, NotificationCenter.updateInterfaces);
    NotificationCenter.getInstance().addObserver(this, NotificationCenter.audioProgressDidChanged);
    NotificationCenter.getInstance().addObserver(this, NotificationCenter.audioDidReset);
    NotificationCenter.getInstance().addObserver(this, NotificationCenter.contactsDidLoaded);
    NotificationCenter.getInstance().addObserver(this, NotificationCenter.emojiDidLoaded);

    typingDotsDrawable = new TypingDotsDrawable();
    recordStatusDrawable = new RecordStatusDrawable();

    SizeNotifierRelativeLayout contentView = new SizeNotifierRelativeLayout(this);
    setContentView(contentView);
    contentView.setBackgroundColor(0x99000000);

    RelativeLayout relativeLayout = new RelativeLayout(this);
    contentView.addView(relativeLayout);
    RelativeLayout.LayoutParams layoutParams3 =
        (RelativeLayout.LayoutParams) relativeLayout.getLayoutParams();
    layoutParams3.width = LayoutHelper.MATCH_PARENT;
    layoutParams3.height = LayoutHelper.MATCH_PARENT;
    relativeLayout.setLayoutParams(layoutParams3);

    RelativeLayout popupContainer = new RelativeLayout(this);
    popupContainer.setBackgroundColor(0xffffffff);
    relativeLayout.addView(popupContainer);
    layoutParams3 = (RelativeLayout.LayoutParams) popupContainer.getLayoutParams();
    layoutParams3.width = LayoutHelper.MATCH_PARENT;
    layoutParams3.height = AndroidUtilities.dp(240);
    layoutParams3.leftMargin = AndroidUtilities.dp(12);
    layoutParams3.rightMargin = AndroidUtilities.dp(12);
    layoutParams3.addRule(RelativeLayout.CENTER_IN_PARENT);
    popupContainer.setLayoutParams(layoutParams3);

    if (chatActivityEnterView != null) {
      chatActivityEnterView.onDestroy();
    }
    chatActivityEnterView = new ChatActivityEnterView(this, contentView, null, false);
    popupContainer.addView(chatActivityEnterView);
    layoutParams3 = (RelativeLayout.LayoutParams) chatActivityEnterView.getLayoutParams();
    layoutParams3.width = LayoutHelper.MATCH_PARENT;
    layoutParams3.height = LayoutHelper.WRAP_CONTENT;
    layoutParams3.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    chatActivityEnterView.setLayoutParams(layoutParams3);
    chatActivityEnterView.setDelegate(
        new ChatActivityEnterView.ChatActivityEnterViewDelegate() {
          @Override
          public void onMessageSend(String message) {
            if (currentMessageObject == null) {
              return;
            }
            if (currentMessageNum >= 0
                && currentMessageNum < NotificationsController.getInstance().popupMessages.size()) {
              NotificationsController.getInstance().popupMessages.remove(currentMessageNum);
            }
            MessagesController.getInstance()
                .markDialogAsRead(
                    currentMessageObject.getDialogId(),
                    currentMessageObject.getId(),
                    Math.max(0, currentMessageObject.getId()),
                    0,
                    currentMessageObject.messageOwner.date,
                    true,
                    true);
            currentMessageObject = null;
            getNewMessage();
          }

          @Override
          public void onTextChanged(CharSequence text, boolean big) {}

          @Override
          public void needSendTyping() {
            if (currentMessageObject != null) {
              MessagesController.getInstance()
                  .sendTyping(currentMessageObject.getDialogId(), 0, classGuid);
            }
          }

          @Override
          public void onAttachButtonHidden() {}

          @Override
          public void onAttachButtonShow() {}

          @Override
          public void onWindowSizeChanged(int size) {}
        });

    messageContainer = new FrameLayoutTouch(this);
    popupContainer.addView(messageContainer, 0);

    actionBar = new ActionBar(this);
    actionBar.setOccupyStatusBar(false);
    actionBar.setBackButtonImage(R.drawable.ic_ab_back);
    actionBar.setBackgroundColor(0xff54759e);
    actionBar.setItemsBackground(R.drawable.bar_selector);
    popupContainer.addView(actionBar);
    ViewGroup.LayoutParams layoutParams = actionBar.getLayoutParams();
    layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
    actionBar.setLayoutParams(layoutParams);

    ActionBarMenu menu = actionBar.createMenu();
    View view = menu.addItemResource(2, R.layout.popup_count_layout);
    countText = (TextView) view.findViewById(R.id.count_text);

    avatarContainer = new FrameLayoutFixed(this);
    avatarContainer.setBackgroundResource(R.drawable.bar_selector);
    avatarContainer.setPadding(AndroidUtilities.dp(4), 0, AndroidUtilities.dp(4), 0);
    actionBar.addView(avatarContainer);
    FrameLayout.LayoutParams layoutParams2 =
        (FrameLayout.LayoutParams) avatarContainer.getLayoutParams();
    layoutParams2.height = LayoutHelper.MATCH_PARENT;
    layoutParams2.width = LayoutHelper.WRAP_CONTENT;
    layoutParams2.rightMargin = AndroidUtilities.dp(48);
    layoutParams2.leftMargin = AndroidUtilities.dp(60);
    layoutParams2.gravity = Gravity.TOP | Gravity.LEFT;
    avatarContainer.setLayoutParams(layoutParams2);

    avatarImageView = new BackupImageView(this);
    avatarImageView.setRoundRadius(AndroidUtilities.dp(21));
    avatarContainer.addView(avatarImageView);
    layoutParams2 = (FrameLayout.LayoutParams) avatarImageView.getLayoutParams();
    layoutParams2.width = AndroidUtilities.dp(42);
    layoutParams2.height = AndroidUtilities.dp(42);
    layoutParams2.topMargin = AndroidUtilities.dp(3);
    avatarImageView.setLayoutParams(layoutParams2);

    nameTextView = new TextView(this);
    nameTextView.setTextColor(0xffffffff);
    nameTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
    nameTextView.setLines(1);
    nameTextView.setMaxLines(1);
    nameTextView.setSingleLine(true);
    nameTextView.setEllipsize(TextUtils.TruncateAt.END);
    nameTextView.setGravity(Gravity.LEFT);
    nameTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf"));
    avatarContainer.addView(nameTextView);
    layoutParams2 = (FrameLayout.LayoutParams) nameTextView.getLayoutParams();
    layoutParams2.width = LayoutHelper.WRAP_CONTENT;
    layoutParams2.height = LayoutHelper.WRAP_CONTENT;
    layoutParams2.leftMargin = AndroidUtilities.dp(54);
    layoutParams2.bottomMargin = AndroidUtilities.dp(22);
    layoutParams2.gravity = Gravity.BOTTOM;
    nameTextView.setLayoutParams(layoutParams2);

    onlineTextView = new TextView(this);
    onlineTextView.setTextColor(0xffd7e8f7);
    onlineTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
    onlineTextView.setLines(1);
    onlineTextView.setMaxLines(1);
    onlineTextView.setSingleLine(true);
    onlineTextView.setEllipsize(TextUtils.TruncateAt.END);
    onlineTextView.setGravity(Gravity.LEFT);
    avatarContainer.addView(onlineTextView);
    layoutParams2 = (FrameLayout.LayoutParams) onlineTextView.getLayoutParams();
    layoutParams2.width = LayoutHelper.WRAP_CONTENT;
    layoutParams2.height = LayoutHelper.WRAP_CONTENT;
    layoutParams2.leftMargin = AndroidUtilities.dp(54);
    layoutParams2.bottomMargin = AndroidUtilities.dp(4);
    layoutParams2.gravity = Gravity.BOTTOM;
    onlineTextView.setLayoutParams(layoutParams2);

    actionBar.setActionBarMenuOnItemClick(
        new ActionBar.ActionBarMenuOnItemClick() {
          @Override
          public void onItemClick(int id) {
            if (id == -1) {
              onFinish();
              finish();
            } else if (id == 1) {
              openCurrentMessage();
            } else if (id == 2) {
              switchToNextMessage();
            }
          }
        });

    PowerManager pm =
        (PowerManager) ApplicationLoader.applicationContext.getSystemService(Context.POWER_SERVICE);
    wakeLock =
        pm.newWakeLock(
            PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "screen");
    wakeLock.setReferenceCounted(false);

    handleIntent(getIntent());
  }