Skip to content

Commit 533cd67

Browse files
Performance improvement (make query of unreadItemCountFeedFolder around 2 times faster)
1 parent c0dcd5f commit 533cd67

File tree

3 files changed

+79
-38
lines changed

3 files changed

+79
-38
lines changed

News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/ListView/SubscriptionExpandableListAdapter.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -424,10 +424,12 @@ protected Void doInBackground(Void... voids) {
424424
StopWatch stopwatch = new StopWatch();
425425
stopwatch.start();
426426

427-
unreadCountFoldersTemp = dbConn.getUnreadItemCountForFolder();
428-
unreadCountFeedsTemp = dbConn.getUnreadItemCountForFeed();
429-
starredCountFeedsTemp = dbConn.getStarredItemCountForFeed();
427+
SparseArray<String>[] temp = dbConn.getUnreadItemCountFeedFolder();
430428

429+
unreadCountFoldersTemp = temp[0];// dbConn.getUnreadItemCountForFolder();
430+
unreadCountFeedsTemp = temp[1]; // dbConn.getUnreadItemCountForFeed();
431+
432+
starredCountFeedsTemp = dbConn.getStarredItemCount();
431433
urlsToFavIconsTemp = dbConn.getUrlsToFavIcons();
432434

433435
stopwatch.stop();

News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/NewsReaderListActivity.java

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -508,20 +508,27 @@ private boolean syncFinishedHandler() {
508508
return false;
509509
}
510510

511+
512+
private int onResumeCount = 0;
511513
@Override
512514
protected void onResume() {
513-
ThemeChooser.chooseTheme(this);
515+
ThemeChooser.chooseTheme(this); // Causes onResume to be called twice
514516

515-
//reloadCountNumbersOfSlidingPaneAdapter();
517+
if(onResumeCount > 1) {
518+
//reloadCountNumbersOfSlidingPaneAdapter();
516519

517-
//reload adapter - a sync could have been finished
518-
NewsReaderListFragment newsReaderListFragment = getSlidingListFragment();
519-
if (newsReaderListFragment != null) {
520-
newsReaderListFragment.ReloadAdapter();
521-
newsReaderListFragment.bindUserInfoToUI();
522-
}
520+
//reload adapter - a sync could have been finished
521+
NewsReaderListFragment newsReaderListFragment = getSlidingListFragment();
522+
if (newsReaderListFragment != null) {
523+
newsReaderListFragment.ReloadAdapter();
524+
newsReaderListFragment.bindUserInfoToUI();
525+
}
526+
527+
invalidateOptionsMenu();
528+
} else {
529+
onResumeCount++;
530+
}
523531

524-
invalidateOptionsMenu();
525532

526533
super.onResume();
527534
}
@@ -835,8 +842,6 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
835842
//Update settings of image Loader
836843
((NewsReaderApplication)getApplication()).initImageLoader();
837844

838-
getSlidingListFragment().ReloadAdapter();
839-
840845
String oldLayout = data.getStringExtra(SettingsActivity.SP_FEED_LIST_LAYOUT);
841846
String newLayout = PreferenceManager.getDefaultSharedPreferences(this).getString(SettingsActivity.SP_FEED_LIST_LAYOUT,"0");
842847

News-Android-App/src/main/java/de/luhmer/owncloudnewsreader/database/DatabaseConnectionOrm.java

Lines changed: 58 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,8 @@ public void run() {
338338
for (RssItem rssItem : list) {
339339
daoSession.getRssItemDao().delete(rssItem);
340340
}
341-
}});
341+
}
342+
});
342343
}
343344

344345
public void renameFeedById(long feedId, String newTitle) {
@@ -489,23 +490,6 @@ public void run() {
489490
Log.v(TAG, "Time needed for insert: " + sw.toString());
490491
}
491492

492-
public SparseArray<String> getUnreadItemCountForFolder() {
493-
String buildSQL = "SELECT f." + FolderDao.Properties.Id.columnName + ", COUNT(1)" +
494-
" FROM " + RssItemDao.TABLENAME + " rss " +
495-
" JOIN " + FeedDao.TABLENAME + " feed ON rss." + RssItemDao.Properties.FeedId.columnName + " = feed." + FeedDao.Properties.Id.columnName +
496-
" JOIN " + FolderDao.TABLENAME + " f ON feed." + FeedDao.Properties.FolderId.columnName + " = f." + FolderDao.Properties.Id.columnName +
497-
" WHERE " + RssItemDao.Properties.Read_temp.columnName + " != 1 " +
498-
" GROUP BY f." + FolderDao.Properties.Id.columnName;
499-
500-
SparseArray<String> values = getStringSparseArrayFromSQL(buildSQL, 0, 1);
501-
502-
values.put(SPECIAL_FOLDERS.ALL_UNREAD_ITEMS.getValue(), getUnreadItemsCountForSpecificFolder(SPECIAL_FOLDERS.ALL_UNREAD_ITEMS));
503-
values.put(SPECIAL_FOLDERS.ALL_STARRED_ITEMS.getValue(), getUnreadItemsCountForSpecificFolder(SPECIAL_FOLDERS.ALL_STARRED_ITEMS));
504-
505-
506-
return values;
507-
}
508-
509493
public String getUnreadItemsCountForSpecificFolder(SPECIAL_FOLDERS specialFolder) {
510494
String buildSQL = "SELECT COUNT(1)" +
511495
" FROM " + RssItemDao.TABLENAME + " rss ";
@@ -520,16 +504,66 @@ public String getUnreadItemsCountForSpecificFolder(SPECIAL_FOLDERS specialFolder
520504
return values.valueAt(0);
521505
}
522506

523-
public SparseArray<String> getUnreadItemCountForFeed() {
524-
String buildSQL = "SELECT " + RssItemDao.Properties.FeedId.columnName + ", COUNT(1)" + // rowid as _id,
525-
" FROM " + RssItemDao.TABLENAME +
507+
/**
508+
*
509+
* @return [0] = unread items count for folders, [1] = unread items count for feeds
510+
*/
511+
public SparseArray<String>[] getUnreadItemCountFeedFolder() {
512+
SparseArray<String>[] values = new SparseArray[2];
513+
514+
String buildSQL = "SELECT f." + FolderDao.Properties.Id.columnName + ", feed." + FeedDao.Properties.Id.columnName + ", COUNT(1)" +
515+
" FROM " + RssItemDao.TABLENAME + " rss " +
516+
" JOIN " + FeedDao.TABLENAME + " feed ON rss." + RssItemDao.Properties.FeedId.columnName + " = feed." + FeedDao.Properties.Id.columnName +
517+
" LEFT OUTER JOIN " + FolderDao.TABLENAME + " f ON feed." + FeedDao.Properties.FolderId.columnName + " = f." + FolderDao.Properties.Id.columnName +
526518
" WHERE " + RssItemDao.Properties.Read_temp.columnName + " != 1 " +
527-
" GROUP BY " + RssItemDao.Properties.FeedId.columnName;
519+
" GROUP BY f." + FolderDao.Properties.Id.columnName + ", feed." + FeedDao.Properties.Id.columnName;
520+
//" GROUP BY (case when f." + FolderDao.Properties.Id.columnName + " IS NULL then feed." + FeedDao.Properties.Id.columnName + " ELSE f." + FolderDao.Properties.Id.columnName + " end)";
521+
522+
values[0] = new SparseArray<>();
523+
values[1] = new SparseArray<>();
524+
525+
int totalUnreadItemsCount = 0;
526+
527+
Cursor cursor = daoSession.getDatabase().rawQuery(buildSQL, null);
528+
try
529+
{
530+
if(cursor != null)
531+
{
532+
if(cursor.getCount() > 0)
533+
{
534+
cursor.moveToFirst();
535+
do {
536+
int folderId = cursor.getInt(0);
537+
int feedId = cursor.getInt(1);
538+
int unreadCount = cursor.getInt(2);
539+
540+
totalUnreadItemsCount += unreadCount;
541+
542+
values[1].put(feedId, String.valueOf(unreadCount));
543+
if(folderId != 0) {
544+
if(values[0].get(folderId) != null) {
545+
unreadCount += Integer.parseInt(values[0].get(folderId));
546+
}
547+
548+
values[0].put(folderId, String.valueOf(unreadCount));
549+
}
550+
} while(cursor.moveToNext());
551+
}
552+
}
553+
} finally {
554+
cursor.close();
555+
}
556+
557+
558+
values[0].put(SPECIAL_FOLDERS.ALL_UNREAD_ITEMS.getValue(), String.valueOf(totalUnreadItemsCount));
559+
values[0].put(SPECIAL_FOLDERS.ALL_STARRED_ITEMS.getValue(), getUnreadItemsCountForSpecificFolder(SPECIAL_FOLDERS.ALL_STARRED_ITEMS));
560+
561+
562+
return values;
528563

529-
return getStringSparseArrayFromSQL(buildSQL, 0, 1);
530564
}
531565

532-
public SparseArray<String> getStarredItemCountForFeed() {
566+
public SparseArray<String> getStarredItemCount() {
533567
String buildSQL = "SELECT " + RssItemDao.Properties.FeedId.columnName + ", COUNT(1)" + // rowid as _id,
534568
" FROM " + RssItemDao.TABLENAME +
535569
" WHERE " + RssItemDao.Properties.Starred_temp.columnName + " = 1 " +

0 commit comments

Comments
 (0)