36 void onItemClick(String refStr);
37 void onDelete(
long id);
38 void onExport(BookmarkBase bookmark);
41 private List<BookmarkBase> items =
new ArrayList<>();
43 private boolean actionsEnabled =
true;
45 public void setCallbacks(
Callbacks callbacks)
47 this.callbacks = callbacks;
50 public void setActionsEnabled(
boolean enabled)
52 actionsEnabled = enabled;
55 public List<BookmarkBase> getItems()
60 public void setItems(List<BookmarkBase> newItems)
62 items = newItems !=
null ? newItems :
new ArrayList<>();
63 notifyDataSetChanged();
66 @NonNull @Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
int viewType)
68 BookmarkListItemBinding binding = BookmarkListItemBinding.inflate(
69 LayoutInflater.from(parent.getContext()), parent,
false);
70 return new ViewHolder(binding);
73 @Override
public void onBindViewHolder(@NonNull ViewHolder holder,
int position)
75 BookmarkBase bookmark = items.get(position);
78 holder.binding.bookmarkText1.setText(bookmark.getLabel());
80 if (bookmark.getType() == BookmarkBase.TYPE_MANUAL)
82 holder.binding.bookmarkIcon1.setImageResource(R.drawable.ic_computer);
83 holder.binding.bookmarkIcon1.setVisibility(View.VISIBLE);
84 holder.binding.bookmarkText2.setVisibility(View.VISIBLE);
85 holder.binding.bookmarkText2.setText(bookmark.getHostname());
86 refStr = ConnectionReference.getBookmarkReference(bookmark.getId());
90 holder.binding.bookmarkIcon2.setVisibility(View.VISIBLE);
91 holder.binding.bookmarkIcon2.setImageResource(R.drawable.ic_more_vert);
92 final String finalRefStr = refStr;
93 final long bookmarkId = bookmark.getId();
94 holder.binding.bookmarkIcon2.setOnClickListener(
95 v -> showBookmarkMenu(v, finalRefStr, bookmarkId, bookmark));
96 holder.itemView.setOnLongClickListener(v -> {
97 showBookmarkMenu(holder.binding.bookmarkIcon2, finalRefStr, bookmarkId,
104 holder.binding.bookmarkIcon2.setVisibility(View.GONE);
105 holder.binding.bookmarkIcon2.setOnClickListener(
null);
106 holder.itemView.setOnLongClickListener(
null);
109 else if (bookmark.getType() == BookmarkBase.TYPE_QUICKCONNECT)
111 holder.binding.bookmarkText2.setVisibility(View.GONE);
112 refStr = ConnectionReference.getHostnameReference(bookmark.getHostname());
113 holder.itemView.setOnLongClickListener(
null);
115 if (bookmark.isDirectConnect())
117 holder.binding.bookmarkText1.setText(holder.itemView.getContext().getString(
118 R.string.quick_connect_to, bookmark.getHostname()));
119 holder.binding.bookmarkIcon1.setImageResource(R.drawable.ic_login);
120 holder.binding.bookmarkIcon1.setVisibility(View.VISIBLE);
121 holder.binding.bookmarkIcon2.setVisibility(View.GONE);
122 holder.binding.bookmarkIcon2.setOnClickListener(
null);
126 holder.binding.bookmarkText1.setText(bookmark.getLabel());
127 holder.binding.bookmarkIcon1.setImageResource(R.drawable.ic_history);
128 holder.binding.bookmarkIcon1.setVisibility(View.VISIBLE);
129 holder.binding.bookmarkIcon2.setVisibility(View.VISIBLE);
130 holder.binding.bookmarkIcon2.setImageResource(R.drawable.ic_bookmark_add);
131 final String hostname = bookmark.getHostname();
132 holder.binding.bookmarkIcon2.setOnClickListener(v -> {
133 Bundle bundle =
new Bundle();
134 bundle.putString(BookmarkActivity.PARAM_CONNECTION_REFERENCE,
135 ConnectionReference.getHostnameReference(hostname));
136 Intent intent =
new Intent(v.getContext(), BookmarkActivity.class);
137 intent.putExtras(bundle);
138 v.getContext().startActivity(intent);
144 holder.binding.bookmarkIcon1.setVisibility(View.GONE);
145 holder.binding.bookmarkText2.setVisibility(View.GONE);
147 holder.binding.bookmarkIcon2.setVisibility(View.GONE);
148 holder.binding.bookmarkIcon2.setOnClickListener(
null);
151 holder.itemView.setTag(refStr);
153 holder.itemView.setOnClickListener(v -> {
154 if (callbacks !=
null)
155 callbacks.onItemClick(v.getTag().toString());
159 @Override
public int getItemCount()
164 private void showBookmarkMenu(View anchor, String refStr,
long bookmarkId,
165 BookmarkBase bookmark)
167 PopupMenu popup =
new PopupMenu(anchor.getContext(), anchor);
168 popup.inflate(R.menu.bookmark_context_menu);
169 popup.setOnMenuItemClickListener(item -> {
170 int itemId = item.getItemId();
171 if (itemId == R.id.bookmark_connect)
173 if (callbacks != null)
174 callbacks.onItemClick(refStr);
177 else if (itemId == R.id.bookmark_edit)
179 Bundle bundle = new Bundle();
180 bundle.putString(BookmarkActivity.PARAM_CONNECTION_REFERENCE, refStr);
181 Intent intent = new Intent(anchor.getContext(), BookmarkActivity.class);
182 intent.putExtras(bundle);
183 anchor.getContext().startActivity(intent);
186 else if (itemId == R.id.bookmark_delete)
188 if (callbacks != null)
189 callbacks.onDelete(bookmarkId);
192 else if (itemId == R.id.bookmark_export)
194 if (callbacks != null)
195 callbacks.onExport(bookmark);
203 static class ViewHolder
extends RecyclerView.ViewHolder
205 final BookmarkListItemBinding binding;
207 ViewHolder(BookmarkListItemBinding binding)
209 super(binding.getRoot());
210 this.binding = binding;