Add ability to clear saved replies/reply history

Manual merge of #177
multisite
Floens 9 years ago
parent 4a3b9058b8
commit f97faa136f
  1. 25
      Clover/app/src/main/java/org/floens/chan/core/database/DatabaseSavedReplyManager.java
  2. 46
      Clover/app/src/main/java/org/floens/chan/ui/controller/HistoryController.java
  3. 4
      Clover/app/src/main/java/org/floens/chan/ui/toolbar/ToolbarMenuItem.java
  4. 4
      Clover/app/src/main/res/values/strings.xml

@ -18,8 +18,10 @@
package org.floens.chan.core.database;
import com.j256.ormlite.stmt.QueryBuilder;
import com.j256.ormlite.table.TableUtils;
import org.floens.chan.core.model.SavedReply;
import org.floens.chan.utils.Time;
import java.util.ArrayList;
import java.util.HashMap;
@ -36,7 +38,6 @@ public class DatabaseSavedReplyManager {
private DatabaseManager databaseManager;
private DatabaseHelper helper;
private final Object lock = new Object();
private final Map<Integer, List<SavedReply>> savedRepliesByNo = new HashMap<>();
public DatabaseSavedReplyManager(DatabaseManager databaseManager, DatabaseHelper helper) {
@ -46,7 +47,7 @@ public class DatabaseSavedReplyManager {
// optimized and threadsafe
public boolean isSaved(String board, int no) {
synchronized (lock) {
synchronized (savedRepliesByNo) {
if (savedRepliesByNo.containsKey(no)) {
List<SavedReply> items = savedRepliesByNo.get(no);
for (int i = 0; i < items.size(); i++) {
@ -70,7 +71,7 @@ public class DatabaseSavedReplyManager {
final List<SavedReply> all = helper.savedDao.queryForAll();
synchronized (lock) {
synchronized (savedRepliesByNo) {
savedRepliesByNo.clear();
for (int i = 0; i < all.size(); i++) {
SavedReply savedReply = all.get(i);
@ -88,12 +89,28 @@ public class DatabaseSavedReplyManager {
};
}
public Callable<Void> clearSavedReplies() {
return new Callable<Void>() {
@Override
public Void call() throws Exception {
long start = Time.startTiming();
TableUtils.clearTable(helper.getConnectionSource(), SavedReply.class);
synchronized (savedRepliesByNo) {
savedRepliesByNo.clear();
}
Time.endTiming("Clear saved replies", start);
return null;
}
};
}
public Callable<SavedReply> saveReply(final SavedReply savedReply) {
return new Callable<SavedReply>() {
@Override
public SavedReply call() throws Exception {
helper.savedDao.create(savedReply);
synchronized (lock) {
synchronized (savedRepliesByNo) {
if (savedRepliesByNo.containsKey(savedReply.no)) {
savedRepliesByNo.get(savedReply.no).add(savedReply);
} else {

@ -36,6 +36,7 @@ import org.floens.chan.R;
import org.floens.chan.controller.Controller;
import org.floens.chan.core.database.DatabaseHistoryManager;
import org.floens.chan.core.database.DatabaseManager;
import org.floens.chan.core.database.DatabaseSavedReplyManager;
import org.floens.chan.core.manager.BoardManager;
import org.floens.chan.core.model.Board;
import org.floens.chan.core.model.History;
@ -58,9 +59,11 @@ import static org.floens.chan.utils.AndroidUtils.dp;
public class HistoryController extends Controller implements CompoundButton.OnCheckedChangeListener, ToolbarMenuItem.ToolbarMenuItemCallback, ToolbarNavigationController.ToolbarSearchCallback {
private static final int SEARCH_ID = 1;
private static final int CLEAR_ID = 101;
private static final int SAVED_REPLY_CLEAR_ID = 102;
private DatabaseManager databaseManager;
private DatabaseHistoryManager databaseHistoryManager;
private DatabaseSavedReplyManager databaseSavedReplyManager;
private BoardManager boardManager;
private CrossfadeView crossfade;
@ -77,14 +80,17 @@ public class HistoryController extends Controller implements CompoundButton.OnCh
databaseManager = Chan.getDatabaseManager();
databaseHistoryManager = databaseManager.getDatabaseHistoryManager();
databaseSavedReplyManager = databaseManager.getDatabaseSavedReplyManager();
boardManager = Chan.getBoardManager();
navigationItem.setTitle(R.string.history_screen);
List<FloatingMenuItem> items = new ArrayList<>();
items.add(new FloatingMenuItem(CLEAR_ID, R.string.history_clear));
items.add(new FloatingMenuItem(SAVED_REPLY_CLEAR_ID, R.string.saved_reply_clear));
navigationItem.menu = new ToolbarMenu(context);
navigationItem.menu.addItem(new ToolbarMenuItem(context, this, SEARCH_ID, R.drawable.ic_search_white_24dp));
navigationItem.createOverflow(context, this, items);
ToolbarMenuItem overflow = navigationItem.createOverflow(context, this, items);
overflow.getSubMenu().setPopupWidth(dp(4 * 56));
SwitchCompat historyEnabledSwitch = new SwitchCompat(context);
historyEnabledSwitch.setChecked(ChanSettings.historyEnabled.get());
@ -120,18 +126,32 @@ public class HistoryController extends Controller implements CompoundButton.OnCh
@Override
public void onSubMenuItemClicked(ToolbarMenuItem parent, FloatingMenuItem item) {
if ((Integer) item.getId() == CLEAR_ID) {
new AlertDialog.Builder(context)
.setTitle(R.string.history_clear_confirm)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.history_clear_confirm_button, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
databaseManager.runTask(databaseHistoryManager.clearHistory());
adapter.load();
}
})
.show();
switch ((Integer) item.getId()) {
case CLEAR_ID:
new AlertDialog.Builder(context)
.setTitle(R.string.history_clear_confirm)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.history_clear_confirm_button, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
databaseManager.runTask(databaseHistoryManager.clearHistory());
adapter.load();
}
})
.show();
break;
case SAVED_REPLY_CLEAR_ID:
new AlertDialog.Builder(context)
.setTitle(R.string.saved_reply_clear_confirm)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.saved_reply_clear_confirm_button, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
databaseManager.runTask(databaseSavedReplyManager.clearSavedReplies());
}
})
.show();
break;
}
}

@ -75,6 +75,10 @@ public class ToolbarMenuItem implements View.OnClickListener, FloatingMenu.Float
subMenu.setCallback(this);
}
public FloatingMenu getSubMenu() {
return subMenu;
}
@Override
public void onClick(View v) {
if (subMenu != null && !subMenu.isShowing()) {

@ -237,6 +237,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<string name="history_toggle_hint">Enable or disable history</string>
<string name="history_empty_info">No history</string>
<string name="saved_reply_clear">Clear posting history</string>
<string name="saved_reply_clear_confirm">Clear posting history?</string>
<string name="saved_reply_clear_confirm_button">Clear</string>
<string name="drawer_board">Board</string>
<string name="drawer_catalog">Catalog</string>
<string name="drawer_pinned">Bookmarked threads</string>

Loading…
Cancel
Save