gt:             dialogsAdapter = new DialogsAdapter(context, dialogsType);
context: /*
   * This is the source code of Telegram for Android v. 3.x.x.
   * It is licensed under GNU GPL v. 2 or later.
   * You should have received a copy of the license in this archive (see LICENSE).
   *
   * Copyright Nikolai Kudashov, 2013-2016.
   */
  
  package org.telegram.ui;
  
  import android.Manifest;
  import android.animation.ObjectAnimator;
  import android.animation.StateListAnimator;
  import android.annotation.SuppressLint;
  import android.annotation.TargetApi;
  import android.app.Activity;
  import android.app.AlertDialog;
  import android.app.Dialog;
  import android.content.Context;
  import android.content.DialogInterface;
  import android.content.pm.PackageManager;
  import android.content.res.Configuration;
  import android.graphics.Outline;
  import android.os.Build;
  import android.os.Bundle;
  import android.util.TypedValue;
  import android.view.Gravity;
  import android.view.MotionEvent;
  import android.view.View;
  import android.view.ViewOutlineProvider;
  import android.view.ViewTreeObserver;
  import android.view.animation.AccelerateDecelerateInterpolator;
  import android.widget.EditText;
  import android.widget.FrameLayout;
  import android.widget.ImageView;
  import android.widget.LinearLayout;
  import android.widget.ListView;
  import android.widget.ProgressBar;
  import android.widget.TextView;
  
  import org.telegram.messenger.AndroidUtilities;
  import org.telegram.messenger.ChatObject;
  import org.telegram.messenger.ImageLoader;
  import org.telegram.messenger.LocaleController;
  import org.telegram.messenger.MessageObject;
  import org.telegram.messenger.UserObject;
  import org.telegram.messenger.support.widget.LinearLayoutManager;
  import org.telegram.messenger.support.widget.RecyclerView;
  import org.telegram.messenger.FileLog;
  import org.telegram.tgnet.TLRPC;
  import org.telegram.messenger.ContactsController;
  import org.telegram.messenger.MessagesController;
  import org.telegram.messenger.MessagesStorage;
  import org.telegram.messenger.NotificationCenter;
  import org.telegram.messenger.R;
  import org.telegram.messenger.UserConfig;
  import org.telegram.ui.ActionBar.BottomSheet;
  import org.telegram.ui.Adapters.DialogsAdapter;
  import org.telegram.ui.Adapters.DialogsSearchAdapter;
  import org.telegram.messenger.AnimationCompat.ObjectAnimatorProxy;
  import org.telegram.messenger.AnimationCompat.ViewProxy;
  import org.telegram.ui.Cells.ProfileSearchCell;
  import org.telegram.ui.Cells.UserCell;
  import org.telegram.ui.Cells.DialogCell;
  import org.telegram.ui.ActionBar.ActionBar;
  import org.telegram.ui.ActionBar.ActionBarMenu;
  import org.telegram.ui.ActionBar.ActionBarMenuItem;
  import org.telegram.ui.ActionBar.BaseFragment;
  import org.telegram.ui.ActionBar.MenuDrawable;
  import org.telegram.ui.Components.PlayerView;
  import org.telegram.ui.Components.EmptyTextProgressView;
  import org.telegram.ui.Components.LayoutHelper;
  import org.telegram.ui.Components.RecyclerListView;
  import org.telegram.ui.Components.ResourceLoader;
  
  import java.util.ArrayList;
  
  public class DialogsActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate {
      
      private RecyclerListView listView;
      private LinearLayoutManager layoutManager;
      private DialogsAdapter dialogsAdapter;
      private DialogsSearchAdapter dialogsSearchAdapter;
      private EmptyTextProgressView searchEmptyView;
      private ProgressBar progressView;
      private LinearLayout emptyView;
      private ActionBarMenuItem passcodeItem;
      private ImageView floatingButton;
  
      private AlertDialog permissionDialog;
  
      private int prevPosition;
      private int prevTop;
      private boolean scrollUpdated;
      private boolean floatingHidden;
      private final AccelerateDecelerateInterpolator floatingInterpolator = new AccelerateDecelerateInterpolator();
  
      private boolean checkPermission = true;
  
      private String selectAlertString;
      private String selectAlertStringGroup;
      private String addToGroupAlertString;
      private int dialogsType;
  
      private static boolean dialogsLoaded;
      private boolean searching;
      private boolean searchWas;
      private boolean onlySelect;
      private long selectedDialog;
      private String searchString;
      private long openedDialogId;
  
      private MessagesActivityDelegate delegate;
  
      public interface MessagesActivityDelegate {
          void didSelectDialog(DialogsActivity fragment, long dialog_id, boolean param);
      }
  
      public DialogsActivity(Bundle args) {
          super(args);
      }
  
      @Override
      public boolean onFragmentCreate() {
          super.onFragmentCreate();
  
          if (getArguments() != null) {
              onlySelect = arguments.getBoolean("onlySelect", false);
              dialogsType = arguments.getInt("dialogsType", 0);
              selectAlertString = arguments.getString("selectAlertString");
              selectAlertStringGroup = arguments.getString("selectAlertStringGroup");
              addToGroupAlertString = arguments.getString("addToGroupAlertString");
          }
  
          if (searchString == null) {
              NotificationCenter.getInstance().addObserver(this, NotificationCenter.dialogsNeedReload);
              NotificationCenter.getInstance().addObserver(this, NotificationCenter.emojiDidLoaded);
              NotificationCenter.getInstance().addObserver(this, NotificationCenter.updateInterfaces);
              NotificationCenter.getInstance().addObserver(this, NotificationCenter.encryptedChatUpdated);
              NotificationCenter.getInstance().addObserver(this, NotificationCenter.contactsDidLoaded);
              NotificationCenter.getInstance().addObserver(this, NotificationCenter.appDidLogout);
              NotificationCenter.getInstance().addObserver(this, NotificationCenter.openedChatChanged);
              NotificationCenter.getInstance().addObserver(this, NotificationCenter.notificationsSettingsUpdated);
              NotificationCenter.getInstance().addObserver(this, NotificationCenter.messageReceivedByAck);
              NotificationCenter.getInstance().addObserver(this, NotificationCenter.messageReceivedByServer);
              NotificationCenter.getInstance().addObserver(this, NotificationCenter.messageSendError);
              NotificationCenter.getInstance().addObserver(this, NotificationCenter.didSetPasscode);
              NotificationCenter.getInstance().addObserver(this, NotificationCenter.needReloadRecentDialogsSearch);
          }
  
  
          if (!dialogsLoaded) {
              MessagesController.getInstance().loadDialogs(0, 100, true);
              ContactsController.getInstance().checkInviteText();
              dialogsLoaded = true;
          }
          return true;
      }
  
      @Override
      public void onFragmentDestroy() {
          super.onFragmentDestroy();
          if (searchString == null) {
              NotificationCenter.getInstance().removeObserver(this, NotificationCenter.dialogsNeedReload);
              NotificationCenter.getInstance().removeObserver(this, NotificationCenter.emojiDidLoaded);
              NotificationCenter.getInstance().removeObserver(this, NotificationCenter.updateInterfaces);
              NotificationCenter.getInstance().removeObserver(this, NotificationCenter.encryptedChatUpdated);
              NotificationCenter.getInstance().removeObserver(this, NotificationCenter.contactsDidLoaded);
              NotificationCenter.getInstance().removeObserver(this, NotificationCenter.appDidLogout);
              NotificationCenter.getInstance().removeObserver(this, NotificationCenter.openedChatChanged);
              NotificationCenter.getInstance().removeObserver(this, NotificationCenter.notificationsSettingsUpdated);
              NotificationCenter.getInstance().removeObserver(this, NotificationCenter.messageReceivedByAck);
              NotificationCenter.getInstance().removeObserver(this, NotificationCenter.messageReceivedByServer);
              NotificationCenter.getInstance().removeObserver(this, NotificationCenter.messageSendError);
              NotificationCenter.getInstance().removeObserver(this, NotificationCenter.didSetPasscode);
              NotificationCenter.getInstance().removeObserver(this, NotificationCenter.needReloadRecentDialogsSearch);
          }
          delegate = null;
      }
  
      @Override
      public View createView(final Context context) {
          searching = false;
          searchWas = false;
  
          ResourceLoader.loadRecources(context);
  
          ActionBarMenu menu = actionBar.createMenu();
          if (!onlySelect && searchString == null) {
              passcodeItem = menu.addItem(1, R.drawable.lock_close);
              updatePasscodeButton();
          }
          final ActionBarMenuItem item = menu.addItem(0, R.drawable.ic_ab_search).setIsSearchField(true).setActionBarMenuItemSearchListener(new ActionBarMenuItem.ActionBarMenuItemSearchListener() {
              @Override
              public void onSearchExpand() {
                  searching = true;
                  if (listView != null) {
                      if (searchString != null) {
                          listView.setEmptyView(searchEmptyView);
                          progressView.setVisibility(View.GONE);
                          emptyView.setVisibility(View.GONE);
                      }
                      if (!onlySelect) {
                          floatingButton.setVisibility(View.GONE);
                      }
                  }
                  updatePasscodeButton();
              }
  
              @Override
              public boolean canCollapseSearch() {
                  if (searchString != null) {
                      finishFragment();
                      return false;
                  }
                  return true;
              }
  
              @Override
              public void onSearchCollapse() {
                  searching = false;
                  searchWas = false;
                  if (listView != null) {
                      searchEmptyView.setVisibility(View.GONE);
                      if (MessagesController.getInstance().loadingDialogs && MessagesController.getInstance().dialogs.isEmpty()) {
                          emptyView.setVisibility(View.GONE);
                          listView.setEmptyView(progressView);
                      } else {
                          progressView.setVisibility(View.GONE);
                          listView.setEmptyView(emptyView);
                      }
                      if (!onlySelect) {
                          floatingButton.setVisibility(View.VISIBLE);
                          floatingHidden = true;
                          ViewProxy.setTranslationY(floatingButton, AndroidUtilities.dp(100));
                          hideFloatingButton(false);
                      }
                      if (listView.getAdapter() != dialogsAdapter) {
                          listView.setAdapter(dialogsAdapter);
                          dialogsAdapter.notifyDataSetChanged();
                      }
                  }
                  if (dialogsSearchAdapter != null) {
                      dialogsSearchAdapter.searchDialogs(null);
                  }
                  updatePasscodeButton();
              }
  
              @Override
              public void onTextChanged(EditText editText) {
                  String text = editText.getText().toString();
                  if (text.length() != 0 || dialogsSearchAdapter != null && dialogsSearchAdapter.hasRecentRearch()) {
                      searchWas = true;
                      if (dialogsSearchAdapter != null && listView.getAdapter() != dialogsSearchAdapter) {
                          listView.setAdapter(dialogsSearchAdapter);
                          dialogsSearchAdapter.notifyDataSetChanged();
                      }
                      if (searchEmptyView != null && listView.getEmptyView() != searchEmptyView) {
                          emptyView.setVisibility(View.GONE);
                          progressView.setVisibility(View.GONE);
                          searchEmptyView.showTextView();
                          listView.setEmptyView(searchEmptyView);
                      }
                  }
                  if (dialogsSearchAdapter != null) {
                      dialogsSearchAdapter.searchDialogs(text);
                  }
              }
          });
          item.getSearchField().setHint(LocaleController.getString("Search", R.string.Search));
          if (onlySelect) {
              actionBar.setBackButtonImage(R.drawable.ic_ab_back);
              actionBar.setTitle(LocaleController.getString("SelectChat", R.string.SelectChat));
          } else {
              if (searchString != null) {
                  actionBar.setBackButtonImage(R.drawable.ic_ab_back);
              } else {
                  actionBar.setBackButtonDrawable(new MenuDrawable());
              }
              actionBar.setTitle(LocaleController.getString("AppName", R.string.AppName));
          }
          actionBar.setAllowOverlayTitle(true);
  
          actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() {
              @Override
              public void onItemClick(int id) {
                  if (id == -1) {
                      if (onlySelect) {
                          finishFragment();
                      } else if (parentLayout != null) {
                          parentLayout.getDrawerLayoutContainer().openDrawer(false);
                      }
                  } else if (id == 1) {
                      UserConfig.appLocked = !UserConfig.appLocked;
                      UserConfig.saveConfig(false);
                      updatePasscodeButton();
                  }
              }
          });
  
  
          FrameLayout frameLayout = new FrameLayout(context);
          fragmentView = frameLayout;
          
          listView = new RecyclerListView(context);
          listView.setVerticalScrollBarEnabled(true);
          listView.setItemAnimator(null);
          listView.setInstantClick(true);
          listView.setLayoutAnimation(null);
          layoutManager = new LinearLayoutManager(context) {
              @Override
              public boolean supportsPredictiveItemAnimations() {
                  return false;
              }
          };
          layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
          listView.setLayoutManager(layoutManager);
          if (Build.VERSION.SDK_INT >= 11) {
              listView.setVerticalScrollbarPosition(LocaleController.isRTL ? ListView.SCROLLBAR_POSITION_LEFT : ListView.SCROLLBAR_POSITION_RIGHT);
          }
          frameLayout.addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
          listView.setOnItemClickListener(new RecyclerListView.OnItemClickListener() {
              @Override
              public void onItemClick(View view, int position) {
                  if (listView == null || listView.getAdapter() == null) {
                      return;
                  }
                  long dialog_id = 0;
                  int message_id = 0;
                  RecyclerView.Adapter adapter = listView.getAdapter();
                  if (adapter == dialogsAdapter) {
                      TLRPC.Dialog dialog = dialogsAdapter.getItem(position);
                      if (dialog == null) {
                          return;
                      }
                      dialog_id = dialog.id;
                  } else if (adapter == dialogsSearchAdapter) {
                      Object obj = dialogsSearchAdapter.getItem(position);
                      if (obj instanceof TLRPC.User) {
                          dialog_id = ((TLRPC.User) obj).id;
                          if (dialogsSearchAdapter.isGlobalSearch(position)) {
                              ArrayList<TLRPC.User> users = new ArrayList<>();
                              users.add((TLRPC.User) obj);
                              MessagesController.getInstance().putUsers(users, false);
                              MessagesStorage.getInstance().putUsersAndChats(users, null, false, true);
                          }
                          if (!onlySelect) {
                              dialogsSearchAdapter.putRecentSearch(dialog_id, (TLRPC.User) obj);
                          }
                      } else if (obj instanceof TLRPC.Chat) {
                          if (dialogsSearchAdapter.isGlobalSearch(position)) {
                              ArrayList<TLRPC.Chat> chats = new ArrayList<>();
                              chats.add((TLRPC.Chat) obj);
                              MessagesController.getInstance().putChats(chats, false);
                              MessagesStorage.getInstance().putUsersAndChats(null, chats, false, true);
                          }
                          if (((TLRPC.Chat) obj).id > 0) {
                              dialog_id = -((TLRPC.Chat) obj).id;
                          } else {
                              dialog_id = AndroidUtilities.makeBroadcastId(((TLRPC.Chat) obj).id);
                          }
                          if (!onlySelect) {
                              dialogsSearchAdapter.putRecentSearch(dialog_id, (TLRPC.Chat) obj);
                          }
                      } else if (obj instanceof TLRPC.EncryptedChat) {
                          dialog_id = ((long) ((TLRPC.EncryptedChat) obj).id) << 32;
                          if (!onlySelect) {
                              dialogsSearchAdapter.putRecentSearch(dialog_id, (TLRPC.EncryptedChat) obj);
                          }
                      } else if (obj instanceof MessageObject) {
                          MessageObject messageObject = (MessageObject) obj;
                          dialog_id = messageObject.getDialogId();
                          message_id = messageObject.getId();
                          dialogsSearchAdapter.addHashtagsFromMessage(dialogsSearchAdapter.getLastSearchString());
                      } else if (obj instanceof String) {
                          actionBar.openSearchField((String) obj);
                      }
                  }
  
                  if (dialog_id == 0) {
                      return;
                  }
  
                  if (onlySelect) {
                      didSelectResult(dialog_id, true, false);
                  } else {
                      Bundle args = new Bundle();
                      int lower_part = (int) dialog_id;
                      int high_id = (int) (dialog_id >> 32);
                      if (lower_part != 0) {
                          if (high_id == 1) {
                              args.putInt("chat_id", lower_part);
                          } else {
                              if (lower_part > 0) {
                                  args.putInt("user_id", lower_part);
                              } else if (lower_part < 0) {
                                  if (message_id != 0) {
                                      TLRPC.Chat chat = MessagesController.getInstance().getChat(-lower_part);
                                      if (chat != null && chat.migrated_to != null) {
                                          args.putInt("migrated_to", lower_part);
                                          lower_part = -chat.migrated_to.channel_id;
                                      }
                                  }
                                  args.putInt("chat_id", -lower_part);
                              }
                          }
                      } else {
                          args.putInt("enc_id", high_id);
                      }
                      if (message_id != 0) {
                          args.putInt("message_id", message_id);
                      } else {
                          if (actionBar != null) {
                              actionBar.closeSearchField();
                          }
                      }
                      if (AndroidUtilities.isTablet()) {
                          if (openedDialogId == dialog_id && adapter != dialogsSearchAdapter) {
                              return;
                          }
                          if (dialogsAdapter != null) {
                              dialogsAdapter.setOpenedDialogId(openedDialogId = dialog_id);
                              updateVisibleRows(MessagesController.UPDATE_MASK_SELECT_DIALOG);
                          }
                      }
                      if (searchString != null) {
                          NotificationCenter.getInstance().postNotificationName(NotificationCenter.closeChats);
                          presentFragment(new ChatActivity(args));
                      } else {
                          presentFragment(new ChatActivity(args));
                      }
                  }
              }
          });
          listView.setOnItemLongClickListener(new RecyclerListView.OnItemLongClickListener() {
              @Override
              public boolean onItemClick(View view, int position) {
                  if (onlySelect || searching && searchWas || getParentActivity() == null) {
                      if (searchWas && searching || dialogsSearchAdapter.isRecentSearchDisplayed()) {
                          RecyclerView.Adapter adapter = listView.getAdapter();
                          if (adapter == dialogsSearchAdapter) {
                              Object item = dialogsSearchAdapter.getItem(position);
                              if (item instanceof String || dialogsSearchAdapter.isRecentSearchDisplayed()) {
                                  AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
                                  builder.setTitle(LocaleController.getString("AppName", R.string.AppName));
                                  builder.setMessage(LocaleController.getString("ClearSearch", R.string.ClearSearch));
                                  builder.setPositiveButton(LocaleController.getString("ClearButton", R.string.ClearButton).toUpperCase(), new DialogInterface.OnClickListener() {
                                      @Override
                                      public void onClick(DialogInterface dialogInterface, int i) {
                                          if (dialogsSearchAdapter.isRecentSearchDisplayed()) {
                                              dialogsSearchAdapter.clearRecentSearch();
                                          } else {
                                              dialogsSearchAdapter.clearRecentHashtags();
                                          }
                                      }
                                  });
                                  builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
                                  showDialog(builder.create());
                                  return true;
                              }
                          }
                      }
                      return false;
                  }
                  TLRPC.Dialog dialog;
                  ArrayList<TLRPC.Dialog> dialogs = getDialogsArray();
                  if (position < 0 || position >= dialogs.size()) {
                      return false;
                  }
                  dialog = dialogs.get(position);
                  selectedDialog = dialog.id;
  
                  BottomSheet.Builder builder = new BottomSheet.Builder(getParentActivity());
                  int lower_id = (int) selectedDialog;
                  int high_id = (int) (selectedDialog >> 32);
  
                  if (dialog instanceof TLRPC.TL_dialogChannel) {
                      final TLRPC.Chat chat = MessagesController.getInstance().getChat(-lower_id);
                      CharSequence items[];
                      if (chat != null && chat.megagroup) {
                          items = new CharSequence[]{LocaleController.getString("ClearHistoryCache", R.string.ClearHistoryCache), chat == null || !chat.creator ? LocaleController.getString("LeaveMegaMenu", R.string.LeaveMegaMenu) : LocaleController.getString("DeleteMegaMenu", R.string.DeleteMegaMenu)};
                      } else {
                          items = new CharSequence[]{LocaleController.getString("ClearHistoryCache", R.string.ClearHistoryCache), chat == null || !chat.creator ? LocaleController.getString("LeaveChannelMenu", R.string.LeaveChannelMenu) : LocaleController.getString("ChannelDeleteMenu", R.string.ChannelDeleteMenu)};
                      }
                      builder.setItems(items, new DialogInterface.OnClickListener() {
                          @Override
                          public void onClick(DialogInterface dialog, final int which) {
                              AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
                              builder.setTitle(LocaleController.getString("AppName", R.string.AppName));
                              if (which == 0) {
                                  if (chat != null && chat.megagroup) {
                                      builder.setMessage(LocaleController.getString("AreYouSureClearHistorySuper", R.string.AreYouSureClearHistorySuper));
                                  } else {
                                      builder.setMessage(LocaleController.getString("AreYouSureClearHistoryChannel", R.string.AreYouSureClearHistoryChannel));
                                  }
                                  builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), new DialogInterface.OnClickListener() {
                                      @Override
                                      public void onClick(DialogInterface dialogInterface, int i) {
                                          MessagesController.getInstance().deleteDialog(selectedDialog, 2);
                                      }
                                  });
                              } else {
                                  if (chat != null && chat.megagroup) {
                                      if (!chat.creator) {
                                          builder.setMessage(LocaleController.getString("MegaLeaveAlert", R.string.MegaLeaveAlert));
                                      } else {
                                          builder.setMessage(LocaleController.getString("MegaDeleteAlert", R.string.MegaDeleteAlert));
                                      }
                                  } else {
                                      if (chat == null || !chat.creator) {
                                          builder.setMessage(LocaleController.getString("ChannelLeaveAlert", R.string.ChannelLeaveAlert));
                                      } else {
                                          builder.setMessage(LocaleController.getString("ChannelDeleteAlert", R.string.ChannelDeleteAlert));
                                      }
                                  }
                                  builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), new DialogInterface.OnClickListener() {
                                      @Override
                                      public void onClick(DialogInterface dialogInterface, int i) {
                                          MessagesController.getInstance().deleteUserFromChat((int) -selectedDialog, UserConfig.getCurrentUser(), null);
                                          if (AndroidUtilities.isTablet()) {
                                              NotificationCenter.getInstance().postNotificationName(NotificationCenter.closeChats, selectedDialog);
                                          }
                                      }
                                  });
                              }
                              builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
                              showDialog(builder.create());
                          }
                      });
                      showDialog(builder.create());
                  } else {
                      final boolean isChat = lower_id < 0 && high_id != 1;
                      TLRPC.User user = null;
                      if (!isChat && lower_id > 0 && high_id != 1) {
                          user = MessagesController.getInstance().getUser(lower_id);
                      }
                      final boolean isBot = user != null && user.bot;
                      builder.setItems(new CharSequence[]{LocaleController.getString("ClearHistory", R.string.ClearHistory),
                              isChat ? LocaleController.getString("DeleteChat", R.string.DeleteChat) :
                                      isBot ? LocaleController.getString("DeleteAndStop", R.string.DeleteAndStop) : LocaleController.getString("Delete", R.string.Delete)}, new DialogInterface.OnClickListener() {
                          @Override
                          public void onClick(DialogInterface dialog, final int which) {
                              AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());
                              builder.setTitle(LocaleController.getString("AppName", R.string.AppName));
                              if (which == 0) {
                                  builder.setMessage(LocaleController.getString("AreYouSureClearHistory", R.string.AreYouSureClearHistory));
                              } else {
                                  if (isChat) {
                                      builder.setMessage(LocaleController.getString("AreYouSureDeleteAndExit", R.string.AreYouSureDeleteAndExit));
                                  } else {
                                      builder.setMessage(LocaleController.getString("AreYouSureDeleteThisChat", R.string.AreYouSureDeleteThisChat));
                                  }
                              }
                              builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), new DialogInterface.OnClickListener() {
                                  @Override
                                  public void onClick(DialogInterface dialogInterface, int i) {
                                      if (which != 0) {
                                          if (isChat) {
                                              TLRPC.Chat currentChat = MessagesController.getInstance().getChat((int) -selectedDialog);
                                              if (currentChat != null && ChatObject.isNotInChat(currentChat)) {
                                                  MessagesController.getInstance().deleteDialog(selectedDialog, 0);
                                              } else {
                                                  MessagesController.getInstance().deleteUserFromChat((int) -selectedDialog, MessagesController.getInstance().getUser(UserConfig.getClientUserId()), null);
                                              }
                                          } else {
                                              MessagesController.getInstance().deleteDialog(selectedDialog, 0);
                                          }
                                          if (isBot) {
                                              MessagesController.getInstance().blockUser((int) selectedDialog);
                                          }
                                          if (AndroidUtilities.isTablet()) {
                                              NotificationCenter.getInstance().postNotificationName(NotificationCenter.closeChats, selectedDialog);
                                          }
                                      } else {
                                          MessagesController.getInstance().deleteDialog(selectedDialog, 1);
                                      }
                                  }
                              });
                              builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
                              showDialog(builder.create());
                          }
                      });
                      showDialog(builder.create());
                  }
                  return true;
              }
          });
  
          searchEmptyView = new EmptyTextProgressView(context);
          searchEmptyView.setVisibility(View.GONE);
          searchEmptyView.setShowAtCenter(true);
          searchEmptyView.setText(LocaleController.getString("NoResult", R.string.NoResult));
          frameLayout.addView(searchEmptyView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
  
          emptyView = new LinearLayout(context);
          emptyView.setOrientation(LinearLayout.VERTICAL);
          emptyView.setVisibility(View.GONE);
          emptyView.setGravity(Gravity.CENTER);
          frameLayout.addView(emptyView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
          emptyView.setOnTouchListener(new View.OnTouchListener() {
              @Override
              public boolean onTouch(View v, MotionEvent event) {
                  return true;
              }
          });
  
          TextView textView = new TextView(context);
          textView.setText(LocaleController.getString("NoChats", R.string.NoChats));
          textView.setTextColor(0xff959595);
          textView.setGravity(Gravity.CENTER);
          textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20);
          emptyView.addView(textView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT));
  
          textView = new TextView(context);
          String help = LocaleController.getString("NoChatsHelp", R.string.NoChatsHelp);
          if (AndroidUtilities.isTablet() && !AndroidUtilities.isSmallTablet()) {
              help = help.replace("\n", " ");
          }
          textView.setText(help);
          textView.setTextColor(0xff959595);
          textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15);
          textView.setGravity(Gravity.CENTER);
          textView.setPadding(AndroidUtilities.dp(8), AndroidUtilities.dp(6), AndroidUtilities.dp(8), 0);
          textView.setLineSpacing(AndroidUtilities.dp(2), 1);
          emptyView.addView(textView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT));
  
          progressView = new ProgressBar(context);
          progressView.setVisibility(View.GONE);
          frameLayout.addView(progressView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER));
  
          floatingButton = new ImageView(context);
          floatingButton.setVisibility(onlySelect ? View.GONE : View.VISIBLE);
          floatingButton.setScaleType(ImageView.ScaleType.CENTER);
          floatingButton.setBackgroundResource(R.drawable.floating_states);
          floatingButton.setImageResource(R.drawable.floating_pencil);
          if (Build.VERSION.SDK_INT >= 21) {
              StateListAnimator animator = new StateListAnimator();
              animator.addState(new int[]{android.R.attr.state_pressed}, ObjectAnimator.ofFloat(floatingButton, "translationZ", AndroidUtilities.dp(2), AndroidUtilities.dp(4)).setDuration(200));
              animator.addState(new int[]{}, ObjectAnimator.ofFloat(floatingButton, "translationZ", AndroidUtilities.dp(4), AndroidUtilities.dp(2)).setDuration(200));
              floatingButton.setStateListAnimator(animator);
              floatingButton.setOutlineProvider(new ViewOutlineProvider() {
                  @SuppressLint("NewApi")
                  @Override
                  public void getOutline(View view, Outline outline) {
                      outline.setOval(0, 0, AndroidUtilities.dp(56), AndroidUtilities.dp(56));
                  }
              });
          }
          frameLayout.addView(floatingButton, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, (LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT) | Gravity.BOTTOM, LocaleController.isRTL ? 14 : 0, 0, LocaleController.isRTL ? 0 : 14, 14));
          floatingButton.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  Bundle args = new Bundle();
                  args.putBoolean("destroyAfterSelect", true);
                  presentFragment(new ContactsActivity(args));
              }
          });
  
          listView.setOnScrollListener(new RecyclerView.OnScrollListener() {
              @Override
              public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                  if (newState == RecyclerView.SCROLL_STATE_DRAGGING && searching && searchWas) {
                      AndroidUtilities.hideKeyboard(getParentActivity().getCurrentFocus());
                  }
              }
  
              @Override
              public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                  int firstVisibleItem = layoutManager.findFirstVisibleItemPosition();
                  int visibleItemCount = Math.abs(layoutManager.findLastVisibleItemPosition() - firstVisibleItem) + 1;
                  int totalItemCount = recyclerView.getAdapter().getItemCount();
  
                  if (searching && searchWas) {
                      if (visibleItemCount > 0 && layoutManager.findLastVisibleItemPosition() == totalItemCount - 1 && !dialogsSearchAdapter.isMessagesSearchEndReached()) {
                          dialogsSearchAdapter.loadMoreSearchMessages();
                      }
                      return;
                  }
                  if (visibleItemCount > 0) {
                      if (layoutManager.findLastVisibleItemPosition() >= getDialogsArray().size() - 10) {
                          MessagesController.getInstance().loadDialogs(-1, 100, !MessagesController.getInstance().dialogsEndReached);
                      }
                  }
  
                  if (floatingButton.getVisibility() != View.GONE) {
                      final View topChild = recyclerView.getChildAt(0);
                      int firstViewTop = 0;
                      if (topChild != null) {
                          firstViewTop = topChild.getTop();
                      }
                      boolean goingDown;
                      boolean changed = true;
                      if (prevPosition == firstVisibleItem) {
                          final int topDelta = prevTop - firstViewTop;
                          goingDown = firstViewTop < prevTop;
                          changed = Math.abs(topDelta) > 1;
                      } else {
                          goingDown = firstVisibleItem > prevPosition;
                      }
                      if (changed && scrollUpdated) {
                          hideFloatingButton(goingDown);
                      }
                      prevPosition = firstVisibleItem;
                      prevTop = firstViewTop;
                      scrollUpdated = true;
                  }
              }
          });
  
          if (searchString == null) {
  