added trend sorting (Mastodon), bug fix, renamed methods and variables, version upgrade

This commit is contained in:
nuclearfog 2023-02-12 19:06:42 +01:00
parent ac38db2d62
commit 3d61477a0e
No known key found for this signature in database
GPG Key ID: 03488A185C476379
33 changed files with 152 additions and 61 deletions

View File

@ -13,8 +13,8 @@ android {
applicationId 'org.nuclearfog.twidda'
minSdkVersion 21
targetSdkVersion 33
versionCode 72
versionName '3.0.4'
versionCode 73
versionName '3.0.5'
resConfigs 'en', 'de-rDE', 'zh-rCN'
}

View File

@ -391,8 +391,9 @@ public class Mastodon implements Connection {
JSONArray array = new JSONArray(body.string());
List<Trend> result = new ArrayList<>(array.length());
for (int i = 0; i < array.length(); i++) {
result.add(new MastodonTrend(array.getJSONObject(i), i));
result.add(new MastodonTrend(array.getJSONObject(i)));
}
Collections.sort(result);
return result;
}
throw new MastodonException(response);
@ -415,8 +416,9 @@ public class Mastodon implements Connection {
JSONArray array = new JSONObject(body.string()).getJSONArray("hashtags");
List<Trend> result = new ArrayList<>(array.length());
for (int i = 0; i < array.length(); i++) {
result.add(new MastodonTrend(array.getJSONObject(i), i));
result.add(new MastodonTrend(array.getJSONObject(i)));
}
Collections.sort(result);
return result;
}
throw new MastodonException(response);

View File

@ -14,6 +14,8 @@ import org.nuclearfog.twidda.model.Emoji;
*/
public class CustomEmoji implements Emoji {
private static final long serialVersionUID = 2848675481626033993L;
private String code;
private String url;
private String category;
@ -63,6 +65,14 @@ public class CustomEmoji implements Emoji {
}
@Override
public int compareTo(Emoji emoji) {
return String.CASE_INSENSITIVE_ORDER.compare(code, emoji.getCode());
}
/**
* @return true if emoji is visible for picker
*/
public boolean visible() {
return visibleInPicker;
}

View File

@ -17,7 +17,7 @@ public class MastodonAccount implements Account {
private static final long serialVersionUID = -3212031070966866336L;
private long id;
private long createdAt;
private long timestamp;
private String hostname;
private String bearer;
@ -38,7 +38,7 @@ public class MastodonAccount implements Account {
this.bearer = bearer;
this.client_id = client_id;
this.client_secret = client_secret;
createdAt = System.currentTimeMillis();
timestamp = System.currentTimeMillis();
id = user.getId();
}
@ -50,8 +50,8 @@ public class MastodonAccount implements Account {
@Override
public long getLoginDate() {
return createdAt;
public long getTimestamp() {
return timestamp;
}

View File

@ -104,6 +104,12 @@ public class MastodonList implements UserList {
}
@Override
public int compareTo(UserList userlist) {
return Long.compare(userlist.getId(), id);
}
@Override
public boolean equals(@Nullable Object obj) {
if (!(obj instanceof UserList))

View File

@ -20,7 +20,7 @@ public class MastodonNotification implements Notification {
private static final long serialVersionUID = 4113306729125959429L;
private long id;
private long createdAt;
private long timestamp;
private int type;
private User user;
private Status status;
@ -34,7 +34,7 @@ public class MastodonNotification implements Notification {
String typeStr = json.getString("type");
JSONObject statusJson = json.optJSONObject("status");
JSONObject userJson = json.getJSONObject("account");
createdAt = StringTools.getTime(json.getString("created_at"), StringTools.TIME_MASTODON);
timestamp = StringTools.getTime(json.getString("created_at"), StringTools.TIME_MASTODON);
user = new MastodonUser(userJson);
switch (typeStr) {
@ -94,8 +94,8 @@ public class MastodonNotification implements Notification {
@Override
public long getCreatedAt() {
return createdAt;
public long getTimestamp() {
return timestamp;
}
@ -119,6 +119,12 @@ public class MastodonNotification implements Notification {
}
@Override
public int compareTo(Notification notification) {
return Long.compare(notification.getTimestamp(), timestamp);
}
@Override
public boolean equals(@Nullable Object obj) {
if (!(obj instanceof Notification))

View File

@ -15,18 +15,15 @@ public class MastodonTrend implements Trend {
private static final long serialVersionUID = 4328931229081239280L;
private int rank;
private int popularity;
private String name;
/**
* @param json trend json object
* @param pos array index
*/
public MastodonTrend(JSONObject json, int pos) {
public MastodonTrend(JSONObject json) {
JSONArray history = json.optJSONArray("history");
name = '#' + json.optString("name", "");
rank = pos + 1;
if (history != null && history.length() > 0) {
JSONObject latest = history.optJSONObject(0);
if (latest != null) {
@ -50,7 +47,7 @@ public class MastodonTrend implements Trend {
@Override
public int getRank() {
return rank;
return -1;
}
@ -60,9 +57,21 @@ public class MastodonTrend implements Trend {
}
@Override
public int compareTo(Trend trend) {
if (trend.getPopularity() > 0 && popularity > 0)
return Integer.compare(trend.getPopularity(), popularity);
if (trend.getPopularity() > 0)
return 1;
if (popularity > 0)
return -1;
return String.CASE_INSENSITIVE_ORDER.compare(name, trend.getName());
}
@NonNull
@Override
public String toString() {
return "name=\"" + name + " rank=" + rank;
return "name=\"" + name;
}
}

View File

@ -108,7 +108,7 @@ public class MastodonUser implements User {
@Override
public long getCreatedAt() {
public long getTimestamp() {
return createdAt;
}
@ -217,7 +217,7 @@ public class MastodonUser implements User {
@Override
public int compareTo(User o) {
return Long.compare(o.getCreatedAt(), createdAt);
return Long.compare(o.getTimestamp(), createdAt);
}

View File

@ -58,7 +58,7 @@ public class AccountV1 implements Account {
@Override
public long getLoginDate() {
public long getTimestamp() {
return date;
}

View File

@ -109,6 +109,12 @@ public class MessageV1 implements Message {
return "from=" + sender + " message=\"" + text + "\"";
}
@Override
public int compareTo(Message message) {
return Long.compare(message.getTimestamp(), timestamp);
}
/**
* get ID of the sender
*

View File

@ -39,7 +39,7 @@ public class NotificationV1 implements Notification {
@Override
public long getCreatedAt() {
public long getTimestamp() {
return status.getTimestamp();
}
@ -70,4 +70,10 @@ public class NotificationV1 implements Notification {
Notification notification = ((Notification) obj);
return status.equals(notification.getStatus());
}
@Override
public int compareTo(Notification notification) {
return Long.compare(notification.getTimestamp(), getTimestamp());
}
}

View File

@ -56,6 +56,12 @@ public class TrendV1 implements Trend {
}
@Override
public int compareTo(Trend trend) {
return Integer.compare(rank, trend.getRank());
}
@NonNull
@Override
public String toString() {

View File

@ -24,7 +24,7 @@ public class UserListV1 implements UserList {
private static final String PRIVATE = "private";
private long id;
private long createdAt;
private long timestamp;
private String title;
private String description;
private int memberCount;
@ -42,7 +42,7 @@ public class UserListV1 implements UserList {
String idStr = json.getString("id_str");
owner = new UserV1(json.getJSONObject("user"), currentId);
createdAt = StringTools.getTime(json.optString("created_at", ""), StringTools.TIME_TWITTER_V1);
timestamp = StringTools.getTime(json.optString("created_at", ""), StringTools.TIME_TWITTER_V1);
title = json.optString("name", "");
description = json.optString("description", "");
memberCount = json.optInt("member_count");
@ -65,7 +65,7 @@ public class UserListV1 implements UserList {
@Override
public long getTimestamp() {
return createdAt;
return timestamp;
}
@ -131,6 +131,12 @@ public class UserListV1 implements UserList {
return "title=\"" + title + "\" description=\"" + description + "\"";
}
@Override
public int compareTo(UserList userlist) {
return Long.compare(userlist.getTimestamp(), timestamp);
}
/**
* set manually follow status
*

View File

@ -27,7 +27,7 @@ public class UserV1 implements User {
private long id;
private long createdAt;
private long timestamp;
private String username;
private String screenName;
private String description;
@ -74,7 +74,7 @@ public class UserV1 implements User {
favoriteCount = json.optInt("favourites_count");
followReqSent = json.optBoolean("follow_request_sent");
defaultImage = json.optBoolean("default_profile_image");
createdAt = StringTools.getTime(json.optString("created_at", ""), StringTools.TIME_TWITTER_V1);
timestamp = StringTools.getTime(json.optString("created_at", ""), StringTools.TIME_TWITTER_V1);
description = getDescription(json);
url = getUrl(json);
@ -115,8 +115,8 @@ public class UserV1 implements User {
@Override
public long getCreatedAt() {
return createdAt;
public long getTimestamp() {
return timestamp;
}
@ -238,7 +238,7 @@ public class UserV1 implements User {
@Override
public int compareTo(User o) {
return Long.compare(o.getCreatedAt(), createdAt);
return Long.compare(o.getTimestamp(), timestamp);
}

View File

@ -105,7 +105,7 @@ public class UserV2 implements User {
@Override
public long getCreatedAt() {
public long getTimestamp() {
return createdAt;
}
@ -230,7 +230,7 @@ public class UserV2 implements User {
@Override
public int compareTo(User o) {
return Long.compare(o.getCreatedAt(), createdAt);
return Long.compare(o.getTimestamp(), createdAt);
}

View File

@ -46,6 +46,7 @@ import org.nuclearfog.twidda.model.Trend;
import org.nuclearfog.twidda.model.User;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
@ -354,11 +355,6 @@ public class AppDatabase {
*/
private static final String FILTER_SELECT = LIST_SELECT + " AND " + UserExcludeTable.ID + "=?";
/**
* default order for trend rows
*/
private static final String TREND_ORDER = TrendTable.INDEX + " ASC";
/**
* default sort order for logins
*/
@ -528,7 +524,7 @@ public class AppDatabase {
for (Notification notification : notifications) {
ContentValues column = new ContentValues();
column.put(NotificationTable.ID, notification.getId());
column.put(NotificationTable.TIME, notification.getCreatedAt());
column.put(NotificationTable.TIME, notification.getTimestamp());
column.put(NotificationTable.TYPE, notification.getType());
column.put(NotificationTable.OWNER, settings.getLogin().getId());
column.put(NotificationTable.USER, notification.getUser().getId());
@ -563,7 +559,7 @@ public class AppDatabase {
public void saveLogin(Account account) {
ContentValues values = new ContentValues(9);
values.put(AccountTable.ID, account.getId());
values.put(AccountTable.DATE, account.getLoginDate());
values.put(AccountTable.DATE, account.getTimestamp());
values.put(AccountTable.HOSTNAME, account.getHostname());
values.put(AccountTable.CLIENT_ID, account.getConsumerToken());
values.put(AccountTable.CLIENT_SECRET, account.getConsumerSecret());
@ -896,7 +892,7 @@ public class AppDatabase {
public List<Trend> getTrends() {
String[] args = {Long.toString(settings.getTrendLocation().getId())};
SQLiteDatabase db = getDbRead();
Cursor cursor = db.query(TrendTable.NAME, TrendImpl.COLUMNS, TREND_SELECT, args, null, null, TREND_ORDER);
Cursor cursor = db.query(TrendTable.NAME, TrendImpl.COLUMNS, TREND_SELECT, args, null, null, null);
List<Trend> trends = new LinkedList<>();
if (cursor.moveToFirst()) {
do {
@ -904,6 +900,7 @@ public class AppDatabase {
} while (cursor.moveToNext());
}
cursor.close();
Collections.sort(trends);
return trends;
}
@ -1234,7 +1231,7 @@ public class AppDatabase {
userColumn.put(UserTable.LINK, user.getProfileUrl());
userColumn.put(UserTable.LOCATION, user.getLocation());
userColumn.put(UserTable.BANNER, user.getOriginalBannerImageUrl());
userColumn.put(UserTable.SINCE, user.getCreatedAt());
userColumn.put(UserTable.SINCE, user.getTimestamp());
userColumn.put(UserTable.FRIENDS, user.getFollowing());
userColumn.put(UserTable.FOLLOWER, user.getFollower());
userColumn.put(UserTable.STATUSES, user.getStatusCount());

View File

@ -112,7 +112,7 @@ public class AccountImpl implements Account {
@Override
public long getLoginDate() {
public long getTimestamp() {
return loginDate;
}

View File

@ -15,6 +15,8 @@ import org.nuclearfog.twidda.model.Emoji;
*/
public class EmojiImpl implements Emoji {
private static final long serialVersionUID = 4915542258264850899L;
/**
* projection of the emoji table columns
*/
@ -69,4 +71,10 @@ public class EmojiImpl implements Emoji {
public String toString() {
return "code=\"" + code + "\" category=\"" + category + "\" url=\"" + url + "\"";
}
@Override
public int compareTo(Emoji emoji) {
return String.CASE_INSENSITIVE_ORDER.compare(code, emoji.getCode());
}
}

View File

@ -100,6 +100,12 @@ public class MessageImpl implements Message {
return "from=" + sender + " message=\"" + text + "\"";
}
@Override
public int compareTo(Message message) {
return Long.compare(message.getTimestamp(), time);
}
/**
* @return media key array
*/

View File

@ -53,7 +53,7 @@ public class NotificationImpl implements Notification {
@Override
public long getCreatedAt() {
public long getTimestamp() {
return timestamp;
}
@ -97,6 +97,12 @@ public class NotificationImpl implements Notification {
}
@Override
public int compareTo(Notification notification) {
return Long.compare(notification.getTimestamp(), timestamp);
}
@NonNull
@Override
public String toString() {

View File

@ -27,7 +27,7 @@ public class TrendImpl implements Trend {
};
private String name;
private int range;
private int popularity;
private int rank;
private long id;
@ -36,7 +36,7 @@ public class TrendImpl implements Trend {
*/
public TrendImpl(Cursor cursor) {
name = cursor.getString(0);
range = cursor.getInt(1);
popularity = cursor.getInt(1);
rank = cursor.getInt(2);
id = cursor.getLong(3);
}
@ -62,7 +62,7 @@ public class TrendImpl implements Trend {
@Override
public int getPopularity() {
return range;
return popularity;
}
@ -71,4 +71,18 @@ public class TrendImpl implements Trend {
public String toString() {
return "rank=" + rank + " name=\"" + name + "\"";
}
@Override
public int compareTo(Trend trend) {
if (trend.getRank() > 0 && rank > 0)
return Integer.compare(rank, trend.getRank());
if (trend.getPopularity() > 0 && popularity > 0)
return Integer.compare(trend.getPopularity(), popularity);
if (trend.getPopularity() > 0)
return 1;
if (popularity > 0)
return -1;
return String.CASE_INSENSITIVE_ORDER.compare(name, trend.getName());
}
}

View File

@ -120,7 +120,7 @@ public class UserImpl implements User {
@Override
public long getCreatedAt() {
public long getTimestamp() {
return createdAt;
}
@ -237,7 +237,7 @@ public class UserImpl implements User {
@Override
public int compareTo(User o) {
return Long.compare(o.getCreatedAt(), createdAt);
return Long.compare(o.getTimestamp(), createdAt);
}

View File

@ -42,7 +42,7 @@ public interface Account extends Serializable {
/**
* @return date of the first login
*/
long getLoginDate();
long getTimestamp();
/**
* @return user information of the account

View File

@ -1,11 +1,13 @@
package org.nuclearfog.twidda.model;
import java.io.Serializable;
/**
* Interface used for "custom emoji" implementation
*
* @author nuclearfog
*/
public interface Emoji {
public interface Emoji extends Serializable, Comparable<Emoji> {
/**
* short code of an emoji used by the server

View File

@ -9,7 +9,7 @@ import java.io.Serializable;
*
* @author nuclearfog
*/
public interface Message extends Serializable {
public interface Message extends Serializable, Comparable<Message> {
/**
* @return ID of the direct message

View File

@ -9,7 +9,7 @@ import java.io.Serializable;
*
* @author nuclearfog
*/
public interface Notification extends Serializable {
public interface Notification extends Serializable, Comparable<Notification> {
/**
* mention
@ -70,7 +70,7 @@ public interface Notification extends Serializable {
*
* @return time
*/
long getCreatedAt();
long getTimestamp();
/**
* get user from the notification

View File

@ -7,7 +7,7 @@ import java.io.Serializable;
*
* @author nuclearfog
*/
public interface Trend extends Serializable {
public interface Trend extends Serializable, Comparable<Trend> {
/**
* @return trend name

View File

@ -27,7 +27,7 @@ public interface User extends Serializable, Comparable<User> {
/**
* @return date of account creation
*/
long getCreatedAt();
long getTimestamp();
/**
* @return profile image url

View File

@ -9,7 +9,7 @@ import java.io.Serializable;
*
* @author nuclearfog
*/
public interface UserList extends Serializable {
public interface UserList extends Serializable, Comparable<UserList> {
/**
* @return ID of the user list

View File

@ -645,7 +645,7 @@ public class ProfileActivity extends AppCompatActivity implements ActivityResult
}
}
if (user_createdAt.getVisibility() != VISIBLE) {
String date = SimpleDateFormat.getDateTimeInstance().format(user.getCreatedAt());
String date = SimpleDateFormat.getDateTimeInstance().format(user.getTimestamp());
user_createdAt.setVisibility(VISIBLE);
user_createdAt.setText(date);
}

View File

@ -59,7 +59,7 @@ public class TrendAdapter extends Adapter<ViewHolder> implements OnHolderClickLi
public void onBindViewHolder(@NonNull ViewHolder vh, int index) {
TrendHolder holder = (TrendHolder) vh;
Trend trend = trends.get(index);
holder.setContent(trend);
holder.setContent(trend, index);
}

View File

@ -85,7 +85,7 @@ public class AccountHolder extends ViewHolder implements OnClickListener {
* @param account content
*/
public void setContent(Account account) {
date.setText(StringTools.formatCreationTime(itemView.getResources(), account.getLoginDate()));
date.setText(StringTools.formatCreationTime(itemView.getResources(), account.getTimestamp()));
User user = account.getUser();
if (user != null) {
// set profile information

View File

@ -63,9 +63,10 @@ public class TrendHolder extends ViewHolder implements OnClickListener {
* set view content
*
* @param trend content information
* @param index index of the item
*/
public void setContent(Trend trend) {
rank.setText(trend.getRank() + ".");
public void setContent(Trend trend, int index) {
rank.setText(index + 1 + ".");
name.setText(trend.getName());
if (trend.getPopularity() > 0) {
Resources resources = vol.getResources();