diff options
author | Oguz Kocer <oguz.kocer@automattic.com> | 2016-06-13 15:35:30 +0300 |
---|---|---|
committer | Oguz Kocer <oguz.kocer@automattic.com> | 2016-06-13 15:35:30 +0300 |
commit | be662a72efdae7dfe3ad3fb1277756a2a72637a2 (patch) | |
tree | 98fe946649ee020f5f4823995e02623652d999e7 | |
parent | f0ecda395170ebd8a98f35aa9b146a6f82430b8a (diff) | |
download | gradle-perf-android-medium-be662a72efdae7dfe3ad3fb1277756a2a72637a2.tar.gz |
Big refactor to PeopleTable methods to accommodate for followers
4 files changed, 65 insertions, 24 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/WordPressDB.java b/WordPress/src/main/java/org/wordpress/android/WordPressDB.java index 79c70d5d6..6ba4364d2 100644 --- a/WordPress/src/main/java/org/wordpress/android/WordPressDB.java +++ b/WordPress/src/main/java/org/wordpress/android/WordPressDB.java @@ -767,7 +767,8 @@ public class WordPressDB { int rowsAffected = db.delete(BLOGS_TABLE, "id=?", new String[]{Integer.toString(id)}); deleteQuickPressShortcutsForLocalTableBlogId(ctx, id); deleteAllPostsForLocalTableBlogId(id); - PeopleTable.deletePeopleForLocalBlogId(id); + PeopleTable.deleteUsersForLocalBlogId(id); + PeopleTable.deleteFollowersForLocalBlogId(id); return (rowsAffected > 0); } @@ -777,7 +778,8 @@ public class WordPressDB { int localBlogId = MapUtils.getMapInt(blog, "id"); deleteQuickPressShortcutsForLocalTableBlogId(ctx, localBlogId); deleteAllPostsForLocalTableBlogId(localBlogId); - PeopleTable.deletePeopleForLocalBlogId(localBlogId); + PeopleTable.deleteUsersForLocalBlogId(localBlogId); + PeopleTable.deleteFollowersForLocalBlogId(localBlogId); } // H4ck alert: We need to delete the Jetpack sites that were added in the initial diff --git a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java index 1d190976a..2fd95e6e7 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -73,12 +73,12 @@ public class PeopleTable { database.insertWithOnConflict(PEOPLE_TABLE, null, values, SQLiteDatabase.CONFLICT_REPLACE); } - public static void savePeople(List<Person> peopleList, int localTableBlogId, boolean isFreshList) { + public static void saveUsers(List<Person> peopleList, int localTableBlogId, boolean isFreshList) { getWritableDb().beginTransaction(); try { - //We have a fresh list, remove the previous list of people in case it was deleted on remote + // We have a fresh list, remove the previous list of users in case it was deleted on remote if (isFreshList) { - PeopleTable.deletePeopleForLocalBlogId(localTableBlogId); + PeopleTable.deleteUsersForLocalBlogId(localTableBlogId); } for (Person person : peopleList) { @@ -90,42 +90,81 @@ public class PeopleTable { } } - public static int getPeopleCountForLocalBlogId(int localTableBlogId) { - String[] args = new String[]{Integer.toString(localTableBlogId)}; - String sql = "SELECT COUNT(*) FROM " + PEOPLE_TABLE + " WHERE local_blog_id=?"; - return SqlUtils.intForQuery(getReadableDb(), sql, args); + public static void saveFollowers(List<Person> peopleList, int localTableBlogId, boolean isFreshList) { + getWritableDb().beginTransaction(); + try { + // We have a fresh list, remove the previous list of followers in case it was deleted on remote + if (isFreshList) { + PeopleTable.deleteFollowersForLocalBlogId(localTableBlogId); + } + + for (Person person : peopleList) { + PeopleTable.save(person); + } + getWritableDb().setTransactionSuccessful(); + } finally { + getWritableDb().endTransaction(); + } } - public static void deletePeopleForLocalBlogId(int localTableBlogId) { - String[] args = new String[]{Integer.toString(localTableBlogId)}; - getWritableDb().delete(PEOPLE_TABLE, "local_blog_id=?", args); + public static void deleteUsersForLocalBlogId(int localTableBlogId) { + String[] args = new String[]{Integer.toString(localTableBlogId), Boolean.toString(false)}; + getWritableDb().delete(PEOPLE_TABLE, "local_blog_id=?&is_follower=?", args); } - public static void deletePeopleForLocalBlogIdExceptForFirstPage(int localTableBlogId) { - int size = getPeopleCountForLocalBlogId(localTableBlogId); + public static void deleteFollowersForLocalBlogId(int localTableBlogId) { + String[] args = new String[]{Integer.toString(localTableBlogId), Boolean.toString(true)}; + getWritableDb().delete(PEOPLE_TABLE, "local_blog_id=?&is_follower=?", args); + } + + public static void deleteUsersForLocalBlogIdExceptForFirstPage(int localTableBlogId) { + PeopleTable.deletePeopleForLocalBlogIdExceptForFirstPage(localTableBlogId, false); + } + + public static void deleteFollowersForLocalBlogIdExceptForFirstPage(int localTableBlogId) { + PeopleTable.deletePeopleForLocalBlogIdExceptForFirstPage(localTableBlogId, false); + } + + private static void deletePeopleForLocalBlogIdExceptForFirstPage(int localTableBlogId, boolean isFollower) { + int size = getPeopleCountForLocalBlogId(localTableBlogId, isFollower); int fetchLimit = PeopleUtils.FETCH_USERS_LIMIT; if (size > fetchLimit) { int deleteCount = size - fetchLimit; String[] args = new String[] { Integer.toString(localTableBlogId), + Boolean.toString(isFollower), Integer.toString(deleteCount) }; - getWritableDb().delete(PEOPLE_TABLE, "local_blog_id=?1 AND person_id " + - "IN (SELECT person_id FROM " + PEOPLE_TABLE + " WHERE local_blog_id=?1 " + - "ORDER BY display_name DESC LIMIT ?2)", args); + getWritableDb().delete(PEOPLE_TABLE, "local_blog_id=?1 AND is_follower=?2 AND person_id " + + "IN (SELECT person_id FROM " + PEOPLE_TABLE + " WHERE local_blog_id=?1 AND is_follower=?2 " + + "ORDER BY display_name DESC LIMIT ?3)", args); } } + public static int getUsersCountForLocalBlogId(int localTableBlogId) { + return PeopleTable.getPeopleCountForLocalBlogId(localTableBlogId, false); + } + + private static int getPeopleCountForLocalBlogId(int localTableBlogId, boolean isFollower) { + String[] args = new String[]{Integer.toString(localTableBlogId), Boolean.toString(isFollower)}; + String sql = "SELECT COUNT(*) FROM " + PEOPLE_TABLE + " WHERE local_blog_id=?&is_follower=?"; + return SqlUtils.intForQuery(getReadableDb(), sql, args); + } + public static void deletePerson(long personID, int localTableBlogId) { String[] args = new String[]{Long.toString(personID), Integer.toString(localTableBlogId)}; getWritableDb().delete(PEOPLE_TABLE, "person_id=? AND local_blog_id=?", args); } - public static List<Person> getPeople(int localTableBlogId) { + public static List<Person> getUsers(int localTableBlogId) { + return PeopleTable.getPeople(localTableBlogId, false); + } + + private static List<Person> getPeople(int localTableBlogId, boolean isFollower) { List<Person> people = new ArrayList<>(); - String[] args = { Integer.toString(localTableBlogId) }; + String[] args = { Integer.toString(localTableBlogId), Boolean.toString(isFollower) }; Cursor c = getReadableDb().rawQuery("SELECT * FROM " + PEOPLE_TABLE + - " WHERE local_blog_id=? ORDER BY lower(display_name), lower(user_name)", args); + " WHERE local_blog_id=? AND is_follower=? ORDER BY lower(display_name), lower(user_name)", args); try { while (c.moveToNext()) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java index ea9b2a648..cddcce8b1 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java @@ -183,7 +183,7 @@ public class PeopleListFragment extends Fragment { public void refreshPeopleList() { if (!isAdded()) return; - List<Person> peopleList = PeopleTable.getPeople(mLocalTableBlogID); + List<Person> peopleList = PeopleTable.getUsers(mLocalTableBlogID); PeopleAdapter peopleAdapter = (PeopleAdapter) mFilteredRecyclerView.getAdapter(); if (peopleAdapter == null) { peopleAdapter = new PeopleAdapter(getActivity(), peopleList); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java index b3bba113c..2bf168cd4 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java @@ -66,7 +66,7 @@ public class PeopleManagementActivity extends AppCompatActivity if (savedInstanceState == null) { // only delete cached people if there is a connection if (NetworkUtils.isNetworkAvailable(this)) { - PeopleTable.deletePeopleForLocalBlogIdExceptForFirstPage(blog.getLocalTableBlogId()); + PeopleTable.deleteUsersForLocalBlogIdExceptForFirstPage(blog.getLocalTableBlogId()); } if (actionBar != null) { @@ -190,7 +190,7 @@ public class PeopleManagementActivity extends AppCompatActivity public void onSuccess(List<Person> peopleList, boolean isEndOfList) { boolean isFreshList = (offset == 0); mPeopleEndOfListReached = isEndOfList; - PeopleTable.savePeople(peopleList, localTableBlogId, isFreshList); + PeopleTable.saveUsers(peopleList, localTableBlogId, isFreshList); refreshOnScreenFragmentDetails(); mFetchRequestInProgress = false; @@ -401,7 +401,7 @@ public class PeopleManagementActivity extends AppCompatActivity return; } Blog blog = WordPress.getCurrentBlog(); - int count = PeopleTable.getPeopleCountForLocalBlogId(blog.getLocalTableBlogId()); + int count = PeopleTable.getUsersCountForLocalBlogId(blog.getLocalTableBlogId()); fetchUsersList(blog.getDotComBlogId(), blog.getLocalTableBlogId(), count); } |