content: package im.actor.sdk.controllers.conversation.mentions;
  
  import android.app.Activity;
  import android.content.Context;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.TextView;
  
  import java.util.ArrayList;
  import java.util.List;
  
  import im.actor.core.entity.BotCommand;
  import im.actor.core.viewmodel.UserVM;
  import im.actor.sdk.ActorSDK;
  import im.actor.sdk.R;
  import im.actor.sdk.util.Screen;
  import im.actor.sdk.view.adapters.HolderAdapter;
  import im.actor.sdk.view.adapters.ViewHolder;
  import im.actor.sdk.view.avatar.AvatarView;
  
  import static im.actor.sdk.util.ActorSDKMessenger.users;
  
  public class CommandsAdapter extends HolderAdapter<BotCommand> {
  
      private final int uid;
      private List<BotCommand> commands;
      private List<BotCommand> commandsToShow = new ArrayList<BotCommand>();
      private int highlightColor;
      private UserVM botUser;
      private String query = null;
  
      public CommandsAdapter(int uid, Context context) {
          super(context);
          botUser = users().get(uid);
          highlightColor = context.getResources().getColor(R.color.primary);
          commands = users().get(uid).getBotCommands().get();
          commandsToShow = new ArrayList<>();
          this.uid = uid;
      }
  
      public void clearQuery() {
          query = null;
          commandsToShow = new ArrayList<>();
          notifyDataSetChanged();
      }
  
      public void setQuery(String q) {
          if (q == null || q.equals(query)) {
              return;
          }
          query = q;
          ArrayList<BotCommand> filterd = new ArrayList<BotCommand>();
          for (BotCommand command : commands) {
              if (command.getSlashCommand().toLowerCase().startsWith(q)) {
                  filterd.add(command);
              }
          }
          commandsToShow.clear();
          commandsToShow.addAll(filterd);
          notifyDataSetChanged();
      }
  
      @Override
      public int getCount() {
          return commandsToShow.size();
      }
  
      @Override
      public BotCommand getItem(int position) {
          return commandsToShow.get(position);
      }
  
      @Override
      public long getItemId(int position) {
          return position;
      }
  
      @Override
      protected ViewHolder<BotCommand> createHolder(BotCommand obj) {
          return new CommandHolder();
      }
  
      public class CommandHolder extends ViewHolder<BotCommand> {
  
          BotCommand data;
          private TextView commandName;
          private TextView description;
          private AvatarView avatarView;
  
          @Override
          public View init(final BotCommand data, ViewGroup viewGroup, Context context) {
              View res = ((Activity) context).getLayoutInflater().inflate(R.layout.fragment_chat_mention_item, viewGroup, false);
              res.setBackgroundColor(ActorSDK.sharedActor().style.getMainBackgroundColor());
              res.findViewById(R.id.container).setBackgroundResource(R.drawable.selector);
              res.findViewById(R.id.divider).setBackgroundColor(ActorSDK.sharedActor().style.getDividerColor());
  
              commandName = (TextView) res.findViewById(R.id.name);
              commandName.setTextColor(ActorSDK.sharedActor().style.getTextPrimaryColor());
              description = (TextView) res.findViewById(R.id.mentionHint);
              description.setTextColor(ActorSDK.sharedActor().style.getTextSecondaryColor());
              avatarView = (AvatarView) res.findViewById(R.id.avatar);
              avatarView.init(Screen.dp(35), 16);
              this.data = data;
  
              return res;
          }
  
          @Override
          public void bind(BotCommand data, int position, Context context) {
              this.data = data;
              avatarView.bind(botUser);
              String name = data.getSlashCommand();
              commandName.setText("/".concat(name));
  
              CharSequence hint = data.getDescription();
              description.setText(hint);
          }
  
          public BotCommand getCommand() {
              return data;
          }
  
          @Override
          public void unbind(boolean full) {
              if (full) {
                  avatarView.unbind();
              }
          }
      }
  
  
  }
  