diff --git a/app/src/main/java/org/nuclearfog/twidda/adapter/UserAdapter.java b/app/src/main/java/org/nuclearfog/twidda/adapter/UserAdapter.java index 32358fca..c98881b2 100644 --- a/app/src/main/java/org/nuclearfog/twidda/adapter/UserAdapter.java +++ b/app/src/main/java/org/nuclearfog/twidda/adapter/UserAdapter.java @@ -18,7 +18,7 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder; import com.squareup.picasso.Picasso; import org.nuclearfog.twidda.R; -import org.nuclearfog.twidda.backend.holder.UserListHolder; +import org.nuclearfog.twidda.backend.holder.TwitterUserList; import org.nuclearfog.twidda.backend.items.TwitterUser; import org.nuclearfog.twidda.backend.utils.FontTool; import org.nuclearfog.twidda.database.GlobalSettings; @@ -59,13 +59,13 @@ public class UserAdapter extends Adapter { @MainThread - public void setData(@NonNull UserListHolder data) { + public void setData(@NonNull TwitterUserList data) { if (users.isEmpty() || !data.hasPrevious()) { if (!users.isEmpty()) { // replace previous data users.clear(); } - users.addAll(data.getUsers()); + users.addAll(data); if (data.hasNext()) { // add footer users.add(null); @@ -80,8 +80,8 @@ public class UserAdapter extends Adapter { } else { disableLoading(); } - users.addAll(end, data.getUsers()); - notifyItemRangeInserted(end, data.getSize()); + users.addAll(end, data); + notifyItemRangeInserted(end, data.size()); } nextCursor = data.getNext(); loadingIndex = NO_INDEX; diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/UserListLoader.java b/app/src/main/java/org/nuclearfog/twidda/backend/UserListLoader.java index 01653985..75014f57 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/UserListLoader.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/UserListLoader.java @@ -6,7 +6,7 @@ import androidx.annotation.Nullable; import org.nuclearfog.twidda.backend.engine.EngineException; import org.nuclearfog.twidda.backend.engine.TwitterEngine; -import org.nuclearfog.twidda.backend.holder.UserListHolder; +import org.nuclearfog.twidda.backend.holder.TwitterUserList; import org.nuclearfog.twidda.fragment.UserFragment; import java.lang.ref.WeakReference; @@ -16,7 +16,7 @@ import java.lang.ref.WeakReference; * * @see UserFragment */ -public class UserListLoader extends AsyncTask { +public class UserListLoader extends AsyncTask { public static final long NO_CURSOR = -1; @@ -33,12 +33,13 @@ public class UserListLoader extends AsyncTask { @Nullable private EngineException twException; - private WeakReference callback; - private TwitterEngine mTwitter; + private final WeakReference callback; + private final TwitterEngine mTwitter; private final Action action; - private String search; - private long id, cursor; + private final String search; + private final long id; + private final long cursor; public UserListLoader(UserFragment callback, Action action, long id, long cursor, String search) { @@ -61,7 +62,7 @@ public class UserListLoader extends AsyncTask { @Override - protected UserListHolder doInBackground(Void[] v) { + protected TwitterUserList doInBackground(Void[] v) { try { switch (action) { case FOLLOWS: @@ -97,7 +98,7 @@ public class UserListLoader extends AsyncTask { @Override - protected void onPostExecute(UserListHolder users) { + protected void onPostExecute(TwitterUserList users) { if (callback.get() != null) { callback.get().setRefresh(false); if (users != null) { diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/engine/TwitterEngine.java b/app/src/main/java/org/nuclearfog/twidda/backend/engine/TwitterEngine.java index 46d89a08..1f09841d 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/engine/TwitterEngine.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/engine/TwitterEngine.java @@ -9,8 +9,8 @@ import androidx.annotation.Nullable; import org.nuclearfog.twidda.BuildConfig; import org.nuclearfog.twidda.backend.holder.MessageHolder; import org.nuclearfog.twidda.backend.holder.TweetHolder; +import org.nuclearfog.twidda.backend.holder.TwitterUserList; import org.nuclearfog.twidda.backend.holder.UserHolder; -import org.nuclearfog.twidda.backend.holder.UserListHolder; import org.nuclearfog.twidda.backend.items.Message; import org.nuclearfog.twidda.backend.items.TrendLocation; import org.nuclearfog.twidda.backend.items.Tweet; @@ -50,6 +50,9 @@ import twitter4j.auth.AccessToken; import twitter4j.auth.RequestToken; import twitter4j.conf.ConfigurationBuilder; +/** + * Backend for twitter API. + */ public class TwitterEngine { private static final TwitterEngine mTwitter = new TwitterEngine(); @@ -290,18 +293,19 @@ public class TwitterEngine { * @return List of Users * @throws EngineException if access is unavailable */ - public UserListHolder searchUsers(String search, long cursor) throws EngineException { + public TwitterUserList searchUsers(String search, long cursor) throws EngineException { try { int currentPage = 1; if (cursor > 0) currentPage = (int) cursor; long prevPage = currentPage - 1; long nextPage = currentPage + 1; - List users = convertUserList(twitter.searchUsers(search, currentPage)); if (users.size() < 20) nextPage = 0; - return new UserListHolder(users, prevPage, nextPage); + TwitterUserList result = new TwitterUserList(prevPage, nextPage); + result.addAll(users); + return result; } catch (TwitterException err) { throw new EngineException(err); } @@ -587,20 +591,18 @@ public class TwitterEngine { * @return List of Following User with cursors * @throws EngineException if Access is unavailable */ - public UserListHolder getFollowing(long userId, long cursor) throws EngineException { + public TwitterUserList getFollowing(long userId, long cursor) throws EngineException { try { int load = settings.getListSize(); IDs userIDs = twitter.getFriendsIDs(userId, cursor, load); long[] ids = userIDs.getIDs(); long prevCursor = cursor > 0 ? cursor : 0; long nextCursor = userIDs.getNextCursor(); - List users; + TwitterUserList result = new TwitterUserList(prevCursor, nextCursor); if (ids.length > 0) { - users = convertUserList(twitter.lookupUsers(ids)); - } else { - users = new LinkedList<>(); + result.addAll(convertUserList(twitter.lookupUsers(ids))); } - return new UserListHolder(users, prevCursor, nextCursor); + return result; } catch (TwitterException err) { throw new EngineException(err); } @@ -614,20 +616,18 @@ public class TwitterEngine { * @return List of Follower with cursors attached * @throws EngineException if Access is unavailable */ - public UserListHolder getFollower(long userId, long cursor) throws EngineException { + public TwitterUserList getFollower(long userId, long cursor) throws EngineException { try { int load = settings.getListSize(); IDs userIDs = twitter.getFollowersIDs(userId, cursor, load); long[] ids = userIDs.getIDs(); long prevCursor = cursor > 0 ? cursor : 0; long nextCursor = userIDs.getNextCursor(); - List users; + TwitterUserList result = new TwitterUserList(prevCursor, nextCursor); if (ids.length > 0) { - users = convertUserList(twitter.lookupUsers(ids)); - } else { - users = new LinkedList<>(); + result.addAll(convertUserList(twitter.lookupUsers(ids))); } - return new UserListHolder(users, prevCursor, nextCursor); + return result; } catch (TwitterException err) { throw new EngineException(err); } @@ -791,24 +791,21 @@ public class TwitterEngine { * Get User who retweeted a Tweet * * @param tweetID Tweet ID - * * @return List of users or empty list if no match * @throws EngineException if Access is unavailable */ - public UserListHolder getRetweeter(long tweetID, long cursor) throws EngineException { + public TwitterUserList getRetweeter(long tweetID, long cursor) throws EngineException { try { int load = settings.getListSize(); IDs userIDs = twitter.getRetweeterIds(tweetID, load, cursor); long[] ids = userIDs.getIDs(); long prevCursor = cursor > 0 ? cursor : 0; - long nextCursor = userIDs.getNextCursor(); // todo fix next cursor always zero - List users; + long nextCursor = userIDs.getNextCursor(); // fixme next cursor always zero + TwitterUserList result = new TwitterUserList(prevCursor, nextCursor); if (ids.length > 0) { - users = convertUserList(twitter.lookupUsers(ids)); - } else { - users = new LinkedList<>(); + result.addAll(convertUserList(twitter.lookupUsers(ids))); } - return new UserListHolder(users, prevCursor, nextCursor); + return result; } catch (TwitterException err) { throw new EngineException(err); } @@ -910,7 +907,7 @@ public class TwitterEngine { */ public List getUserList(long userId) throws EngineException { try { - List result = new LinkedList<>(); + List result = new LinkedList<>(); // TODO add a paging system List lists = twitter.getUserLists(userId); for (UserList list : lists) result.add(new TwitterList(list, twitterID)); @@ -985,13 +982,14 @@ public class TwitterEngine { * @return list of users following the list * @throws EngineException if access is unavailable */ - public UserListHolder getListFollower(long listId, long cursor) throws EngineException { + public TwitterUserList getListFollower(long listId, long cursor) throws EngineException { try { - PagableResponseList result = twitter.getUserListSubscribers(listId, cursor); - List users = convertUserList(result); + PagableResponseList followerList = twitter.getUserListSubscribers(listId, cursor); long prevCursor = cursor > 0 ? cursor : 0; - long nextCursor = result.getNextCursor(); - return new UserListHolder(users, prevCursor, nextCursor); + long nextCursor = followerList.getNextCursor(); + TwitterUserList result = new TwitterUserList(prevCursor, nextCursor); + result.addAll(convertUserList(followerList)); + return result; } catch (TwitterException err) { throw new EngineException(err); } @@ -1004,13 +1002,14 @@ public class TwitterEngine { * @return list of users * @throws EngineException if access is unavailable */ - public UserListHolder getListMember(long listId, long cursor) throws EngineException { + public TwitterUserList getListMember(long listId, long cursor) throws EngineException { try { - PagableResponseList result = twitter.getUserListMembers(listId, cursor); - List users = convertUserList(result); + PagableResponseList users = twitter.getUserListMembers(listId, cursor); long prevCursor = cursor > 0 ? cursor : 0; - long nextCursor = result.getNextCursor(); - return new UserListHolder(users, prevCursor, nextCursor); + long nextCursor = users.getNextCursor(); + TwitterUserList result = new TwitterUserList(prevCursor, nextCursor); + result.addAll(convertUserList(users)); + return result; } catch (TwitterException err) { throw new EngineException(err); } diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/holder/UserListHolder.java b/app/src/main/java/org/nuclearfog/twidda/backend/holder/TwitterUserList.java similarity index 57% rename from app/src/main/java/org/nuclearfog/twidda/backend/holder/UserListHolder.java rename to app/src/main/java/org/nuclearfog/twidda/backend/holder/TwitterUserList.java index b7f65f3d..df7e8f7f 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/holder/UserListHolder.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/holder/TwitterUserList.java @@ -4,18 +4,17 @@ import androidx.annotation.NonNull; import org.nuclearfog.twidda.backend.items.TwitterUser; -import java.util.List; +import java.util.LinkedList; /** - * Container class for user list information + * custom twitter user list with cursors included */ -public class UserListHolder { +public class TwitterUserList extends LinkedList { - private final List users; private final long prevCursor, nextCursor; - public UserListHolder(List users, long prevCursor, long nextCursor) { - this.users = users; + public TwitterUserList(long prevCursor, long nextCursor) { + super(); this.prevCursor = prevCursor; this.nextCursor = nextCursor; } @@ -47,27 +46,9 @@ public class UserListHolder { return nextCursor; } - /** - * get size of the attached list - * - * @return size of the list - */ - public int getSize() { - return users.size(); - } - - /** - * get attached list - * - * @return list - */ - public List getUsers() { - return users; - } - @Override @NonNull public String toString() { - return "size=" + getSize() + " pre=" + prevCursor + " pos=" + nextCursor; + return "size=" + size() + " pre=" + prevCursor + " pos=" + nextCursor; } } \ No newline at end of file diff --git a/app/src/main/java/org/nuclearfog/twidda/fragment/UserFragment.java b/app/src/main/java/org/nuclearfog/twidda/fragment/UserFragment.java index 58a14cf8..da307a95 100644 --- a/app/src/main/java/org/nuclearfog/twidda/fragment/UserFragment.java +++ b/app/src/main/java/org/nuclearfog/twidda/fragment/UserFragment.java @@ -22,7 +22,7 @@ import org.nuclearfog.twidda.adapter.UserAdapter.UserClickListener; import org.nuclearfog.twidda.backend.UserListLoader; import org.nuclearfog.twidda.backend.UserListLoader.Action; import org.nuclearfog.twidda.backend.engine.EngineException; -import org.nuclearfog.twidda.backend.holder.UserListHolder; +import org.nuclearfog.twidda.backend.holder.TwitterUserList; import org.nuclearfog.twidda.backend.items.TwitterUser; import org.nuclearfog.twidda.backend.utils.ErrorHandler; import org.nuclearfog.twidda.database.GlobalSettings; @@ -132,7 +132,7 @@ public class UserFragment extends Fragment implements OnRefreshListener, UserCli * * @param data list of twitter users */ - public void setData(UserListHolder data) { + public void setData(TwitterUserList data) { adapter.setData(data); }