various offline fixes

This commit is contained in:
Andrew Dolgov 2012-09-17 19:08:21 +04:00
parent 8e3e5add77
commit 2103396489
3 changed files with 101 additions and 28 deletions

View File

@ -47,6 +47,7 @@ public class OfflineActivity extends CommonActivity {
public void onDestroyActionMode(ActionMode mode) { public void onDestroyActionMode(ActionMode mode) {
deselectAllArticles(); deselectAllArticles();
m_headlinesActionMode = null; m_headlinesActionMode = null;
initMenu();
} }
@Override @Override
@ -114,6 +115,47 @@ public class OfflineActivity extends CommonActivity {
out.putBoolean("unreadOnly", m_unreadOnly); out.putBoolean("unreadOnly", m_unreadOnly);
} }
protected void selectArticles(int feedId, boolean isCat, int mode) {
switch (mode) {
case 0:
SQLiteStatement stmtSelectAll = null;
if (isCat) {
stmtSelectAll = getWritableDb().compileStatement(
"UPDATE articles SET selected = 1 WHERE feed_id IN (SELECT "+BaseColumns._ID+" FROM feeds WHERE cat_id = ?)");
} else {
stmtSelectAll = getWritableDb().compileStatement(
"UPDATE articles SET selected = 1 WHERE feed_id = ?");
}
stmtSelectAll.bindLong(1, feedId);
stmtSelectAll.execute();
stmtSelectAll.close();
break;
case 1:
SQLiteStatement stmtSelectUnread = null;
if (isCat) {
stmtSelectUnread = getWritableDb().compileStatement(
"UPDATE articles SET selected = 1 WHERE feed_id IN (SELECT "+BaseColumns._ID+" FROM feeds WHERE cat_id = ?) AND unread = 1");
} else {
stmtSelectUnread = getWritableDb().compileStatement(
"UPDATE articles SET selected = 1 WHERE feed_id = ? AND unread = 1");
}
stmtSelectUnread.bindLong(1, feedId);
stmtSelectUnread.execute();
stmtSelectUnread.close();
break;
case 2:
deselectAllArticles();
break;
}
}
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
final OfflineHeadlinesFragment ohf = (OfflineHeadlinesFragment) getSupportFragmentManager() final OfflineHeadlinesFragment ohf = (OfflineHeadlinesFragment) getSupportFragmentManager()
@ -188,29 +230,8 @@ public class OfflineActivity extends CommonActivity {
@Override @Override
public void onClick(DialogInterface dialog, public void onClick(DialogInterface dialog,
int which) { int which) {
switch (which) {
case 0:
SQLiteStatement stmtSelectAll = getWritableDb()
.compileStatement(
"UPDATE articles SET selected = 1 WHERE feed_id = ?");
stmtSelectAll.bindLong(1, ohf.getFeedId());
stmtSelectAll.execute();
stmtSelectAll.close();
break;
case 1:
SQLiteStatement stmtSelectUnread = getWritableDb()
.compileStatement(
"UPDATE articles SET selected = 1 WHERE feed_id = ? AND unread = 1");
stmtSelectUnread
.bindLong(1, ohf.getFeedId());
stmtSelectUnread.execute();
stmtSelectUnread.close();
break;
case 2:
deselectAllArticles();
break;
}
selectArticles(ohf.getFeedId(), ohf.getFeedIsCat(), which);
initMenu(); initMenu();
refresh(); refresh();
@ -225,9 +246,17 @@ public class OfflineActivity extends CommonActivity {
case R.id.headlines_mark_as_read: case R.id.headlines_mark_as_read:
if (ohf != null) { if (ohf != null) {
int feedId = ohf.getFeedId(); int feedId = ohf.getFeedId();
boolean isCat = ohf.getFeedIsCat();
SQLiteStatement stmt = getWritableDb().compileStatement( SQLiteStatement stmt = null;
if (isCat) {
stmt = getWritableDb().compileStatement(
"UPDATE articles SET unread = 0 WHERE feed_id IN (SELECT "+BaseColumns._ID+" FROM feeds WHERE cat_id = ?)");
} else {
stmt = getWritableDb().compileStatement(
"UPDATE articles SET unread = 0 WHERE feed_id = ?"); "UPDATE articles SET unread = 0 WHERE feed_id = ?");
}
stmt.bindLong(1, feedId); stmt.bindLong(1, feedId);
stmt.execute(); stmt.execute();
stmt.close(); stmt.close();
@ -309,12 +338,25 @@ public class OfflineActivity extends CommonActivity {
case R.id.catchup_above: case R.id.catchup_above:
if (oap != null) { if (oap != null) {
int articleId = oap.getSelectedArticleId(); int articleId = oap.getSelectedArticleId();
int feedId = oap.getFeedId();
boolean isCat = oap.getFeedIsCat();
SQLiteStatement stmt = null;
if (isCat) {
stmt = getWritableDb().compileStatement(
"UPDATE articles SET unread = 0 WHERE " +
"updated >= (SELECT updated FROM articles WHERE " + BaseColumns._ID + " = ?) " +
"AND feed_id IN (SELECT "+BaseColumns._ID+" FROM feeds WHERE cat_id = ?)");
} else {
stmt = getWritableDb().compileStatement(
"UPDATE articles SET unread = 0 WHERE " +
"updated >= (SELECT updated FROM articles WHERE " + BaseColumns._ID + " = ?) " +
"AND feed_id = ?");
}
SQLiteStatement stmt = getWritableDb().compileStatement(
"UPDATE articles SET unread = 0 WHERE updated >= "
+ "(SELECT updated FROM articles WHERE "
+ BaseColumns._ID + " = ?)");
stmt.bindLong(1, articleId); stmt.bindLong(1, articleId);
stmt.bindLong(2, feedId);
stmt.execute(); stmt.execute();
stmt.close(); stmt.close();

View File

@ -28,6 +28,14 @@ public class OfflineArticlePager extends Fragment {
private String m_searchQuery = ""; private String m_searchQuery = "";
private Cursor m_cursor; private Cursor m_cursor;
public int getFeedId() {
return m_feedId;
}
public boolean getFeedIsCat() {
return m_isCat;
}
public Cursor createCursor() { public Cursor createCursor() {
String feedClause = null; String feedClause = null;

View File

@ -177,7 +177,30 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis
m_activity.shareArticle(articleId); m_activity.shareArticle(articleId);
} }
return true; return true;
case R.id.catchup_above: case R.id.catchup_above:
if (true) {
int articleId = getArticleIdAtPosition(info.position);
SQLiteStatement stmt = null;
if (m_feedIsCat) {
stmt = m_activity.getWritableDb().compileStatement(
"UPDATE articles SET unread = 0 WHERE " +
"updated >= (SELECT updated FROM articles WHERE " + BaseColumns._ID + " = ?) " +
"AND feed_id IN (SELECT "+BaseColumns._ID+" FROM feeds WHERE cat_id = ?)");
} else {
stmt = m_activity.getWritableDb().compileStatement(
"UPDATE articles SET unread = 0 WHERE " +
"updated >= (SELECT updated FROM articles WHERE " + BaseColumns._ID + " = ?) " +
"AND feed_id = ?");
}
stmt.bindLong(1, articleId);
stmt.bindLong(2, m_feedId);
stmt.execute();
stmt.close();
}
refresh();
return true; return true;
default: default:
Log.d(TAG, "onContextItemSelected, unhandled id=" + item.getItemId()); Log.d(TAG, "onContextItemSelected, unhandled id=" + item.getItemId());