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) {
deselectAllArticles();
m_headlinesActionMode = null;
initMenu();
}
@Override
@ -114,6 +115,47 @@ public class OfflineActivity extends CommonActivity {
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
public boolean onOptionsItemSelected(MenuItem item) {
final OfflineHeadlinesFragment ohf = (OfflineHeadlinesFragment) getSupportFragmentManager()
@ -188,29 +230,8 @@ public class OfflineActivity extends CommonActivity {
@Override
public void onClick(DialogInterface dialog,
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();
refresh();
@ -225,9 +246,17 @@ public class OfflineActivity extends CommonActivity {
case R.id.headlines_mark_as_read:
if (ohf != null) {
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 = ?");
}
stmt.bindLong(1, feedId);
stmt.execute();
stmt.close();
@ -309,12 +338,25 @@ public class OfflineActivity extends CommonActivity {
case R.id.catchup_above:
if (oap != null) {
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(2, feedId);
stmt.execute();
stmt.close();

View File

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

View File

@ -178,6 +178,29 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis
}
return true;
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;
default:
Log.d(TAG, "onContextItemSelected, unhandled id=" + item.getItemId());