board setup: changes to how ordering is saved.

we now keep the saved boards list in memory and flush all orders when
the controller is closed. also fixes an issue where the order of the
suggestions wasn't the same as it would get added.
refactor-toolbar
Floens 8 years ago
parent a6d5805683
commit 58f47637ba
  1. 27
      Clover/app/src/main/java/org/floens/chan/core/database/DatabaseBoardManager.java
  2. 19
      Clover/app/src/main/java/org/floens/chan/core/manager/BoardManager.java
  3. 2
      Clover/app/src/main/java/org/floens/chan/core/model/orm/Board.java
  4. 58
      Clover/app/src/main/java/org/floens/chan/core/presenter/BoardSetupPresenter.java
  5. 2
      Clover/app/src/main/java/org/floens/chan/core/site/SiteManager.java
  6. 18
      Clover/app/src/main/java/org/floens/chan/ui/controller/BoardSetupController.java

@ -1,6 +1,9 @@
package org.floens.chan.core.database;
import com.j256.ormlite.stmt.PreparedUpdate;
import com.j256.ormlite.stmt.QueryBuilder;
import com.j256.ormlite.stmt.SelectArg;
import com.j256.ormlite.stmt.UpdateBuilder;
import org.floens.chan.core.model.orm.Board;
import org.floens.chan.core.site.Site;
@ -26,9 +29,9 @@ public class DatabaseBoardManager {
.and().eq("value", board.code);
Board existing = q.queryForFirst();
if (existing != null) {
existing.update(board);
existing.updateExcudingUserFields(board);
helper.boardsDao.update(existing);
board.update(existing);
board.updateExcudingUserFields(existing);
} else {
helper.boardsDao.create(board);
}
@ -45,12 +48,22 @@ public class DatabaseBoardManager {
};
}
public Callable<Void> updateOrders(final List<Board> boards, final int fromOrder) {
public Callable<Void> updateOrders(final List<Board> boards) {
return () -> {
SelectArg id = new SelectArg();
SelectArg order = new SelectArg();
UpdateBuilder<Board, Integer> updateBuilder = helper.boardsDao.updateBuilder();
updateBuilder.where().eq("id", id);
updateBuilder.updateColumnValue("order", order);
PreparedUpdate<Board> statement = updateBuilder.prepare();
for (int i = 0; i < boards.size(); i++) {
Board board = boards.get(i);
board.order = fromOrder + i;
helper.boardsDao.update(board);
id.setValue(board.id);
order.setValue(i);
helper.boardsDao.update(statement);
}
return null;
@ -66,9 +79,9 @@ public class DatabaseBoardManager {
.and().eq("value", board.code);
Board existing = q.queryForFirst();
if (existing != null) {
existing.update(board);
existing.updateExcudingUserFields(board);
helper.boardsDao.update(existing);
board.update(existing);
board.updateExcudingUserFields(existing);
} else {
helper.boardsDao.create(board);
}

@ -60,7 +60,7 @@ public class BoardManager {
public BoardManager(DatabaseManager databaseManager) {
this.databaseManager = databaseManager;
updateSavedBoards();
updateSavedBoardsAndNotify();
}
public void createAll(List<Board> boards) {
@ -105,26 +105,19 @@ public class BoardManager {
setSaved(board, false);
}
public void updateBoardOrder(Board board, int order) {
board.order = order;
public void updateBoardOrders(List<Board> boards) {
databaseManager.runTask(databaseManager.getDatabaseBoardManager()
.updateIncludingUserFields(board));
updateSavedBoards();
}
public void updateBoardOrders(List<Board> boards, int fromOrder) {
databaseManager.runTask(databaseManager.getDatabaseBoardManager()
.updateOrders(boards, fromOrder));
updateSavedBoards();
.updateOrders(boards));
updateSavedBoardsAndNotify();
}
private void setSaved(Board board, boolean saved) {
board.saved = saved;
databaseManager.runTask(databaseManager.getDatabaseBoardManager().updateIncludingUserFields(board));
updateSavedBoards();
updateSavedBoardsAndNotify();
}
private void updateSavedBoards() {
private void updateSavedBoardsAndNotify() {
sitesWithSavedBoards.clear();
for (Site site : Sites.allSites()) {
List<Board> siteBoards = getSiteSavedBoards(site);

@ -173,7 +173,7 @@ public class Board implements SiteReference {
*
* @param o other board to update from.
*/
public void update(Board o) {
public void updateExcudingUserFields(Board o) {
siteId = o.siteId;
site = o.site;
name = o.name;

@ -25,9 +25,10 @@ import org.floens.chan.ui.helper.BoardHelper;
import org.floens.chan.utils.BackgroundUtils;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.Map;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
@ -47,7 +48,7 @@ public class BoardSetupPresenter {
private BackgroundUtils.Cancelable suggestionCall;
private List<BoardSuggestion> suggestions = new ArrayList<>();
private Set<String> selectedSuggestions = new HashSet<>();
private List<String> selectedSuggestions = new LinkedList<>();
@Inject
public BoardSetupPresenter(BoardManager boardManager) {
@ -58,10 +59,14 @@ public class BoardSetupPresenter {
this.callback = callback;
this.site = site;
updateSavedBoards();
savedBoards = boardManager.getSiteSavedBoards(site);
callback.setSavedBoards(savedBoards);
}
public void destroy() {
boardManager.updateBoardOrders(savedBoards);
}
public void addClicked() {
callback.showAddDialog();
}
@ -103,10 +108,16 @@ public class BoardSetupPresenter {
int count = 0;
if (site.boardsType() == Site.BoardsType.DYNAMIC) {
for (Board board : boardManager.getSiteBoards(site)) {
if (selectedSuggestions.contains(board.code)) {
List<Board> siteBoards = boardManager.getSiteBoards(site);
Map<String, Board> siteBoardsByCode = new HashMap<>();
for (Board siteBoard : siteBoards) {
siteBoardsByCode.put(siteBoard.code, siteBoard);
}
for (String selectedSuggestion : selectedSuggestions) {
Board board = siteBoardsByCode.get(selectedSuggestion);
if (board != null) {
boardManager.saveBoard(board);
boardManager.updateBoardOrder(board, savedBoards.size());
savedBoards.add(board);
count++;
}
}
@ -114,12 +125,12 @@ public class BoardSetupPresenter {
for (String suggestion : selectedSuggestions) {
Board board = site.createBoard(suggestion, suggestion);
boardManager.saveBoard(board);
boardManager.updateBoardOrder(board, savedBoards.size());
savedBoards.add(board);
count++;
}
}
updateSavedBoards();
setOrder();
callback.setSavedBoards(savedBoards);
callback.boardsWereAdded(count);
}
@ -127,13 +138,7 @@ public class BoardSetupPresenter {
public void move(int from, int to) {
Board item = savedBoards.remove(from);
savedBoards.add(to, item);
int min = Math.min(from, to);
int max = Math.max(from, to);
for (int i = min; i <= max; i++) {
boardManager.updateBoardOrder(savedBoards.get(i), i);
}
setOrder();
callback.setSavedBoards(savedBoards);
}
@ -142,10 +147,7 @@ public class BoardSetupPresenter {
Board board = savedBoards.remove(position);
boardManager.unsaveBoard(board);
boardManager.updateBoardOrders(
savedBoards.subList(position, savedBoards.size()), position);
updateSavedBoards();
setOrder();
callback.setSavedBoards(savedBoards);
callback.showRemovedSnackbar(board);
@ -153,9 +155,8 @@ public class BoardSetupPresenter {
public void undoRemoveBoard(Board board) {
boardManager.saveBoard(board);
// TODO
boardManager.updateBoardOrder(board, savedBoards.size());
updateSavedBoards();
savedBoards.add(board.order, board);
setOrder();
callback.setSavedBoards(savedBoards);
}
@ -210,10 +211,6 @@ public class BoardSetupPresenter {
});
}
private void updateSavedBoards() {
savedBoards = new ArrayList<>(boardManager.getSiteSavedBoards(site));
}
private void updateSuggestions(List<BoardSuggestion> suggestions) {
this.suggestions = suggestions;
for (BoardSuggestion suggestion : this.suggestions) {
@ -221,6 +218,13 @@ public class BoardSetupPresenter {
}
}
private void setOrder() {
for (int i = 0; i < savedBoards.size(); i++) {
Board b = savedBoards.get(i);
b.order = i;
}
}
public interface Callback {
void showAddDialog();

@ -135,8 +135,6 @@ public class SiteManager {
config.external = false;
siteRepository.create(config, settings);
loadSites();
}
private Site fromModel(SiteModel siteModel) {

@ -20,7 +20,6 @@ package org.floens.chan.ui.controller;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.drawable.Drawable;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
@ -130,6 +129,7 @@ public class BoardSetupController extends Controller implements View.OnClickList
@Override
public void onDestroy() {
super.onDestroy();
presenter.destroy();
}
public void setSite(Site site) {
@ -154,12 +154,7 @@ public class BoardSetupController extends Controller implements View.OnClickList
AlertDialog dialog = new AlertDialog.Builder(context)
.setView(boardAddLayout)
// .setTitle(R.string.setup_board_add)
.setPositiveButton(R.string.add, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
boardAddLayout.onPositiveClicked();
}
})
.setPositiveButton(R.string.add, (dialog1, which) -> boardAddLayout.onPositiveClicked())
.setNegativeButton(R.string.cancel, null)
.create();
@ -183,12 +178,7 @@ public class BoardSetupController extends Controller implements View.OnClickList
Snackbar.LENGTH_LONG);
fixSnackbarText(context, snackbar);
snackbar.setAction(R.string.undo, new View.OnClickListener() {
@Override
public void onClick(View v) {
presenter.undoRemoveBoard(board);
}
});
snackbar.setAction(R.string.undo, v -> presenter.undoRemoveBoard(board));
snackbar.show();
}
@ -232,7 +222,7 @@ public class BoardSetupController extends Controller implements View.OnClickList
public void onBindViewHolder(SavedBoardCell holder, int position) {
Board savedBoard = savedBoards.get(position);
holder.text.setText(BoardHelper.getName(savedBoard));
holder.description.setText(BoardHelper.getDescription(savedBoard));
holder.description.setText(savedBoard.order + " - " + BoardHelper.getDescription(savedBoard));
}
@Override

Loading…
Cancel
Save