FreeRDP
Loading...
Searching...
No Matches
BookmarkListAdapter.java
1/*
2 RecyclerView adapter for bookmark list items
3
4*/
5
6package com.freerdp.freerdpcore.utils;
7
8import android.content.Intent;
9import android.os.Bundle;
10import android.view.LayoutInflater;
11import android.view.View;
12import android.view.ViewGroup;
13
14import androidx.annotation.NonNull;
15import androidx.appcompat.widget.PopupMenu;
16import androidx.recyclerview.widget.RecyclerView;
17
18import com.freerdp.freerdpcore.R;
19import com.freerdp.freerdpcore.databinding.BookmarkListItemBinding;
20import com.freerdp.freerdpcore.domain.BookmarkBase;
21import com.freerdp.freerdpcore.domain.ConnectionReference;
22import com.freerdp.freerdpcore.presentation.BookmarkActivity;
23
24import java.util.ArrayList;
25import java.util.List;
26
27public class BookmarkListAdapter extends RecyclerView.Adapter<BookmarkListAdapter.ViewHolder>
28{
29 public interface Callbacks
30 {
31 void onItemClick(String refStr);
32 void onDelete(long id);
33 }
34
35 private List<BookmarkBase> items = new ArrayList<>();
36 private Callbacks callbacks;
37 private boolean actionsEnabled = true;
38
39 public void setCallbacks(Callbacks callbacks)
40 {
41 this.callbacks = callbacks;
42 }
43
44 public void setActionsEnabled(boolean enabled)
45 {
46 actionsEnabled = enabled;
47 }
48
49 public List<BookmarkBase> getItems()
50 {
51 return items;
52 }
53
54 public void setItems(List<BookmarkBase> newItems)
55 {
56 items = newItems != null ? newItems : new ArrayList<>();
57 notifyDataSetChanged();
58 }
59
60 @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
61 {
62 BookmarkListItemBinding binding = BookmarkListItemBinding.inflate(
63 LayoutInflater.from(parent.getContext()), parent, false);
64 return new ViewHolder(binding);
65 }
66
67 @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position)
68 {
69 BookmarkBase bookmark = items.get(position);
70 String refStr;
71
72 holder.binding.bookmarkText1.setText(bookmark.getLabel());
73
74 if (bookmark.getType() == BookmarkBase.TYPE_MANUAL)
75 {
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());
81
82 if (actionsEnabled)
83 {
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);
92 return true;
93 });
94 }
95 else
96 {
97 holder.binding.bookmarkIcon2.setVisibility(View.GONE);
98 holder.binding.bookmarkIcon2.setOnClickListener(null);
99 holder.itemView.setOnLongClickListener(null);
100 }
101 }
102 else if (bookmark.getType() == BookmarkBase.TYPE_QUICKCONNECT)
103 {
104 holder.binding.bookmarkText2.setVisibility(View.GONE);
105 refStr = ConnectionReference.getHostnameReference(bookmark.getHostname());
106 holder.itemView.setOnLongClickListener(null);
107
108 if (bookmark.isDirectConnect())
109 {
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);
116 }
117 else
118 {
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);
132 });
133 }
134 }
135 else
136 {
137 holder.binding.bookmarkIcon1.setVisibility(View.GONE);
138 holder.binding.bookmarkText2.setVisibility(View.GONE);
139 refStr = "";
140 holder.binding.bookmarkIcon2.setVisibility(View.GONE);
141 holder.binding.bookmarkIcon2.setOnClickListener(null);
142 }
143
144 holder.itemView.setTag(refStr);
145
146 holder.itemView.setOnClickListener(v -> {
147 if (callbacks != null)
148 callbacks.onItemClick(v.getTag().toString());
149 });
150 }
151
152 @Override public int getItemCount()
153 {
154 return items.size();
155 }
156
157 private void showBookmarkMenu(View anchor, String refStr, long bookmarkId)
158 {
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)
164 {
165 if (callbacks != null)
166 callbacks.onItemClick(refStr);
167 return true;
168 }
169 else if (itemId == R.id.bookmark_edit)
170 {
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);
176 return true;
177 }
178 else if (itemId == R.id.bookmark_delete)
179 {
180 if (callbacks != null)
181 callbacks.onDelete(bookmarkId);
182 return true;
183 }
184 return false;
185 });
186 popup.show();
187 }
188
189 static class ViewHolder extends RecyclerView.ViewHolder
190 {
191 final BookmarkListItemBinding binding;
192
193 ViewHolder(BookmarkListItemBinding binding)
194 {
195 super(binding.getRoot());
196 this.binding = binding;
197 }
198 }
199}