diff --git a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseBoardManager.java b/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseBoardManager.java index 4eb0c909..81260597 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseBoardManager.java +++ b/Clover/app/src/main/java/org/floens/chan/core/database/DatabaseBoardManager.java @@ -89,7 +89,7 @@ public class DatabaseBoardManager { }; } - public Callable createAll(final Site site, final List boards) { + public Callable createAll(final Site site, final List boards) { return () -> { long start = Time.startTiming(); @@ -146,7 +146,7 @@ public class DatabaseBoardManager { Time.endTiming("createAll boards " + toCreate.size() + ", " + toUpdate.size(), start); - return null; + return !toCreate.isEmpty() || !toUpdate.isEmpty(); }; } diff --git a/Clover/app/src/main/java/org/floens/chan/core/presenter/BoardSetupPresenter.java b/Clover/app/src/main/java/org/floens/chan/core/presenter/BoardSetupPresenter.java index b6c1e74c..4b12d241 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/presenter/BoardSetupPresenter.java +++ b/Clover/app/src/main/java/org/floens/chan/core/presenter/BoardSetupPresenter.java @@ -20,6 +20,7 @@ package org.floens.chan.core.presenter; import org.floens.chan.core.manager.BoardManager; import org.floens.chan.core.model.orm.Board; +import org.floens.chan.core.repository.BoardRepository; import org.floens.chan.core.site.Site; import org.floens.chan.ui.helper.BoardHelper; import org.floens.chan.utils.BackgroundUtils; @@ -29,12 +30,14 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Observable; +import java.util.Observer; import java.util.concurrent.Executor; import java.util.concurrent.Executors; import javax.inject.Inject; -public class BoardSetupPresenter { +public class BoardSetupPresenter implements Observer { private BoardManager boardManager; private Callback callback; @@ -44,12 +47,16 @@ public class BoardSetupPresenter { private List savedBoards; + private BoardRepository.SitesBoards allBoardsObservable; + private Executor executor = Executors.newSingleThreadExecutor(); private BackgroundUtils.Cancelable suggestionCall; private List suggestions = new ArrayList<>(); private List selectedSuggestions = new LinkedList<>(); + private String suggestionsQuery = null; + @Inject public BoardSetupPresenter(BoardManager boardManager) { this.boardManager = boardManager; @@ -61,10 +68,25 @@ public class BoardSetupPresenter { savedBoards = boardManager.getSiteSavedBoards(site); callback.setSavedBoards(savedBoards); + + allBoardsObservable = boardManager.getAllBoardsObservable(); + allBoardsObservable.addObserver(this); } public void destroy() { boardManager.updateBoardOrders(savedBoards); + + allBoardsObservable.deleteObserver(this); + } + + @Override + public void update(Observable o, Object arg) { + if (o == allBoardsObservable) { + if (addCallback != null) { + // Update the boards shown in the query. + queryBoardsWithQueryAndShowInAddDialog(); + } + } } public void addClicked() { @@ -74,13 +96,14 @@ public class BoardSetupPresenter { public void bindAddDialog(AddCallback addCallback) { this.addCallback = addCallback; - searchEntered(null); + queryBoardsWithQueryAndShowInAddDialog(); } public void unbindAddDialog() { this.addCallback = null; suggestions.clear(); selectedSuggestions.clear(); + suggestionsQuery = null; } public void onSelectAllClicked() { @@ -88,7 +111,7 @@ public class BoardSetupPresenter { suggestion.checked = true; selectedSuggestions.add(suggestion.getCode()); } - addCallback.updateSuggestions(); + addCallback.suggestionsWereChanged(); } public void onSuggestionClicked(BoardSuggestion suggestion) { @@ -165,12 +188,17 @@ public class BoardSetupPresenter { } public void searchEntered(String userQuery) { + suggestionsQuery = userQuery; + queryBoardsWithQueryAndShowInAddDialog(); + } + + private void queryBoardsWithQueryAndShowInAddDialog() { if (suggestionCall != null) { suggestionCall.cancel(); } - final String query = userQuery == null ? null : - userQuery.replace("/", "").replace("\\", ""); + final String query = suggestionsQuery == null ? null : + suggestionsQuery.replace("/", "").replace("\\", ""); suggestionCall = BackgroundUtils.runWithExecutor(executor, () -> { List suggestions = new ArrayList<>(); if (site.boardsType().canList) { @@ -210,7 +238,7 @@ public class BoardSetupPresenter { updateSuggestions(result); if (addCallback != null) { - addCallback.updateSuggestions(); + addCallback.suggestionsWereChanged(); } }); } @@ -240,7 +268,7 @@ public class BoardSetupPresenter { } public interface AddCallback { - void updateSuggestions(); + void suggestionsWereChanged(); } public static class BoardSuggestion { diff --git a/Clover/app/src/main/java/org/floens/chan/core/repository/BoardRepository.java b/Clover/app/src/main/java/org/floens/chan/core/repository/BoardRepository.java index 7b5d405c..58a47a33 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/repository/BoardRepository.java +++ b/Clover/app/src/main/java/org/floens/chan/core/repository/BoardRepository.java @@ -23,6 +23,7 @@ import org.floens.chan.core.database.DatabaseBoardManager; import org.floens.chan.core.database.DatabaseManager; import org.floens.chan.core.model.orm.Board; import org.floens.chan.core.site.Site; +import org.floens.chan.utils.Logger; import org.floens.chan.utils.Time; import java.util.ArrayList; @@ -35,6 +36,8 @@ import javax.inject.Singleton; @Singleton public class BoardRepository implements Observer { + private static final String TAG = "BoardRepository"; + private final DatabaseManager databaseManager; private final DatabaseBoardManager databaseBoardManager; @@ -68,7 +71,11 @@ public class BoardRepository implements Observer { } public void updateAvailableBoardsForSite(Site site, List availableBoards) { - databaseManager.runTask(databaseBoardManager.createAll(site, availableBoards)); + boolean changed = databaseManager.runTask(databaseBoardManager.createAll(site, availableBoards)); + Logger.d(TAG, "updateAvailableBoardsForSite changed = " + changed); + if (changed) { + updateObservablesAsync(); + } } public Board getFromCode(Site site, String code) { diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/BoardAddLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/BoardAddLayout.java index 1e455344..fc03ca77 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/BoardAddLayout.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/layout/BoardAddLayout.java @@ -110,7 +110,7 @@ public class BoardAddLayout extends LinearLayout implements SearchLayout.SearchL } @Override - public void updateSuggestions() { + public void suggestionsWereChanged() { suggestionsAdapter.notifyDataSetChanged(); }