31 void onItemClick(String refStr);
32 void onDelete(
long id);
35 private List<BookmarkBase> items =
new ArrayList<>();
37 private boolean actionsEnabled =
true;
39 public void setCallbacks(
Callbacks callbacks)
41 this.callbacks = callbacks;
44 public void setActionsEnabled(
boolean enabled)
46 actionsEnabled = enabled;
49 public List<BookmarkBase> getItems()
54 public void setItems(List<BookmarkBase> newItems)
56 items = newItems !=
null ? newItems :
new ArrayList<>();
57 notifyDataSetChanged();
60 @NonNull @Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
int viewType)
62 BookmarkListItemBinding binding = BookmarkListItemBinding.inflate(
63 LayoutInflater.from(parent.getContext()), parent,
false);
64 return new ViewHolder(binding);
67 @Override
public void onBindViewHolder(@NonNull ViewHolder holder,
int position)
69 BookmarkBase bookmark = items.get(position);
72 holder.binding.bookmarkText1.setText(bookmark.getLabel());
74 if (bookmark.getType() == BookmarkBase.TYPE_MANUAL)
76 holder.binding.bookmarkIcon1.setImageResource(R.drawable.ic_computer);
77 holder.binding.bookmarkIcon1.setVisibility(View.VISIBLE);
78 holder.binding.bookmarkText2.setVisibility(View.VISIBLE);
79 holder.binding.bookmarkText2.setText(bookmark.getHostname());
80 refStr = ConnectionReference.getBookmarkReference(bookmark.getId());
84 holder.binding.bookmarkIcon2.setVisibility(View.VISIBLE);
85 holder.binding.bookmarkIcon2.setImageResource(R.drawable.ic_more_vert);
86 final String finalRefStr = refStr;
87 final long bookmarkId = bookmark.getId();
88 holder.binding.bookmarkIcon2.setOnClickListener(
89 v -> showBookmarkMenu(v, finalRefStr, bookmarkId));
90 holder.itemView.setOnLongClickListener(v -> {
91 showBookmarkMenu(holder.binding.bookmarkIcon2, finalRefStr, bookmarkId);
97 holder.binding.bookmarkIcon2.setVisibility(View.GONE);
98 holder.binding.bookmarkIcon2.setOnClickListener(
null);
99 holder.itemView.setOnLongClickListener(
null);
102 else if (bookmark.getType() == BookmarkBase.TYPE_QUICKCONNECT)
104 holder.binding.bookmarkText2.setVisibility(View.GONE);
105 refStr = ConnectionReference.getHostnameReference(bookmark.getHostname());
106 holder.itemView.setOnLongClickListener(
null);
108 if (bookmark.isDirectConnect())
110 holder.binding.bookmarkText1.setText(holder.itemView.getContext().getString(
111 R.string.quick_connect_to, bookmark.getHostname()));
112 holder.binding.bookmarkIcon1.setImageResource(R.drawable.ic_login);
113 holder.binding.bookmarkIcon1.setVisibility(View.VISIBLE);
114 holder.binding.bookmarkIcon2.setVisibility(View.GONE);
115 holder.binding.bookmarkIcon2.setOnClickListener(
null);
119 holder.binding.bookmarkText1.setText(bookmark.getLabel());
120 holder.binding.bookmarkIcon1.setImageResource(R.drawable.ic_history);
121 holder.binding.bookmarkIcon1.setVisibility(View.VISIBLE);
122 holder.binding.bookmarkIcon2.setVisibility(View.VISIBLE);
123 holder.binding.bookmarkIcon2.setImageResource(R.drawable.ic_bookmark_add);
124 final String hostname = bookmark.getHostname();
125 holder.binding.bookmarkIcon2.setOnClickListener(v -> {
126 Bundle bundle =
new Bundle();
127 bundle.putString(BookmarkActivity.PARAM_CONNECTION_REFERENCE,
128 ConnectionReference.getHostnameReference(hostname));
129 Intent intent =
new Intent(v.getContext(), BookmarkActivity.class);
130 intent.putExtras(bundle);
131 v.getContext().startActivity(intent);
137 holder.binding.bookmarkIcon1.setVisibility(View.GONE);
138 holder.binding.bookmarkText2.setVisibility(View.GONE);
140 holder.binding.bookmarkIcon2.setVisibility(View.GONE);
141 holder.binding.bookmarkIcon2.setOnClickListener(
null);
144 holder.itemView.setTag(refStr);
146 holder.itemView.setOnClickListener(v -> {
147 if (callbacks !=
null)
148 callbacks.onItemClick(v.getTag().toString());
152 @Override
public int getItemCount()
157 private void showBookmarkMenu(View anchor, String refStr,
long bookmarkId)
159 PopupMenu popup =
new PopupMenu(anchor.getContext(), anchor);
160 popup.inflate(R.menu.bookmark_context_menu);
161 popup.setOnMenuItemClickListener(item -> {
162 int itemId = item.getItemId();
163 if (itemId == R.id.bookmark_connect)
165 if (callbacks != null)
166 callbacks.onItemClick(refStr);
169 else if (itemId == R.id.bookmark_edit)
171 Bundle bundle = new Bundle();
172 bundle.putString(BookmarkActivity.PARAM_CONNECTION_REFERENCE, refStr);
173 Intent intent = new Intent(anchor.getContext(), BookmarkActivity.class);
174 intent.putExtras(bundle);
175 anchor.getContext().startActivity(intent);
178 else if (itemId == R.id.bookmark_delete)
180 if (callbacks != null)
181 callbacks.onDelete(bookmarkId);
189 static class ViewHolder
extends RecyclerView.ViewHolder
191 final BookmarkListItemBinding binding;
193 ViewHolder(BookmarkListItemBinding binding)
195 super(binding.getRoot());
196 this.binding = binding;