bug fix, added generic click listener for all viewholder, layout fix, code cleanup

This commit is contained in:
nuclearfog 2022-12-03 19:37:08 +01:00
parent ea863b92c2
commit fd3bed9bff
No known key found for this signature in database
GPG Key ID: 03488A185C476379
27 changed files with 215 additions and 315 deletions

View File

@ -9,7 +9,7 @@ import androidx.recyclerview.widget.RecyclerView.Adapter;
import com.squareup.picasso.Picasso;
import org.nuclearfog.twidda.adapter.holder.AccountHolder;
import org.nuclearfog.twidda.adapter.holder.AccountHolder.OnAccountClickListener;
import org.nuclearfog.twidda.adapter.holder.OnHolderClickListener;
import org.nuclearfog.twidda.backend.utils.PicassoBuilder;
import org.nuclearfog.twidda.database.GlobalSettings;
import org.nuclearfog.twidda.model.Account;
@ -23,7 +23,7 @@ import java.util.List;
* @author nuclearfog
* @see org.nuclearfog.twidda.ui.fragments.AccountFragment
*/
public class AccountAdapter extends Adapter<AccountHolder> implements OnAccountClickListener {
public class AccountAdapter extends Adapter<AccountHolder> implements OnHolderClickListener {
private GlobalSettings settings;
private OnAccountClickListener listener;
@ -65,15 +65,21 @@ public class AccountAdapter extends Adapter<AccountHolder> implements OnAccountC
@Override
public void onAccountClick(int position, int type) {
public void onItemClick(int position, int type) {
Account account = accounts.get(position);
if (type == AccountHolder.OnAccountClickListener.TYPE_SELECT) {
if (type == OnHolderClickListener.ACCOUNT_SELECT) {
listener.onAccountClick(account);
} else if (type == AccountHolder.OnAccountClickListener.TYPE_REMOVE) {
} else if (type == OnHolderClickListener.ACCOUNT_REMOVE) {
listener.onAccountRemove(account);
}
}
@Override
public boolean onPlaceholderClick(int position) {
return false;
}
/**
* sets login data
*

View File

@ -9,7 +9,7 @@ import androidx.recyclerview.widget.RecyclerView.Adapter;
import androidx.recyclerview.widget.RecyclerView.ViewHolder;
import org.nuclearfog.twidda.adapter.holder.ImageHolder;
import org.nuclearfog.twidda.adapter.holder.ImageHolder.OnImageItemClickListener;
import org.nuclearfog.twidda.adapter.holder.OnHolderClickListener;
import org.nuclearfog.twidda.adapter.holder.PlaceHolder;
import org.nuclearfog.twidda.database.GlobalSettings;
@ -22,7 +22,7 @@ import java.util.List;
* @author nuclearfog
* @see org.nuclearfog.twidda.ui.activities.ImageViewer
*/
public class ImageAdapter extends Adapter<ViewHolder> implements OnImageItemClickListener {
public class ImageAdapter extends Adapter<ViewHolder> implements OnHolderClickListener {
/**
* View type for an image item
@ -93,18 +93,24 @@ public class ImageAdapter extends Adapter<ViewHolder> implements OnImageItemClic
@Override
public void onImageClick(int position, int type) {
public void onItemClick(int position, int type) {
switch (type) {
case OnImageItemClickListener.TYPE_IMAGE:
case OnHolderClickListener.IMAGE_CLICK:
itemClickListener.onImageClick(imageLinks.get(position));
break;
case OnImageItemClickListener.TYPE_SAVE:
case OnHolderClickListener.IMAGE_SAVE:
itemClickListener.onImageSave(imageLinks.get(position));
break;
}
}
@Override
public boolean onPlaceholderClick(int position) {
return false;
}
/**
* replace all image links
*

View File

@ -11,9 +11,8 @@ import com.squareup.picasso.Picasso;
import org.nuclearfog.tag.Tagger.OnTagClickListener;
import org.nuclearfog.twidda.adapter.holder.MessageHolder;
import org.nuclearfog.twidda.adapter.holder.MessageHolder.OnMessageClickListener;
import org.nuclearfog.twidda.adapter.holder.MessageHolder.OnItemClickListener;
import org.nuclearfog.twidda.adapter.holder.PlaceHolder;
import org.nuclearfog.twidda.adapter.holder.PlaceHolder.OnHolderClickListener;
import org.nuclearfog.twidda.backend.lists.Messages;
import org.nuclearfog.twidda.backend.utils.PicassoBuilder;
import org.nuclearfog.twidda.database.GlobalSettings;
@ -25,7 +24,7 @@ import org.nuclearfog.twidda.model.Message;
* @author nuclearfog
* @see org.nuclearfog.twidda.ui.fragments.MessageFragment
*/
public class MessageAdapter extends Adapter<ViewHolder> implements OnMessageClickListener, OnHolderClickListener {
public class MessageAdapter extends Adapter<ViewHolder> implements OnItemClickListener {
/**
* index of {@link #loadingIndex} if no index is defined
@ -114,23 +113,23 @@ public class MessageAdapter extends Adapter<ViewHolder> implements OnMessageClic
@Override
public void onMessageClick(int position, int type) {
public void onItemClick(int position, int type) {
Message message = messages.get(position);
if (message != null) {
switch (type) {
case OnMessageClickListener.ANSWER:
case OnItemClickListener.MESSAGE_ANSWER:
itemClickListener.onClick(message, OnMessageClickListener.ANSWER);
break;
case OnMessageClickListener.DELETE:
case OnItemClickListener.MESSAGE_DELETE:
itemClickListener.onClick(message, OnMessageClickListener.DELETE);
break;
case OnMessageClickListener.MEDIA:
case OnItemClickListener.MESSAGE_MEDIA:
itemClickListener.onClick(message, OnMessageClickListener.MEDIA);
break;
case OnMessageClickListener.PROFILE:
case OnItemClickListener.MESSAGE_PROFILE:
itemClickListener.onClick(message, OnMessageClickListener.PROFILE);
break;
}
@ -149,7 +148,7 @@ public class MessageAdapter extends Adapter<ViewHolder> implements OnMessageClic
@Override
public boolean onHolderClick(int position) {
public boolean onPlaceholderClick(int position) {
boolean success = itemClickListener.onPlaceholderClick(messages.getNextCursor());
if (success) {
loadingIndex = position;
@ -225,17 +224,17 @@ public class MessageAdapter extends Adapter<ViewHolder> implements OnMessageClic
/**
* indicates that the "delete" button was clicked
*/
int DELETE = 10;
int DELETE = 2;
/**
* indicates that the profile image was clicked
*/
int PROFILE = 100;
int PROFILE = 3;
/**
* indicates that the media button was clicked
*/
int MEDIA = 1000;
int MEDIA = 4;
/**
* called when a button was clicked

View File

@ -10,12 +10,10 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder;
import com.squareup.picasso.Picasso;
import org.nuclearfog.twidda.adapter.holder.OnHolderClickListener;
import org.nuclearfog.twidda.adapter.holder.PlaceHolder;
import org.nuclearfog.twidda.adapter.holder.PlaceHolder.OnHolderClickListener;
import org.nuclearfog.twidda.adapter.holder.StatusHolder;
import org.nuclearfog.twidda.adapter.holder.StatusHolder.OnStatusClickListener;
import org.nuclearfog.twidda.adapter.holder.UserHolder;
import org.nuclearfog.twidda.adapter.holder.UserHolder.OnUserClickListener;
import org.nuclearfog.twidda.backend.utils.PicassoBuilder;
import org.nuclearfog.twidda.database.GlobalSettings;
import org.nuclearfog.twidda.model.Notification;
@ -30,7 +28,7 @@ import java.util.List;
*
* @author nuclearfog
*/
public class NotificationAdapter extends Adapter<ViewHolder> implements OnStatusClickListener, OnUserClickListener, OnHolderClickListener {
public class NotificationAdapter extends Adapter<ViewHolder> implements OnHolderClickListener {
/**
* Minimum count of new statuses to insert a placeholder.
@ -150,7 +148,7 @@ public class NotificationAdapter extends Adapter<ViewHolder> implements OnStatus
@Override
public boolean onHolderClick(int position) {
public boolean onPlaceholderClick(int position) {
long sinceId = 0;
long maxId = 0;
if (position == 0) {
@ -183,16 +181,17 @@ public class NotificationAdapter extends Adapter<ViewHolder> implements OnStatus
@Override
public void onStatusClick(int position, int type) {
public void onItemClick(int position, int type) {
Notification item = items.get(position);
switch (type) {
case OnStatusClickListener.TYPE_LABEL:
case OnHolderClickListener.USER_CLICK:
case OnHolderClickListener.STATUS_LABEL:
if (item != null && item.getUser() != null) {
listener.onUserClick(item.getUser());
}
break;
case OnStatusClickListener.TYPE_STATUS:
case OnHolderClickListener.STATUS_CLICK:
if (item != null && item.getStatus() != null) {
listener.onStatusClick(item.getStatus());
}
@ -200,17 +199,6 @@ public class NotificationAdapter extends Adapter<ViewHolder> implements OnStatus
}
}
@Override
public void onUserClick(int position, int type) {
Notification item = items.get(position);
if (type == OnUserClickListener.ITEM_CLICK) {
if (item != null && item.getUser() != null) {
listener.onUserClick(item.getUser());
}
}
}
/**
* add new items at specific position
*

View File

@ -11,10 +11,9 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder;
import com.squareup.picasso.Picasso;
import org.nuclearfog.twidda.adapter.holder.OnHolderClickListener;
import org.nuclearfog.twidda.adapter.holder.PlaceHolder;
import org.nuclearfog.twidda.adapter.holder.PlaceHolder.OnHolderClickListener;
import org.nuclearfog.twidda.adapter.holder.StatusHolder;
import org.nuclearfog.twidda.adapter.holder.StatusHolder.OnStatusClickListener;
import org.nuclearfog.twidda.backend.utils.PicassoBuilder;
import org.nuclearfog.twidda.database.GlobalSettings;
import org.nuclearfog.twidda.model.Status;
@ -29,7 +28,7 @@ import java.util.List;
* @author nuclearfog
* @see StatusFragment
*/
public class StatusAdapter extends Adapter<ViewHolder> implements OnStatusClickListener, OnHolderClickListener {
public class StatusAdapter extends Adapter<ViewHolder> implements OnHolderClickListener {
/**
* index of {@link #loadingIndex} if no index is defined
@ -123,7 +122,7 @@ public class StatusAdapter extends Adapter<ViewHolder> implements OnStatusClickL
@Override
public boolean onHolderClick(int position) {
public boolean onPlaceholderClick(int position) {
long sinceId = 0;
long maxId = 0;
if (position == 0) {
@ -156,8 +155,8 @@ public class StatusAdapter extends Adapter<ViewHolder> implements OnStatusClickL
@Override
public void onStatusClick(int position, int type) {
if (type == OnStatusClickListener.TYPE_STATUS) {
public void onItemClick(int position, int type) {
if (type == OnHolderClickListener.STATUS_CLICK) {
Status status = items.get(position);
if (status != null) {
listener.onStatusSelected(status);

View File

@ -6,8 +6,8 @@ import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView.Adapter;
import androidx.recyclerview.widget.RecyclerView.ViewHolder;
import org.nuclearfog.twidda.adapter.holder.OnHolderClickListener;
import org.nuclearfog.twidda.adapter.holder.TrendHolder;
import org.nuclearfog.twidda.adapter.holder.TrendHolder.OnTrendClickListener;
import org.nuclearfog.twidda.database.GlobalSettings;
import org.nuclearfog.twidda.model.Trend;
@ -20,7 +20,7 @@ import java.util.List;
* @author nuclearfog
* @see org.nuclearfog.twidda.ui.fragments.TrendFragment
*/
public class TrendAdapter extends Adapter<ViewHolder> implements OnTrendClickListener {
public class TrendAdapter extends Adapter<ViewHolder> implements OnHolderClickListener {
/**
* trend limit
@ -66,10 +66,16 @@ public class TrendAdapter extends Adapter<ViewHolder> implements OnTrendClickLis
@Override
public void onTrendClick(int position) {
public void onItemClick(int position, int type) {
itemClickListener.onTrendClick(trends.get(position));
}
@Override
public boolean onPlaceholderClick(int position) {
return false;
}
/**
* replace data from list
*

View File

@ -11,10 +11,9 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder;
import com.squareup.picasso.Picasso;
import org.nuclearfog.twidda.adapter.holder.OnHolderClickListener;
import org.nuclearfog.twidda.adapter.holder.PlaceHolder;
import org.nuclearfog.twidda.adapter.holder.PlaceHolder.OnHolderClickListener;
import org.nuclearfog.twidda.adapter.holder.UserHolder;
import org.nuclearfog.twidda.adapter.holder.UserHolder.OnUserClickListener;
import org.nuclearfog.twidda.backend.lists.Users;
import org.nuclearfog.twidda.backend.utils.PicassoBuilder;
import org.nuclearfog.twidda.database.GlobalSettings;
@ -26,7 +25,7 @@ import org.nuclearfog.twidda.model.User;
* @author nuclearfog
* @see org.nuclearfog.twidda.ui.fragments.UserFragment
*/
public class UserAdapter extends Adapter<ViewHolder> implements OnUserClickListener, OnHolderClickListener {
public class UserAdapter extends Adapter<ViewHolder> implements OnHolderClickListener {
/**
* index of {@link #loadingIndex} if no index is defined
@ -119,7 +118,7 @@ public class UserAdapter extends Adapter<ViewHolder> implements OnUserClickListe
@Override
public boolean onHolderClick(int position) {
public boolean onPlaceholderClick(int position) {
boolean actionPerformed = listener.onPlaceholderClick(users.getNext());
if (actionPerformed) {
loadingIndex = position;
@ -130,16 +129,16 @@ public class UserAdapter extends Adapter<ViewHolder> implements OnUserClickListe
@Override
public void onUserClick(int position, int type) {
public void onItemClick(int position, int type) {
switch (type) {
case OnUserClickListener.ITEM_CLICK:
case OnHolderClickListener.USER_CLICK:
User user = users.get(position);
if (user != null) {
listener.onUserClick(user);
}
break;
case OnUserClickListener.ITEM_REMOVE:
case OnHolderClickListener.USER_REMOVE:
user = users.get(position);
if (enableDelete && user != null) {
listener.onDelete(user);

View File

@ -9,10 +9,9 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder;
import com.squareup.picasso.Picasso;
import org.nuclearfog.twidda.adapter.holder.OnHolderClickListener;
import org.nuclearfog.twidda.adapter.holder.PlaceHolder;
import org.nuclearfog.twidda.adapter.holder.PlaceHolder.OnHolderClickListener;
import org.nuclearfog.twidda.adapter.holder.UserlistHolder;
import org.nuclearfog.twidda.adapter.holder.UserlistHolder.OnListClickListener;
import org.nuclearfog.twidda.backend.lists.UserLists;
import org.nuclearfog.twidda.backend.utils.PicassoBuilder;
import org.nuclearfog.twidda.database.GlobalSettings;
@ -25,7 +24,7 @@ import org.nuclearfog.twidda.model.UserList;
* @author nuclearfog
* @see org.nuclearfog.twidda.ui.fragments.UserListFragment
*/
public class UserlistAdapter extends Adapter<ViewHolder> implements OnListClickListener, OnHolderClickListener {
public class UserlistAdapter extends Adapter<ViewHolder> implements OnHolderClickListener {
/**
* indicator if there is no loading progress
@ -108,15 +107,15 @@ public class UserlistAdapter extends Adapter<ViewHolder> implements OnListClickL
@Override
public void onUserlistClick(int position, int type) {
public void onItemClick(int position, int type) {
UserList item = userlists.get(position);
if (item != null) {
switch (type) {
case OnListClickListener.LIST_CLICK:
case OnHolderClickListener.LIST_CLICK:
listener.onListClick(item);
break;
case OnListClickListener.PROFILE_CLICK:
case OnHolderClickListener.LIST_PROFILE:
listener.onProfileClick(item.getListOwner());
break;
}
@ -125,7 +124,7 @@ public class UserlistAdapter extends Adapter<ViewHolder> implements OnListClickL
@Override
public boolean onHolderClick(int position) {
public boolean onPlaceholderClick(int position) {
boolean actionPerformed = listener.onPlaceholderClick(userlists.getNext());
if (actionPerformed)
loadingIndex = position;

View File

@ -39,7 +39,7 @@ public class AccountHolder extends ViewHolder implements OnClickListener {
private GlobalSettings settings;
private Picasso picasso;
private OnAccountClickListener listener;
private OnHolderClickListener listener;
/**
*
@ -69,9 +69,9 @@ public class AccountHolder extends ViewHolder implements OnClickListener {
int position = getLayoutPosition();
if (position != NO_POSITION && listener != null) {
if (v == itemView) {
listener.onAccountClick(position, OnAccountClickListener.TYPE_SELECT);
listener.onItemClick(position, OnHolderClickListener.ACCOUNT_SELECT);
} else if (v == remove) {
listener.onAccountClick(position, OnAccountClickListener.TYPE_REMOVE);
listener.onItemClick(position, OnHolderClickListener.ACCOUNT_REMOVE);
}
}
}
@ -111,23 +111,7 @@ public class AccountHolder extends ViewHolder implements OnClickListener {
/**
* set item click listener
*/
public void setOnAccountClickListener(OnAccountClickListener listener) {
public void setOnAccountClickListener(OnHolderClickListener listener) {
this.listener = listener;
}
/**
* listener for item click
*/
public interface OnAccountClickListener {
int TYPE_SELECT = 3;
int TYPE_REMOVE = 4;
/**
* @param position position of the item
* @param type type of click {@link #TYPE_SELECT,#TYPE_REMOVE}
*/
void onAccountClick(int position, int type);
}
}

View File

@ -28,7 +28,7 @@ public class ImageHolder extends ViewHolder implements OnClickListener {
private ImageView preview;
private ImageButton saveButton;
private OnImageItemClickListener listener;
private OnHolderClickListener listener;
/**
* @param parent Parent view from adapter
@ -54,9 +54,9 @@ public class ImageHolder extends ViewHolder implements OnClickListener {
int pos = getLayoutPosition();
if (pos != NO_POSITION && listener != null) {
if (v == preview) {
listener.onImageClick(pos, OnImageItemClickListener.TYPE_IMAGE);
listener.onItemClick(pos, OnHolderClickListener.IMAGE_CLICK);
} else if (v == saveButton) {
listener.onImageClick(pos, OnImageItemClickListener.TYPE_SAVE);
listener.onItemClick(pos, OnHolderClickListener.IMAGE_SAVE);
}
}
}
@ -64,7 +64,7 @@ public class ImageHolder extends ViewHolder implements OnClickListener {
/**
* set item click listener
*/
public void setOnImageClickListener(OnImageItemClickListener listener) {
public void setOnImageClickListener(OnHolderClickListener listener) {
this.listener = listener;
}
@ -81,20 +81,4 @@ public class ImageHolder extends ViewHolder implements OnClickListener {
public void setImageUri(Uri uri) {
preview.setImageURI(uri);
}
/**
* item click listener
*/
public interface OnImageItemClickListener {
int TYPE_IMAGE = 1;
int TYPE_SAVE = 2;
/**
* @param position position of the image
* @param type type of action {@link #TYPE_IMAGE,#TYPE_SAVE}
*/
void onImageClick(int position, int type);
}
}

View File

@ -37,7 +37,7 @@ import jp.wasabeef.picasso.transformations.RoundedCornersTransformation;
*/
public class MessageHolder extends ViewHolder implements OnClickListener, OnTagClickListener {
private TextView username, screenname, receiver, time, text;
private TextView username, screenname, time, text;
private ImageView profile, verifiedIcon, lockedIcon;
private ImageButton mediaButton;
private Button answer, delete;
@ -45,7 +45,7 @@ public class MessageHolder extends ViewHolder implements OnClickListener, OnTagC
private GlobalSettings settings;
private Picasso picasso;
private OnMessageClickListener listener;
private OnItemClickListener listener;
/**
* @param parent Parent view from adapter
@ -60,7 +60,6 @@ public class MessageHolder extends ViewHolder implements OnClickListener, OnTagC
mediaButton = itemView.findViewById(R.id.item_message_media);
username = itemView.findViewById(R.id.item_message_username);
screenname = itemView.findViewById(R.id.item_message_screenname);
receiver = itemView.findViewById(R.id.item_message_receiver);
time = itemView.findViewById(R.id.item_message_time);
text = itemView.findViewById(R.id.item_message_text);
answer = itemView.findViewById(R.id.item_message_answer);
@ -74,6 +73,10 @@ public class MessageHolder extends ViewHolder implements OnClickListener, OnTagC
this.picasso = picasso;
itemView.setOnClickListener(this);
profile.setOnClickListener(this);
answer.setOnClickListener(this);
delete.setOnClickListener(this);
mediaButton.setOnClickListener(this);
}
@ -82,15 +85,15 @@ public class MessageHolder extends ViewHolder implements OnClickListener, OnTagC
int position = getLayoutPosition();
if (position != NO_POSITION && listener != null) {
if (v == itemView) {
listener.onMessageClick(position, OnMessageClickListener.TYPE_VIEW);
listener.onItemClick(position, OnItemClickListener.MESSAGE_VIEW);
} else if (v == answer) {
listener.onMessageClick(position, OnMessageClickListener.TYPE_ANSWER);
listener.onItemClick(position, OnItemClickListener.MESSAGE_ANSWER);
} else if (v == delete) {
listener.onMessageClick(position, OnMessageClickListener.TYPE_DELETE);
listener.onItemClick(position, OnItemClickListener.MESSAGE_DELETE);
} else if (v == profile) {
listener.onMessageClick(position, OnMessageClickListener.TYPE_PROFILE);
listener.onItemClick(position, OnItemClickListener.PROFILE_CLICK);
} else if (v == mediaButton) {
listener.onMessageClick(position, OnMessageClickListener.TYPE_MEDIA);
listener.onItemClick(position, OnItemClickListener.MESSAGE_MEDIA);
}
}
}
@ -120,7 +123,6 @@ public class MessageHolder extends ViewHolder implements OnClickListener, OnTagC
username.setText(sender.getUsername());
screenname.setText(sender.getScreenname());
receiver.setText(message.getReceiver().getScreenname());
time.setText(StringTools.formatCreationTime(itemView.getResources(), message.getTimestamp()));
text.setText(textSpan);
if (sender.isVerified()) {
@ -154,30 +156,14 @@ public class MessageHolder extends ViewHolder implements OnClickListener, OnTagC
/**
* set item click listener
*/
public void setOnMessageClickListener(OnMessageClickListener listener) {
public void setOnMessageClickListener(OnItemClickListener listener) {
this.listener = listener;
}
/**
* item click listener
*/
public interface OnMessageClickListener {
int TYPE_VIEW = 9;
int TYPE_ANSWER = 10;
int TYPE_PROFILE = 11;
int TYPE_MEDIA = 12;
int TYPE_DELETE = 1;
/**
* @param position position of the item
* @param type click type {@link #TYPE_ANSWER,#TYPE_PROFILE,#TYPE_MEDIA,#TYPE_DELETE}
*/
void onMessageClick(int position, int type);
public interface OnItemClickListener extends OnHolderClickListener {
/**
* @param text clicked text

View File

@ -0,0 +1,59 @@
package org.nuclearfog.twidda.adapter.holder;
/**
* Click listener for adapter view holder
*
* @author nuclearfog
*/
public interface OnHolderClickListener {
int NO_TYPE = -1;
int LIST_CLICK = 1;
int PROFILE_CLICK = 2;
int USER_CLICK = 3;
int USER_REMOVE = 4;
int STATUS_CLICK = 5;
int STATUS_LABEL = 6;
int LIST_PROFILE = 7;
int MESSAGE_VIEW = 8;
int MESSAGE_ANSWER = 9;
int MESSAGE_PROFILE = 10;
int MESSAGE_MEDIA = 11;
int MESSAGE_DELETE = 12;
int ACCOUNT_SELECT = 13;
int ACCOUNT_REMOVE = 14;
int IMAGE_CLICK = 15;
int IMAGE_SAVE = 16;
/**
* called when an item was clicked
*
* @param position adapter position of the item
* @param type type of click
*/
void onItemClick(int position, int type);
/**
* called when a placeholder item was clicked
*
* @param position position of the item
* @return true to enable loading animation
*/
boolean onPlaceholderClick(int position);
}

View File

@ -62,7 +62,7 @@ public class PlaceHolder extends ViewHolder implements OnClickListener {
if (v == loadBtn) {
int position = getLayoutPosition();
if (position != NO_POSITION && listener != null) {
boolean enableLoading = listener.onHolderClick(position);
boolean enableLoading = listener.onPlaceholderClick(position);
setLoading(enableLoading);
}
}
@ -89,17 +89,4 @@ public class PlaceHolder extends ViewHolder implements OnClickListener {
public void setOnHolderClickListener(OnHolderClickListener listener) {
this.listener = listener;
}
/**
* listener used to call after item click
*/
public interface OnHolderClickListener {
/**
*
* @param position position of the item
* @return true to enable loading animation
*/
boolean onHolderClick(int position);
}
}

View File

@ -47,7 +47,7 @@ public class StatusHolder extends ViewHolder implements OnClickListener {
private GlobalSettings settings;
private Picasso picasso;
private OnStatusClickListener listener;
private OnHolderClickListener listener;
/**
* @param parent Parent view from adapter
@ -96,9 +96,9 @@ public class StatusHolder extends ViewHolder implements OnClickListener {
int position = getLayoutPosition();
if (position != NO_POSITION && listener != null) {
if (v == itemView) {
listener.onStatusClick(position, OnStatusClickListener.TYPE_STATUS);
listener.onItemClick(position, OnHolderClickListener.STATUS_CLICK);
} else if (v == label) {
listener.onStatusClick(position, OnStatusClickListener.TYPE_LABEL);
listener.onItemClick(position, OnHolderClickListener.STATUS_LABEL);
}
}
}
@ -215,7 +215,10 @@ public class StatusHolder extends ViewHolder implements OnClickListener {
break;
case Notification.TYPE_MENTION:
text = resources.getString(R.string.info_user_mention, name);
if (name.startsWith("@"))
text = resources.getString(R.string.info_user_mention, name.substring(1));
else
text = resources.getString(R.string.info_user_mention, name);
iconRes = R.drawable.mention;
break;
@ -238,23 +241,7 @@ public class StatusHolder extends ViewHolder implements OnClickListener {
/**
* set item click listener
*/
public void setOnStatusClickListener(OnStatusClickListener listener) {
public void setOnStatusClickListener(OnHolderClickListener listener) {
this.listener = listener;
}
/**
* item click listener
*/
public interface OnStatusClickListener {
int TYPE_STATUS = 1;
int TYPE_LABEL = 2;
/**
* @param position position of this item
* @param type type of user click {@link #TYPE_LABEL,#TYPE_STATUS}
*/
void onStatusClick(int position, int type);
}
}

View File

@ -35,7 +35,7 @@ public class TrendHolder extends ViewHolder implements OnClickListener {
private TextView name, rank, vol;
private OnTrendClickListener listener;
private OnHolderClickListener listener;
/**
* @param parent Parent view from adapter
@ -59,7 +59,7 @@ public class TrendHolder extends ViewHolder implements OnClickListener {
if (v == itemView) {
int position = getLayoutPosition();
if (position != NO_POSITION && listener != null) {
listener.onTrendClick(position);
listener.onItemClick(position, OnHolderClickListener.NO_TYPE);
}
}
}
@ -67,7 +67,7 @@ public class TrendHolder extends ViewHolder implements OnClickListener {
/**
* set item click listener
*/
public void setOnTrendClickListener(OnTrendClickListener listener) {
public void setOnTrendClickListener(OnHolderClickListener listener) {
this.listener = listener;
}
@ -88,15 +88,4 @@ public class TrendHolder extends ViewHolder implements OnClickListener {
vol.setVisibility(View.GONE);
}
}
/**
* Item click listener
*/
public interface OnTrendClickListener {
/**
* @param position index of the view holder
*/
void onTrendClick(int position);
}
}

View File

@ -49,7 +49,7 @@ public class UserHolder extends ViewHolder implements OnClickListener {
private GlobalSettings settings;
private Picasso picasso;
private OnUserClickListener listener;
private OnHolderClickListener listener;
/**
* @param parent Parent view from adapter
@ -83,9 +83,9 @@ public class UserHolder extends ViewHolder implements OnClickListener {
int position = getLayoutPosition();
if (listener != null && position != NO_POSITION) {
if (v == itemView) {
listener.onUserClick(position, OnUserClickListener.ITEM_CLICK);
listener.onItemClick(position, OnHolderClickListener.USER_CLICK);
} else if (v == delete) {
listener.onUserClick(position, OnUserClickListener.ITEM_REMOVE);
listener.onItemClick(position, OnHolderClickListener.USER_REMOVE);
}
}
}
@ -93,7 +93,7 @@ public class UserHolder extends ViewHolder implements OnClickListener {
/**
* set item click listener
*/
public void setOnUserClickListener(OnUserClickListener listener) {
public void setOnUserClickListener(OnHolderClickListener listener) {
this.listener = listener;
}
@ -162,20 +162,4 @@ public class UserHolder extends ViewHolder implements OnClickListener {
label.setCompoundDrawablesWithIntrinsicBounds(iconRes, 0, 0, 0);
label.setText(text);
}
/**
* Item click listener
*/
public interface OnUserClickListener {
int ITEM_CLICK = 1;
int ITEM_REMOVE = 2;
/**
* @param position position of the item
* @param type type of action {@link #ITEM_REMOVE,#ITEM_CLICK}
*/
void onUserClick(int position, int type);
}
}

View File

@ -41,12 +41,12 @@ public class UserlistHolder extends ViewHolder implements OnClickListener {
private GlobalSettings settings;
private Picasso picasso;
private OnListClickListener listener;
private OnHolderClickListener listener;
/**
* @param parent Parent view from adapter
*/
public UserlistHolder(ViewGroup parent, GlobalSettings settings, Picasso picasso, OnListClickListener listener) {
public UserlistHolder(ViewGroup parent, GlobalSettings settings, Picasso picasso, OnHolderClickListener listener) {
super(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list, parent, false));
CardView background = (CardView) itemView;
ViewGroup container = itemView.findViewById(R.id.item_list_container);
@ -80,9 +80,9 @@ public class UserlistHolder extends ViewHolder implements OnClickListener {
int position = getLayoutPosition();
if (position != NO_POSITION) {
if (v == itemView) {
listener.onUserlistClick(position, OnListClickListener.LIST_CLICK);
listener.onItemClick(position, OnHolderClickListener.LIST_CLICK);
} else if (v == profile) {
listener.onUserlistClick(position, OnListClickListener.PROFILE_CLICK);
listener.onItemClick(position, OnHolderClickListener.LIST_PROFILE);
}
}
}
@ -133,20 +133,4 @@ public class UserlistHolder extends ViewHolder implements OnClickListener {
privateList.setVisibility(View.GONE);
}
}
/**
* item click listener
*/
public interface OnListClickListener {
int LIST_CLICK = 1;
int PROFILE_CLICK = 2;
/**
* @param position position of the item
* @param type type of click
*/
void onUserlistClick(int position, int type);
}
}

View File

@ -18,17 +18,17 @@ public class Tokens {
* false means there are no API keys available
* set to true when {@link #CONSUMER_TOKEN} and {@link #TOKEN_SECRET} are set
*/
public static final boolean USE_DEFAULT_KEYS = false;
public static final boolean USE_DEFAULT_KEYS = true;
/**
* add here your consumer token
*/
private static final String CONSUMER_TOKEN = "";
private static final String CONSUMER_TOKEN = "wpZaXeqDEQzgJsdRUAAbzAS3V";
/**
* add here your token secret
*/
private static final String TOKEN_SECRET = "";
private static final String TOKEN_SECRET = "5V80dYmX0w3XDWSykFIsJhOh8HP6JxImMxdcveY7TDa29V25Mz";
private static Tokens instance;

View File

@ -909,7 +909,6 @@ public class Twitter implements Connection {
try {
MessageV1 message = new MessageV1(item);
long senderId = message.getSenderId();
long receiverId = message.getReceiverId();
// cache user instances to reduce API calls
if (userCache.containsKey(senderId)) {
message.addSender(userCache.get(senderId));
@ -918,13 +917,6 @@ public class Twitter implements Connection {
userCache.put(senderId, user);
message.addSender(user);
}
if (userCache.containsKey(receiverId)) {
message.addReceiver(userCache.get(receiverId));
} else {
User user = showUser(receiverId);
userCache.put(receiverId, user);
message.addReceiver(user);
}
result.add(message);
} catch (JSONException e) {
if (BuildConfig.DEBUG) {

View File

@ -23,7 +23,6 @@ public class MessageV1 implements Message {
private long sender_id;
private long receiver_id;
private User sender;
private User receiver;
private String text;
private String mediaLink;
@ -48,31 +47,37 @@ public class MessageV1 implements Message {
text = setText(data);
}
@Override
public long getId() {
return id;
}
@Override
public User getSender() {
return sender;
}
@Override
public User getReceiver() {
return receiver;
}
@Override
public String getText() {
return text;
}
@Override
public long getTimestamp() {
return timestamp;
}
@Override
public long getReceiverId() {
return receiver_id;
}
@Nullable
@Override
public Uri getMedia() {
@ -81,6 +86,7 @@ public class MessageV1 implements Message {
return null;
}
@Override
public boolean equals(@Nullable Object obj) {
if (!(obj instanceof Message))
@ -88,10 +94,11 @@ public class MessageV1 implements Message {
return ((Message) obj).getId() == id;
}
@NonNull
@Override
public String toString() {
return "from=" + sender + " to=" + receiver + " message=\"" + text + "\"";
return "from=" + sender + " message=\"" + text + "\"";
}
/**
@ -103,15 +110,6 @@ public class MessageV1 implements Message {
return sender_id;
}
/**
* get ID of the receiver
*
* @return user ID
*/
public long getReceiverId() {
return receiver_id;
}
/**
* add sender information
*
@ -121,15 +119,6 @@ public class MessageV1 implements Message {
this.sender = sender;
}
/**
* add receiver information
*
* @param receiver user information
*/
public void addReceiver(User receiver) {
this.receiver = receiver;
}
/**
* add media links
*

View File

@ -577,7 +577,7 @@ public class AppDatabase {
if (cursor.moveToFirst()) {
do
{
User sender, receiver;
User sender;
MessageImpl message = new MessageImpl(cursor);
if (userCache.containsKey(message.getSenderId())) {
sender = userCache.get(message.getSenderId());
@ -585,15 +585,8 @@ public class AppDatabase {
sender = getUser(message.getSenderId());
userCache.put(message.getSenderId(), sender);
}
if (userCache.containsKey(message.getReceiverId())) {
receiver = userCache.get(message.getReceiverId());
} else {
receiver = getUser(message.getReceiverId());
userCache.put(message.getReceiverId(), receiver);
}
if (sender != null && receiver != null) {
if (sender != null) {
message.setSender(sender);
message.setReceiver(receiver);
result.add(message);
}
} while (cursor.moveToNext());
@ -852,14 +845,13 @@ public class AppDatabase {
messageColumn.put(MessageTable.ID, message.getId());
messageColumn.put(MessageTable.SINCE, message.getTimestamp());
messageColumn.put(MessageTable.FROM, message.getSender().getId());
messageColumn.put(MessageTable.TO, message.getReceiver().getId());
messageColumn.put(MessageTable.TO, message.getReceiverId());
messageColumn.put(MessageTable.MESSAGE, message.getText());
if (message.getMedia() != null)
messageColumn.put(MessageTable.MEDIA, message.getMedia().toString());
db.insertWithOnConflict(MessageTable.NAME, "", messageColumn, CONFLICT_IGNORE);
// store user information
saveUser(message.getSender(), db, CONFLICT_IGNORE);
saveUser(message.getReceiver(), db, CONFLICT_IGNORE);
}
/**

View File

@ -622,7 +622,9 @@ public class GlobalSettings {
* @return saved location information
*/
public Location getTrendLocation() {
return location;
if (account.getApiType() == Account.API_TWITTER)
return location;
return new LocationImpl("", -1);
}
/**

View File

@ -23,7 +23,6 @@ public class MessageImpl implements Message {
private long receiverId;
private String text;
private User sender;
private User receiver;
private String media;
@ -36,31 +35,37 @@ public class MessageImpl implements Message {
media = cursor.getString(cursor.getColumnIndexOrThrow(MessageTable.MEDIA));
}
@Override
public long getId() {
return id;
}
@Override
public User getSender() {
return sender;
}
@Override
public User getReceiver() {
return receiver;
}
@Override
public String getText() {
return text;
}
@Override
public long getTimestamp() {
return time;
}
@Override
public long getReceiverId() {
return receiverId;
}
@Nullable
@Override
public Uri getMedia() {
@ -69,6 +74,7 @@ public class MessageImpl implements Message {
return null;
}
@Override
public boolean equals(@Nullable Object obj) {
if (!(obj instanceof Message))
@ -76,28 +82,20 @@ public class MessageImpl implements Message {
return ((Message) obj).getId() == id;
}
@NonNull
@Override
public String toString() {
return "from=" + sender + " to=" + receiver + " message=\"" + text + "\"";
return "from=" + sender + " message=\"" + text + "\"";
}
public void setSender(User sender) {
this.sender = sender;
}
public void setReceiver(User receiver) {
this.receiver = receiver;
}
public long getSenderId() {
return senderId;
}
public long getReceiverId() {
return receiverId;
}
}

View File

@ -24,7 +24,7 @@ public interface Message {
/**
* @return receiver of the message
*/
User getReceiver();
long getReceiverId();
/**
* @return message text

View File

@ -81,39 +81,12 @@
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintHorizontal_chainStyle="packed" />
<ImageView
android:id="@+id/item_message_receiver_icon"
android:layout_width="@dimen/dmitem_icon_size"
android:layout_height="@dimen/dmitem_icon_size"
android:layout_marginStart="@dimen/dmitem_padding_drawable"
android:src="@drawable/right"
app:layout_constraintStart_toEndOf="@id/item_message_screenname"
app:layout_constraintTop_toTopOf="@id/item_message_screenname"
app:layout_constraintBottom_toBottomOf="@id/item_message_screenname"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintHorizontal_chainStyle="packed"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/item_message_receiver"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:drawablePadding="@dimen/dmitem_padding_drawable"
android:singleLine="true"
android:textSize="@dimen/dmitem_textsize_name"
android:layout_marginStart="@dimen/dmitem_padding_drawable"
app:layout_constraintStart_toEndOf="@id/item_message_receiver_icon"
app:layout_constraintTop_toTopOf="@id/item_message_screenname"
app:layout_constraintBottom_toBottomOf="@id/item_message_screenname"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_chainStyle="packed" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/item_message_profile_barrier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="bottom"
app:constraint_referenced_ids="item_message_profile, item_message_screenname, item_message_receiver" />
app:constraint_referenced_ids="item_message_profile,item_message_private,item_message_screenname" />
<TextView
android:id="@+id/item_message_text"

View File

@ -19,19 +19,27 @@
android:lines="1"
android:drawablePadding="@dimen/item_status_drawable_margin"
android:textSize="@dimen/item_status_textsize_notification"
android:layout_marginBottom="@dimen/item_status_label_margin"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/item_status_label_barrier"
app:layout_constraintEnd_toEndOf="parent" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/item_status_label_barrier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="top"
app:constraint_referenced_ids="item_status_profile_image,item_status_verified_icon,item_status_author_username" />
<ImageView
android:id="@+id/item_status_profile_image"
android:layout_width="@dimen/item_status_profile_size"
android:layout_height="@dimen/item_status_profile_size"
android:contentDescription="@string/profile_image"
android:layout_marginTop="@dimen/item_status_image_margin"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/item_status_label" />
app:layout_constraintTop_toBottomOf="@id/item_status_label_barrier" />
<ImageView
android:id="@+id/item_status_verified_icon"

View File

@ -73,7 +73,7 @@
<dimen name="item_status_profile_size">36sp</dimen>
<dimen name="item_status_layout_padding">5dp</dimen>
<dimen name="item_status_text_margin">5dp</dimen>
<dimen name="item_status_image_margin">8dp</dimen>
<dimen name="item_status_label_margin">8dp</dimen>
<dimen name="item_status_drawable_margin">5dp</dimen>
<dimen name="item_status_textsize_notification">12sp</dimen>
<dimen name="item_status_textsize_button">12sp</dimen>