From 5ca65381ad2a0a4a4aa2b8e1a93f667e64b3e5bd Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Tue, 18 May 2021 19:19:25 +0300 Subject: support custom article sorting (i.e. scored_oldest_first) --- org.fox.ttrss/src/main/AndroidManifest.xml | 4 +- .../src/main/java/org/fox/ttrss/Application.java | 14 ++++-- .../main/java/org/fox/ttrss/MasterActivity.java | 57 +++++++++------------- .../main/java/org/fox/ttrss/OnlineActivity.java | 27 +++++++--- 4 files changed, 54 insertions(+), 48 deletions(-) diff --git a/org.fox.ttrss/src/main/AndroidManifest.xml b/org.fox.ttrss/src/main/AndroidManifest.xml index 83dd8a6b..4b3cabfb 100755 --- a/org.fox.ttrss/src/main/AndroidManifest.xml +++ b/org.fox.ttrss/src/main/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="533" + android:versionName="1.299"> diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/Application.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/Application.java index a9a54fb4..94857855 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/Application.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/Application.java @@ -1,7 +1,6 @@ package org.fox.ttrss; import android.os.Bundle; -import android.util.ArraySet; import com.livefront.bridge.Bridge; import com.livefront.bridge.SavedStateHandler; @@ -12,7 +11,7 @@ import org.fox.ttrss.types.ArticleList; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import java.util.HashMap; +import java.util.LinkedHashMap; import icepick.Icepick; @@ -25,7 +24,7 @@ public class Application extends android.app.Application { public int m_selectedArticleId; public String m_sessionId; public int m_apiLevel; - public HashMap m_customSortTypes = new HashMap<>(); + public LinkedHashMap m_customSortModes = new LinkedHashMap(); public static Application getInstance(){ return m_singleton; @@ -56,7 +55,7 @@ public class Application extends android.app.Application { out.putString("gs:sessionId", m_sessionId); out.putInt("gs:apiLevel", m_apiLevel); out.putInt("gs:selectedArticleId", m_selectedArticleId); - out.putSerializable("gs:customSortTypes", m_customSortTypes); + out.putSerializable("gs:customSortTypes", m_customSortModes); } public void load(Bundle in) { @@ -64,7 +63,12 @@ public class Application extends android.app.Application { m_sessionId = in.getString("gs:sessionId"); m_apiLevel = in.getInt("gs:apiLevel"); m_selectedArticleId = in.getInt("gs:selectedArticleId"); - m_customSortTypes = (HashMap) in.getSerializable("gs:customSortTypes"); + + try { + m_customSortModes = (LinkedHashMap) in.getSerializable("gs:customSortTypes"); + } catch (Exception e) { + e.printStackTrace(); + } } } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java index 12c2d5ad..f7681e42 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java @@ -27,7 +27,6 @@ import org.fox.ttrss.types.FeedCategory; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashMap; -import java.util.stream.Stream; import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.widget.Toolbar; @@ -369,53 +368,43 @@ public class MasterActivity extends OnlineActivity implements HeadlinesEventList case R.id.headlines_toggle_sort_order: Dialog dialog = new Dialog(this); - String sortMode = getSortMode(); + LinkedHashMap sortModes = getSortModes(); - LinkedHashMap sortTypes = new LinkedHashMap(); + CharSequence[] sortTitles = sortModes.values().toArray(new CharSequence[0]); + final CharSequence[] sortNames = sortModes.keySet().toArray(new CharSequence[0]); - sortTypes.put("", getString(R.string.headlines_sort_default)); - sortTypes.put("feed_dates", getString(R.string.headlines_sort_newest_first)); - sortTypes.put("date_reverse", getString(R.string.headlines_sort_oldest_first)); - sortTypes.put("title", getString(R.string.headlines_sort_title)); + String currentMode = getSortMode(); - sortTypes.putAll(Application.getInstance().m_customSortTypes); + int i = 0; + int selectedIndex = 0; + for (CharSequence tmp : sortNames) { + if (tmp.equals(currentMode)) { + selectedIndex = i; + break; + } - /*if (sortMode.equals("feed_dates")) { - selectedIndex = 1; - } else if (sortMode.equals("date_reverse")) { - selectedIndex = 2; - } else if (sortMode.equals("title")) { - selectedIndex = 3; - }*/ - - int selectedIndex = 0; + ++i; + } AlertDialog.Builder builder = new AlertDialog.Builder(this) .setTitle(getString(R.string.headlines_sort_articles_title)) .setSingleChoiceItems( - (CharSequence[])sortTypes.keySet().toArray(), + sortTitles, selectedIndex, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - Log.d(TAG, "sort selected index:" + which); - - switch (which) { - case 0: - setSortMode("default"); - break; - case 1: - setSortMode("feed_dates"); - break; - case 2: - setSortMode("date_reverse"); - break; - case 3: - setSortMode("title"); - break; - } + try { +// Log.d(TAG, "sort selected index:" + which + ": " + sortNames[which]); + + setSortMode((String)sortNames[which]); + + } catch (IndexOutOfBoundsException e) { + e.printStackTrace(); + } + dialog.cancel(); refresh(); diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java index 64e1dfed..246d56d2 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java @@ -35,7 +35,6 @@ import android.widget.TextView; import com.github.javiersantos.appupdater.AppUpdater; import com.github.javiersantos.appupdater.enums.UpdateFrom; import com.google.gson.Gson; -import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; @@ -52,6 +51,7 @@ import org.fox.ttrss.util.ImageCacheService; import java.lang.reflect.Type; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -1196,11 +1196,6 @@ public class OnlineActivity extends CommonActivity { return Application.getInstance().m_apiLevel; } - private void setCustomSortTypes(Map customSortTypes) { - Application.getInstance().m_customSortTypes.clear(); - Application.getInstance().m_customSortTypes.putAll(customSortTypes); - } - protected void setApiLevel(int apiLevel) { Application.getInstance().m_apiLevel = apiLevel; } @@ -1609,7 +1604,7 @@ public class OnlineActivity extends CommonActivity { Type hashType = new TypeToken>(){}.getType(); Map customSortTypes = new Gson().fromJson(config.get("custom_sort_types"), hashType); - setCustomSortTypes(customSortTypes); + setCustomSortModes(customSortTypes); Log.d(TAG, "test"); } @@ -1694,6 +1689,19 @@ public class OnlineActivity extends CommonActivity { } + public LinkedHashMap getSortModes() { + LinkedHashMap tmp = new LinkedHashMap(); + + tmp.put("default", getString(R.string.headlines_sort_default)); + tmp.put("feed_dates", getString(R.string.headlines_sort_newest_first)); + tmp.put("date_reverse", getString(R.string.headlines_sort_oldest_first)); + tmp.put("title", getString(R.string.headlines_sort_title)); + + tmp.putAll(Application.getInstance().m_customSortModes); + + return tmp; + } + public String getSortMode() { return m_prefs.getString("headlines_sort_mode", "default"); } @@ -1704,6 +1712,11 @@ public class OnlineActivity extends CommonActivity { editor.apply(); } + private synchronized void setCustomSortModes(Map modes) { + Application.getInstance().m_customSortModes.clear(); + Application.getInstance().m_customSortModes.putAll(modes); + } + public void setViewMode(String viewMode) { SharedPreferences.Editor editor = m_prefs.edit(); editor.putString("view_mode", viewMode); -- cgit v1.2.3