Copy user id to clipboard (#840)

Co-Authored-By: M M Arif <mmarif@noreply.codeberg.org>
Co-Committed-By: M M Arif <mmarif@noreply.codeberg.org>
This commit is contained in:
M M Arif 2021-03-05 06:24:48 +01:00
parent ff915f1813
commit 328dbaa01c
13 changed files with 216 additions and 83 deletions

View File

@ -16,6 +16,7 @@ import com.amulyakhare.textdrawable.TextDrawable;
import org.gitnex.tea4j.models.UserInfo; import org.gitnex.tea4j.models.UserInfo;
import org.mian.gitnex.R; import org.mian.gitnex.R;
import org.mian.gitnex.clients.PicassoService; import org.mian.gitnex.clients.PicassoService;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.RoundedTransformation; import org.mian.gitnex.helpers.RoundedTransformation;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -26,19 +27,22 @@ import java.util.List;
public class AdminGetUsersAdapter extends RecyclerView.Adapter<AdminGetUsersAdapter.UsersViewHolder> implements Filterable { public class AdminGetUsersAdapter extends RecyclerView.Adapter<AdminGetUsersAdapter.UsersViewHolder> implements Filterable {
private List<UserInfo> usersList; private final List<UserInfo> usersList;
private Context mCtx; private final Context mCtx;
private List<UserInfo> usersListFull; private final List<UserInfo> usersListFull;
static class UsersViewHolder extends RecyclerView.ViewHolder { static class UsersViewHolder extends RecyclerView.ViewHolder {
private ImageView userAvatar; private String userLoginId;
private TextView userFullName;
private TextView userEmail; private final ImageView userAvatar;
private ImageView userRole; private final TextView userFullName;
private TextView userName; private final TextView userEmail;
private final ImageView userRole;
private final TextView userName;
private UsersViewHolder(View itemView) { private UsersViewHolder(View itemView) {
super(itemView); super(itemView);
userAvatar = itemView.findViewById(R.id.userAvatar); userAvatar = itemView.findViewById(R.id.userAvatar);
@ -47,10 +51,17 @@ public class AdminGetUsersAdapter extends RecyclerView.Adapter<AdminGetUsersAdap
userEmail = itemView.findViewById(R.id.userEmail); userEmail = itemView.findViewById(R.id.userEmail);
userRole = itemView.findViewById(R.id.userRole); userRole = itemView.findViewById(R.id.userRole);
userAvatar.setOnClickListener(loginId -> {
Context context = loginId.getContext();
AppUtil.copyToClipboard(context, userLoginId, context.getString(R.string.copyLoginIdToClipBoard, userLoginId));
});
} }
} }
public AdminGetUsersAdapter(Context mCtx, List<UserInfo> usersListMain) { public AdminGetUsersAdapter(Context mCtx, List<UserInfo> usersListMain) {
this.mCtx = mCtx; this.mCtx = mCtx;
this.usersList = usersListMain; this.usersList = usersListMain;
usersListFull = new ArrayList<>(usersList); usersListFull = new ArrayList<>(usersList);
@ -59,6 +70,7 @@ public class AdminGetUsersAdapter extends RecyclerView.Adapter<AdminGetUsersAdap
@NonNull @NonNull
@Override @Override
public AdminGetUsersAdapter.UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public AdminGetUsersAdapter.UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_admin_users, parent, false); View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_admin_users, parent, false);
return new AdminGetUsersAdapter.UsersViewHolder(v); return new AdminGetUsersAdapter.UsersViewHolder(v);
} }
@ -68,6 +80,8 @@ public class AdminGetUsersAdapter extends RecyclerView.Adapter<AdminGetUsersAdap
UserInfo currentItem = usersList.get(position); UserInfo currentItem = usersList.get(position);
holder.userLoginId = currentItem.getLogin();
if(!currentItem.getFullname().equals("")) { if(!currentItem.getFullname().equals("")) {
holder.userFullName.setText(Html.fromHtml(currentItem.getFullname())); holder.userFullName.setText(Html.fromHtml(currentItem.getFullname()));
@ -89,6 +103,7 @@ public class AdminGetUsersAdapter extends RecyclerView.Adapter<AdminGetUsersAdap
} }
if(currentItem.getIs_admin()) { if(currentItem.getIs_admin()) {
holder.userRole.setVisibility(View.VISIBLE); holder.userRole.setVisibility(View.VISIBLE);
TextDrawable drawable = TextDrawable.builder() TextDrawable drawable = TextDrawable.builder()
.beginConfig() .beginConfig()
@ -101,6 +116,7 @@ public class AdminGetUsersAdapter extends RecyclerView.Adapter<AdminGetUsersAdap
holder.userRole.setImageDrawable(drawable); holder.userRole.setImageDrawable(drawable);
} }
else { else {
holder.userRole.setVisibility(View.GONE); holder.userRole.setVisibility(View.GONE);
} }
@ -117,14 +133,15 @@ public class AdminGetUsersAdapter extends RecyclerView.Adapter<AdminGetUsersAdap
return usersFilter; return usersFilter;
} }
private Filter usersFilter = new Filter() { private final Filter usersFilter = new Filter() {
@Override @Override
protected FilterResults performFiltering(CharSequence constraint) { protected FilterResults performFiltering(CharSequence constraint) {
List<UserInfo> filteredList = new ArrayList<>(); List<UserInfo> filteredList = new ArrayList<>();
if (constraint == null || constraint.length() == 0) { if (constraint == null || constraint.length() == 0) {
filteredList.addAll(usersListFull); filteredList.addAll(usersListFull);
} else { }
else {
String filterPattern = constraint.toString().toLowerCase().trim(); String filterPattern = constraint.toString().toLowerCase().trim();
for (UserInfo item : usersListFull) { for (UserInfo item : usersListFull) {
@ -142,6 +159,7 @@ public class AdminGetUsersAdapter extends RecyclerView.Adapter<AdminGetUsersAdap
@Override @Override
protected void publishResults(CharSequence constraint, FilterResults results) { protected void publishResults(CharSequence constraint, FilterResults results) {
usersList.clear(); usersList.clear();
usersList.addAll((List) results.values); usersList.addAll((List) results.values);
notifyDataSetChanged(); notifyDataSetChanged();

View File

@ -12,6 +12,7 @@ import android.widget.TextView;
import org.gitnex.tea4j.models.Collaborators; import org.gitnex.tea4j.models.Collaborators;
import org.mian.gitnex.R; import org.mian.gitnex.R;
import org.mian.gitnex.clients.PicassoService; import org.mian.gitnex.clients.PicassoService;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.RoundedTransformation; import org.mian.gitnex.helpers.RoundedTransformation;
import java.util.List; import java.util.List;
@ -21,21 +22,32 @@ import java.util.List;
public class CollaboratorsAdapter extends BaseAdapter { public class CollaboratorsAdapter extends BaseAdapter {
private List<Collaborators> collaboratorsList; private final List<Collaborators> collaboratorsList;
private Context mCtx; private final Context mCtx;
private class ViewHolder { private static class ViewHolder {
private ImageView collaboratorAvatar; private String userLoginId;
private TextView collaboratorName;
private final ImageView collaboratorAvatar;
private final TextView collaboratorName;
ViewHolder(View v) { ViewHolder(View v) {
collaboratorAvatar = v.findViewById(R.id.collaboratorAvatar); collaboratorAvatar = v.findViewById(R.id.collaboratorAvatar);
collaboratorName = v.findViewById(R.id.collaboratorName); collaboratorName = v.findViewById(R.id.collaboratorName);
collaboratorAvatar.setOnClickListener(loginId -> {
Context context = loginId.getContext();
AppUtil.copyToClipboard(context, userLoginId, context.getString(R.string.copyLoginIdToClipBoard, userLoginId));
});
} }
} }
public CollaboratorsAdapter(Context mCtx, List<Collaborators> collaboratorsListMain) { public CollaboratorsAdapter(Context mCtx, List<Collaborators> collaboratorsListMain) {
this.mCtx = mCtx; this.mCtx = mCtx;
this.collaboratorsList = collaboratorsListMain; this.collaboratorsList = collaboratorsListMain;
} }
@ -62,17 +74,18 @@ public class CollaboratorsAdapter extends BaseAdapter {
ViewHolder viewHolder = null; ViewHolder viewHolder = null;
if (finalView == null) { if (finalView == null) {
finalView = LayoutInflater.from(mCtx).inflate(R.layout.list_collaborators, null); finalView = LayoutInflater.from(mCtx).inflate(R.layout.list_collaborators, null);
viewHolder = new ViewHolder(finalView); viewHolder = new ViewHolder(finalView);
finalView.setTag(viewHolder); finalView.setTag(viewHolder);
} }
else { else {
viewHolder = (ViewHolder) finalView.getTag(); viewHolder = (ViewHolder) finalView.getTag();
} }
initData(viewHolder, position); initData(viewHolder, position);
return finalView; return finalView;
} }
private void initData(ViewHolder viewHolder, int position) { private void initData(ViewHolder viewHolder, int position) {
@ -80,6 +93,8 @@ public class CollaboratorsAdapter extends BaseAdapter {
Collaborators currentItem = collaboratorsList.get(position); Collaborators currentItem = collaboratorsList.get(position);
PicassoService.getInstance(mCtx).get().load(currentItem.getAvatar_url()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(180, 180).centerCrop().into(viewHolder.collaboratorAvatar); PicassoService.getInstance(mCtx).get().load(currentItem.getAvatar_url()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(180, 180).centerCrop().into(viewHolder.collaboratorAvatar);
viewHolder.userLoginId = currentItem.getLogin();
if(!currentItem.getFull_name().equals("")) { if(!currentItem.getFull_name().equals("")) {
viewHolder.collaboratorName.setText(Html.fromHtml(currentItem.getFull_name())); viewHolder.collaboratorName.setText(Html.fromHtml(currentItem.getFull_name()));

View File

@ -65,6 +65,7 @@ public class IssueCommentsAdapter extends RecyclerView.Adapter<IssueCommentsAdap
class IssueCommentViewHolder extends RecyclerView.ViewHolder { class IssueCommentViewHolder extends RecyclerView.ViewHolder {
private String userLoginId;
private IssueComments issueComment; private IssueComments issueComment;
private final ImageView avatar; private final ImageView avatar;
@ -227,6 +228,13 @@ public class IssueCommentsAdapter extends RecyclerView.Adapter<IssueCommentsAdap
}); });
avatar.setOnClickListener(loginId -> {
Context context = loginId.getContext();
AppUtil.copyToClipboard(context, userLoginId, context.getString(R.string.copyLoginIdToClipBoard, userLoginId));
});
} }
} }
@ -311,6 +319,8 @@ public class IssueCommentsAdapter extends RecyclerView.Adapter<IssueCommentsAdap
String timeFormat = tinyDB.getString("dateFormat"); String timeFormat = tinyDB.getString("dateFormat");
IssueComments issueComment = issuesComments.get(position); IssueComments issueComment = issuesComments.get(position);
holder.userLoginId = issueComment.getUser().getLogin();
holder.issueComment = issueComment; holder.issueComment = issueComment;
holder.author.setText(issueComment.getUser().getUsername()); holder.author.setText(issueComment.getUser().getUsername());

View File

@ -18,6 +18,7 @@ import org.gitnex.tea4j.models.Issues;
import org.mian.gitnex.R; import org.mian.gitnex.R;
import org.mian.gitnex.activities.IssueDetailActivity; import org.mian.gitnex.activities.IssueDetailActivity;
import org.mian.gitnex.clients.PicassoService; import org.mian.gitnex.clients.PicassoService;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.ClickListener; import org.mian.gitnex.helpers.ClickListener;
import org.mian.gitnex.helpers.RoundedTransformation; import org.mian.gitnex.helpers.RoundedTransformation;
import org.mian.gitnex.helpers.TimeHelper; import org.mian.gitnex.helpers.TimeHelper;
@ -101,6 +102,8 @@ public class IssuesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
class IssuesHolder extends RecyclerView.ViewHolder { class IssuesHolder extends RecyclerView.ViewHolder {
private String userLoginId;
private final TextView issueNumber; private final TextView issueNumber;
private final ImageView issueAssigneeAvatar; private final ImageView issueAssigneeAvatar;
private final TextView issueTitle; private final TextView issueTitle;
@ -118,9 +121,9 @@ public class IssuesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
LinearLayout frameCommentsCount = itemView.findViewById(R.id.frameCommentsCount); LinearLayout frameCommentsCount = itemView.findViewById(R.id.frameCommentsCount);
issueCreatedTime = itemView.findViewById(R.id.issueCreatedTime); issueCreatedTime = itemView.findViewById(R.id.issueCreatedTime);
issueTitle.setOnClickListener(v -> { issueTitle.setOnClickListener(title -> {
Context context = v.getContext(); Context context = title.getContext();
Intent intent = new Intent(context, IssueDetailActivity.class); Intent intent = new Intent(context, IssueDetailActivity.class);
intent.putExtra("issueNumber", issueNumber.getText()); intent.putExtra("issueNumber", issueNumber.getText());
@ -131,9 +134,10 @@ public class IssuesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
context.startActivity(intent); context.startActivity(intent);
}); });
frameCommentsCount.setOnClickListener(v -> {
Context context = v.getContext(); frameCommentsCount.setOnClickListener(commentsCount -> {
Context context = commentsCount.getContext();
Intent intent = new Intent(context, IssueDetailActivity.class); Intent intent = new Intent(context, IssueDetailActivity.class);
intent.putExtra("issueNumber", issueNumber.getText()); intent.putExtra("issueNumber", issueNumber.getText());
@ -145,6 +149,13 @@ public class IssuesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
}); });
issueAssigneeAvatar.setOnClickListener(loginId -> {
Context context = loginId.getContext();
AppUtil.copyToClipboard(context, userLoginId, context.getString(R.string.copyLoginIdToClipBoard, userLoginId));
});
} }
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
@ -154,12 +165,7 @@ public class IssuesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
final String locale = tinyDb.getString("locale"); final String locale = tinyDb.getString("locale");
final String timeFormat = tinyDb.getString("dateFormat"); final String timeFormat = tinyDb.getString("dateFormat");
if(!issuesModel.getUser().getFull_name().equals("")) { userLoginId = issuesModel.getUser().getLogin();
issueAssigneeAvatar.setOnClickListener(new ClickListener(context.getResources().getString(R.string.issueCreator) + issuesModel.getUser().getFull_name(), context));
}
else {
issueAssigneeAvatar.setOnClickListener(new ClickListener(context.getResources().getString(R.string.issueCreator) + issuesModel.getUser().getLogin(), context));
}
PicassoService.getInstance(context).get().load(issuesModel.getUser().getAvatar_url()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(issueAssigneeAvatar); PicassoService.getInstance(context).get().load(issuesModel.getUser().getAvatar_url()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(issueAssigneeAvatar);

View File

@ -14,6 +14,7 @@ import android.widget.TextView;
import org.gitnex.tea4j.models.UserInfo; import org.gitnex.tea4j.models.UserInfo;
import org.mian.gitnex.R; import org.mian.gitnex.R;
import org.mian.gitnex.clients.PicassoService; import org.mian.gitnex.clients.PicassoService;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.RoundedTransformation; import org.mian.gitnex.helpers.RoundedTransformation;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -24,26 +25,36 @@ import java.util.List;
public class MembersByOrgAdapter extends BaseAdapter implements Filterable { public class MembersByOrgAdapter extends BaseAdapter implements Filterable {
private List<UserInfo> membersList; private final List<UserInfo> membersList;
private Context mCtx; private final Context mCtx;
private List<UserInfo> membersListFull; private final List<UserInfo> membersListFull;
private class ViewHolder { private static class ViewHolder {
private ImageView memberAvatar; private String userLoginId;
private TextView memberName;
private final ImageView memberAvatar;
private final TextView memberName;
ViewHolder(View v) { ViewHolder(View v) {
memberAvatar = v.findViewById(R.id.memberAvatar); memberAvatar = v.findViewById(R.id.memberAvatar);
memberName = v.findViewById(R.id.memberName); memberName = v.findViewById(R.id.memberName);
memberAvatar.setOnClickListener(loginId -> {
Context context = loginId.getContext();
AppUtil.copyToClipboard(context, userLoginId, context.getString(R.string.copyLoginIdToClipBoard, userLoginId));
});
} }
} }
public MembersByOrgAdapter(Context mCtx, List<UserInfo> membersListMain) { public MembersByOrgAdapter(Context mCtx, List<UserInfo> membersListMain) {
this.mCtx = mCtx; this.mCtx = mCtx;
this.membersList = membersListMain; this.membersList = membersListMain;
membersListFull = new ArrayList<>(membersList); membersListFull = new ArrayList<>(membersList);
} }
@Override @Override
@ -68,17 +79,18 @@ public class MembersByOrgAdapter extends BaseAdapter implements Filterable {
MembersByOrgAdapter.ViewHolder viewHolder = null; MembersByOrgAdapter.ViewHolder viewHolder = null;
if (finalView == null) { if (finalView == null) {
finalView = LayoutInflater.from(mCtx).inflate(R.layout.list_members_by_org, null); finalView = LayoutInflater.from(mCtx).inflate(R.layout.list_members_by_org, null);
viewHolder = new MembersByOrgAdapter.ViewHolder(finalView); viewHolder = new ViewHolder(finalView);
finalView.setTag(viewHolder); finalView.setTag(viewHolder);
} }
else { else {
viewHolder = (MembersByOrgAdapter.ViewHolder) finalView.getTag(); viewHolder = (MembersByOrgAdapter.ViewHolder) finalView.getTag();
} }
initData(viewHolder, position); initData(viewHolder, position);
return finalView; return finalView;
} }
private void initData(MembersByOrgAdapter.ViewHolder viewHolder, int position) { private void initData(MembersByOrgAdapter.ViewHolder viewHolder, int position) {
@ -86,6 +98,8 @@ public class MembersByOrgAdapter extends BaseAdapter implements Filterable {
UserInfo currentItem = membersList.get(position); UserInfo currentItem = membersList.get(position);
PicassoService.getInstance(mCtx).get().load(currentItem.getAvatar()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(viewHolder.memberAvatar); PicassoService.getInstance(mCtx).get().load(currentItem.getAvatar()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(viewHolder.memberAvatar);
viewHolder.userLoginId = currentItem.getLogin();
if(!currentItem.getFullname().equals("")) { if(!currentItem.getFullname().equals("")) {
viewHolder.memberName.setText(Html.fromHtml(currentItem.getFullname())); viewHolder.memberName.setText(Html.fromHtml(currentItem.getFullname()));
@ -102,14 +116,17 @@ public class MembersByOrgAdapter extends BaseAdapter implements Filterable {
return membersFilter; return membersFilter;
} }
private Filter membersFilter = new Filter() { private final Filter membersFilter = new Filter() {
@Override @Override
protected FilterResults performFiltering(CharSequence constraint) { protected FilterResults performFiltering(CharSequence constraint) {
List<UserInfo> filteredList = new ArrayList<>(); List<UserInfo> filteredList = new ArrayList<>();
if (constraint == null || constraint.length() == 0) { if (constraint == null || constraint.length() == 0) {
filteredList.addAll(membersListFull); filteredList.addAll(membersListFull);
} else { }
else {
String filterPattern = constraint.toString().toLowerCase().trim(); String filterPattern = constraint.toString().toLowerCase().trim();
for (UserInfo item : membersListFull) { for (UserInfo item : membersListFull) {
@ -127,6 +144,7 @@ public class MembersByOrgAdapter extends BaseAdapter implements Filterable {
@Override @Override
protected void publishResults(CharSequence constraint, FilterResults results) { protected void publishResults(CharSequence constraint, FilterResults results) {
membersList.clear(); membersList.clear();
membersList.addAll((List) results.values); membersList.addAll((List) results.values);
notifyDataSetChanged(); notifyDataSetChanged();

View File

@ -12,6 +12,7 @@ import androidx.recyclerview.widget.RecyclerView;
import org.gitnex.tea4j.models.UserInfo; import org.gitnex.tea4j.models.UserInfo;
import org.mian.gitnex.R; import org.mian.gitnex.R;
import org.mian.gitnex.clients.PicassoService; import org.mian.gitnex.clients.PicassoService;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.RoundedTransformation; import org.mian.gitnex.helpers.RoundedTransformation;
import java.util.List; import java.util.List;
@ -21,26 +22,36 @@ import java.util.List;
public class ProfileFollowersAdapter extends RecyclerView.Adapter<ProfileFollowersAdapter.FollowersViewHolder> { public class ProfileFollowersAdapter extends RecyclerView.Adapter<ProfileFollowersAdapter.FollowersViewHolder> {
private List<UserInfo> followersList; private final List<UserInfo> followersList;
private Context mCtx; private final Context mCtx;
static class FollowersViewHolder extends RecyclerView.ViewHolder { static class FollowersViewHolder extends RecyclerView.ViewHolder {
private ImageView userAvatar; private String userLoginId;
private TextView userFullName;
private TextView userName; private final ImageView userAvatar;
private final TextView userFullName;
private final TextView userName;
private FollowersViewHolder(View itemView) { private FollowersViewHolder(View itemView) {
super(itemView); super(itemView);
userAvatar = itemView.findViewById(R.id.userAvatar); userAvatar = itemView.findViewById(R.id.userAvatar);
userFullName = itemView.findViewById(R.id.userFullName); userFullName = itemView.findViewById(R.id.userFullName);
userName = itemView.findViewById(R.id.userName); userName = itemView.findViewById(R.id.userName);
userAvatar.setOnClickListener(loginId -> {
Context context = loginId.getContext();
AppUtil.copyToClipboard(context, userLoginId, context.getString(R.string.copyLoginIdToClipBoard, userLoginId));
});
} }
} }
public ProfileFollowersAdapter(Context mCtx, List<UserInfo> followersListMain) { public ProfileFollowersAdapter(Context mCtx, List<UserInfo> followersListMain) {
this.mCtx = mCtx; this.mCtx = mCtx;
this.followersList = followersListMain; this.followersList = followersListMain;
} }
@ -48,8 +59,9 @@ public class ProfileFollowersAdapter extends RecyclerView.Adapter<ProfileFollowe
@NonNull @NonNull
@Override @Override
public ProfileFollowersAdapter.FollowersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public ProfileFollowersAdapter.FollowersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_profile_followers, parent, false); View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_profile_followers, parent, false);
return new ProfileFollowersAdapter.FollowersViewHolder(v); return new FollowersViewHolder(v);
} }
@Override @Override
@ -57,6 +69,8 @@ public class ProfileFollowersAdapter extends RecyclerView.Adapter<ProfileFollowe
UserInfo currentItem = followersList.get(position); UserInfo currentItem = followersList.get(position);
holder.userLoginId = currentItem.getLogin();
if(!currentItem.getFullname().equals("")) { if(!currentItem.getFullname().equals("")) {
holder.userFullName.setText(Html.fromHtml(currentItem.getFullname())); holder.userFullName.setText(Html.fromHtml(currentItem.getFullname()));

View File

@ -12,6 +12,7 @@ import androidx.recyclerview.widget.RecyclerView;
import org.gitnex.tea4j.models.UserInfo; import org.gitnex.tea4j.models.UserInfo;
import org.mian.gitnex.R; import org.mian.gitnex.R;
import org.mian.gitnex.clients.PicassoService; import org.mian.gitnex.clients.PicassoService;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.RoundedTransformation; import org.mian.gitnex.helpers.RoundedTransformation;
import java.util.List; import java.util.List;
@ -21,26 +22,36 @@ import java.util.List;
public class ProfileFollowingAdapter extends RecyclerView.Adapter<ProfileFollowingAdapter.FollowingViewHolder> { public class ProfileFollowingAdapter extends RecyclerView.Adapter<ProfileFollowingAdapter.FollowingViewHolder> {
private List<UserInfo> followingList; private final List<UserInfo> followingList;
private Context mCtx; private final Context mCtx;
static class FollowingViewHolder extends RecyclerView.ViewHolder { static class FollowingViewHolder extends RecyclerView.ViewHolder {
private ImageView userAvatar; private String userLoginId;
private TextView userFullName;
private TextView userName; private final ImageView userAvatar;
private final TextView userFullName;
private final TextView userName;
private FollowingViewHolder(View itemView) { private FollowingViewHolder(View itemView) {
super(itemView); super(itemView);
userAvatar = itemView.findViewById(R.id.userAvatar); userAvatar = itemView.findViewById(R.id.userAvatar);
userFullName = itemView.findViewById(R.id.userFullName); userFullName = itemView.findViewById(R.id.userFullName);
userName = itemView.findViewById(R.id.userName); userName = itemView.findViewById(R.id.userName);
userAvatar.setOnClickListener(loginId -> {
Context context = loginId.getContext();
AppUtil.copyToClipboard(context, userLoginId, context.getString(R.string.copyLoginIdToClipBoard, userLoginId));
});
} }
} }
public ProfileFollowingAdapter(Context mCtx, List<UserInfo> followingListMain) { public ProfileFollowingAdapter(Context mCtx, List<UserInfo> followingListMain) {
this.mCtx = mCtx; this.mCtx = mCtx;
this.followingList = followingListMain; this.followingList = followingListMain;
} }
@ -48,8 +59,9 @@ public class ProfileFollowingAdapter extends RecyclerView.Adapter<ProfileFollowi
@NonNull @NonNull
@Override @Override
public ProfileFollowingAdapter.FollowingViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public ProfileFollowingAdapter.FollowingViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_profile_following, parent, false); View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_profile_following, parent, false);
return new ProfileFollowingAdapter.FollowingViewHolder(v); return new FollowingViewHolder(v);
} }
@Override @Override
@ -57,6 +69,8 @@ public class ProfileFollowingAdapter extends RecyclerView.Adapter<ProfileFollowi
UserInfo currentItem = followingList.get(position); UserInfo currentItem = followingList.get(position);
holder.userLoginId = currentItem.getLogin();
if(!currentItem.getFullname().equals("")) { if(!currentItem.getFullname().equals("")) {
holder.userFullName.setText(Html.fromHtml(currentItem.getFullname())); holder.userFullName.setText(Html.fromHtml(currentItem.getFullname()));

View File

@ -18,6 +18,7 @@ import org.gitnex.tea4j.models.PullRequests;
import org.mian.gitnex.R; import org.mian.gitnex.R;
import org.mian.gitnex.activities.IssueDetailActivity; import org.mian.gitnex.activities.IssueDetailActivity;
import org.mian.gitnex.clients.PicassoService; import org.mian.gitnex.clients.PicassoService;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.ClickListener; import org.mian.gitnex.helpers.ClickListener;
import org.mian.gitnex.helpers.RoundedTransformation; import org.mian.gitnex.helpers.RoundedTransformation;
import org.mian.gitnex.helpers.TimeHelper; import org.mian.gitnex.helpers.TimeHelper;
@ -98,6 +99,8 @@ public class PullRequestsAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
class PullRequestsHolder extends RecyclerView.ViewHolder { class PullRequestsHolder extends RecyclerView.ViewHolder {
private String userLoginId;
private final TextView prNumber; private final TextView prNumber;
private final TextView prMergeable; private final TextView prMergeable;
private final TextView prHeadBranch; private final TextView prHeadBranch;
@ -142,6 +145,7 @@ public class PullRequestsAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
context.startActivity(intent); context.startActivity(intent);
}); });
frameCommentsCount.setOnClickListener(v -> { frameCommentsCount.setOnClickListener(v -> {
Context context = v.getContext(); Context context = v.getContext();
@ -159,7 +163,13 @@ public class PullRequestsAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
tinyDb.putString("prForkFullName", prForkFullName.getText().toString()); tinyDb.putString("prForkFullName", prForkFullName.getText().toString());
tinyDb.putString("issueType", "Pull"); tinyDb.putString("issueType", "Pull");
context.startActivity(intent); context.startActivity(intent);
});
assigneeAvatar.setOnClickListener(loginId -> {
Context context = loginId.getContext();
AppUtil.copyToClipboard(context, userLoginId, context.getString(R.string.copyLoginIdToClipBoard, userLoginId));
}); });
} }
@ -171,19 +181,9 @@ public class PullRequestsAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
final String locale = tinyDb.getString("locale"); final String locale = tinyDb.getString("locale");
final String timeFormat = tinyDb.getString("dateFormat"); final String timeFormat = tinyDb.getString("dateFormat");
if(!prModel.getUser().getFull_name().equals("")) { userLoginId = prModel.getUser().getLogin();
assigneeAvatar.setOnClickListener(new ClickListener(context.getResources().getString(R.string.prCreator) + prModel.getUser().getFull_name(), context));
}
else {
assigneeAvatar.setOnClickListener(new ClickListener(context.getResources().getString(R.string.prCreator) + prModel.getUser().getLogin(), context));
}
if(prModel.getUser().getAvatar_url() != null) { PicassoService.getInstance(context).get().load(prModel.getUser().getAvatar_url()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(assigneeAvatar);
PicassoService.getInstance(context).get().load(prModel.getUser().getAvatar_url()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(assigneeAvatar);
}
else {
PicassoService.getInstance(context).get().load(prModel.getUser().getAvatar_url()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(assigneeAvatar);
}
String prNumber_ = "<font color='" + ResourcesCompat.getColor(context.getResources(), R.color.lightGray, null) + "'>" + context.getResources().getString(R.string.hash) + prModel.getNumber() + "</font>"; String prNumber_ = "<font color='" + ResourcesCompat.getColor(context.getResources(), R.color.lightGray, null) + "'>" + context.getResources().getString(R.string.hash) + prModel.getNumber() + "</font>";
prTitle.setText(HtmlCompat.fromHtml(prNumber_ + " " + EmojiParser.parseToUnicode(prModel.getTitle()), HtmlCompat.FROM_HTML_MODE_LEGACY)); prTitle.setText(HtmlCompat.fromHtml(prNumber_ + " " + EmojiParser.parseToUnicode(prModel.getTitle()), HtmlCompat.FROM_HTML_MODE_LEGACY));

View File

@ -17,6 +17,7 @@ import org.mian.gitnex.activities.IssueDetailActivity;
import org.mian.gitnex.clients.PicassoService; import org.mian.gitnex.clients.PicassoService;
import org.mian.gitnex.database.api.RepositoriesApi; import org.mian.gitnex.database.api.RepositoriesApi;
import org.mian.gitnex.database.models.Repository; import org.mian.gitnex.database.models.Repository;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.ClickListener; import org.mian.gitnex.helpers.ClickListener;
import org.mian.gitnex.helpers.RoundedTransformation; import org.mian.gitnex.helpers.RoundedTransformation;
import org.mian.gitnex.helpers.TimeHelper; import org.mian.gitnex.helpers.TimeHelper;
@ -33,9 +34,9 @@ import java.util.Locale;
public class SearchIssuesAdapter extends RecyclerView.Adapter<SearchIssuesAdapter.SearchViewHolder> { public class SearchIssuesAdapter extends RecyclerView.Adapter<SearchIssuesAdapter.SearchViewHolder> {
private List<Issues> searchedList; private final List<Issues> searchedList;
private Context mCtx; private final Context mCtx;
private TinyDB tinyDb; private final TinyDB tinyDb;
public SearchIssuesAdapter(List<Issues> dataList, Context mCtx) { public SearchIssuesAdapter(List<Issues> dataList, Context mCtx) {
@ -46,12 +47,14 @@ public class SearchIssuesAdapter extends RecyclerView.Adapter<SearchIssuesAdapte
class SearchViewHolder extends RecyclerView.ViewHolder { class SearchViewHolder extends RecyclerView.ViewHolder {
private TextView issueNumber; private String userLoginId;
private ImageView issueAssigneeAvatar;
private TextView issueTitle; private final TextView issueNumber;
private TextView issueCreatedTime; private final ImageView issueAssigneeAvatar;
private TextView issueCommentsCount; private final TextView issueTitle;
private TextView repoFullName; private final TextView issueCreatedTime;
private final TextView issueCommentsCount;
private final TextView repoFullName;
private SearchViewHolder(View itemView) { private SearchViewHolder(View itemView) {
@ -100,6 +103,13 @@ public class SearchIssuesAdapter extends RecyclerView.Adapter<SearchIssuesAdapte
context.startActivity(intent); context.startActivity(intent);
}); });
issueAssigneeAvatar.setOnClickListener(loginId -> {
Context context = loginId.getContext();
AppUtil.copyToClipboard(context, userLoginId, context.getString(R.string.copyLoginIdToClipBoard, userLoginId));
});
} }
} }
@ -120,12 +130,7 @@ public class SearchIssuesAdapter extends RecyclerView.Adapter<SearchIssuesAdapte
String locale = tinyDb.getString("locale"); String locale = tinyDb.getString("locale");
String timeFormat = tinyDb.getString("dateFormat"); String timeFormat = tinyDb.getString("dateFormat");
if(!currentItem.getUser().getFull_name().equals("")) { holder.userLoginId = currentItem.getUser().getLogin();
holder.issueAssigneeAvatar.setOnClickListener(new ClickListener(mCtx.getResources().getString(R.string.issueCreator) + currentItem.getUser().getFull_name(), mCtx));
}
else {
holder.issueAssigneeAvatar.setOnClickListener(new ClickListener(mCtx.getResources().getString(R.string.issueCreator) + currentItem.getUser().getLogin(), mCtx));
}
PicassoService PicassoService
.getInstance(mCtx).get().load(currentItem.getUser().getAvatar_url()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(holder.issueAssigneeAvatar); .getInstance(mCtx).get().load(currentItem.getUser().getAvatar_url()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(holder.issueAssigneeAvatar);

View File

@ -13,6 +13,7 @@ import android.widget.TextView;
import org.gitnex.tea4j.models.UserInfo; import org.gitnex.tea4j.models.UserInfo;
import org.mian.gitnex.R; import org.mian.gitnex.R;
import org.mian.gitnex.clients.PicassoService; import org.mian.gitnex.clients.PicassoService;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.RoundedTransformation; import org.mian.gitnex.helpers.RoundedTransformation;
import org.mian.gitnex.helpers.TinyDB; import org.mian.gitnex.helpers.TinyDB;
import java.util.List; import java.util.List;
@ -23,24 +24,34 @@ import java.util.List;
public class TeamMembersByOrgAdapter extends BaseAdapter { public class TeamMembersByOrgAdapter extends BaseAdapter {
private List<UserInfo> teamMembersList; private final List<UserInfo> teamMembersList;
private Context mCtx; private final Context mCtx;
private static class ViewHolder { private static class ViewHolder {
private ImageView memberAvatar; private String userLoginId;
private TextView memberName;
private final ImageView memberAvatar;
private final TextView memberName;
ViewHolder(View v) { ViewHolder(View v) {
memberAvatar = v.findViewById(R.id.memberAvatar); memberAvatar = v.findViewById(R.id.memberAvatar);
memberName = v.findViewById(R.id.memberName); memberName = v.findViewById(R.id.memberName);
memberAvatar.setOnClickListener(loginId -> {
Context context = loginId.getContext();
AppUtil.copyToClipboard(context, userLoginId, context.getString(R.string.copyLoginIdToClipBoard, userLoginId));
});
} }
} }
public TeamMembersByOrgAdapter(Context mCtx, List<UserInfo> membersListMain) { public TeamMembersByOrgAdapter(Context mCtx, List<UserInfo> membersListMain) {
this.mCtx = mCtx; this.mCtx = mCtx;
this.teamMembersList = membersListMain; this.teamMembersList = membersListMain;
} }
@Override @Override
@ -65,17 +76,18 @@ public class TeamMembersByOrgAdapter extends BaseAdapter {
TeamMembersByOrgAdapter.ViewHolder viewHolder = null; TeamMembersByOrgAdapter.ViewHolder viewHolder = null;
if (finalView == null) { if (finalView == null) {
finalView = LayoutInflater.from(mCtx).inflate(R.layout.list_members_by_team_by_org, null); finalView = LayoutInflater.from(mCtx).inflate(R.layout.list_members_by_team_by_org, null);
viewHolder = new ViewHolder(finalView); viewHolder = new ViewHolder(finalView);
finalView.setTag(viewHolder); finalView.setTag(viewHolder);
} }
else { else {
viewHolder = (TeamMembersByOrgAdapter.ViewHolder) finalView.getTag(); viewHolder = (TeamMembersByOrgAdapter.ViewHolder) finalView.getTag();
} }
initData(viewHolder, position); initData(viewHolder, position);
return finalView; return finalView;
} }
private void initData(TeamMembersByOrgAdapter.ViewHolder viewHolder, int position) { private void initData(TeamMembersByOrgAdapter.ViewHolder viewHolder, int position) {
@ -83,6 +95,8 @@ public class TeamMembersByOrgAdapter extends BaseAdapter {
UserInfo currentItem = teamMembersList.get(position); UserInfo currentItem = teamMembersList.get(position);
PicassoService.getInstance(mCtx).get().load(currentItem.getAvatar()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(180, 180).centerCrop().into(viewHolder.memberAvatar); PicassoService.getInstance(mCtx).get().load(currentItem.getAvatar()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(180, 180).centerCrop().into(viewHolder.memberAvatar);
viewHolder.userLoginId = currentItem.getLogin();
final TinyDB tinyDb = TinyDB.getInstance(mCtx); final TinyDB tinyDb = TinyDB.getInstance(mCtx);
Typeface myTypeface; Typeface myTypeface;
@ -112,6 +126,5 @@ public class TeamMembersByOrgAdapter extends BaseAdapter {
} }
viewHolder.memberName.setTypeface(myTypeface); viewHolder.memberName.setTypeface(myTypeface);
} }
} }

View File

@ -25,6 +25,7 @@ import com.squareup.picasso.Callback;
import org.mian.gitnex.R; import org.mian.gitnex.R;
import org.mian.gitnex.activities.MainActivity; import org.mian.gitnex.activities.MainActivity;
import org.mian.gitnex.clients.PicassoService; import org.mian.gitnex.clients.PicassoService;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.ColorInverter; import org.mian.gitnex.helpers.ColorInverter;
import org.mian.gitnex.helpers.RoundedTransformation; import org.mian.gitnex.helpers.RoundedTransformation;
import org.mian.gitnex.helpers.TinyDB; import org.mian.gitnex.helpers.TinyDB;
@ -76,6 +77,11 @@ public class ProfileFragment extends Fragment {
userLanguage.setText(R.string.notSupported); userLanguage.setText(R.string.notSupported);
} }
userAvatar.setOnClickListener(loginId -> {
AppUtil.copyToClipboard(ctx, tinyDb.getString("userLogin"), ctx.getString(R.string.copyLoginIdToClipBoard, tinyDb.getString("userLogin")));
});
userFullName.setText(Html.fromHtml(tinyDb.getString("userFullname"))); userFullName.setText(Html.fromHtml(tinyDb.getString("userFullname")));
userLogin.setText(getString(R.string.usernameWithAt, tinyDb.getString("userLogin"))); userLogin.setText(getString(R.string.usernameWithAt, tinyDb.getString("userLogin")));

View File

@ -1,5 +1,7 @@
package org.mian.gitnex.helpers; package org.mian.gitnex.helpers;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
@ -21,6 +23,7 @@ import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Objects;
/** /**
* Author M M Arif * Author M M Arif
@ -245,4 +248,14 @@ public class AppUtil {
return (int) (context.getResources().getDisplayMetrics().scaledDensity * sp); return (int) (context.getResources().getDisplayMetrics().scaledDensity * sp);
} }
public static void copyToClipboard(Context ctx, CharSequence data, String message) {
ClipboardManager clipboard = (ClipboardManager) Objects.requireNonNull(ctx).getSystemService(Context.CLIPBOARD_SERVICE);
assert clipboard != null;
ClipData clip = ClipData.newPlainText(data, data);
clipboard.setPrimaryClip(clip);
Toasty.info(ctx, message);
}
} }

View File

@ -733,4 +733,5 @@
<string name="codeBlockWhiteOnGrey">White on Grey</string> <string name="codeBlockWhiteOnGrey">White on Grey</string>
<string name="codeBlockDarkOnWhite">Dark on White</string> <string name="codeBlockDarkOnWhite">Dark on White</string>
<string name="copyLoginIdToClipBoard">Login ID \'%s\' copied to clipboard</string>
</resources> </resources>