add select all to board add layout

rename runtask methods
uptimize board order call
refactor-toolbar
Floens 8 years ago
parent 81c8982b6d
commit 7391303d35
  1. 14
      Clover/app/src/main/java/org/floens/chan/core/database/DatabaseBoardManager.java
  2. 2
      Clover/app/src/main/java/org/floens/chan/core/database/DatabaseLoadableManager.java
  3. 20
      Clover/app/src/main/java/org/floens/chan/core/database/DatabaseManager.java
  4. 22
      Clover/app/src/main/java/org/floens/chan/core/manager/BoardManager.java
  5. 8
      Clover/app/src/main/java/org/floens/chan/core/manager/FilterEngine.java
  6. 10
      Clover/app/src/main/java/org/floens/chan/core/manager/WatchManager.java
  7. 19
      Clover/app/src/main/java/org/floens/chan/core/presenter/BoardSetupPresenter.java
  8. 2
      Clover/app/src/main/java/org/floens/chan/core/presenter/ReplyPresenter.java
  9. 2
      Clover/app/src/main/java/org/floens/chan/core/presenter/SiteSetupPresenter.java
  10. 8
      Clover/app/src/main/java/org/floens/chan/core/presenter/ThreadPresenter.java
  11. 6
      Clover/app/src/main/java/org/floens/chan/core/site/SiteRepository.java
  12. 10
      Clover/app/src/main/java/org/floens/chan/ui/controller/BoardSetupController.java
  13. 2
      Clover/app/src/main/java/org/floens/chan/ui/controller/FiltersController.java
  14. 8
      Clover/app/src/main/java/org/floens/chan/ui/controller/HistoryController.java
  15. 13
      Clover/app/src/main/java/org/floens/chan/ui/layout/BoardAddLayout.java
  16. 17
      Clover/app/src/main/res/layout/layout_board_add.xml
  17. 1
      Clover/app/src/main/res/values/strings.xml

@ -37,7 +37,7 @@ public class DatabaseBoardManager {
}; };
} }
public Callable<Void> update(final Board board) { public Callable<Void> updateIncludingUserFields(final Board board) {
return () -> { return () -> {
helper.boardsDao.update(board); helper.boardsDao.update(board);
@ -45,6 +45,18 @@ public class DatabaseBoardManager {
}; };
} }
public Callable<Void> updateOrders(final List<Board> boards, final int fromOrder) {
return () -> {
for (int i = 0; i < boards.size(); i++) {
Board board = boards.get(i);
board.order = fromOrder + i;
helper.boardsDao.update(board);
}
return null;
};
}
public Callable<Void> createAll(final List<Board> boards) { public Callable<Void> createAll(final List<Board> boards) {
return () -> { return () -> {
// TODO: optimize // TODO: optimize

@ -94,7 +94,7 @@ public class DatabaseLoadableManager {
// We only cache THREAD loadables in the db // We only cache THREAD loadables in the db
if (loadable.isThreadMode()) { if (loadable.isThreadMode()) {
long start = Time.startTiming(); long start = Time.startTiming();
Loadable result = databaseManager.runTaskSync(getLoadable(loadable)); Loadable result = databaseManager.runTask(getLoadable(loadable));
Time.endTiming("get loadable from db " + loadable.boardCode, start); Time.endTiming("get loadable from db " + loadable.boardCode, start);
return result; return result;
} else { } else {

@ -52,8 +52,8 @@ import de.greenrobot.event.EventBus;
/** /**
* The central point for database related access.<br> * The central point for database related access.<br>
* <b>All database queries are run on a single database thread</b>, therefor all functions return a * <b>All database queries are run on a single database thread</b>, therefor all functions return a
* {@link Callable} that needs to be queued on either {@link #runTask(Callable)}, * {@link Callable} that needs to be queued on either {@link #runTaskAsync(Callable)},
* {@link #runTask(Callable, TaskResult)} or {@link #runTaskSync(Callable)}.<br> * {@link #runTaskAsync(Callable, TaskResult)} or {@link #runTask(Callable)}.<br>
* You often want the sync flavour for queries that return data, it waits for the task to be finished on the other thread.<br> * You often want the sync flavour for queries that return data, it waits for the task to be finished on the other thread.<br>
* Use the async versions when you don't care when the query is done. * Use the async versions when you don't care when the query is done.
*/ */
@ -126,7 +126,7 @@ public class DatabaseManager {
// Called when the app changes foreground state // Called when the app changes foreground state
public void onEvent(Chan.ForegroundChangedMessage message) { public void onEvent(Chan.ForegroundChangedMessage message) {
if (!message.inForeground) { if (!message.inForeground) {
runTask(databaseLoadableManager.flush()); runTaskAsync(databaseLoadableManager.flush());
} }
} }
@ -134,10 +134,10 @@ public class DatabaseManager {
loadThreadHides(); loadThreadHides();
// Loads data into fields. // Loads data into fields.
runTaskSync(databaseSavedReplyManager.load()); runTask(databaseSavedReplyManager.load());
// Only trims. // Only trims.
runTask(databaseHistoryManager.load()); runTaskAsync(databaseHistoryManager.load());
} }
/** /**
@ -268,15 +268,15 @@ public class DatabaseManager {
} }
} }
public <T> void runTask(final Callable<T> taskCallable) { public <T> void runTaskAsync(final Callable<T> taskCallable) {
runTask(taskCallable, null); runTaskAsync(taskCallable, null);
} }
public <T> void runTask(final Callable<T> taskCallable, final TaskResult<T> taskResult) { public <T> void runTaskAsync(final Callable<T> taskCallable, final TaskResult<T> taskResult) {
Future<T> f = executeTask(taskCallable, taskResult); executeTask(taskCallable, taskResult);
} }
public <T> T runTaskSync(final Callable<T> taskCallable) { public <T> T runTask(final Callable<T> taskCallable) {
try { try {
return executeTask(taskCallable, null).get(); return executeTask(taskCallable, null).get();
} catch (InterruptedException | ExecutionException e) { } catch (InterruptedException | ExecutionException e) {

@ -64,7 +64,7 @@ public class BoardManager {
} }
public void createAll(List<Board> boards) { public void createAll(List<Board> boards) {
databaseManager.runTaskSync( databaseManager.runTask(
databaseManager.getDatabaseBoardManager().createAll(boards)); databaseManager.getDatabaseBoardManager().createAll(boards));
} }
@ -77,17 +77,17 @@ public class BoardManager {
* @return the board code with the same site and board code, or {@code null} if not found. * @return the board code with the same site and board code, or {@code null} if not found.
*/ */
public Board getBoard(Site site, String code) { public Board getBoard(Site site, String code) {
return databaseManager.runTaskSync( return databaseManager.runTask(
databaseManager.getDatabaseBoardManager().getBoard(site, code)); databaseManager.getDatabaseBoardManager().getBoard(site, code));
} }
public List<Board> getSiteBoards(Site site) { public List<Board> getSiteBoards(Site site) {
return databaseManager.runTaskSync( return databaseManager.runTask(
databaseManager.getDatabaseBoardManager().getSiteBoards(site)); databaseManager.getDatabaseBoardManager().getSiteBoards(site));
} }
public List<Board> getSiteSavedBoards(Site site) { public List<Board> getSiteSavedBoards(Site site) {
List<Board> boards = databaseManager.runTaskSync( List<Board> boards = databaseManager.runTask(
databaseManager.getDatabaseBoardManager().getSiteSavedBoards(site)); databaseManager.getDatabaseBoardManager().getSiteSavedBoards(site));
Collections.sort(boards, ORDER_SORT); Collections.sort(boards, ORDER_SORT);
return boards; return boards;
@ -107,14 +107,20 @@ public class BoardManager {
public void updateBoardOrder(Board board, int order) { public void updateBoardOrder(Board board, int order) {
board.order = order; board.order = order;
// not sync, does not update observable. databaseManager.runTask(databaseManager.getDatabaseBoardManager()
databaseManager.runTask(databaseManager.getDatabaseBoardManager().update(board), .updateIncludingUserFields(board));
result -> updateSavedBoards()); updateSavedBoards();
}
public void updateBoardOrders(List<Board> boards, int fromOrder) {
databaseManager.runTask(databaseManager.getDatabaseBoardManager()
.updateOrders(boards, fromOrder));
updateSavedBoards();
} }
private void setSaved(Board board, boolean saved) { private void setSaved(Board board, boolean saved) {
board.saved = saved; board.saved = saved;
databaseManager.runTaskSync(databaseManager.getDatabaseBoardManager().update(board)); databaseManager.runTask(databaseManager.getDatabaseBoardManager().updateIncludingUserFields(board));
updateSavedBoards(); updateSavedBoards();
} }

@ -84,15 +84,15 @@ public class FilterEngine {
} }
public void deleteFilter(Filter filter) { public void deleteFilter(Filter filter) {
databaseManager.runTaskSync(databaseFilterManager.deleteFilter(filter)); databaseManager.runTask(databaseFilterManager.deleteFilter(filter));
update(); update();
} }
public void createOrUpdateFilter(Filter filter) { public void createOrUpdateFilter(Filter filter) {
if (filter.id == 0) { if (filter.id == 0) {
databaseManager.runTaskSync(databaseFilterManager.createFilter(filter)); databaseManager.runTask(databaseFilterManager.createFilter(filter));
} else { } else {
databaseManager.runTaskSync(databaseFilterManager.updateFilter(filter)); databaseManager.runTask(databaseFilterManager.updateFilter(filter));
} }
update(); update();
} }
@ -261,7 +261,7 @@ public class FilterEngine {
} }
private void update() { private void update() {
List<Filter> filters = databaseManager.runTaskSync(databaseFilterManager.getFilters()); List<Filter> filters = databaseManager.runTask(databaseFilterManager.getFilters());
List<Filter> enabled = new ArrayList<>(); List<Filter> enabled = new ArrayList<>();
for (Filter filter : filters) { for (Filter filter : filters) {
if (filter.enabled) { if (filter.enabled) {

@ -141,7 +141,7 @@ public class WatchManager {
this.chanLoaderFactory = chanLoaderFactory; this.chanLoaderFactory = chanLoaderFactory;
databasePinManager = databaseManager.getDatabasePinManager(); databasePinManager = databaseManager.getDatabasePinManager();
pins = databaseManager.runTaskSync(databasePinManager.getPins()); pins = databaseManager.runTask(databasePinManager.getPins());
Collections.sort(pins, SORT_PINS); Collections.sort(pins, SORT_PINS);
handler = new Handler(Looper.getMainLooper(), new Handler.Callback() { handler = new Handler(Looper.getMainLooper(), new Handler.Callback() {
@ -184,7 +184,7 @@ public class WatchManager {
} }
pins.add(pin); pins.add(pin);
applyOrder(); applyOrder();
databaseManager.runTaskSync(databasePinManager.createPin(pin)); databaseManager.runTask(databasePinManager.createPin(pin));
updateState(); updateState();
@ -198,7 +198,7 @@ public class WatchManager {
destroyPinWatcher(pin); destroyPinWatcher(pin);
databaseManager.runTaskSync(databasePinManager.deletePin(pin)); databaseManager.runTask(databasePinManager.deletePin(pin));
// Update the new orders // Update the new orders
applyOrder(); applyOrder();
updatePinsInDatabase(); updatePinsInDatabase();
@ -209,7 +209,7 @@ public class WatchManager {
} }
public void updatePin(Pin pin) { public void updatePin(Pin pin) {
databaseManager.runTaskSync(databasePinManager.updatePin(pin)); databaseManager.runTask(databasePinManager.updatePin(pin));
updateState(); updateState();
@ -431,7 +431,7 @@ public class WatchManager {
} }
private void updatePinsInDatabase() { private void updatePinsInDatabase() {
databaseManager.runTask(databasePinManager.updatePins(pins)); databaseManager.runTaskAsync(databasePinManager.updatePins(pins));
} }
private Boolean isWatchingSettingEnabled() { private Boolean isWatchingSettingEnabled() {

@ -78,6 +78,14 @@ public class BoardSetupPresenter {
selectedSuggestions.clear(); selectedSuggestions.clear();
} }
public void onSelectAllClicked() {
for (BoardSuggestion suggestion : suggestions) {
suggestion.checked = true;
selectedSuggestions.add(suggestion.getCode());
}
addCallback.updateSuggestions();
}
public void onSuggestionClicked(BoardSuggestion suggestion) { public void onSuggestionClicked(BoardSuggestion suggestion) {
suggestion.checked = !suggestion.checked; suggestion.checked = !suggestion.checked;
if (suggestion.checked) { if (suggestion.checked) {
@ -134,9 +142,8 @@ public class BoardSetupPresenter {
Board board = savedBoards.remove(position); Board board = savedBoards.remove(position);
boardManager.unsaveBoard(board); boardManager.unsaveBoard(board);
for (int i = position; i < savedBoards.size(); i++) { boardManager.updateBoardOrders(
boardManager.updateBoardOrder(savedBoards.get(i), i); savedBoards.subList(position, savedBoards.size()), position);
}
updateSavedBoards(); updateSavedBoards();
callback.setSavedBoards(savedBoards); callback.setSavedBoards(savedBoards);
@ -152,10 +159,6 @@ public class BoardSetupPresenter {
callback.setSavedBoards(savedBoards); callback.setSavedBoards(savedBoards);
} }
public void done() {
callback.finish();
}
public void searchEntered(String userQuery) { public void searchEntered(String userQuery) {
if (suggestionCall != null) { if (suggestionCall != null) {
suggestionCall.cancel(); suggestionCall.cancel();
@ -225,8 +228,6 @@ public class BoardSetupPresenter {
void showRemovedSnackbar(Board board); void showRemovedSnackbar(Board board);
void finish();
void boardsWereAdded(int count); void boardsWereAdded(int count);
} }

@ -218,7 +218,7 @@ public class ReplyPresenter implements AuthenticationLayoutCallback, ImagePickDe
SavedReply savedReply = SavedReply.fromSiteBoardNoPassword( SavedReply savedReply = SavedReply.fromSiteBoardNoPassword(
loadable.site, loadable.board, replyResponse.postNo, replyResponse.password); loadable.site, loadable.board, replyResponse.postNo, replyResponse.password);
databaseManager.runTask(databaseManager.getDatabaseSavedReplyManager() databaseManager.runTaskAsync(databaseManager.getDatabaseSavedReplyManager()
.saveReply(savedReply)); .saveReply(savedReply));
switchPage(Page.INPUT, false); switchPage(Page.INPUT, false);

@ -36,7 +36,7 @@ public class SiteSetupPresenter {
private void setBoardCount(Callback callback, Site site) { private void setBoardCount(Callback callback, Site site) {
callback.setBoardCount( callback.setBoardCount(
databaseManager.runTaskSync( databaseManager.runTask(
databaseManager.getDatabaseBoardManager().getSiteSavedBoards(site) databaseManager.getDatabaseBoardManager().getSiteSavedBoards(site)
).size() ).size()
); );

@ -498,7 +498,7 @@ public class ThreadPresenter implements ChanLoader.ChanLoaderCallback, PostAdapt
case POST_OPTION_SAVE: case POST_OPTION_SAVE:
SavedReply savedReply = SavedReply.fromSiteBoardNoPassword( SavedReply savedReply = SavedReply.fromSiteBoardNoPassword(
post.board.site, post.board, post.no, ""); post.board.site, post.board, post.no, "");
databaseManager.runTask(databaseManager.getDatabaseSavedReplyManager().saveReply(savedReply)); databaseManager.runTaskAsync(databaseManager.getDatabaseSavedReplyManager().saveReply(savedReply));
break; break;
case POST_OPTION_PIN: case POST_OPTION_PIN:
Loadable pinLoadable = databaseManager.getDatabaseLoadableManager().get(Loadable.forThread(loadable.site, post.board, post.no)); Loadable pinLoadable = databaseManager.getDatabaseLoadableManager().get(Loadable.forThread(loadable.site, post.board, post.no));
@ -606,7 +606,7 @@ public class ThreadPresenter implements ChanLoader.ChanLoaderCallback, PostAdapt
public void deletePostConfirmed(Post post, boolean onlyImageDelete) { public void deletePostConfirmed(Post post, boolean onlyImageDelete) {
threadPresenterCallback.showDeleting(); threadPresenterCallback.showDeleting();
SavedReply reply = databaseManager.runTaskSync( SavedReply reply = databaseManager.runTask(
databaseManager.getDatabaseSavedReplyManager().findSavedReply(post.board, post.no) databaseManager.getDatabaseSavedReplyManager().findSavedReply(post.board, post.no)
); );
if (reply != null) { if (reply != null) {
@ -634,7 +634,7 @@ public class ThreadPresenter implements ChanLoader.ChanLoaderCallback, PostAdapt
} }
private void requestDeletePost(Post post) { private void requestDeletePost(Post post) {
SavedReply reply = databaseManager.runTaskSync( SavedReply reply = databaseManager.runTask(
databaseManager.getDatabaseSavedReplyManager().findSavedReply(post.board, post.no) databaseManager.getDatabaseSavedReplyManager().findSavedReply(post.board, post.no)
); );
if (reply != null) { if (reply != null) {
@ -698,7 +698,7 @@ public class ThreadPresenter implements ChanLoader.ChanLoaderCallback, PostAdapt
history.loadable = loadable; history.loadable = loadable;
PostImage image = chanLoader.getThread().op.image; PostImage image = chanLoader.getThread().op.image;
history.thumbnailUrl = image == null ? "" : image.thumbnailUrl.toString(); history.thumbnailUrl = image == null ? "" : image.thumbnailUrl.toString();
databaseManager.runTask(databaseManager.getDatabaseHistoryManager().addHistory(history)); databaseManager.runTaskAsync(databaseManager.getDatabaseHistoryManager().addHistory(history));
} }
} }

@ -18,18 +18,18 @@ public class SiteRepository {
} }
public List<SiteModel> all() { public List<SiteModel> all() {
return databaseManager.runTaskSync(databaseManager.getDatabaseSiteManager().getAll()); return databaseManager.runTask(databaseManager.getDatabaseSiteManager().getAll());
} }
public SiteModel create(SiteConfig config, SiteUserSettings userSettings) { public SiteModel create(SiteConfig config, SiteUserSettings userSettings) {
SiteModel siteModel = new SiteModel(); SiteModel siteModel = new SiteModel();
siteModel.storeConfigFields(config, userSettings); siteModel.storeConfigFields(config, userSettings);
databaseManager.runTaskSync(databaseManager.getDatabaseSiteManager().add(siteModel)); databaseManager.runTask(databaseManager.getDatabaseSiteManager().add(siteModel));
return siteModel; return siteModel;
} }
public void setId(SiteModel siteModel, int id) { public void setId(SiteModel siteModel, int id) {
databaseManager.runTaskSync(databaseManager.getDatabaseSiteManager() databaseManager.runTask(databaseManager.getDatabaseSiteManager()
.updateId(siteModel, id)); .updateId(siteModel, id));
} }
} }

@ -127,6 +127,11 @@ public class BoardSetupController extends Controller implements View.OnClickList
presenter.create(this, site); presenter.create(this, site);
} }
@Override
public void onDestroy() {
super.onDestroy();
}
public void setSite(Site site) { public void setSite(Site site) {
this.site = site; this.site = site;
} }
@ -199,11 +204,6 @@ public class BoardSetupController extends Controller implements View.OnClickList
snackbar.show(); snackbar.show();
} }
@Override
public void finish() {
navigationController.popController();
}
private class SavedBoardsAdapter extends RecyclerView.Adapter<SavedBoardCell> { private class SavedBoardsAdapter extends RecyclerView.Adapter<SavedBoardCell> {
private List<Board> savedBoards; private List<Board> savedBoards;

@ -242,7 +242,7 @@ public class FiltersController extends Controller implements ToolbarMenuItem.Too
private void load() { private void load() {
sourceList.clear(); sourceList.clear();
sourceList.addAll(databaseManager.runTaskSync(databaseManager.getDatabaseFilterManager().getFilters())); sourceList.addAll(databaseManager.runTask(databaseManager.getDatabaseFilterManager().getFilters()));
filter(); filter();
} }

@ -133,7 +133,7 @@ public class HistoryController extends Controller implements CompoundButton.OnCh
.setPositiveButton(R.string.history_clear_confirm_button, new DialogInterface.OnClickListener() { .setPositiveButton(R.string.history_clear_confirm_button, new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
databaseManager.runTask(databaseHistoryManager.clearHistory()); databaseManager.runTaskAsync(databaseHistoryManager.clearHistory());
adapter.load(); adapter.load();
} }
}) })
@ -146,7 +146,7 @@ public class HistoryController extends Controller implements CompoundButton.OnCh
.setPositiveButton(R.string.saved_reply_clear_confirm_button, new DialogInterface.OnClickListener() { .setPositiveButton(R.string.saved_reply_clear_confirm_button, new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
databaseManager.runTask(databaseSavedReplyManager.clearSavedReplies()); databaseManager.runTaskAsync(databaseSavedReplyManager.clearSavedReplies());
} }
}) })
.show(); .show();
@ -166,7 +166,7 @@ public class HistoryController extends Controller implements CompoundButton.OnCh
} }
private void deleteHistory(History history) { private void deleteHistory(History history) {
databaseManager.runTaskSync(databaseHistoryManager.removeHistory(history)); databaseManager.runTask(databaseHistoryManager.removeHistory(history));
adapter.load(); adapter.load();
} }
@ -226,7 +226,7 @@ public class HistoryController extends Controller implements CompoundButton.OnCh
private void load() { private void load() {
if (!resultPending) { if (!resultPending) {
resultPending = true; resultPending = true;
databaseManager.runTask(databaseHistoryManager.getHistory(), this); databaseManager.runTaskAsync(databaseHistoryManager.getHistory(), this);
} }
} }

@ -25,6 +25,7 @@ import android.util.AttributeSet;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
@ -35,12 +36,13 @@ import org.floens.chan.core.presenter.BoardSetupPresenter;
import static org.floens.chan.utils.AndroidUtils.getAttrColor; import static org.floens.chan.utils.AndroidUtils.getAttrColor;
import static org.floens.chan.utils.AndroidUtils.getString; import static org.floens.chan.utils.AndroidUtils.getString;
public class BoardAddLayout extends LinearLayout implements SearchLayout.SearchLayoutCallback, BoardSetupPresenter.AddCallback { public class BoardAddLayout extends LinearLayout implements SearchLayout.SearchLayoutCallback, BoardSetupPresenter.AddCallback, View.OnClickListener {
private BoardSetupPresenter presenter; private BoardSetupPresenter presenter;
private SuggestionsAdapter suggestionsAdapter; private SuggestionsAdapter suggestionsAdapter;
private SearchLayout search; private SearchLayout search;
private Button checkAllButton;
private RecyclerView suggestionsRecycler; private RecyclerView suggestionsRecycler;
private AlertDialog dialog; private AlertDialog dialog;
@ -64,6 +66,7 @@ public class BoardAddLayout extends LinearLayout implements SearchLayout.SearchL
// View binding // View binding
search = findViewById(R.id.search); search = findViewById(R.id.search);
suggestionsRecycler = findViewById(R.id.suggestions); suggestionsRecycler = findViewById(R.id.suggestions);
checkAllButton = (Button) findViewById(R.id.select_all);
// Adapters // Adapters
suggestionsAdapter = new SuggestionsAdapter(); suggestionsAdapter = new SuggestionsAdapter();
@ -74,6 +77,7 @@ public class BoardAddLayout extends LinearLayout implements SearchLayout.SearchL
search.setTextColor(getAttrColor(getContext(), R.attr.text_color_primary)); search.setTextColor(getAttrColor(getContext(), R.attr.text_color_primary));
search.setHintColor(getAttrColor(getContext(), R.attr.text_color_hint)); search.setHintColor(getAttrColor(getContext(), R.attr.text_color_hint));
search.setClearButtonImage(R.drawable.ic_clear_black_24dp); search.setClearButtonImage(R.drawable.ic_clear_black_24dp);
checkAllButton.setOnClickListener(this);
suggestionsRecycler.setLayoutManager(new LinearLayoutManager(getContext())); suggestionsRecycler.setLayoutManager(new LinearLayoutManager(getContext()));
suggestionsRecycler.setAdapter(suggestionsAdapter); suggestionsRecycler.setAdapter(suggestionsAdapter);
@ -92,6 +96,13 @@ public class BoardAddLayout extends LinearLayout implements SearchLayout.SearchL
presenter.unbindAddDialog(); presenter.unbindAddDialog();
} }
@Override
public void onClick(View v) {
if (v == checkAllButton) {
presenter.onSelectAllClicked();
}
}
@Override @Override
public void onSearchEntered(String entered) { public void onSearchEntered(String entered) {
presenter.searchEntered(entered); presenter.searchEntered(entered);

@ -24,13 +24,28 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
android:paddingLeft="16dp" android:paddingLeft="16dp"
android:paddingRight="16dp"> android:paddingRight="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<org.floens.chan.ui.layout.SearchLayout <org.floens.chan.ui.layout.SearchLayout
android:id="@+id/search" android:id="@+id/search"
android:layout_width="match_parent" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingBottom="8dp" android:paddingBottom="8dp"
android:paddingTop="8dp" /> android:paddingTop="8dp" />
<Button
android:id="@+id/select_all"
style="?android:attr/borderlessButtonStyle"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="@string/setup_board_select_all" />
</LinearLayout>
<android.support.v7.widget.RecyclerView <android.support.v7.widget.RecyclerView
android:id="@+id/suggestions" android:id="@+id/suggestions"
android:layout_width="match_parent" android:layout_width="match_parent"

@ -189,6 +189,7 @@ Re-enable this permission in the app settings if you permanently disabled it."</
<string name="setup_board_add">Add board</string> <string name="setup_board_add">Add board</string>
<string name="setup_board_removed">Removed \'%s\'</string> <string name="setup_board_removed">Removed \'%s\'</string>
<string name="setup_board_added">%s added</string> <string name="setup_board_added">%s added</string>
<string name="setup_board_select_all">Select all</string>
<string name="filter_summary_all_boards">all boards</string> <string name="filter_summary_all_boards">all boards</string>
<string name="filter_enabled">Enabled</string> <string name="filter_enabled">Enabled</string>

Loading…
Cancel
Save