From 35a37ab09dfb555c09925066eec416b517e418df Mon Sep 17 00:00:00 2001 From: Floens Date: Tue, 19 May 2015 21:01:00 +0200 Subject: [PATCH] Save the order of pins --- .../floens/chan/core/manager/WatchManager.java | 10 ++++++++++ .../java/org/floens/chan/core/model/Pin.java | 3 +++ .../floens/chan/database/DatabaseHelper.java | 10 +++++++++- .../org/floens/chan/ui/adapter/PinAdapter.java | 17 +++++++---------- docs/database.txt | 3 +++ 5 files changed, 32 insertions(+), 11 deletions(-) diff --git a/Clover/app/src/main/java/org/floens/chan/core/manager/WatchManager.java b/Clover/app/src/main/java/org/floens/chan/core/manager/WatchManager.java index f019ed6d..4be75a05 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/manager/WatchManager.java +++ b/Clover/app/src/main/java/org/floens/chan/core/manager/WatchManager.java @@ -31,6 +31,7 @@ import org.floens.chan.utils.Logger; import java.util.ArrayList; import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -43,6 +44,13 @@ public class WatchManager { private static final String TAG = "WatchManager"; private static final int FOREGROUND_TIME = 5; + private static final Comparator SORT_PINS = new Comparator() { + @Override + public int compare(Pin lhs, Pin rhs) { + return lhs.order - rhs.order; + } + }; + private final Context context; private final List pins; private ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); @@ -52,6 +60,7 @@ public class WatchManager { this.context = context; pins = Chan.getDatabaseManager().getPinned(); + Collections.sort(pins, SORT_PINS); EventBus.getDefault().register(this); @@ -121,6 +130,7 @@ public class WatchManager { } } + pin.order = pins.size(); pins.add(pin); Chan.getDatabaseManager().addPin(pin); diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/Pin.java b/Clover/app/src/main/java/org/floens/chan/core/model/Pin.java index 6f74d7f5..bc71265b 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/model/Pin.java +++ b/Clover/app/src/main/java/org/floens/chan/core/model/Pin.java @@ -51,6 +51,9 @@ public class Pin { @DatabaseField public String thumbnailUrl = null; + @DatabaseField + public int order = -1; + private PinWatcher pinWatcher; public int getNewPostCount() { diff --git a/Clover/app/src/main/java/org/floens/chan/database/DatabaseHelper.java b/Clover/app/src/main/java/org/floens/chan/database/DatabaseHelper.java index b6f4850e..71efa362 100644 --- a/Clover/app/src/main/java/org/floens/chan/database/DatabaseHelper.java +++ b/Clover/app/src/main/java/org/floens/chan/database/DatabaseHelper.java @@ -40,7 +40,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { private static final String TAG = "DatabaseHelper"; private static final String DATABASE_NAME = "ChanDB"; - private static final int DATABASE_VERSION = 13; + private static final int DATABASE_VERSION = 14; public Dao pinDao; public Dao loadableDao; @@ -127,6 +127,14 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper { e.printStackTrace(); } } + + if (oldVersion < 14) { + try { + pinDao.executeRawNoArgs("ALTER TABLE pin ADD COLUMN \"order\" INTEGER;"); + } catch (SQLException e) { + e.printStackTrace(); + } + } } public void reset() { diff --git a/Clover/app/src/main/java/org/floens/chan/ui/adapter/PinAdapter.java b/Clover/app/src/main/java/org/floens/chan/ui/adapter/PinAdapter.java index 9c4e56e0..457d838f 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/adapter/PinAdapter.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/adapter/PinAdapter.java @@ -134,19 +134,12 @@ public class PinAdapter extends RecyclerView.Adapter im public void onPinAdded(Pin pin) { pins.add(pin); - notifyItemInserted(pins.size() - 1 + PIN_OFFSET); + notifyDataSetChanged(); } public void onPinRemoved(Pin pin) { - // TODO: this is a workaround for recyclerview crashing when the last item is removed, remove this when it is fixed - if (pins.size() == 1) { - pins.remove(pin); - notifyDataSetChanged(); - } else { - int location = pins.indexOf(pin); - pins.remove(pin); - notifyItemRemoved(location + PIN_OFFSET); - } + pins.remove(pin); + notifyDataSetChanged(); } public void onPinChanged(RecyclerView recyclerView, Pin pin) { @@ -189,6 +182,10 @@ public class PinAdapter extends RecyclerView.Adapter im @Override public void movingDone() { + for (int i = 0; i < pins.size(); i++) { + Pin pin = pins.get(i); + pin.order = i; + } } public void updatePinViewHolder(PinViewHolder holder, Pin pin) { diff --git a/docs/database.txt b/docs/database.txt index 9f82538f..0f46790d 100644 --- a/docs/database.txt +++ b/docs/database.txt @@ -33,3 +33,6 @@ Changes in version 13: ALTER TABLE pin ADD COLUMN isError SMALLINT; ALTER TABLE board ADD COLUMN thumbnailUrl VARCHAR; + +Changes in version 14: +ALTER TABLE pin ADD COLUMN order INTEGER;