From 774e3fa0566d62f46f8cd63e42e4025c3541d63b Mon Sep 17 00:00:00 2001 From: nuclearfog Date: Tue, 26 Sep 2023 22:11:53 +0200 Subject: [PATCH] completed hashtag page, renamed classes, code cleanup, layout fix, bug fix --- .../twidda/backend/api/Connection.java | 29 +++-- .../twidda/backend/api/mastodon/Mastodon.java | 58 +++++++--- ...astodonTrend.java => MastodonHashtag.java} | 16 +-- .../twidda/backend/async/HashtagAction.java | 30 +++-- .../twidda/backend/async/RelationLoader.java | 3 - ...ilterLoader.java => UserFilterAction.java} | 16 +-- .../twidda/database/AppDatabase.java | 98 +++-------------- .../twidda/database/DatabaseAdapter.java | 47 ++------ ...atabaseTrend.java => DatabaseHashtag.java} | 16 +-- .../twidda/model/{Trend.java => Hashtag.java} | 16 +-- .../nuclearfog/twidda/model/lists/Trends.java | 6 +- .../twidda/ui/activities/HashtagActivity.java | 104 +++++++++++++++++- .../twidda/ui/activities/SearchActivity.java | 46 ++++---- .../ui/activities/UserlistActivity.java | 9 +- .../ui/activities/UserlistsActivity.java | 5 - .../twidda/ui/activities/UsersActivity.java | 49 ++------- .../ui/adapter/recyclerview/TrendAdapter.java | 18 +-- .../recyclerview/holder/TrendHolder.java | 12 +- .../twidda/ui/fragments/HashtagFragment.java | 12 +- app/src/main/res/drawable/refresh.xml | 9 -- app/src/main/res/layout/item_domain.xml | 5 +- app/src/main/res/layout/page_listdetail.xml | 2 +- app/src/main/res/layout/popup_userlist.xml | 5 +- app/src/main/res/menu/hashtags.xml | 12 ++ app/src/main/res/menu/lists.xml | 4 +- app/src/main/res/menu/main_navigation.xml | 15 ++- .../res/menu/{excludelist.xml => users.xml} | 8 +- app/src/main/res/values-de-rDE/strings.xml | 5 +- app/src/main/res/values-es/strings.xml | 3 - app/src/main/res/values/arrays.xml | 6 +- app/src/main/res/values/dimens.xml | 4 +- app/src/main/res/values/strings.xml | 11 +- 32 files changed, 338 insertions(+), 341 deletions(-) rename app/src/main/java/org/nuclearfog/twidda/backend/api/mastodon/impl/{MastodonTrend.java => MastodonHashtag.java} (75%) rename app/src/main/java/org/nuclearfog/twidda/backend/async/{UserFilterLoader.java => UserFilterAction.java} (80%) rename app/src/main/java/org/nuclearfog/twidda/database/impl/{DatabaseTrend.java => DatabaseHashtag.java} (74%) rename app/src/main/java/org/nuclearfog/twidda/model/{Trend.java => Hashtag.java} (56%) delete mode 100644 app/src/main/res/drawable/refresh.xml create mode 100644 app/src/main/res/menu/hashtags.xml rename app/src/main/res/menu/{excludelist.xml => users.xml} (63%) diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/api/Connection.java b/app/src/main/java/org/nuclearfog/twidda/backend/api/Connection.java index 583652dd..ac513816 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/api/Connection.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/api/Connection.java @@ -21,7 +21,7 @@ import org.nuclearfog.twidda.model.Relation; import org.nuclearfog.twidda.model.ScheduledStatus; import org.nuclearfog.twidda.model.Status; import org.nuclearfog.twidda.model.Translation; -import org.nuclearfog.twidda.model.Trend; +import org.nuclearfog.twidda.model.Hashtag; import org.nuclearfog.twidda.model.User; import org.nuclearfog.twidda.model.UserList; import org.nuclearfog.twidda.model.WebPush; @@ -303,7 +303,7 @@ public interface Connection { * @param name hashtag name * @return hashtag information */ - Trend showHashtag(String name) throws ConnectionException; + Hashtag showHashtag(String name) throws ConnectionException; /** * follow hashtag by name @@ -311,7 +311,7 @@ public interface Connection { * @param name name of the hashtag * @return updated hashtag information */ - Trend followHashtag(String name) throws ConnectionException; + Hashtag followHashtag(String name) throws ConnectionException; /** * unfollow hashtag by name @@ -319,7 +319,21 @@ public interface Connection { * @param name name of the hashtag * @return updated hashtag information */ - Trend unfollowHashtag(String name) throws ConnectionException; + Hashtag unfollowHashtag(String name) throws ConnectionException; + + /** + * + * @param name name of the hashtag + * @return updated hashtag information + */ + Hashtag featureHashtag(String name) throws ConnectionException; + + /** + * + * @param name name of the hashtag + * @return updated hashtag information + */ + Hashtag unfeatureHashtag(String name) throws ConnectionException; /** * show current user's home timeline @@ -641,13 +655,6 @@ public interface Connection { */ Poll votePoll(Poll poll, int[] selection) throws ConnectionException; - /** - * returns a list of blocked user IDs - * - * @return list of IDs - */ - List getIdBlocklist() throws ConnectionException; - /** * returns used filter * diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/api/mastodon/Mastodon.java b/app/src/main/java/org/nuclearfog/twidda/backend/api/mastodon/Mastodon.java index 98ffa20a..cf8ec5ed 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/api/mastodon/Mastodon.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/api/mastodon/Mastodon.java @@ -25,7 +25,7 @@ import org.nuclearfog.twidda.backend.api.mastodon.impl.MastodonPush; import org.nuclearfog.twidda.backend.api.mastodon.impl.MastodonRelation; import org.nuclearfog.twidda.backend.api.mastodon.impl.MastodonStatus; import org.nuclearfog.twidda.backend.api.mastodon.impl.MastodonTranslation; -import org.nuclearfog.twidda.backend.api.mastodon.impl.MastodonTrend; +import org.nuclearfog.twidda.backend.api.mastodon.impl.MastodonHashtag; import org.nuclearfog.twidda.backend.api.mastodon.impl.MastodonUser; import org.nuclearfog.twidda.backend.api.mastodon.impl.ScheduledMastodonStatus; import org.nuclearfog.twidda.backend.helper.ConnectionResult; @@ -51,7 +51,7 @@ import org.nuclearfog.twidda.model.Relation; import org.nuclearfog.twidda.model.ScheduledStatus; import org.nuclearfog.twidda.model.Status; import org.nuclearfog.twidda.model.Translation; -import org.nuclearfog.twidda.model.Trend; +import org.nuclearfog.twidda.model.Hashtag; import org.nuclearfog.twidda.model.User; import org.nuclearfog.twidda.model.UserList; import org.nuclearfog.twidda.model.WebPush; @@ -126,7 +126,7 @@ public class Mastodon implements Connection { private static final String ENDPOINT_HASHTAG_TIMELINE = "/api/v1/timelines/tag/"; private static final String ENDPOINT_HASHTAG_FOLLOWING = "/api/v1/followed_tags"; private static final String ENDPOINT_HASHTAG_FEATURE = "/api/v1/featured_tags"; - private static final String ENDPOINT_HASHTAG_GET = "/api/v1/tags/"; + private static final String ENDPOINT_HASHTAG = "/api/v1/tags/"; private static final String ENDPOINT_USER_TIMELINE = "/api/v1/accounts/"; private static final String ENDPOINT_USER_FAVORITS = "/api/v1/favourites"; private static final String ENDPOINT_TRENDS = "/api/v1/trends/tags"; @@ -491,11 +491,11 @@ public class Mastodon implements Connection { @Override - public Trend showHashtag(String name) throws ConnectionException { + public Hashtag showHashtag(String name) throws ConnectionException { try { if (name.startsWith("#")) name = name.substring(1); - return createTrend(get(ENDPOINT_HASHTAG_GET + StringUtils.encode(name), new ArrayList<>())); + return createTag(get(ENDPOINT_HASHTAG + StringUtils.encode(name), new ArrayList<>())); } catch (IOException e) { throw new MastodonException(e); } @@ -503,11 +503,11 @@ public class Mastodon implements Connection { @Override - public Trend followHashtag(String name) throws ConnectionException { + public Hashtag followHashtag(String name) throws ConnectionException { try { if (name.startsWith("#")) name = name.substring(1); - return createTrend(post(ENDPOINT_HASHTAG_GET + StringUtils.encode(name) + "/follow", new ArrayList<>())); + return createTag(post(ENDPOINT_HASHTAG + StringUtils.encode(name) + "/follow", new ArrayList<>())); } catch (IOException e) { throw new MastodonException(e); } @@ -515,11 +515,39 @@ public class Mastodon implements Connection { @Override - public Trend unfollowHashtag(String name) throws ConnectionException { + public Hashtag unfollowHashtag(String name) throws ConnectionException { try { if (name.startsWith("#")) name = name.substring(1); - return createTrend(post(ENDPOINT_HASHTAG_GET + StringUtils.encode(name) + "/unfollow", new ArrayList<>())); + return createTag(post(ENDPOINT_HASHTAG + StringUtils.encode(name) + "/unfollow", new ArrayList<>())); + } catch (IOException e) { + throw new MastodonException(e); + } + } + + + @Override + public Hashtag featureHashtag(String name) throws ConnectionException { + try { + if (name.startsWith("#")) + name = name.substring(1); + List params = new ArrayList<>(); + params.add("name=" + StringUtils.encode(name)); + return createTag(post(ENDPOINT_HASHTAG_FEATURE, params)); + } catch (IOException e) { + throw new MastodonException(e); + } + } + + + @Override + public Hashtag unfeatureHashtag(String name) throws ConnectionException { + try { + if (name.startsWith("#")) + name = name.substring(1); + List params = new ArrayList<>(); + params.add("name=" + StringUtils.encode(name)); + return createTag(delete(ENDPOINT_HASHTAG_FEATURE, params)); } catch (IOException e) { throw new MastodonException(e); } @@ -1001,12 +1029,6 @@ public class Mastodon implements Connection { } - @Override - public List getIdBlocklist() throws MastodonException { - throw new MastodonException("not supported!"); - } - - @Override public Filters getFilter() throws ConnectionException { try { @@ -1444,7 +1466,7 @@ public class Mastodon implements Connection { long[] cursors = getCursors(response); Trends result = new Trends(cursors[0], cursors[1]); for (int i = 0; i < jsonArray.length(); i++) { - result.add(new MastodonTrend(jsonArray.getJSONObject(i))); + result.add(new MastodonHashtag(jsonArray.getJSONObject(i))); } Collections.sort(result); return result; @@ -1649,12 +1671,12 @@ public class Mastodon implements Connection { * @param response response from a trend endpoint * @return trend information */ - private Trend createTrend(Response response) throws MastodonException { + private Hashtag createTag(Response response) throws MastodonException { try { ResponseBody body = response.body(); if (response.code() == 200 && body != null) { JSONObject json = new JSONObject(body.string()); - return new MastodonTrend(json); + return new MastodonHashtag(json); } throw new MastodonException(response); } catch (IOException | JSONException e) { diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/api/mastodon/impl/MastodonTrend.java b/app/src/main/java/org/nuclearfog/twidda/backend/api/mastodon/impl/MastodonHashtag.java similarity index 75% rename from app/src/main/java/org/nuclearfog/twidda/backend/api/mastodon/impl/MastodonTrend.java rename to app/src/main/java/org/nuclearfog/twidda/backend/api/mastodon/impl/MastodonHashtag.java index 8501c0c5..3eded8e9 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/api/mastodon/impl/MastodonTrend.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/api/mastodon/impl/MastodonHashtag.java @@ -6,14 +6,14 @@ import androidx.annotation.Nullable; import org.json.JSONArray; import org.json.JSONObject; import org.nuclearfog.twidda.model.Location; -import org.nuclearfog.twidda.model.Trend; +import org.nuclearfog.twidda.model.Hashtag; /** - * Trend implementation used for Mastodon API + * Hashtag implementation used by Mastodon API * * @author nuclearfog */ -public class MastodonTrend implements Trend { +public class MastodonHashtag implements Hashtag { private static final long serialVersionUID = 4328931229081239280L; @@ -24,7 +24,7 @@ public class MastodonTrend implements Trend { /** * @param json trend json object */ - public MastodonTrend(JSONObject json) { + public MastodonHashtag(JSONObject json) { JSONArray history = json.optJSONArray("history"); name = '#' + json.optString("name", ""); following = json.optBoolean("following", false); @@ -33,6 +33,8 @@ public class MastodonTrend implements Trend { if (latest != null) { popularity = latest.optInt("uses", 0); } + } else { + popularity = json.optInt("statuses_count", 0); } } @@ -69,10 +71,10 @@ public class MastodonTrend implements Trend { @Override public boolean equals(@Nullable Object obj) { - if (!(obj instanceof Trend)) + if (!(obj instanceof Hashtag)) return false; - Trend trend = (Trend) obj; - return getName().equals(trend.getName()) && getLocationId() == trend.getLocationId(); + Hashtag hashtag = (Hashtag) obj; + return getName().equals(hashtag.getName()) && getLocationId() == hashtag.getLocationId(); } diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/async/HashtagAction.java b/app/src/main/java/org/nuclearfog/twidda/backend/async/HashtagAction.java index 76dc4451..1eec2b6b 100644 --- a/app/src/main/java/org/nuclearfog/twidda/backend/async/HashtagAction.java +++ b/app/src/main/java/org/nuclearfog/twidda/backend/async/HashtagAction.java @@ -8,7 +8,7 @@ import androidx.annotation.Nullable; import org.nuclearfog.twidda.backend.api.Connection; import org.nuclearfog.twidda.backend.api.ConnectionException; import org.nuclearfog.twidda.backend.api.ConnectionManager; -import org.nuclearfog.twidda.model.Trend; +import org.nuclearfog.twidda.model.Hashtag; /** * Async loader for hashtag follow/unfollow action @@ -32,7 +32,7 @@ public class HashtagAction extends AsyncExecutor { +public class UserFilterAction extends AsyncExecutor { private Connection connection; private AppDatabase db; @@ -29,7 +26,7 @@ public class UserFilterLoader extends AsyncExecutor ids = connection.getIdBlocklist(); - db.saveFilterlist(ids); - return new FilterResult(FilterResult.RELOAD, null); - case FilterParam.MUTE_USER: Relation relation = connection.muteUser(param.name); db.muteUser(relation.getId(), true); @@ -71,7 +63,6 @@ public class UserFilterLoader extends AsyncExecutor ids) { - synchronized (LOCK) { - long homeId = settings.getLogin().getId(); - String[] args = {Long.toString(homeId)}; - SQLiteDatabase db = adapter.getDbWrite(); - db.delete(UserExcludeTable.NAME, LIST_SELECT, args); - - if (!ids.isEmpty()) { - for (long id : ids) { - ContentValues column = new ContentValues(2); - column.put(UserExcludeTable.USER, id); - column.put(UserExcludeTable.OWNER, homeId); - db.insert(UserExcludeTable.NAME, null, column); - } - } - adapter.commit(); - } - } - /** * store location specific trends * - * @param trends List of Trends + * @param hashtags List of Trends */ - public void saveTrends(List trends) { + public void saveTrends(List hashtags) { synchronized (LOCK) { String[] args = {Long.toString(settings.getTrendLocation().getId())}; SQLiteDatabase db = adapter.getDbWrite(); - db.delete(TrendTable.NAME, TREND_SELECT, args); - for (Trend trend : trends) { + db.delete(HashtagTable.NAME, TREND_SELECT, args); + for (Hashtag hashtag : hashtags) { ContentValues column = new ContentValues(4); - column.put(TrendTable.ID, trend.getLocationId()); - column.put(TrendTable.VOL, trend.getPopularity()); - column.put(TrendTable.TREND, trend.getName()); - column.put(TrendTable.INDEX, trend.getRank()); - db.insert(TrendTable.NAME, null, column); + column.put(HashtagTable.ID, hashtag.getLocationId()); + column.put(HashtagTable.VOL, hashtag.getPopularity()); + column.put(HashtagTable.TREND, hashtag.getName()); + column.put(HashtagTable.INDEX, hashtag.getRank()); + db.insert(HashtagTable.NAME, null, column); } adapter.commit(); } @@ -679,22 +644,6 @@ public class AppDatabase { } } - /** - * add user to the exclude database - * - * @param userId ID of the user - */ - public void saveUserToFilterlist(long userId) { - synchronized (LOCK) { - SQLiteDatabase db = adapter.getDbWrite(); - ContentValues column = new ContentValues(2); - column.put(UserExcludeTable.USER, userId); - column.put(UserExcludeTable.OWNER, settings.getLogin().getId()); - db.insert(UserExcludeTable.NAME, null, column); - adapter.commit(); - } - } - /** * save emojis to database * @@ -830,11 +779,11 @@ public class AppDatabase { synchronized (LOCK) { String[] args = {Long.toString(settings.getTrendLocation().getId())}; SQLiteDatabase db = adapter.getDbRead(); - Cursor cursor = db.query(TrendTable.NAME, DatabaseTrend.COLUMNS, TREND_SELECT, args, null, null, null); + Cursor cursor = db.query(HashtagTable.NAME, DatabaseHashtag.COLUMNS, TREND_SELECT, args, null, null, null); Trends trends = new Trends(); if (cursor.moveToFirst()) { do { - trends.add(new DatabaseTrend(cursor)); + trends.add(new DatabaseHashtag(cursor)); } while (cursor.moveToNext()); } cursor.close(); @@ -1069,20 +1018,6 @@ public class AppDatabase { } } - /** - * remove user from the exclude database - * - * @param userId ID of the user - */ - public void removeUserFromFilterlist(long userId) { - synchronized (LOCK) { - String[] args = {Long.toString(settings.getLogin().getId()), Long.toString(userId)}; - SQLiteDatabase db = adapter.getDbWrite(); - db.delete(UserExcludeTable.NAME, FILTER_SELECT, args); - adapter.commit(); - } - } - /** * check if status exists in database * @@ -1170,10 +1105,9 @@ public class AppDatabase { db.delete(StatusTable.NAME, null, null); db.delete(FavoriteTable.NAME, null, null); db.delete(BookmarkTable.NAME, null, null); - db.delete(TrendTable.NAME, null, null); + db.delete(HashtagTable.NAME, null, null); db.delete(StatusRegisterTable.NAME, null, null); db.delete(UserRegisterTable.NAME, null, null); - db.delete(UserExcludeTable.NAME, null, null); db.delete(NotificationTable.NAME, null, null); db.delete(MediaTable.NAME, null, null); db.delete(LocationTable.NAME, null, null); diff --git a/app/src/main/java/org/nuclearfog/twidda/database/DatabaseAdapter.java b/app/src/main/java/org/nuclearfog/twidda/database/DatabaseAdapter.java index 01b6a271..676fc0c0 100644 --- a/app/src/main/java/org/nuclearfog/twidda/database/DatabaseAdapter.java +++ b/app/src/main/java/org/nuclearfog/twidda/database/DatabaseAdapter.java @@ -76,11 +76,11 @@ public class DatabaseAdapter { * SQL query to create a table for trend information */ private static final String TABLE_TRENDS = "CREATE TABLE IF NOT EXISTS " - + TrendTable.NAME + "(" - + TrendTable.ID + " INTEGER," - + TrendTable.INDEX + " INTEGER," - + TrendTable.VOL + " INTEGER," - + TrendTable.TREND + " TEXT);"; + + HashtagTable.NAME + "(" + + HashtagTable.ID + " INTEGER," + + HashtagTable.INDEX + " INTEGER," + + HashtagTable.VOL + " INTEGER," + + HashtagTable.TREND + " TEXT);"; /** * SQL query to create a table for user logins @@ -186,14 +186,6 @@ public class DatabaseAdapter { + BookmarkTable.OWNER + " INTEGER," + BookmarkTable.STATUS + " INTEGER);"; - /** - * SQL query to create user blocklist table - */ - private static final String TABLE_USER_BLOCKLIST = "CREATE TABLE IF NOT EXISTS " - + UserExcludeTable.NAME + "(" - + UserExcludeTable.OWNER + " INTEGER," - + UserExcludeTable.USER + " INTEGER);"; - /** * SQL query to create instance table */ @@ -343,7 +335,6 @@ public class DatabaseAdapter { db.execSQL(TABLE_BOOKMARKS); db.execSQL(TABLE_TRENDS); db.execSQL(TABLE_ACCOUNTS); - db.execSQL(TABLE_USER_BLOCKLIST); db.execSQL(TABLE_STATUS_REGISTER); db.execSQL(TABLE_USER_REGISTER); db.execSQL(TABLE_NOTIFICATION); @@ -704,19 +695,19 @@ public class DatabaseAdapter { /** * table for trends and trending hashtags */ - public interface TrendTable { + public interface HashtagTable { /** * table name */ String NAME = "trend"; /** - * Location ID of the trend + * Location ID */ String ID = "woeID"; /** - * rank of the trend + * rank of the hashtag */ String INDEX = "trendpos"; @@ -726,7 +717,7 @@ public class DatabaseAdapter { String VOL = "vol"; /** - * name of the trend + * hashtag name */ String TREND = "trendname"; } @@ -848,26 +839,6 @@ public class DatabaseAdapter { String REGISTER = "userRegister"; } - /** - * table for user filter list - */ - public interface UserExcludeTable { - /** - * table name - */ - String NAME = "userExclude"; - - /** - * owner ID of the list - */ - String OWNER = "listOwner"; - - /** - * user ID to filter - */ - String USER = "userID"; - } - /** * table for notifications */ diff --git a/app/src/main/java/org/nuclearfog/twidda/database/impl/DatabaseTrend.java b/app/src/main/java/org/nuclearfog/twidda/database/impl/DatabaseHashtag.java similarity index 74% rename from app/src/main/java/org/nuclearfog/twidda/database/impl/DatabaseTrend.java rename to app/src/main/java/org/nuclearfog/twidda/database/impl/DatabaseHashtag.java index 001cc2f1..0799aac2 100644 --- a/app/src/main/java/org/nuclearfog/twidda/database/impl/DatabaseTrend.java +++ b/app/src/main/java/org/nuclearfog/twidda/database/impl/DatabaseHashtag.java @@ -5,15 +5,15 @@ import android.database.Cursor; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import org.nuclearfog.twidda.database.DatabaseAdapter.TrendTable; -import org.nuclearfog.twidda.model.Trend; +import org.nuclearfog.twidda.database.DatabaseAdapter.HashtagTable; +import org.nuclearfog.twidda.model.Hashtag; /** - * database implementation for a trend + * database implementation of a hashtag * * @author nuclearfog */ -public class DatabaseTrend implements Trend, TrendTable { +public class DatabaseHashtag implements Hashtag, HashtagTable { private static final long serialVersionUID = 1799880502954768985L; @@ -30,7 +30,7 @@ public class DatabaseTrend implements Trend, TrendTable { /** * @param cursor database cursor using this {@link #COLUMNS} projection */ - public DatabaseTrend(Cursor cursor) { + public DatabaseHashtag(Cursor cursor) { String name = cursor.getString(0); popularity = cursor.getInt(1); rank = cursor.getInt(2); @@ -73,10 +73,10 @@ public class DatabaseTrend implements Trend, TrendTable { @Override public boolean equals(@Nullable Object obj) { - if (!(obj instanceof Trend)) + if (!(obj instanceof Hashtag)) return false; - Trend trend = (Trend) obj; - return getName().equals(trend.getName()) && getLocationId() == trend.getLocationId(); + Hashtag hashtag = (Hashtag) obj; + return getName().equals(hashtag.getName()) && getLocationId() == hashtag.getLocationId(); } diff --git a/app/src/main/java/org/nuclearfog/twidda/model/Trend.java b/app/src/main/java/org/nuclearfog/twidda/model/Hashtag.java similarity index 56% rename from app/src/main/java/org/nuclearfog/twidda/model/Trend.java rename to app/src/main/java/org/nuclearfog/twidda/model/Hashtag.java index 8cbb1f4c..f18ae98e 100644 --- a/app/src/main/java/org/nuclearfog/twidda/model/Trend.java +++ b/app/src/main/java/org/nuclearfog/twidda/model/Hashtag.java @@ -7,7 +7,7 @@ import java.io.Serializable; * * @author nuclearfog */ -public interface Trend extends Serializable, Comparable { +public interface Hashtag extends Serializable, Comparable { /** * @return trend name @@ -36,15 +36,15 @@ public interface Trend extends Serializable, Comparable { @Override - default int compareTo(Trend trend) { - if (getRank() > 0 && trend.getRank() > 0) - return Integer.compare(getRank(), trend.getRank()); - if (trend.getPopularity() > 0 && getPopularity() > 0) - return Integer.compare(trend.getPopularity(), getPopularity()); - if (trend.getPopularity() > 0) + default int compareTo(Hashtag hashtag) { + if (getRank() > 0 && hashtag.getRank() > 0) + return Integer.compare(getRank(), hashtag.getRank()); + if (hashtag.getPopularity() > 0 && getPopularity() > 0) + return Integer.compare(hashtag.getPopularity(), getPopularity()); + if (hashtag.getPopularity() > 0) return 1; if (getPopularity() > 0) return -1; - return String.CASE_INSENSITIVE_ORDER.compare(getName(), trend.getName()); + return String.CASE_INSENSITIVE_ORDER.compare(getName(), hashtag.getName()); } } \ No newline at end of file diff --git a/app/src/main/java/org/nuclearfog/twidda/model/lists/Trends.java b/app/src/main/java/org/nuclearfog/twidda/model/lists/Trends.java index 3dfa39ee..f0435677 100644 --- a/app/src/main/java/org/nuclearfog/twidda/model/lists/Trends.java +++ b/app/src/main/java/org/nuclearfog/twidda/model/lists/Trends.java @@ -3,7 +3,7 @@ package org.nuclearfog.twidda.model.lists; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import org.nuclearfog.twidda.model.Trend; +import org.nuclearfog.twidda.model.Hashtag; import java.util.LinkedList; @@ -12,7 +12,7 @@ import java.util.LinkedList; * * @author nuclearfog */ -public class Trends extends LinkedList { +public class Trends extends LinkedList { private static final long serialVersionUID = 7646437787602696292L; @@ -49,7 +49,7 @@ public class Trends extends LinkedList { */ @Nullable @Override - public Trend get(int index) { + public Hashtag get(int index) { return super.get(index); } diff --git a/app/src/main/java/org/nuclearfog/twidda/ui/activities/HashtagActivity.java b/app/src/main/java/org/nuclearfog/twidda/ui/activities/HashtagActivity.java index 935e0744..69ed8755 100644 --- a/app/src/main/java/org/nuclearfog/twidda/ui/activities/HashtagActivity.java +++ b/app/src/main/java/org/nuclearfog/twidda/ui/activities/HashtagActivity.java @@ -1,23 +1,42 @@ package org.nuclearfog.twidda.ui.activities; +import android.graphics.Color; import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; import android.view.ViewGroup; +import android.widget.Toast; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.SearchView; +import androidx.appcompat.widget.Toolbar; import androidx.viewpager2.widget.ViewPager2; import org.nuclearfog.twidda.R; +import org.nuclearfog.twidda.backend.async.AsyncExecutor.AsyncCallback; +import org.nuclearfog.twidda.backend.async.HashtagAction; +import org.nuclearfog.twidda.backend.async.HashtagAction.HashtagParam; +import org.nuclearfog.twidda.backend.async.HashtagAction.HashtagResult; import org.nuclearfog.twidda.backend.utils.AppStyles; +import org.nuclearfog.twidda.config.GlobalSettings; import org.nuclearfog.twidda.ui.adapter.viewpager.HashtagAdapter; import org.nuclearfog.twidda.ui.views.TabSelector; +import org.nuclearfog.twidda.ui.views.TabSelector.OnTabSelectedListener; /** * Activity class used to show hashtag following/featuring * * @author nuclearfog */ -public class HashtagActivity extends AppCompatActivity { +public class HashtagActivity extends AppCompatActivity implements SearchView.OnQueryTextListener, OnTabSelectedListener, AsyncCallback { + + private GlobalSettings settings; + private HashtagAction hashtagAction; + private HashtagAdapter adapter; + + private ViewPager2 viewPager; @Override @@ -26,16 +45,95 @@ public class HashtagActivity extends AppCompatActivity { setContentView(R.layout.page_hashtag); ViewGroup root = findViewById(R.id.page_hashtag_root); + Toolbar toolbar = findViewById(R.id.page_hashtag_toolbar); TabSelector tabSelector = findViewById(R.id.page_hashtag_tab); - ViewPager2 viewPager = findViewById(R.id.page_hashtag_pager); + viewPager = findViewById(R.id.page_hashtag_pager); - HashtagAdapter adapter = new HashtagAdapter(this); + hashtagAction = new HashtagAction(this); + settings = GlobalSettings.get(this); + adapter = new HashtagAdapter(this); viewPager.setAdapter(adapter); viewPager.setOffscreenPageLimit(2); tabSelector.addTabIcons(R.array.userlist_hashtag_icons); tabSelector.addTabLabels(R.array.hashtag_labels); + toolbar.setTitle(""); + setSupportActionBar(toolbar); AppStyles.setTheme(root); + + tabSelector.addOnTabSelectedListener(this); + } + + + @Override + public boolean onCreateOptionsMenu(@NonNull Menu menu) { + getMenuInflater().inflate(R.menu.hashtags, menu); + MenuItem search = menu.findItem(R.id.menu_hashtag_add); + SearchView searchView = (SearchView) search.getActionView(); + searchView.setQueryHint(getString(R.string.menu_hashtag_add)); + searchView.setOnQueryTextListener(this); + AppStyles.setTheme(searchView, Color.TRANSPARENT); + AppStyles.setMenuIconColor(menu, settings.getIconColor()); + return true; + } + + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + MenuItem search = menu.findItem(R.id.menu_hashtag_add); + search.collapseActionView(); + return true; + } + + @Override + public boolean onQueryTextSubmit(String query) { + if (hashtagAction.isIdle()) { + if (viewPager.getCurrentItem() == 0) { + HashtagParam param = new HashtagParam(HashtagParam.FOLLOW, query); + hashtagAction.execute(param, this); + return true; + } else if (viewPager.getCurrentItem() == 1) { + HashtagParam param = new HashtagParam(HashtagParam.FEATURE, query); + hashtagAction.execute(param, this); + return true; + } + } + return false; + } + + + @Override + public boolean onQueryTextChange(String newText) { + return false; + } + + + @Override + public void onResult(@NonNull HashtagResult result) { + switch (result.mode) { + case HashtagResult.FEATURE: + Toast.makeText(getApplicationContext(), R.string.info_hashtag_featured, Toast.LENGTH_SHORT).show(); + adapter.notifySettingsChanged(); + invalidateOptionsMenu(); + break; + + case HashtagResult.FOLLOW: + Toast.makeText(getApplicationContext(), R.string.info_hashtag_followed, Toast.LENGTH_SHORT).show(); + adapter.notifySettingsChanged(); + invalidateOptionsMenu(); + break; + + case HashtagResult.ERROR: + break; + } + } + + + @Override + public void onTabSelected(int oldPosition) { + adapter.scrollToTop(oldPosition); + // reset menu + invalidateOptionsMenu(); } } \ No newline at end of file diff --git a/app/src/main/java/org/nuclearfog/twidda/ui/activities/SearchActivity.java b/app/src/main/java/org/nuclearfog/twidda/ui/activities/SearchActivity.java index bfb69c1f..e4c2b9dc 100644 --- a/app/src/main/java/org/nuclearfog/twidda/ui/activities/SearchActivity.java +++ b/app/src/main/java/org/nuclearfog/twidda/ui/activities/SearchActivity.java @@ -27,7 +27,7 @@ import org.nuclearfog.twidda.backend.async.HashtagAction.HashtagResult; import org.nuclearfog.twidda.backend.utils.AppStyles; import org.nuclearfog.twidda.backend.utils.ErrorUtils; import org.nuclearfog.twidda.config.GlobalSettings; -import org.nuclearfog.twidda.model.Trend; +import org.nuclearfog.twidda.model.Hashtag; import org.nuclearfog.twidda.ui.adapter.viewpager.SearchAdapter; import org.nuclearfog.twidda.ui.views.TabSelector; import org.nuclearfog.twidda.ui.views.TabSelector.OnTabSelectedListener; @@ -49,7 +49,7 @@ public class SearchActivity extends AppCompatActivity implements OnClickListener /** * key to add trend information to search for - * value type is {@link Trend} + * value type is {@link Hashtag} */ public static final String KEY_DATA = "trend_data"; @@ -66,7 +66,7 @@ public class SearchActivity extends AppCompatActivity implements OnClickListener private String search = ""; @Nullable - private Trend trend; + private Hashtag hashtag; @Override @@ -90,13 +90,13 @@ public class SearchActivity extends AppCompatActivity implements OnClickListener String query = getIntent().getStringExtra(KEY_QUERY); Serializable data = getIntent().getSerializableExtra(KEY_DATA); - if (data instanceof Trend) { - trend = (Trend) data; - search = trend.getName(); + if (data instanceof Hashtag) { + hashtag = (Hashtag) data; + search = hashtag.getName(); } else if (query != null) { search = query; if (search.startsWith("#") && search.matches("\\S+")) { - HashtagParam param = new HashtagParam(search, HashtagParam.LOAD); + HashtagParam param = new HashtagParam(HashtagParam.LOAD, search); hashtagAction.execute(param, this); } } @@ -124,9 +124,9 @@ public class SearchActivity extends AppCompatActivity implements OnClickListener if (viewPager.getCurrentItem() > 0) { viewPager.setCurrentItem(0); } else { - if (trend != null) { + if (hashtag != null) { Intent intent = new Intent(); - intent.putExtra(KEY_DATA, trend); + intent.putExtra(KEY_DATA, hashtag); setResult(RETURN_TREND, intent); } super.onBackPressed(); @@ -146,15 +146,15 @@ public class SearchActivity extends AppCompatActivity implements OnClickListener getMenuInflater().inflate(R.menu.search, menu); MenuItem searchItem = menu.findItem(R.id.new_search); MenuItem searchFilter = menu.findItem(R.id.search_filter); - MenuItem hashtag = menu.findItem(R.id.search_hashtag); + MenuItem menuHashtag = menu.findItem(R.id.search_hashtag); SearchView searchView = (SearchView) searchItem.getActionView(); boolean enableSearchFilter = settings.getLogin().getConfiguration().filterEnabled(); searchFilter.setVisible(enableSearchFilter); searchFilter.setChecked(settings.filterResults() & enableSearchFilter); searchView.setQueryHint(search); - if (trend != null && trend.getName().startsWith("#")) { - hashtag.setVisible(true); + if (hashtag != null && hashtag.getName().startsWith("#")) { + menuHashtag.setVisible(true); } // set theme AppStyles.setTheme(searchView, Color.TRANSPARENT); @@ -168,13 +168,13 @@ public class SearchActivity extends AppCompatActivity implements OnClickListener @Override public boolean onPrepareOptionsMenu(Menu menu) { - MenuItem hashtag = menu.findItem(R.id.search_hashtag); + MenuItem menuHashtag = menu.findItem(R.id.search_hashtag); // set menu option depending on trend follow status - if (trend != null) { - if (trend.following()) { - hashtag.setTitle(R.string.menu_hashtag_unfollow); + if (hashtag != null) { + if (hashtag.following()) { + menuHashtag.setTitle(R.string.menu_hashtag_unfollow); } else { - hashtag.setTitle(R.string.menu_hashtag_follow); + menuHashtag.setTitle(R.string.menu_hashtag_follow); } } return super.onPrepareOptionsMenu(menu); @@ -206,12 +206,12 @@ public class SearchActivity extends AppCompatActivity implements OnClickListener } // follow/unfollow hashtag else if (item.getItemId() == R.id.search_hashtag) { - if (trend != null && hashtagAction.isIdle()) { + if (hashtag != null && hashtagAction.isIdle()) { HashtagParam param; - if (trend.following()) - param = new HashtagParam(trend.getName(), HashtagParam.UNFOLLOW); + if (hashtag.following()) + param = new HashtagParam(HashtagParam.UNFOLLOW, hashtag.getName()); else - param = new HashtagParam(trend.getName(), HashtagParam.FOLLOW); + param = new HashtagParam(HashtagParam.FOLLOW, hashtag.getName()); hashtagAction.execute(param, this); } } @@ -259,8 +259,8 @@ public class SearchActivity extends AppCompatActivity implements OnClickListener @Override public void onResult(@NonNull HashtagResult result) { - if (result.trend != null) { - this.trend = result.trend; + if (result.hashtag != null) { + this.hashtag = result.hashtag; invalidateMenu(); } switch (result.mode) { diff --git a/app/src/main/java/org/nuclearfog/twidda/ui/activities/UserlistActivity.java b/app/src/main/java/org/nuclearfog/twidda/ui/activities/UserlistActivity.java index 2d4d50f7..f971c8e9 100644 --- a/app/src/main/java/org/nuclearfog/twidda/ui/activities/UserlistActivity.java +++ b/app/src/main/java/org/nuclearfog/twidda/ui/activities/UserlistActivity.java @@ -125,13 +125,16 @@ public class UserlistActivity extends AppCompatActivity implements ActivityResul toolbar.setTitle(userList.getTitle()); toolbar.setSubtitle(userList.getDescription()); adapter = new UserlistAdapter(this, userList); + viewPager.setAdapter(adapter); + if (adapter.getItemCount() == 2) { + tabSelector.addTabIcons(R.array.list_tab_icons); + } else if (adapter.getItemCount() == 3) { + tabSelector.addTabIcons(R.array.list_subscriber_tab_icons); + } } viewPager.setOffscreenPageLimit(3); - viewPager.setAdapter(adapter); setSupportActionBar(toolbar); - AppStyles.setTheme(root); - tabSelector.addTabIcons(R.array.list_tab_icons); tabSelector.addOnTabSelectedListener(this); } diff --git a/app/src/main/java/org/nuclearfog/twidda/ui/activities/UserlistsActivity.java b/app/src/main/java/org/nuclearfog/twidda/ui/activities/UserlistsActivity.java index d400188e..c9778549 100644 --- a/app/src/main/java/org/nuclearfog/twidda/ui/activities/UserlistsActivity.java +++ b/app/src/main/java/org/nuclearfog/twidda/ui/activities/UserlistsActivity.java @@ -44,8 +44,6 @@ public class UserlistsActivity extends AppCompatActivity implements ActivityResu private GlobalSettings settings; private ViewPager2 viewPager; - private boolean isHome = false; - @Override protected void attachBaseContext(Context newBase) { @@ -68,7 +66,6 @@ public class UserlistsActivity extends AppCompatActivity implements ActivityResu setSupportActionBar(toolbar); long ownerId = getIntent().getLongExtra(KEY_ID, 0L); - isHome = ownerId == settings.getLogin().getId(); adapter = new UserListsAdapter(this, ownerId); viewPager.setAdapter(adapter); @@ -102,8 +99,6 @@ public class UserlistsActivity extends AppCompatActivity implements ActivityResu @Override public boolean onCreateOptionsMenu(@NonNull Menu m) { getMenuInflater().inflate(R.menu.lists, m); - m.findItem(R.id.list_create).setVisible(isHome); - m.findItem(R.id.list_blocklists).setVisible(isHome); AppStyles.setMenuIconColor(m, settings.getIconColor()); return super.onCreateOptionsMenu(m); } diff --git a/app/src/main/java/org/nuclearfog/twidda/ui/activities/UsersActivity.java b/app/src/main/java/org/nuclearfog/twidda/ui/activities/UsersActivity.java index aa493496..d06e38b7 100644 --- a/app/src/main/java/org/nuclearfog/twidda/ui/activities/UsersActivity.java +++ b/app/src/main/java/org/nuclearfog/twidda/ui/activities/UsersActivity.java @@ -20,9 +20,9 @@ import androidx.viewpager2.widget.ViewPager2; import org.nuclearfog.twidda.R; import org.nuclearfog.twidda.backend.async.AsyncExecutor.AsyncCallback; -import org.nuclearfog.twidda.backend.async.UserFilterLoader; -import org.nuclearfog.twidda.backend.async.UserFilterLoader.FilterParam; -import org.nuclearfog.twidda.backend.async.UserFilterLoader.FilterResult; +import org.nuclearfog.twidda.backend.async.UserFilterAction; +import org.nuclearfog.twidda.backend.async.UserFilterAction.FilterParam; +import org.nuclearfog.twidda.backend.async.UserFilterAction.FilterResult; import org.nuclearfog.twidda.backend.utils.AppStyles; import org.nuclearfog.twidda.backend.utils.ErrorUtils; import org.nuclearfog.twidda.config.GlobalSettings; @@ -92,10 +92,9 @@ public class UsersActivity extends AppCompatActivity implements OnTabSelectedLis private static final Pattern USERNAME_PATTERN = Pattern.compile("@?\\w+(@\\w+\\.\\w+)?"); private GlobalSettings settings; - private UserFilterLoader filterLoader; + private UserFilterAction filterLoader; private UserAdapter adapter; - private Toolbar toolbar; private TabSelector tabSelector; private ViewPager2 viewPager; @@ -113,11 +112,11 @@ public class UsersActivity extends AppCompatActivity implements OnTabSelectedLis super.onCreate(savedInst); setContentView(R.layout.page_users); ViewGroup root = findViewById(R.id.page_users_root); - toolbar = findViewById(R.id.page_users_toolbar); + Toolbar toolbar = findViewById(R.id.page_users_toolbar); tabSelector = findViewById(R.id.page_exclude_tab); viewPager = findViewById(R.id.page_users_pager); - filterLoader = new UserFilterLoader(this); + filterLoader = new UserFilterAction(this); settings = GlobalSettings.get(this); viewPager.setOffscreenPageLimit(3); @@ -195,15 +194,12 @@ public class UsersActivity extends AppCompatActivity implements OnTabSelectedLis @Override public boolean onCreateOptionsMenu(@NonNull Menu m) { if (mode == USERS_EXCLUDED) { - getMenuInflater().inflate(R.menu.excludelist, m); - MenuItem search = m.findItem(R.id.menu_exclude_user); - MenuItem refresh = m.findItem(R.id.menu_exclude_refresh); + getMenuInflater().inflate(R.menu.users, m); + MenuItem search = m.findItem(R.id.menu_user_add); SearchView searchView = (SearchView) search.getActionView(); - refresh.setVisible(settings.getLogin().getConfiguration().filterlistEnabled()); searchView.setOnQueryTextListener(this); AppStyles.setTheme(searchView, Color.TRANSPARENT); AppStyles.setMenuIconColor(m, settings.getIconColor()); - AppStyles.setOverflowIcon(toolbar, settings.getIconColor()); return true; } return super.onCreateOptionsMenu(m); @@ -213,16 +209,13 @@ public class UsersActivity extends AppCompatActivity implements OnTabSelectedLis @Override public boolean onPrepareOptionsMenu(Menu m) { if (mode == USERS_EXCLUDED) { - SearchView searchView = (SearchView) m.findItem(R.id.menu_exclude_user).getActionView(); + SearchView searchView = (SearchView) m.findItem(R.id.menu_user_add).getActionView(); if (viewPager.getCurrentItem() == 0) { - String hint = getString(R.string.menu_hint_mute_user); - searchView.setQueryHint(hint); + searchView.setQueryHint(getString(R.string.menu_hint_mute_user)); } else if (viewPager.getCurrentItem() == 1) { - String hint = getString(R.string.menu_hint_block_user); - searchView.setQueryHint(hint); + searchView.setQueryHint(getString(R.string.menu_hint_block_user)); } else if (viewPager.getCurrentItem() == 2) { - String hint = getString(R.string.menu_hint_block_domain); - searchView.setQueryHint(hint); + searchView.setQueryHint(getString(R.string.menu_hint_block_domain)); } return true; } @@ -230,20 +223,6 @@ public class UsersActivity extends AppCompatActivity implements OnTabSelectedLis } - @Override - public boolean onOptionsItemSelected(@NonNull MenuItem item) { - if (item.getItemId() == R.id.menu_exclude_refresh) { - if (filterLoader.isIdle()) { - Toast.makeText(getApplicationContext(), R.string.info_refreshing_exclude_list, Toast.LENGTH_SHORT).show(); - FilterParam param = new FilterParam(FilterParam.RELOAD); - filterLoader.execute(param, this); - } - return true; - } - return super.onOptionsItemSelected(item); - } - - @Override public void onTabSelected(int oldPosition) { adapter.scrollToTop(oldPosition); @@ -302,10 +281,6 @@ public class UsersActivity extends AppCompatActivity implements OnTabSelectedLis invalidateOptionsMenu(); break; - case FilterResult.RELOAD: - Toast.makeText(getApplicationContext(), R.string.info_exclude_list_updated, Toast.LENGTH_SHORT).show(); - break; - default: case FilterResult.ERROR: ErrorUtils.showErrorMessage(getApplicationContext(), result.exception); diff --git a/app/src/main/java/org/nuclearfog/twidda/ui/adapter/recyclerview/TrendAdapter.java b/app/src/main/java/org/nuclearfog/twidda/ui/adapter/recyclerview/TrendAdapter.java index 2b575c4b..5355f262 100644 --- a/app/src/main/java/org/nuclearfog/twidda/ui/adapter/recyclerview/TrendAdapter.java +++ b/app/src/main/java/org/nuclearfog/twidda/ui/adapter/recyclerview/TrendAdapter.java @@ -6,7 +6,7 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView.Adapter; import androidx.recyclerview.widget.RecyclerView.ViewHolder; -import org.nuclearfog.twidda.model.Trend; +import org.nuclearfog.twidda.model.Hashtag; import org.nuclearfog.twidda.model.lists.Trends; import org.nuclearfog.twidda.ui.adapter.recyclerview.holder.OnHolderClickListener; import org.nuclearfog.twidda.ui.adapter.recyclerview.holder.PlaceHolder; @@ -73,9 +73,9 @@ public class TrendAdapter extends Adapter implements OnHolderClickLi public void onBindViewHolder(@NonNull ViewHolder vh, int index) { if (vh instanceof TrendHolder) { TrendHolder holder = (TrendHolder) vh; - Trend trend = items.get(index); - if (trend != null) { - holder.setContent(trend, index); + Hashtag hashtag = items.get(index); + if (hashtag != null) { + holder.setContent(hashtag, index); } } else if (vh instanceof PlaceHolder) { PlaceHolder placeHolder = (PlaceHolder) vh; @@ -138,10 +138,10 @@ public class TrendAdapter extends Adapter implements OnHolderClickLi /** * remove item from adapter * - * @param trend item to remove + * @param hashtag item to remove */ - public void removeItem(Trend trend) { - int index = items.indexOf(trend); + public void removeItem(Hashtag hashtag) { + int index = items.indexOf(hashtag); if (index >= 0) { items.remove(index); notifyItemRemoved(index); @@ -184,9 +184,9 @@ public class TrendAdapter extends Adapter implements OnHolderClickLi /** * called when a trend item is clicked * - * @param trend trend name + * @param hashtag trend name */ - void onTrendClick(Trend trend); + void onTrendClick(Hashtag hashtag); boolean onPlaceholderClick(long cursor, int index); diff --git a/app/src/main/java/org/nuclearfog/twidda/ui/adapter/recyclerview/holder/TrendHolder.java b/app/src/main/java/org/nuclearfog/twidda/ui/adapter/recyclerview/holder/TrendHolder.java index f283aa47..f54be2e9 100644 --- a/app/src/main/java/org/nuclearfog/twidda/ui/adapter/recyclerview/holder/TrendHolder.java +++ b/app/src/main/java/org/nuclearfog/twidda/ui/adapter/recyclerview/holder/TrendHolder.java @@ -16,7 +16,7 @@ import org.nuclearfog.twidda.R; import org.nuclearfog.twidda.backend.utils.AppStyles; import org.nuclearfog.twidda.backend.utils.StringUtils; import org.nuclearfog.twidda.config.GlobalSettings; -import org.nuclearfog.twidda.model.Trend; +import org.nuclearfog.twidda.model.Hashtag; /** * ViewHolder for a trend item @@ -61,15 +61,15 @@ public class TrendHolder extends ViewHolder implements OnClickListener { /** * set view content * - * @param trend content information + * @param hashtag content information * @param index index of the item */ - public void setContent(Trend trend, int index) { + public void setContent(Hashtag hashtag, int index) { rank.setText(index + 1 + "."); - name.setText(trend.getName()); - if (trend.getPopularity() > 0) { + name.setText(hashtag.getName()); + if (hashtag.getPopularity() > 0) { Resources resources = vol.getResources(); - String trendVol = StringUtils.NUMBER_FORMAT.format(trend.getPopularity()) + resources.getString(R.string.trend_range); + String trendVol = StringUtils.NUMBER_FORMAT.format(hashtag.getPopularity()) + resources.getString(R.string.trend_range); vol.setText(trendVol); vol.setVisibility(View.VISIBLE); } else { diff --git a/app/src/main/java/org/nuclearfog/twidda/ui/fragments/HashtagFragment.java b/app/src/main/java/org/nuclearfog/twidda/ui/fragments/HashtagFragment.java index 003313e6..5f88c279 100644 --- a/app/src/main/java/org/nuclearfog/twidda/ui/fragments/HashtagFragment.java +++ b/app/src/main/java/org/nuclearfog/twidda/ui/fragments/HashtagFragment.java @@ -16,7 +16,7 @@ import org.nuclearfog.twidda.backend.async.TrendLoader; import org.nuclearfog.twidda.backend.async.TrendLoader.TrendParameter; import org.nuclearfog.twidda.backend.async.TrendLoader.TrendResult; import org.nuclearfog.twidda.backend.utils.ErrorUtils; -import org.nuclearfog.twidda.model.Trend; +import org.nuclearfog.twidda.model.Hashtag; import org.nuclearfog.twidda.model.lists.Trends; import org.nuclearfog.twidda.ui.activities.SearchActivity; import org.nuclearfog.twidda.ui.adapter.recyclerview.TrendAdapter; @@ -137,8 +137,8 @@ public class HashtagFragment extends ListFragment implements TrendClickListener, if (result.getResultCode() == SearchActivity.RETURN_TREND) { if (result.getData() != null) { Serializable data = result.getData().getSerializableExtra(SearchActivity.KEY_DATA); - if (data instanceof Trend) { - Trend update = (Trend) data; + if (data instanceof Hashtag) { + Hashtag update = (Hashtag) data; // remove hashtag if unfollowed if (mode == MODE_FOLLOW && !update.following()) { adapter.removeItem(update); @@ -150,15 +150,15 @@ public class HashtagFragment extends ListFragment implements TrendClickListener, @Override - public void onTrendClick(Trend trend) { + public void onTrendClick(Hashtag hashtag) { if (!isRefreshing()) { Intent intent = new Intent(requireContext(), SearchActivity.class); - String name = trend.getName(); + String name = hashtag.getName(); if (!name.startsWith("#") && !name.startsWith("\"") && !name.endsWith("\"")) { name = "\"" + name + "\""; intent.putExtra(SearchActivity.KEY_QUERY, name); } else { - intent.putExtra(SearchActivity.KEY_DATA, trend); + intent.putExtra(SearchActivity.KEY_DATA, hashtag); } activityResultLauncher.launch(intent); } diff --git a/app/src/main/res/drawable/refresh.xml b/app/src/main/res/drawable/refresh.xml deleted file mode 100644 index 52572374..00000000 --- a/app/src/main/res/drawable/refresh.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/layout/item_domain.xml b/app/src/main/res/layout/item_domain.xml index 87700be9..c905556a 100644 --- a/app/src/main/res/layout/item_domain.xml +++ b/app/src/main/res/layout/item_domain.xml @@ -7,8 +7,7 @@ + android:orientation="horizontal"> + android:maxLines="2" /> + app:viewpager="@id/listdetail_pager" />