From 64e6cabc97f9fb55adeec766b4dfb78363f7cb7c Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 7 Mar 2016 18:31:18 +0200 Subject: [PATCH 01/37] Table created for People --- .../org/wordpress/android/WordPressDB.java | 7 +++-- .../android/datasets/PeopleTable.java | 30 +++++++++++++++++++ .../android/datasets/PersonTable.java | 16 ---------- .../android/ui/people/PersonActivity.java | 4 +-- 4 files changed, 37 insertions(+), 20 deletions(-) create mode 100644 WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java delete mode 100644 WordPress/src/main/java/org/wordpress/android/datasets/PersonTable.java diff --git a/WordPress/src/main/java/org/wordpress/android/WordPressDB.java b/WordPress/src/main/java/org/wordpress/android/WordPressDB.java index 20d20f99eaa6..b9a2befece5d 100644 --- a/WordPress/src/main/java/org/wordpress/android/WordPressDB.java +++ b/WordPress/src/main/java/org/wordpress/android/WordPressDB.java @@ -16,11 +16,11 @@ import org.json.JSONArray; import org.wordpress.android.datasets.AccountTable; import org.wordpress.android.datasets.CommentTable; +import org.wordpress.android.datasets.PeopleTable; import org.wordpress.android.datasets.SiteSettingsTable; import org.wordpress.android.datasets.SuggestionTable; import org.wordpress.android.models.Account; import org.wordpress.android.models.Blog; -import org.wordpress.android.models.Person; import org.wordpress.android.models.MediaUploadState; import org.wordpress.android.models.Post; import org.wordpress.android.models.PostLocation; @@ -85,7 +85,7 @@ public class WordPressDB { public static final String COLUMN_NAME_VIDEO_PRESS_SHORTCODE = "videoPressShortcode"; public static final String COLUMN_NAME_UPLOAD_STATE = "uploadState"; - private static final int DATABASE_VERSION = 42; + private static final int DATABASE_VERSION = 43; private static final String CREATE_TABLE_BLOGS = "create table if not exists accounts (id integer primary key autoincrement, " + "url text, blogName text, username text, password text, imagePlacement text, centerThumbnail boolean, fullSizeImage boolean, maxImageWidth text, maxImageWidthId integer);"; @@ -398,6 +398,9 @@ public WordPressDB(Context ctx) { case 41: AccountTable.migrationAddAccountSettingsFields(db); currentVersion++; + case 42: + PeopleTable.createTables(db); + currentVersion++; } db.setVersion(DATABASE_VERSION); } diff --git a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java new file mode 100644 index 000000000000..2f349dde9b9d --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -0,0 +1,30 @@ +package org.wordpress.android.datasets; + +import android.database.sqlite.SQLiteDatabase; + +import org.wordpress.android.models.Person; +import org.wordpress.android.models.Role; + +public class PeopleTable { + public static final String PEOPLE_TABLE = "people"; + + public static void createTables(SQLiteDatabase db) { + db.execSQL("CREATE TABLE " + PEOPLE_TABLE + " (" + + "person_id INTEGER PRIMARY KEY DEFAULT 0," + + "user_name TEXT," + + "first_name TEXT," + + "last_name TEXT," + + "display_name TEXT," + + "avatar_url TEXT)"); + } + + /** + * retrieve a single person + * @param personId - unique id in person table + * @return Person if found, null otherwise + */ + public static Person getPerson(int personId) { + // This is a stub method for now so it returns a mock object, once implemented it will query the db + return new Person(4, "oguzkocer", "Oguz", "Kocer", "Oguz", "http://lorempixum.com/76/76", Role.EDITOR); + } +} diff --git a/WordPress/src/main/java/org/wordpress/android/datasets/PersonTable.java b/WordPress/src/main/java/org/wordpress/android/datasets/PersonTable.java deleted file mode 100644 index 39efc825b9a1..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PersonTable.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.wordpress.android.datasets; - -import org.wordpress.android.models.Person; -import org.wordpress.android.models.Role; - -public class PersonTable { - /** - * retrieve a single person - * @param personId - unique id in person table - * @return Person if found, null otherwise - */ - public static Person getPerson(int personId) { - // This is a stub method for now so it returns a mock object, once implemented it will query the db - return new Person(4, "oguzkocer", "Oguz", "Kocer", "Oguz", "http://lorempixum.com/76/76", Role.EDITOR); - } -} diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java index 7dbcc333f1bf..f94d72e6a986 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java @@ -8,7 +8,7 @@ import android.widget.TextView; import org.wordpress.android.R; -import org.wordpress.android.datasets.PersonTable; +import org.wordpress.android.datasets.PeopleTable; import org.wordpress.android.models.Person; import org.wordpress.android.models.Role; import org.wordpress.android.ui.ActivityLauncher; @@ -60,7 +60,7 @@ private void refreshUserDetails() { TextView txtRole = (TextView) findViewById(R.id.person_role); TextView txtRemove = (TextView) findViewById(R.id.person_remove); - Person person = PersonTable.getPerson(mPersonId); + Person person = PeopleTable.getPerson(mPersonId); if (person != null) { int avatarSz = getResources().getDimensionPixelSize(R.dimen.avatar_sz_large); From 0f8ee49ddfe3f162898c8eff10aaecbab844a0db Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 7 Mar 2016 18:37:45 +0200 Subject: [PATCH 02/37] Drop table & save methods added for People table --- .../android/datasets/PeopleTable.java | 25 +++++++++++++++++++ .../org/wordpress/android/models/Person.java | 18 +++++++------ .../android/ui/people/PeopleAdapter.java | 2 +- .../android/ui/people/PersonActivity.java | 2 +- 4 files changed, 38 insertions(+), 9 deletions(-) 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 2f349dde9b9d..d589aa33149f 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -1,13 +1,19 @@ package org.wordpress.android.datasets; +import android.content.ContentValues; import android.database.sqlite.SQLiteDatabase; +import org.wordpress.android.WordPress; import org.wordpress.android.models.Person; import org.wordpress.android.models.Role; public class PeopleTable { public static final String PEOPLE_TABLE = "people"; + private static SQLiteDatabase getWritableDb() { + return WordPress.wpDB.getDatabase(); + } + public static void createTables(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + PEOPLE_TABLE + " (" + "person_id INTEGER PRIMARY KEY DEFAULT 0," @@ -18,6 +24,25 @@ public static void createTables(SQLiteDatabase db) { + "avatar_url TEXT)"); } + private static void dropTables(SQLiteDatabase db) { + db.execSQL("DROP TABLE IF EXISTS " + PEOPLE_TABLE); + } + + public static void save(Person person) { + save(person, getWritableDb()); + } + + public static void save(Person person, SQLiteDatabase database) { + ContentValues values = new ContentValues(); + values.put("person_id", person.getPersonId()); + values.put("user_name", person.getUsername()); + values.put("first_name", person.getFirstName()); + values.put("last_name", person.getLastName()); + values.put("display_name", person.getDisplayName()); + values.put("avatar_url", person.getAvatarUrl()); + database.insertWithOnConflict(PEOPLE_TABLE, null, values, SQLiteDatabase.CONFLICT_REPLACE); + } + /** * retrieve a single person * @param personId - unique id in person table diff --git a/WordPress/src/main/java/org/wordpress/android/models/Person.java b/WordPress/src/main/java/org/wordpress/android/models/Person.java index 54f849155178..790eefdea11d 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/Person.java +++ b/WordPress/src/main/java/org/wordpress/android/models/Person.java @@ -7,7 +7,7 @@ public class Person { private String firstName; private String lastName; private String displayName; - private String imageUrl; + private String avatarUrl; private Role role; public Person(long personID, @@ -15,17 +15,21 @@ public Person(long personID, String firstName, String lastName, String displayName, - String imageUrl, + String avatarUrl, Role role) { this.personID = personID; this.username = username; this.firstName = firstName; this.lastName = lastName; this.displayName = displayName; - this.imageUrl = imageUrl; + this.avatarUrl = avatarUrl; this.role = role; } + public long getPersonId() { + return personID; + } + public String getUsername() { return "@" + username; } @@ -66,11 +70,11 @@ public void setRole(Role role) { this.role = role; } - public String getImageUrl() { - return imageUrl; + public String getAvatarUrl() { + return avatarUrl; } - public void setImageUrl(String imageUrl) { - this.imageUrl = imageUrl; + public void setAvatarUrl(String avatarUrl) { + this.avatarUrl = avatarUrl; } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java index 39bea3bc1390..d0db07cdaabd 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java @@ -73,7 +73,7 @@ public View getView(int position, View convertView, ViewGroup parent) { Person person = getItem(position); if (person != null) { - String avatarUrl = GravatarUtils.fixGravatarUrl(person.getImageUrl(), mAvatarSz); + String avatarUrl = GravatarUtils.fixGravatarUrl(person.getAvatarUrl(), mAvatarSz); holder.imgAvatar.setImageUrl(avatarUrl, WPNetworkImageView.ImageType.AVATAR); holder.txtDisplayName.setText(person.getDisplayName()); holder.txtUsername.setText(person.getUsername()); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java index f94d72e6a986..676a96eb586b 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java @@ -64,7 +64,7 @@ private void refreshUserDetails() { if (person != null) { int avatarSz = getResources().getDimensionPixelSize(R.dimen.avatar_sz_large); - String avatarUrl = GravatarUtils.fixGravatarUrl(person.getImageUrl(), avatarSz); + String avatarUrl = GravatarUtils.fixGravatarUrl(person.getAvatarUrl(), avatarSz); imgAvatar.setImageUrl(avatarUrl, WPNetworkImageView.ImageType.AVATAR); txtDisplayName.setText(person.getDisplayName()); From 8ffd738dc5500e6b6ef3eb8fa273a455cf6f74f5 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 7 Mar 2016 20:03:21 +0200 Subject: [PATCH 03/37] Adds getPerson to PeopleTable --- .../android/datasets/PeopleTable.java | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) 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 d589aa33149f..0a3f486f1b85 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -1,15 +1,19 @@ package org.wordpress.android.datasets; import android.content.ContentValues; +import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import org.wordpress.android.WordPress; import org.wordpress.android.models.Person; -import org.wordpress.android.models.Role; +import org.wordpress.android.util.SqlUtils; public class PeopleTable { public static final String PEOPLE_TABLE = "people"; + private static SQLiteDatabase getReadableDb() { + return WordPress.wpDB.getDatabase(); + } private static SQLiteDatabase getWritableDb() { return WordPress.wpDB.getDatabase(); } @@ -45,11 +49,27 @@ public static void save(Person person, SQLiteDatabase database) { /** * retrieve a single person - * @param personId - unique id in person table + * @param personId - unique id in people table * @return Person if found, null otherwise */ - public static Person getPerson(int personId) { - // This is a stub method for now so it returns a mock object, once implemented it will query the db - return new Person(4, "oguzkocer", "Oguz", "Kocer", "Oguz", "http://lorempixum.com/76/76", Role.EDITOR); + private static Person getPerson(long personId) { + String[] args = { Long.toString(personId) }; + Cursor c = getReadableDb().rawQuery("SELECT * FROM " + PEOPLE_TABLE + " WHERE person_id=?", args); + + try { + if (!c.moveToFirst()) { + return null; + } + + String username = c.getString(c.getColumnIndex("user_name")); + String firstName = c.getString(c.getColumnIndex("first_name")); + String lastName = c.getString(c.getColumnIndex("last_name")); + String displayName = c.getString(c.getColumnIndex("display_name")); + String avatarUrl = c.getString(c.getColumnIndex("avatar_url")); + + return new Person(personId, username, firstName, lastName, displayName, avatarUrl, null); + } finally { + SqlUtils.closeCursor(c); + } } } From f0c36fde737aa03b9f36d1be51885d91660eebff Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 8 Mar 2016 16:46:34 +0200 Subject: [PATCH 04/37] Fixed a few issues from the previous commit and renamed role toString to getLabel --- .../java/org/wordpress/android/datasets/PeopleTable.java | 2 +- .../src/main/java/org/wordpress/android/models/Role.java | 2 +- .../java/org/wordpress/android/ui/people/PeopleAdapter.java | 2 +- .../org/wordpress/android/ui/people/PersonActivity.java | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) 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 0a3f486f1b85..97a0dd5ac1b8 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -52,7 +52,7 @@ public static void save(Person person, SQLiteDatabase database) { * @param personId - unique id in people table * @return Person if found, null otherwise */ - private static Person getPerson(long personId) { + public static Person getPerson(long personId) { String[] args = { Long.toString(personId) }; Cursor c = getReadableDb().rawQuery("SELECT * FROM " + PEOPLE_TABLE + " WHERE person_id=?", args); diff --git a/WordPress/src/main/java/org/wordpress/android/models/Role.java b/WordPress/src/main/java/org/wordpress/android/models/Role.java index 5f8528b95b57..94fbe3cd3f43 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/Role.java +++ b/WordPress/src/main/java/org/wordpress/android/models/Role.java @@ -21,7 +21,7 @@ public enum Role { this.backgroundColor = backgroundColor; } - public static String toString(Context context, Role role) { + public static String getLabel(Context context, Role role) { return context.getString(role.label); } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java index d0db07cdaabd..c3e1c6e1f42d 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java @@ -77,7 +77,7 @@ public View getView(int position, View convertView, ViewGroup parent) { holder.imgAvatar.setImageUrl(avatarUrl, WPNetworkImageView.ImageType.AVATAR); holder.txtDisplayName.setText(person.getDisplayName()); holder.txtUsername.setText(person.getUsername()); - holder.txtRole.setText(Role.toString(mContext, person.getRole())); + holder.txtRole.setText(Role.getLabel(mContext, person.getRole())); holder.txtRole.setBackgroundColor(Role.backgroundColor(mContext, person.getRole())); } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java index 676a96eb586b..6575f7b64afb 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java @@ -18,13 +18,13 @@ public class PersonActivity extends AppCompatActivity { public static final String EXTRA_PERSON_ID = "EXTRA_PERSON_ID"; - private int mPersonId; + private long mPersonId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mPersonId = getIntent().getExtras().getInt(EXTRA_PERSON_ID); + mPersonId = getIntent().getExtras().getLong(EXTRA_PERSON_ID); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { @@ -69,7 +69,7 @@ private void refreshUserDetails() { imgAvatar.setImageUrl(avatarUrl, WPNetworkImageView.ImageType.AVATAR); txtDisplayName.setText(person.getDisplayName()); txtUsername.setText(person.getUsername()); - txtRole.setText(Role.toString(this, person.getRole())); + txtRole.setText(Role.getLabel(this, person.getRole())); txtRemove.setText(String.format(getString(R.string.remove_user), person.getFirstName().toUpperCase())); txtRemove.setOnClickListener(new View.OnClickListener() { From 883c58236f20cbfa111fd7e2f4b4ccd76658c177 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 8 Mar 2016 17:05:15 +0200 Subject: [PATCH 05/37] Save person's role in the db, refactor Role enum --- .../android/datasets/PeopleTable.java | 8 +++- .../org/wordpress/android/models/Role.java | 37 ++++++++++++++++--- 2 files changed, 38 insertions(+), 7 deletions(-) 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 97a0dd5ac1b8..25d74b560c62 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -6,6 +6,7 @@ import org.wordpress.android.WordPress; import org.wordpress.android.models.Person; +import org.wordpress.android.models.Role; import org.wordpress.android.util.SqlUtils; public class PeopleTable { @@ -25,7 +26,8 @@ public static void createTables(SQLiteDatabase db) { + "first_name TEXT," + "last_name TEXT," + "display_name TEXT," - + "avatar_url TEXT)"); + + "avatar_url TEXT," + + "role TEXT)"); } private static void dropTables(SQLiteDatabase db) { @@ -44,6 +46,7 @@ public static void save(Person person, SQLiteDatabase database) { values.put("last_name", person.getLastName()); values.put("display_name", person.getDisplayName()); values.put("avatar_url", person.getAvatarUrl()); + values.put("role", Role.toString(person.getRole())); database.insertWithOnConflict(PEOPLE_TABLE, null, values, SQLiteDatabase.CONFLICT_REPLACE); } @@ -66,8 +69,9 @@ public static Person getPerson(long personId) { String lastName = c.getString(c.getColumnIndex("last_name")); String displayName = c.getString(c.getColumnIndex("display_name")); String avatarUrl = c.getString(c.getColumnIndex("avatar_url")); + Role role = Role.fromString(c.getString(c.getColumnIndex("role"))); - return new Person(personId, username, firstName, lastName, displayName, avatarUrl, null); + return new Person(personId, username, firstName, lastName, displayName, avatarUrl, role); } finally { SqlUtils.closeCursor(c); } diff --git a/WordPress/src/main/java/org/wordpress/android/models/Role.java b/WordPress/src/main/java/org/wordpress/android/models/Role.java index 94fbe3cd3f43..6b48c80df431 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/Role.java +++ b/WordPress/src/main/java/org/wordpress/android/models/Role.java @@ -13,6 +13,12 @@ public enum Role { CONTRIBUTOR(R.string.role_contributor, R.color.blue_wordpress), UNSUPPORTED(R.string.role_unsupported, R.color.blue_wordpress); + private static String KEY_SUPER_ADMIN = "super_administrator"; + private static String KEY_ADMIN = "administrator"; + private static String KEY_EDITOR = "editor"; + private static String KEY_AUTHOR = "author"; + private static String KEY_CONTRIBUTOR = "contributor"; + private final int label; private final int backgroundColor; @@ -21,21 +27,42 @@ public enum Role { this.backgroundColor = backgroundColor; } + // Label to be used in UI public static String getLabel(Context context, Role role) { return context.getString(role.label); } - // This method will be used to determine the role of the user from network request + // Returns the key for that role + public static String toString(Role role) { + switch (role) { + case SUPER_ADMIN: + return KEY_SUPER_ADMIN; + case ADMIN: + return KEY_ADMIN; + case EDITOR: + return KEY_EDITOR; + case AUTHOR: + return KEY_AUTHOR; + case CONTRIBUTOR: + return KEY_CONTRIBUTOR; + default: + return "unsupported"; + } + } + + // This method is be used to determine the role of the user from network request public static Role fromString(String value) { if (value == null) return Role.UNSUPPORTED; - if (value.equals("administrator")) + if (value.equals(KEY_SUPER_ADMIN)) + return Role.SUPER_ADMIN; + if (value.equals(KEY_ADMIN)) return Role.ADMIN; - if (value.equals("editor")) + if (value.equals(KEY_EDITOR)) return Role.EDITOR; - if (value.equals("author")) + if (value.equals(KEY_AUTHOR)) return Role.AUTHOR; - if (value.equals("contributor")) + if (value.equals(KEY_CONTRIBUTOR)) return Role.CONTRIBUTOR; return Role.UNSUPPORTED; } From ff12174597d4fbc883924abe0f1dca4611df08e3 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 8 Mar 2016 17:37:05 +0200 Subject: [PATCH 06/37] Role enum method names refactored to make it clear what they do --- .../java/org/wordpress/android/datasets/PeopleTable.java | 4 ++-- .../src/main/java/org/wordpress/android/models/Role.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) 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 25d74b560c62..236be6e0821f 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -46,7 +46,7 @@ public static void save(Person person, SQLiteDatabase database) { values.put("last_name", person.getLastName()); values.put("display_name", person.getDisplayName()); values.put("avatar_url", person.getAvatarUrl()); - values.put("role", Role.toString(person.getRole())); + values.put("role", Role.toKey(person.getRole())); database.insertWithOnConflict(PEOPLE_TABLE, null, values, SQLiteDatabase.CONFLICT_REPLACE); } @@ -69,7 +69,7 @@ public static Person getPerson(long personId) { String lastName = c.getString(c.getColumnIndex("last_name")); String displayName = c.getString(c.getColumnIndex("display_name")); String avatarUrl = c.getString(c.getColumnIndex("avatar_url")); - Role role = Role.fromString(c.getString(c.getColumnIndex("role"))); + Role role = Role.fromKey(c.getString(c.getColumnIndex("role"))); return new Person(personId, username, firstName, lastName, displayName, avatarUrl, role); } finally { diff --git a/WordPress/src/main/java/org/wordpress/android/models/Role.java b/WordPress/src/main/java/org/wordpress/android/models/Role.java index 6b48c80df431..75d5be9a139e 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/Role.java +++ b/WordPress/src/main/java/org/wordpress/android/models/Role.java @@ -33,7 +33,7 @@ public static String getLabel(Context context, Role role) { } // Returns the key for that role - public static String toString(Role role) { + public static String toKey(Role role) { switch (role) { case SUPER_ADMIN: return KEY_SUPER_ADMIN; @@ -50,8 +50,8 @@ public static String toString(Role role) { } } - // This method is be used to determine the role of the user from network request - public static Role fromString(String value) { + // This method is be used to determine the role of the user from network request & db + public static Role fromKey(String value) { if (value == null) return Role.UNSUPPORTED; if (value.equals(KEY_SUPER_ADMIN)) From 87ae386975b0ada173b84435ca5904fa1f73a9d4 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 15 Mar 2016 14:01:35 +0200 Subject: [PATCH 07/37] Reset table added to PeopleTable --- .../java/org/wordpress/android/datasets/PeopleTable.java | 7 +++++++ 1 file changed, 7 insertions(+) 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 236be6e0821f..76e0d600caa5 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -7,6 +7,7 @@ import org.wordpress.android.WordPress; import org.wordpress.android.models.Person; import org.wordpress.android.models.Role; +import org.wordpress.android.util.AppLog; import org.wordpress.android.util.SqlUtils; public class PeopleTable { @@ -34,6 +35,12 @@ private static void dropTables(SQLiteDatabase db) { db.execSQL("DROP TABLE IF EXISTS " + PEOPLE_TABLE); } + public static void reset(SQLiteDatabase db) { + AppLog.i(AppLog.T.COMMENTS, "resetting people table"); + dropTables(db); + createTables(db); + } + public static void save(Person person) { save(person, getWritableDb()); } From bdcc9135f86306469551563d54d49fb40c2e2ab4 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 16 Mar 2016 13:03:02 +0200 Subject: [PATCH 08/37] Blog_id added to Person and blog & person id combination will be unique now --- .../android/datasets/PeopleTable.java | 19 ++++++++++++------- .../org/wordpress/android/models/Person.java | 9 ++++++++- .../android/ui/ActivityLauncher.java | 3 ++- .../android/ui/people/PeopleAdapter.java | 10 +++++----- .../android/ui/people/PersonActivity.java | 5 ++++- 5 files changed, 31 insertions(+), 15 deletions(-) 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 76e0d600caa5..cb9767861cb1 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -22,13 +22,16 @@ private static SQLiteDatabase getWritableDb() { public static void createTables(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + PEOPLE_TABLE + " (" - + "person_id INTEGER PRIMARY KEY DEFAULT 0," + + "person_id INTEGER DEFAULT 0," + + "blog_id INTEGER DEFAULT 0," + "user_name TEXT," + "first_name TEXT," + "last_name TEXT," + "display_name TEXT," + "avatar_url TEXT," - + "role TEXT)"); + + "role TEXT," + + "PRIMARY KEY (person_id, blog_id)" + + ");"); } private static void dropTables(SQLiteDatabase db) { @@ -48,6 +51,7 @@ public static void save(Person person) { public static void save(Person person, SQLiteDatabase database) { ContentValues values = new ContentValues(); values.put("person_id", person.getPersonId()); + values.put("blog_id", person.getBlogId()); values.put("user_name", person.getUsername()); values.put("first_name", person.getFirstName()); values.put("last_name", person.getLastName()); @@ -59,12 +63,13 @@ public static void save(Person person, SQLiteDatabase database) { /** * retrieve a single person - * @param personId - unique id in people table + * @param personId - id of a person in a particular blog + * @param blogId - blog the person belongs to * @return Person if found, null otherwise */ - public static Person getPerson(long personId) { - String[] args = { Long.toString(personId) }; - Cursor c = getReadableDb().rawQuery("SELECT * FROM " + PEOPLE_TABLE + " WHERE person_id=?", args); + public static Person getPerson(long personId, long blogId) { + String[] args = { Long.toString(personId), Long.toString(blogId) }; + Cursor c = getReadableDb().rawQuery("SELECT * FROM " + PEOPLE_TABLE + " WHERE person_id=? AND blog_id=?", args); try { if (!c.moveToFirst()) { @@ -78,7 +83,7 @@ public static Person getPerson(long personId) { String avatarUrl = c.getString(c.getColumnIndex("avatar_url")); Role role = Role.fromKey(c.getString(c.getColumnIndex("role"))); - return new Person(personId, username, firstName, lastName, displayName, avatarUrl, role); + return new Person(personId, blogId, username, firstName, lastName, displayName, avatarUrl, role); } finally { SqlUtils.closeCursor(c); } diff --git a/WordPress/src/main/java/org/wordpress/android/models/Person.java b/WordPress/src/main/java/org/wordpress/android/models/Person.java index 790eefdea11d..9980bb71c998 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/Person.java +++ b/WordPress/src/main/java/org/wordpress/android/models/Person.java @@ -1,7 +1,8 @@ package org.wordpress.android.models; public class Person { - public long personID; + private long personID; + private long blogID; private String username; private String firstName; @@ -11,6 +12,7 @@ public class Person { private Role role; public Person(long personID, + long blogID, String username, String firstName, String lastName, @@ -18,6 +20,7 @@ public Person(long personID, String avatarUrl, Role role) { this.personID = personID; + this.blogID = blogID; this.username = username; this.firstName = firstName; this.lastName = lastName; @@ -30,6 +33,10 @@ public long getPersonId() { return personID; } + public long getBlogId() { + return blogID; + } + public String getUsername() { return "@" + username; } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java b/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java index 93e58b0e9bbb..a55bd4027113 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java @@ -278,7 +278,8 @@ public static void addSelfHostedSiteForResult(Activity activity) { public static void viewPersonDetails(Context context, Person person) { Intent intent = new Intent(context, PersonActivity.class); - intent.putExtra(PersonActivity.EXTRA_PERSON_ID, person.personID); + intent.putExtra(PersonActivity.EXTRA_PERSON_ID, person.getPersonId()); + intent.putExtra(PersonActivity.EXTRA_BLOG_ID, person.getBlogId()); slideInFromRight(context, intent); } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java index c3e1c6e1f42d..c77368a85c05 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java @@ -27,10 +27,10 @@ public PeopleAdapter(Context context) { mAvatarSz = context.getResources().getDimensionPixelSize(R.dimen.avatar_sz_medium); mInflater = LayoutInflater.from(context); mPersonList = new ArrayList<>(); - mPersonList.add(new Person(1, "beaulebens", "Beau", "Lebens", "Beau", "http://lorempixum.com/76/76", Role.ADMIN)); - mPersonList.add(new Person(2, "ebinnion", "Eric", "Binnion", "Eric", "http://lorempixum.com/76/76", Role.AUTHOR)); - mPersonList.add(new Person(3, "javialvarez", "Javi", "Alvarez", "Javi", "http://lorempixum.com/76/76", Role.CONTRIBUTOR)); - mPersonList.add(new Person(4, "oguzkocer", "Oguz", "Kocer", "Oguz", "http://lorempixum.com/76/76", Role.EDITOR)); + mPersonList.add(new Person(1, 1, "beaulebens", "Beau", "Lebens", "Beau", "http://lorempixum.com/76/76", Role.ADMIN)); + mPersonList.add(new Person(2, 1, "ebinnion", "Eric", "Binnion", "Eric", "http://lorempixum.com/76/76", Role.AUTHOR)); + mPersonList.add(new Person(3, 1, "javialvarez", "Javi", "Alvarez", "Javi", "http://lorempixum.com/76/76", Role.CONTRIBUTOR)); + mPersonList.add(new Person(4, 1, "oguzkocer", "Oguz", "Kocer", "Oguz", "http://lorempixum.com/76/76", Role.EDITOR)); } @Override @@ -55,7 +55,7 @@ public long getItemId(int position) { if (person == null) { return 0; } - return person.personID; + return person.getPersonId(); } @Override diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java index 6575f7b64afb..82cb020b71f5 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java @@ -17,14 +17,17 @@ public class PersonActivity extends AppCompatActivity { public static final String EXTRA_PERSON_ID = "EXTRA_PERSON_ID"; + public static final String EXTRA_BLOG_ID = "EXTRA_BLOG_ID"; private long mPersonId; + private long mBlogId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPersonId = getIntent().getExtras().getLong(EXTRA_PERSON_ID); + mBlogId = getIntent().getExtras().getLong(EXTRA_BLOG_ID); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { @@ -60,7 +63,7 @@ private void refreshUserDetails() { TextView txtRole = (TextView) findViewById(R.id.person_role); TextView txtRemove = (TextView) findViewById(R.id.person_remove); - Person person = PeopleTable.getPerson(mPersonId); + Person person = PeopleTable.getPerson(mPersonId, mBlogId); if (person != null) { int avatarSz = getResources().getDimensionPixelSize(R.dimen.avatar_sz_large); From 0eecf5f65d0326ae88a3ceec7bc3082179c0fcec Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 30 Mar 2016 12:55:30 +0300 Subject: [PATCH 09/37] Introduced PeopleUtils with first iteration of fetchUsers implemented --- .../android/ui/people/utils/PeopleUtils.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java b/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java new file mode 100644 index 000000000000..8d322fc3402b --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java @@ -0,0 +1,40 @@ +package org.wordpress.android.ui.people.utils; + +import com.android.volley.VolleyError; +import com.wordpress.rest.RestRequest; + +import org.json.JSONObject; +import org.wordpress.android.WordPress; +import org.wordpress.android.util.AppLog; +import org.wordpress.android.util.AppLog.T; + +public class PeopleUtils { + + public static void fetchUsers(long siteId, final PeopleUtils.Callback callback) { + com.wordpress.rest.RestRequest.Listener listener = new RestRequest.Listener() { + @Override + public void onResponse(JSONObject jsonObject) { + if (jsonObject != null) { + callback.onSuccess(jsonObject); + } + } + }; + + RestRequest.ErrorListener errorListener = new RestRequest.ErrorListener() { + @Override + public void onErrorResponse(VolleyError volleyError) { + AppLog.e(T.API, volleyError); + callback.onError(volleyError); + } + }; + + String path = String.format("sites/%s/users", siteId); + WordPress.getRestClientUtilsV1_1().get(path, listener, errorListener); + } + + public interface Callback { + void onSuccess(JSONObject jsonObject); + + void onError(VolleyError error); + } +} From 550e1aaf19c77fd27bb866dbc38247712d260c5b Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 30 Mar 2016 14:29:34 +0300 Subject: [PATCH 10/37] Fetch users list when the people management activity is created --- .../ui/people/PeopleManagementActivity.java | 17 +++++++++++++++++ .../android/ui/people/utils/PeopleUtils.java | 8 +++++--- 2 files changed, 22 insertions(+), 3 deletions(-) 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 5c03c29a8ad8..f42c50bbe169 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 @@ -10,15 +10,23 @@ import android.widget.ListView; import org.wordpress.android.R; +import org.wordpress.android.WordPress; +import org.wordpress.android.models.Blog; import org.wordpress.android.models.Person; import org.wordpress.android.ui.ActivityLauncher; +import org.wordpress.android.ui.accounts.BlogUtils; +import org.wordpress.android.ui.people.utils.PeopleUtils; public class PeopleManagementActivity extends AppCompatActivity { + private int mBlogLocalId = BlogUtils.BLOG_ID_INVALID; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + mBlogLocalId = BlogUtils.getBlogLocalId(WordPress.getCurrentBlog()); + ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setHomeButtonEnabled(true); @@ -39,6 +47,8 @@ public void onItemClick(AdapterView parent, View view, int position, long id) ActivityLauncher.viewPersonDetails(context, person); } }); + + refreshUsersList(); } @Override @@ -55,4 +65,11 @@ public boolean onOptionsItemSelected(final MenuItem item) { } return super.onOptionsItemSelected(item); } + + private void refreshUsersList() { + Blog blog = WordPress.getBlog(mBlogLocalId); + if (blog != null) { + PeopleUtils.fetchUsers(blog.getDotComBlogId(), null); + } + } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java b/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java index 8d322fc3402b..d88602809014 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java @@ -10,11 +10,11 @@ public class PeopleUtils { - public static void fetchUsers(long siteId, final PeopleUtils.Callback callback) { + public static void fetchUsers(String siteId, final PeopleUtils.Callback callback) { com.wordpress.rest.RestRequest.Listener listener = new RestRequest.Listener() { @Override public void onResponse(JSONObject jsonObject) { - if (jsonObject != null) { + if (jsonObject != null && callback != null) { callback.onSuccess(jsonObject); } } @@ -24,7 +24,9 @@ public void onResponse(JSONObject jsonObject) { @Override public void onErrorResponse(VolleyError volleyError) { AppLog.e(T.API, volleyError); - callback.onError(volleyError); + if (callback != null) { + callback.onError(volleyError); + } } }; From 90db9868efefa22208112c0a2a4e264c43b7cb98 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 30 Mar 2016 15:00:52 +0300 Subject: [PATCH 11/37] Save people list received from the server --- .../android/datasets/PeopleTable.java | 26 ++++++++---- .../org/wordpress/android/models/Person.java | 28 ++++++++++--- .../android/ui/ActivityLauncher.java | 2 +- .../android/ui/people/PeopleAdapter.java | 8 ++-- .../android/ui/people/PersonActivity.java | 8 ++-- .../android/ui/people/utils/PeopleUtils.java | 41 +++++++++++++++++-- 6 files changed, 86 insertions(+), 27 deletions(-) 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 cb9767861cb1..0dfc9c2513ba 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -10,6 +10,8 @@ import org.wordpress.android.util.AppLog; import org.wordpress.android.util.SqlUtils; +import java.util.List; + public class PeopleTable { public static final String PEOPLE_TABLE = "people"; @@ -23,14 +25,14 @@ private static SQLiteDatabase getWritableDb() { public static void createTables(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + PEOPLE_TABLE + " (" + "person_id INTEGER DEFAULT 0," - + "blog_id INTEGER DEFAULT 0," + + "site_id INTEGER DEFAULT 0," + "user_name TEXT," + "first_name TEXT," + "last_name TEXT," + "display_name TEXT," + "avatar_url TEXT," + "role TEXT," - + "PRIMARY KEY (person_id, blog_id)" + + "PRIMARY KEY (person_id, site_id)" + ");"); } @@ -51,7 +53,7 @@ public static void save(Person person) { public static void save(Person person, SQLiteDatabase database) { ContentValues values = new ContentValues(); values.put("person_id", person.getPersonId()); - values.put("blog_id", person.getBlogId()); + values.put("site_id", person.getSiteID()); values.put("user_name", person.getUsername()); values.put("first_name", person.getFirstName()); values.put("last_name", person.getLastName()); @@ -61,15 +63,21 @@ public static void save(Person person, SQLiteDatabase database) { database.insertWithOnConflict(PEOPLE_TABLE, null, values, SQLiteDatabase.CONFLICT_REPLACE); } + public static void savePeople(List peopleList) { + for (Person person : peopleList) { + PeopleTable.save(person); + } + } + /** * retrieve a single person - * @param personId - id of a person in a particular blog - * @param blogId - blog the person belongs to + * @param personId - id of a person in a particular site + * @param siteID - site the person belongs to * @return Person if found, null otherwise */ - public static Person getPerson(long personId, long blogId) { - String[] args = { Long.toString(personId), Long.toString(blogId) }; - Cursor c = getReadableDb().rawQuery("SELECT * FROM " + PEOPLE_TABLE + " WHERE person_id=? AND blog_id=?", args); + public static Person getPerson(long personId, String siteID) { + String[] args = { Long.toString(personId), siteID }; + Cursor c = getReadableDb().rawQuery("SELECT * FROM " + PEOPLE_TABLE + " WHERE person_id=? AND site_id=?", args); try { if (!c.moveToFirst()) { @@ -83,7 +91,7 @@ public static Person getPerson(long personId, long blogId) { String avatarUrl = c.getString(c.getColumnIndex("avatar_url")); Role role = Role.fromKey(c.getString(c.getColumnIndex("role"))); - return new Person(personId, blogId, username, firstName, lastName, displayName, avatarUrl, role); + return new Person(personId, siteID, username, firstName, lastName, displayName, avatarUrl, role); } finally { SqlUtils.closeCursor(c); } diff --git a/WordPress/src/main/java/org/wordpress/android/models/Person.java b/WordPress/src/main/java/org/wordpress/android/models/Person.java index 9980bb71c998..5531ac889725 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/Person.java +++ b/WordPress/src/main/java/org/wordpress/android/models/Person.java @@ -1,8 +1,10 @@ package org.wordpress.android.models; +import org.json.JSONObject; + public class Person { private long personID; - private long blogID; + private String siteID; private String username; private String firstName; @@ -12,7 +14,7 @@ public class Person { private Role role; public Person(long personID, - long blogID, + String siteID, String username, String firstName, String lastName, @@ -20,7 +22,7 @@ public Person(long personID, String avatarUrl, Role role) { this.personID = personID; - this.blogID = blogID; + this.siteID = siteID; this.username = username; this.firstName = firstName; this.lastName = lastName; @@ -29,12 +31,28 @@ public Person(long personID, this.role = role; } + public static Person fromJSON(JSONObject json, String siteID) { + if (json == null) { + return null; + } + + long personID = Long.parseLong(json.optString("ID")); + String username = json.optString("login"); + String firstName = json.optString("first_name"); + String lastName = json.optString("last_name"); + String displayName = json.optString("nice_name"); + String avatarUrl = json.optString("avatar_URL"); + Role role = Role.fromKey(json.optJSONArray("roles").optString(0)); + + return new Person(personID, siteID, username, firstName, lastName, displayName, avatarUrl, role); + } + public long getPersonId() { return personID; } - public long getBlogId() { - return blogID; + public String getSiteID() { + return siteID; } public String getUsername() { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java b/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java index 44a5673489b2..c69f545898fc 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java @@ -286,7 +286,7 @@ public static void addSelfHostedSiteForResult(Activity activity) { public static void viewPersonDetails(Context context, Person person) { Intent intent = new Intent(context, PersonActivity.class); intent.putExtra(PersonActivity.EXTRA_PERSON_ID, person.getPersonId()); - intent.putExtra(PersonActivity.EXTRA_BLOG_ID, person.getBlogId()); + intent.putExtra(PersonActivity.EXTRA_SITE_ID, person.getSiteID()); slideInFromRight(context, intent); } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java index c77368a85c05..152c8ed9955d 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java @@ -27,10 +27,10 @@ public PeopleAdapter(Context context) { mAvatarSz = context.getResources().getDimensionPixelSize(R.dimen.avatar_sz_medium); mInflater = LayoutInflater.from(context); mPersonList = new ArrayList<>(); - mPersonList.add(new Person(1, 1, "beaulebens", "Beau", "Lebens", "Beau", "http://lorempixum.com/76/76", Role.ADMIN)); - mPersonList.add(new Person(2, 1, "ebinnion", "Eric", "Binnion", "Eric", "http://lorempixum.com/76/76", Role.AUTHOR)); - mPersonList.add(new Person(3, 1, "javialvarez", "Javi", "Alvarez", "Javi", "http://lorempixum.com/76/76", Role.CONTRIBUTOR)); - mPersonList.add(new Person(4, 1, "oguzkocer", "Oguz", "Kocer", "Oguz", "http://lorempixum.com/76/76", Role.EDITOR)); + mPersonList.add(new Person(1, "1", "beaulebens", "Beau", "Lebens", "Beau", "http://lorempixum.com/76/76", Role.ADMIN)); + mPersonList.add(new Person(2, "1", "ebinnion", "Eric", "Binnion", "Eric", "http://lorempixum.com/76/76", Role.AUTHOR)); + mPersonList.add(new Person(3, "1", "javialvarez", "Javi", "Alvarez", "Javi", "http://lorempixum.com/76/76", Role.CONTRIBUTOR)); + mPersonList.add(new Person(4, "1", "oguzkocer", "Oguz", "Kocer", "Oguz", "http://lorempixum.com/76/76", Role.EDITOR)); } @Override diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java index 82cb020b71f5..26df05b3b3e6 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java @@ -17,17 +17,17 @@ public class PersonActivity extends AppCompatActivity { public static final String EXTRA_PERSON_ID = "EXTRA_PERSON_ID"; - public static final String EXTRA_BLOG_ID = "EXTRA_BLOG_ID"; + public static final String EXTRA_SITE_ID = "EXTRA_SITE_ID"; private long mPersonId; - private long mBlogId; + private String mSiteId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPersonId = getIntent().getExtras().getLong(EXTRA_PERSON_ID); - mBlogId = getIntent().getExtras().getLong(EXTRA_BLOG_ID); + mSiteId = getIntent().getExtras().getString(EXTRA_SITE_ID); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { @@ -63,7 +63,7 @@ private void refreshUserDetails() { TextView txtRole = (TextView) findViewById(R.id.person_role); TextView txtRemove = (TextView) findViewById(R.id.person_remove); - Person person = PeopleTable.getPerson(mPersonId, mBlogId); + Person person = PeopleTable.getPerson(mPersonId, mSiteId); if (person != null) { int avatarSz = getResources().getDimensionPixelSize(R.dimen.avatar_sz_large); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java b/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java index d88602809014..5a10753e4357 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java @@ -3,19 +3,37 @@ import com.android.volley.VolleyError; import com.wordpress.rest.RestRequest; +import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; import org.wordpress.android.WordPress; +import org.wordpress.android.datasets.PeopleTable; +import org.wordpress.android.models.Person; import org.wordpress.android.util.AppLog; import org.wordpress.android.util.AppLog.T; +import java.util.ArrayList; +import java.util.List; + public class PeopleUtils { - public static void fetchUsers(String siteId, final PeopleUtils.Callback callback) { + public static void fetchUsers(final String siteId, final PeopleUtils.Callback callback) { com.wordpress.rest.RestRequest.Listener listener = new RestRequest.Listener() { @Override public void onResponse(JSONObject jsonObject) { - if (jsonObject != null && callback != null) { - callback.onSuccess(jsonObject); + if (jsonObject != null) { + try { + JSONArray jsonArray = jsonObject.getJSONArray("users"); + List people = peopleListFromJSON(jsonArray, siteId); + PeopleTable.savePeople(people); + + if (callback != null) { + callback.onSuccess(); + } + } + catch (JSONException e) { + AppLog.e(T.API, e); + } } } }; @@ -34,8 +52,23 @@ public void onErrorResponse(VolleyError volleyError) { WordPress.getRestClientUtilsV1_1().get(path, listener, errorListener); } + public static List peopleListFromJSON(JSONArray jsonArray, String siteID) { + if (jsonArray == null) { + return null; + } + + ArrayList peopleList = new ArrayList<>(jsonArray.length()); + + for (int i = 0; i < jsonArray.length(); i++) { + Person person = Person.fromJSON(jsonArray.optJSONObject(i), siteID); + peopleList.add(person); + } + + return peopleList; + } + public interface Callback { - void onSuccess(JSONObject jsonObject); + void onSuccess(); void onError(VolleyError error); } From 9d8ba0ae97a1c23ff5170ec15a2b93e18db0421e Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 31 Mar 2016 11:13:02 +0300 Subject: [PATCH 12/37] getPersonFromCursor method introduced to reuse it --- .../android/datasets/PeopleTable.java | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) 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 0dfc9c2513ba..d1113b4d0f20 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -10,6 +10,7 @@ import org.wordpress.android.util.AppLog; import org.wordpress.android.util.SqlUtils; +import java.util.ArrayList; import java.util.List; public class PeopleTable { @@ -78,22 +79,24 @@ public static void savePeople(List peopleList) { public static Person getPerson(long personId, String siteID) { String[] args = { Long.toString(personId), siteID }; Cursor c = getReadableDb().rawQuery("SELECT * FROM " + PEOPLE_TABLE + " WHERE person_id=? AND site_id=?", args); - try { - if (!c.moveToFirst()) { + if (!c.moveToFirst()) return null; - } - - String username = c.getString(c.getColumnIndex("user_name")); - String firstName = c.getString(c.getColumnIndex("first_name")); - String lastName = c.getString(c.getColumnIndex("last_name")); - String displayName = c.getString(c.getColumnIndex("display_name")); - String avatarUrl = c.getString(c.getColumnIndex("avatar_url")); - Role role = Role.fromKey(c.getString(c.getColumnIndex("role"))); - - return new Person(personId, siteID, username, firstName, lastName, displayName, avatarUrl, role); + return getPersonFromCursor(c, siteID); } finally { SqlUtils.closeCursor(c); } } + + private static Person getPersonFromCursor(Cursor c, String siteID) { + long personId = c.getInt(c.getColumnIndex("person_id")); + String username = c.getString(c.getColumnIndex("user_name")); + String firstName = c.getString(c.getColumnIndex("first_name")); + String lastName = c.getString(c.getColumnIndex("last_name")); + String displayName = c.getString(c.getColumnIndex("display_name")); + String avatarUrl = c.getString(c.getColumnIndex("avatar_url")); + Role role = Role.fromKey(c.getString(c.getColumnIndex("role"))); + + return new Person(personId, siteID, username, firstName, lastName, displayName, avatarUrl, role); + } } From cf9379887973e13fda0300487d8a8377e04139c8 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 31 Mar 2016 11:38:15 +0300 Subject: [PATCH 13/37] getPeople implemented for PeopleTable --- .../wordpress/android/datasets/PeopleTable.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) 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 d1113b4d0f20..816e4b72e902 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -70,6 +70,23 @@ public static void savePeople(List peopleList) { } } + public static List getPeople(String siteID) { + List comments = new ArrayList<>(); + String[] args = { siteID }; + Cursor c = getReadableDb().rawQuery("SELECT * FROM " + PEOPLE_TABLE + " WHERE site_id=?", args); + + try { + while (c.moveToNext()) { + Person comment = getPersonFromCursor(c, siteID); + comments.add(comment); + } + + return comments; + } finally { + SqlUtils.closeCursor(c); + } + } + /** * retrieve a single person * @param personId - id of a person in a particular site From bae0d91ffa8e8a7fe1864cf698cd71c1cca31147 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 31 Mar 2016 12:53:24 +0300 Subject: [PATCH 14/37] Network & data layers connected to PeopleManagementActivity to show users --- .../android/datasets/PeopleTable.java | 10 +++---- .../org/wordpress/android/models/Person.java | 8 ++--- .../android/ui/people/PeopleAdapter.java | 29 +++++++++++-------- .../ui/people/PeopleManagementActivity.java | 18 ++++++++++-- .../android/ui/people/PersonActivity.java | 4 +-- .../android/ui/people/utils/PeopleUtils.java | 6 ++-- 6 files changed, 47 insertions(+), 28 deletions(-) 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 816e4b72e902..50bf4033513b 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -70,9 +70,9 @@ public static void savePeople(List peopleList) { } } - public static List getPeople(String siteID) { + public static List getPeople(long siteID) { List comments = new ArrayList<>(); - String[] args = { siteID }; + String[] args = { Long.toString(siteID) }; Cursor c = getReadableDb().rawQuery("SELECT * FROM " + PEOPLE_TABLE + " WHERE site_id=?", args); try { @@ -93,8 +93,8 @@ public static List getPeople(String siteID) { * @param siteID - site the person belongs to * @return Person if found, null otherwise */ - public static Person getPerson(long personId, String siteID) { - String[] args = { Long.toString(personId), siteID }; + public static Person getPerson(long personId, long siteID) { + String[] args = { Long.toString(personId), Long.toString(siteID) }; Cursor c = getReadableDb().rawQuery("SELECT * FROM " + PEOPLE_TABLE + " WHERE person_id=? AND site_id=?", args); try { if (!c.moveToFirst()) @@ -105,7 +105,7 @@ public static Person getPerson(long personId, String siteID) { } } - private static Person getPersonFromCursor(Cursor c, String siteID) { + private static Person getPersonFromCursor(Cursor c, long siteID) { long personId = c.getInt(c.getColumnIndex("person_id")); String username = c.getString(c.getColumnIndex("user_name")); String firstName = c.getString(c.getColumnIndex("first_name")); diff --git a/WordPress/src/main/java/org/wordpress/android/models/Person.java b/WordPress/src/main/java/org/wordpress/android/models/Person.java index 5531ac889725..2f705846ab55 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/Person.java +++ b/WordPress/src/main/java/org/wordpress/android/models/Person.java @@ -4,7 +4,7 @@ public class Person { private long personID; - private String siteID; + private long siteID; private String username; private String firstName; @@ -14,7 +14,7 @@ public class Person { private Role role; public Person(long personID, - String siteID, + long siteID, String username, String firstName, String lastName, @@ -44,14 +44,14 @@ public static Person fromJSON(JSONObject json, String siteID) { String avatarUrl = json.optString("avatar_URL"); Role role = Role.fromKey(json.optJSONArray("roles").optString(0)); - return new Person(personID, siteID, username, firstName, lastName, displayName, avatarUrl, role); + return new Person(personID, Long.parseLong(siteID), username, firstName, lastName, displayName, avatarUrl, role); } public long getPersonId() { return personID; } - public String getSiteID() { + public long getSiteID() { return siteID; } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java index 152c8ed9955d..33b22b89cca5 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java @@ -8,45 +8,50 @@ import android.widget.TextView; import org.wordpress.android.R; +import org.wordpress.android.datasets.PeopleTable; import org.wordpress.android.models.Person; import org.wordpress.android.models.Role; import org.wordpress.android.util.GravatarUtils; import org.wordpress.android.widgets.WPNetworkImageView; -import java.util.ArrayList; import java.util.List; public class PeopleAdapter extends BaseAdapter { private final Context mContext; private final LayoutInflater mInflater; - private List mPersonList; + private List mPeopleList; private int mAvatarSz; + private int mSiteID; - public PeopleAdapter(Context context) { + public PeopleAdapter(Context context, int siteID) { mContext = context; mAvatarSz = context.getResources().getDimensionPixelSize(R.dimen.avatar_sz_medium); mInflater = LayoutInflater.from(context); - mPersonList = new ArrayList<>(); - mPersonList.add(new Person(1, "1", "beaulebens", "Beau", "Lebens", "Beau", "http://lorempixum.com/76/76", Role.ADMIN)); - mPersonList.add(new Person(2, "1", "ebinnion", "Eric", "Binnion", "Eric", "http://lorempixum.com/76/76", Role.AUTHOR)); - mPersonList.add(new Person(3, "1", "javialvarez", "Javi", "Alvarez", "Javi", "http://lorempixum.com/76/76", Role.CONTRIBUTOR)); - mPersonList.add(new Person(4, "1", "oguzkocer", "Oguz", "Kocer", "Oguz", "http://lorempixum.com/76/76", Role.EDITOR)); + mSiteID = siteID; + mPeopleList = PeopleTable.getPeople(mSiteID); + } + + @Override + public void notifyDataSetChanged() { + mPeopleList = PeopleTable.getPeople(mSiteID); + + super.notifyDataSetChanged(); } @Override public int getCount() { - if (mPersonList == null) { + if (mPeopleList == null) { return 0; } - return mPersonList.size(); + return mPeopleList.size(); } @Override public Person getItem(int position) { - if (mPersonList == null) { + if (mPeopleList == null) { return null; } - return mPersonList.get(position); + return mPeopleList.get(position); } @Override 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 f42c50bbe169..0dd1f12d6a11 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 @@ -9,6 +9,8 @@ import android.widget.AdapterView; import android.widget.ListView; +import com.android.volley.VolleyError; + import org.wordpress.android.R; import org.wordpress.android.WordPress; import org.wordpress.android.models.Blog; @@ -20,6 +22,7 @@ public class PeopleManagementActivity extends AppCompatActivity { private int mBlogLocalId = BlogUtils.BLOG_ID_INVALID; + private PeopleAdapter mPeopleAdapter; @Override public void onCreate(Bundle savedInstanceState) { @@ -37,7 +40,8 @@ public void onCreate(Bundle savedInstanceState) { setTitle(R.string.people); ListView listView = (ListView)findViewById(android.R.id.list); - listView.setAdapter(new PeopleAdapter(this)); + mPeopleAdapter = new PeopleAdapter(this, mBlogLocalId); + listView.setAdapter(mPeopleAdapter); final Activity context = this; listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @@ -69,7 +73,17 @@ public boolean onOptionsItemSelected(final MenuItem item) { private void refreshUsersList() { Blog blog = WordPress.getBlog(mBlogLocalId); if (blog != null) { - PeopleUtils.fetchUsers(blog.getDotComBlogId(), null); + PeopleUtils.fetchUsers(blog.getDotComBlogId(), new PeopleUtils.Callback() { + @Override + public void onSuccess() { + mPeopleAdapter.notifyDataSetChanged(); + } + + @Override + public void onError(VolleyError error) { + + } + }); } } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java index 26df05b3b3e6..ea0aacc7b85e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java @@ -20,14 +20,14 @@ public class PersonActivity extends AppCompatActivity { public static final String EXTRA_SITE_ID = "EXTRA_SITE_ID"; private long mPersonId; - private String mSiteId; + private long mSiteId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPersonId = getIntent().getExtras().getLong(EXTRA_PERSON_ID); - mSiteId = getIntent().getExtras().getString(EXTRA_SITE_ID); + mSiteId = getIntent().getExtras().getLong(EXTRA_SITE_ID); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java b/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java index 5a10753e4357..cd5386a1167f 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java @@ -17,14 +17,14 @@ public class PeopleUtils { - public static void fetchUsers(final String siteId, final PeopleUtils.Callback callback) { + public static void fetchUsers(final String siteID, final PeopleUtils.Callback callback) { com.wordpress.rest.RestRequest.Listener listener = new RestRequest.Listener() { @Override public void onResponse(JSONObject jsonObject) { if (jsonObject != null) { try { JSONArray jsonArray = jsonObject.getJSONArray("users"); - List people = peopleListFromJSON(jsonArray, siteId); + List people = peopleListFromJSON(jsonArray, siteID); PeopleTable.savePeople(people); if (callback != null) { @@ -48,7 +48,7 @@ public void onErrorResponse(VolleyError volleyError) { } }; - String path = String.format("sites/%s/users", siteId); + String path = String.format("sites/%s/users", siteID); WordPress.getRestClientUtilsV1_1().get(path, listener, errorListener); } From 2a61cf84a6a9568695ff4dbb3169a99fe805de2b Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 31 Mar 2016 12:56:14 +0300 Subject: [PATCH 15/37] Fixed the variable name for retrieving people list from db --- .../java/org/wordpress/android/datasets/PeopleTable.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 50bf4033513b..ae0fa880fc4d 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -71,17 +71,17 @@ public static void savePeople(List peopleList) { } public static List getPeople(long siteID) { - List comments = new ArrayList<>(); + List people = new ArrayList<>(); String[] args = { Long.toString(siteID) }; Cursor c = getReadableDb().rawQuery("SELECT * FROM " + PEOPLE_TABLE + " WHERE site_id=?", args); try { while (c.moveToNext()) { Person comment = getPersonFromCursor(c, siteID); - comments.add(comment); + people.add(comment); } - return comments; + return people; } finally { SqlUtils.closeCursor(c); } From 28852ad43cb14c4f03a2c2f991110ecf7182ebef Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 31 Mar 2016 13:01:00 +0300 Subject: [PATCH 16/37] The remote blog id should be used to retrieve people from db --- .../android/ui/people/PeopleAdapter.java | 4 +- .../ui/people/PeopleManagementActivity.java | 50 ++++++++++--------- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java index 33b22b89cca5..8db05e8ec070 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java @@ -21,9 +21,9 @@ public class PeopleAdapter extends BaseAdapter { private final LayoutInflater mInflater; private List mPeopleList; private int mAvatarSz; - private int mSiteID; + private long mSiteID; - public PeopleAdapter(Context context, int siteID) { + public PeopleAdapter(Context context, long siteID) { mContext = context; mAvatarSz = context.getResources().getDimensionPixelSize(R.dimen.avatar_sz_medium); mInflater = LayoutInflater.from(context); 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 0dd1f12d6a11..0a779f6d3912 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 @@ -22,6 +22,7 @@ public class PeopleManagementActivity extends AppCompatActivity { private int mBlogLocalId = BlogUtils.BLOG_ID_INVALID; + private Blog mBlog; private PeopleAdapter mPeopleAdapter; @Override @@ -29,6 +30,7 @@ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mBlogLocalId = BlogUtils.getBlogLocalId(WordPress.getCurrentBlog()); + mBlog = WordPress.getBlog(mBlogLocalId); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { @@ -39,20 +41,23 @@ public void onCreate(Bundle savedInstanceState) { setTitle(R.string.people); - ListView listView = (ListView)findViewById(android.R.id.list); - mPeopleAdapter = new PeopleAdapter(this, mBlogLocalId); - listView.setAdapter(mPeopleAdapter); + if (mBlog != null) { + ListView listView = (ListView)findViewById(android.R.id.list); + // People are saved with their dotcom blog id + mPeopleAdapter = new PeopleAdapter(this, Long.parseLong(mBlog.getDotComBlogId())); + listView.setAdapter(mPeopleAdapter); - final Activity context = this; - listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - Person person = (Person) parent.getItemAtPosition(position); - ActivityLauncher.viewPersonDetails(context, person); - } - }); + final Activity context = this; + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Person person = (Person) parent.getItemAtPosition(position); + ActivityLauncher.viewPersonDetails(context, person); + } + }); - refreshUsersList(); + refreshUsersList(); + } } @Override @@ -71,19 +76,16 @@ public boolean onOptionsItemSelected(final MenuItem item) { } private void refreshUsersList() { - Blog blog = WordPress.getBlog(mBlogLocalId); - if (blog != null) { - PeopleUtils.fetchUsers(blog.getDotComBlogId(), new PeopleUtils.Callback() { - @Override - public void onSuccess() { - mPeopleAdapter.notifyDataSetChanged(); - } + PeopleUtils.fetchUsers(mBlog.getDotComBlogId(), new PeopleUtils.Callback() { + @Override + public void onSuccess() { + mPeopleAdapter.notifyDataSetChanged(); + } - @Override - public void onError(VolleyError error) { + @Override + public void onError(VolleyError error) { - } - }); - } + } + }); } } From 154cd3895e81135a3b48498799043d78fd935d5f Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 31 Mar 2016 13:04:30 +0300 Subject: [PATCH 17/37] Fixed the error message for json parsing error for sites/users request --- .../java/org/wordpress/android/ui/people/utils/PeopleUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java b/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java index cd5386a1167f..4388a6a822dd 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java @@ -32,7 +32,7 @@ public void onResponse(JSONObject jsonObject) { } } catch (JSONException e) { - AppLog.e(T.API, e); + AppLog.e(T.API, "JSON exception occurred while parsing the response for sites/%s/users: " + e); } } } From 055f14faa5696cedd9af223e80a0ccecdf41c6d5 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 31 Mar 2016 13:07:56 +0300 Subject: [PATCH 18/37] Add @ to username in Adapter instead of Model --- .../src/main/java/org/wordpress/android/models/Person.java | 2 +- .../java/org/wordpress/android/ui/people/PeopleAdapter.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/models/Person.java b/WordPress/src/main/java/org/wordpress/android/models/Person.java index 2f705846ab55..33c6d8970c16 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/Person.java +++ b/WordPress/src/main/java/org/wordpress/android/models/Person.java @@ -56,7 +56,7 @@ public long getSiteID() { } public String getUsername() { - return "@" + username; + return username; } public void setUsername(String username) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java index 8db05e8ec070..8eb74b2deac9 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java @@ -81,7 +81,7 @@ public View getView(int position, View convertView, ViewGroup parent) { String avatarUrl = GravatarUtils.fixGravatarUrl(person.getAvatarUrl(), mAvatarSz); holder.imgAvatar.setImageUrl(avatarUrl, WPNetworkImageView.ImageType.AVATAR); holder.txtDisplayName.setText(person.getDisplayName()); - holder.txtUsername.setText(person.getUsername()); + holder.txtUsername.setText(String.format("@%s", person.getUsername())); holder.txtRole.setText(Role.getLabel(mContext, person.getRole())); holder.txtRole.setBackgroundColor(Role.backgroundColor(mContext, person.getRole())); } From 5f45582ccf6b63a6a6755d094b71618dfdb58332 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 1 Apr 2016 12:07:45 +0300 Subject: [PATCH 19/37] Use local blog id instead of remote site id for people --- .../android/datasets/PeopleTable.java | 28 +++++++++---------- .../org/wordpress/android/models/Person.java | 14 +++++----- .../android/ui/ActivityLauncher.java | 2 +- .../android/ui/people/PeopleAdapter.java | 10 +++---- .../ui/people/PeopleManagementActivity.java | 10 +++---- .../android/ui/people/PersonActivity.java | 8 +++--- .../android/ui/people/utils/PeopleUtils.java | 8 +++--- 7 files changed, 40 insertions(+), 40 deletions(-) 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 ae0fa880fc4d..f418c775b65f 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -26,14 +26,14 @@ private static SQLiteDatabase getWritableDb() { public static void createTables(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + PEOPLE_TABLE + " (" + "person_id INTEGER DEFAULT 0," - + "site_id INTEGER DEFAULT 0," + + "local_blog_id INTEGER DEFAULT 0," + "user_name TEXT," + "first_name TEXT," + "last_name TEXT," + "display_name TEXT," + "avatar_url TEXT," + "role TEXT," - + "PRIMARY KEY (person_id, site_id)" + + "PRIMARY KEY (person_id, local_blog_id)" + ");"); } @@ -54,7 +54,7 @@ public static void save(Person person) { public static void save(Person person, SQLiteDatabase database) { ContentValues values = new ContentValues(); values.put("person_id", person.getPersonId()); - values.put("site_id", person.getSiteID()); + values.put("local_blog_id", person.getLocalTableBlogId()); values.put("user_name", person.getUsername()); values.put("first_name", person.getFirstName()); values.put("last_name", person.getLastName()); @@ -70,14 +70,14 @@ public static void savePeople(List peopleList) { } } - public static List getPeople(long siteID) { + public static List getPeople(int localTableBlogId) { List people = new ArrayList<>(); - String[] args = { Long.toString(siteID) }; - Cursor c = getReadableDb().rawQuery("SELECT * FROM " + PEOPLE_TABLE + " WHERE site_id=?", args); + String[] args = { Integer.toString(localTableBlogId) }; + Cursor c = getReadableDb().rawQuery("SELECT * FROM " + PEOPLE_TABLE + " WHERE local_blog_id=?", args); try { while (c.moveToNext()) { - Person comment = getPersonFromCursor(c, siteID); + Person comment = getPersonFromCursor(c, localTableBlogId); people.add(comment); } @@ -90,22 +90,22 @@ public static List getPeople(long siteID) { /** * retrieve a single person * @param personId - id of a person in a particular site - * @param siteID - site the person belongs to + * @param localTableBlogId - the local blog id the user belongs to * @return Person if found, null otherwise */ - public static Person getPerson(long personId, long siteID) { - String[] args = { Long.toString(personId), Long.toString(siteID) }; - Cursor c = getReadableDb().rawQuery("SELECT * FROM " + PEOPLE_TABLE + " WHERE person_id=? AND site_id=?", args); + public static Person getPerson(long personId, int localTableBlogId) { + String[] args = { Long.toString(personId), Integer.toString(localTableBlogId) }; + Cursor c = getReadableDb().rawQuery("SELECT * FROM " + PEOPLE_TABLE + " WHERE person_id=? AND local_blog_id=?", args); try { if (!c.moveToFirst()) return null; - return getPersonFromCursor(c, siteID); + return getPersonFromCursor(c, localTableBlogId); } finally { SqlUtils.closeCursor(c); } } - private static Person getPersonFromCursor(Cursor c, long siteID) { + private static Person getPersonFromCursor(Cursor c, int localTableBlogId) { long personId = c.getInt(c.getColumnIndex("person_id")); String username = c.getString(c.getColumnIndex("user_name")); String firstName = c.getString(c.getColumnIndex("first_name")); @@ -114,6 +114,6 @@ private static Person getPersonFromCursor(Cursor c, long siteID) { String avatarUrl = c.getString(c.getColumnIndex("avatar_url")); Role role = Role.fromKey(c.getString(c.getColumnIndex("role"))); - return new Person(personId, siteID, username, firstName, lastName, displayName, avatarUrl, role); + return new Person(personId, localTableBlogId, username, firstName, lastName, displayName, avatarUrl, role); } } diff --git a/WordPress/src/main/java/org/wordpress/android/models/Person.java b/WordPress/src/main/java/org/wordpress/android/models/Person.java index 33c6d8970c16..9643196efdb9 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/Person.java +++ b/WordPress/src/main/java/org/wordpress/android/models/Person.java @@ -4,7 +4,7 @@ public class Person { private long personID; - private long siteID; + private int localTableBlogId; private String username; private String firstName; @@ -14,7 +14,7 @@ public class Person { private Role role; public Person(long personID, - long siteID, + int localTableBlogId, String username, String firstName, String lastName, @@ -22,7 +22,7 @@ public Person(long personID, String avatarUrl, Role role) { this.personID = personID; - this.siteID = siteID; + this.localTableBlogId = localTableBlogId; this.username = username; this.firstName = firstName; this.lastName = lastName; @@ -31,7 +31,7 @@ public Person(long personID, this.role = role; } - public static Person fromJSON(JSONObject json, String siteID) { + public static Person fromJSON(JSONObject json, int localTableBlogId) { if (json == null) { return null; } @@ -44,15 +44,15 @@ public static Person fromJSON(JSONObject json, String siteID) { String avatarUrl = json.optString("avatar_URL"); Role role = Role.fromKey(json.optJSONArray("roles").optString(0)); - return new Person(personID, Long.parseLong(siteID), username, firstName, lastName, displayName, avatarUrl, role); + return new Person(personID, localTableBlogId, username, firstName, lastName, displayName, avatarUrl, role); } public long getPersonId() { return personID; } - public long getSiteID() { - return siteID; + public long getLocalTableBlogId() { + return localTableBlogId; } public String getUsername() { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java b/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java index c69f545898fc..b5eb345e5369 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java @@ -286,7 +286,7 @@ public static void addSelfHostedSiteForResult(Activity activity) { public static void viewPersonDetails(Context context, Person person) { Intent intent = new Intent(context, PersonActivity.class); intent.putExtra(PersonActivity.EXTRA_PERSON_ID, person.getPersonId()); - intent.putExtra(PersonActivity.EXTRA_SITE_ID, person.getSiteID()); + intent.putExtra(PersonActivity.EXTRA_LOCAL_BLOG_ID, person.getLocalTableBlogId()); slideInFromRight(context, intent); } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java index 8eb74b2deac9..2816faab18a7 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java @@ -21,19 +21,19 @@ public class PeopleAdapter extends BaseAdapter { private final LayoutInflater mInflater; private List mPeopleList; private int mAvatarSz; - private long mSiteID; + private int mLocalBlogId; - public PeopleAdapter(Context context, long siteID) { + public PeopleAdapter(Context context, int localBlogId) { mContext = context; mAvatarSz = context.getResources().getDimensionPixelSize(R.dimen.avatar_sz_medium); mInflater = LayoutInflater.from(context); - mSiteID = siteID; - mPeopleList = PeopleTable.getPeople(mSiteID); + mLocalBlogId = localBlogId; + mPeopleList = PeopleTable.getPeople(mLocalBlogId); } @Override public void notifyDataSetChanged() { - mPeopleList = PeopleTable.getPeople(mSiteID); + mPeopleList = PeopleTable.getPeople(mLocalBlogId); super.notifyDataSetChanged(); } 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 0a779f6d3912..ba1ca44b2265 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 @@ -21,7 +21,7 @@ public class PeopleManagementActivity extends AppCompatActivity { - private int mBlogLocalId = BlogUtils.BLOG_ID_INVALID; + private int mLocalBlogId = BlogUtils.BLOG_ID_INVALID; private Blog mBlog; private PeopleAdapter mPeopleAdapter; @@ -29,8 +29,8 @@ public class PeopleManagementActivity extends AppCompatActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mBlogLocalId = BlogUtils.getBlogLocalId(WordPress.getCurrentBlog()); - mBlog = WordPress.getBlog(mBlogLocalId); + mLocalBlogId = BlogUtils.getBlogLocalId(WordPress.getCurrentBlog()); + mBlog = WordPress.getBlog(mLocalBlogId); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { @@ -44,7 +44,7 @@ public void onCreate(Bundle savedInstanceState) { if (mBlog != null) { ListView listView = (ListView)findViewById(android.R.id.list); // People are saved with their dotcom blog id - mPeopleAdapter = new PeopleAdapter(this, Long.parseLong(mBlog.getDotComBlogId())); + mPeopleAdapter = new PeopleAdapter(this, mLocalBlogId); listView.setAdapter(mPeopleAdapter); final Activity context = this; @@ -76,7 +76,7 @@ public boolean onOptionsItemSelected(final MenuItem item) { } private void refreshUsersList() { - PeopleUtils.fetchUsers(mBlog.getDotComBlogId(), new PeopleUtils.Callback() { + PeopleUtils.fetchUsers(mBlog.getDotComBlogId(), mLocalBlogId, new PeopleUtils.Callback() { @Override public void onSuccess() { mPeopleAdapter.notifyDataSetChanged(); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java index ea0aacc7b85e..5914cc82065e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java @@ -17,17 +17,17 @@ public class PersonActivity extends AppCompatActivity { public static final String EXTRA_PERSON_ID = "EXTRA_PERSON_ID"; - public static final String EXTRA_SITE_ID = "EXTRA_SITE_ID"; + public static final String EXTRA_LOCAL_BLOG_ID = "EXTRA_LOCAL_BLOG_ID"; private long mPersonId; - private long mSiteId; + private int mLocalBlogId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPersonId = getIntent().getExtras().getLong(EXTRA_PERSON_ID); - mSiteId = getIntent().getExtras().getLong(EXTRA_SITE_ID); + mLocalBlogId = getIntent().getExtras().getInt(EXTRA_LOCAL_BLOG_ID); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { @@ -63,7 +63,7 @@ private void refreshUserDetails() { TextView txtRole = (TextView) findViewById(R.id.person_role); TextView txtRemove = (TextView) findViewById(R.id.person_remove); - Person person = PeopleTable.getPerson(mPersonId, mSiteId); + Person person = PeopleTable.getPerson(mPersonId, mLocalBlogId); if (person != null) { int avatarSz = getResources().getDimensionPixelSize(R.dimen.avatar_sz_large); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java b/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java index 4388a6a822dd..74ff18397880 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java @@ -17,14 +17,14 @@ public class PeopleUtils { - public static void fetchUsers(final String siteID, final PeopleUtils.Callback callback) { + public static void fetchUsers(String siteID, final int localTableBlogId, final PeopleUtils.Callback callback) { com.wordpress.rest.RestRequest.Listener listener = new RestRequest.Listener() { @Override public void onResponse(JSONObject jsonObject) { if (jsonObject != null) { try { JSONArray jsonArray = jsonObject.getJSONArray("users"); - List people = peopleListFromJSON(jsonArray, siteID); + List people = peopleListFromJSON(jsonArray, localTableBlogId); PeopleTable.savePeople(people); if (callback != null) { @@ -52,7 +52,7 @@ public void onErrorResponse(VolleyError volleyError) { WordPress.getRestClientUtilsV1_1().get(path, listener, errorListener); } - public static List peopleListFromJSON(JSONArray jsonArray, String siteID) { + public static List peopleListFromJSON(JSONArray jsonArray, int localTableBlogId) { if (jsonArray == null) { return null; } @@ -60,7 +60,7 @@ public static List peopleListFromJSON(JSONArray jsonArray, String siteID ArrayList peopleList = new ArrayList<>(jsonArray.length()); for (int i = 0; i < jsonArray.length(); i++) { - Person person = Person.fromJSON(jsonArray.optJSONObject(i), siteID); + Person person = Person.fromJSON(jsonArray.optJSONObject(i), localTableBlogId); peopleList.add(person); } From c0dfecaa2c4182af1cafc022ea42cb2c030c312d Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 1 Apr 2016 12:08:56 +0300 Subject: [PATCH 20/37] getLocalTableBlogId should return int instead of long --- .../src/main/java/org/wordpress/android/models/Person.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/models/Person.java b/WordPress/src/main/java/org/wordpress/android/models/Person.java index 9643196efdb9..a9d1184d274b 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/Person.java +++ b/WordPress/src/main/java/org/wordpress/android/models/Person.java @@ -51,7 +51,7 @@ public long getPersonId() { return personID; } - public long getLocalTableBlogId() { + public int getLocalTableBlogId() { return localTableBlogId; } From d610bcb610c6f87dd34274ab31a8f5f111b40113 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 1 Apr 2016 14:03:16 +0300 Subject: [PATCH 21/37] Added People to AppLog --- .../main/java/org/wordpress/android/datasets/PeopleTable.java | 2 +- .../src/main/java/org/wordpress/android/util/AppLog.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 f418c775b65f..25494e0c3143 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -42,7 +42,7 @@ private static void dropTables(SQLiteDatabase db) { } public static void reset(SQLiteDatabase db) { - AppLog.i(AppLog.T.COMMENTS, "resetting people table"); + AppLog.i(AppLog.T.PEOPLE, "resetting people table"); dropTables(db); createTables(db); } diff --git a/libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/AppLog.java b/libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/AppLog.java index 433809317525..e170b4b5672c 100644 --- a/libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/AppLog.java +++ b/libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/AppLog.java @@ -16,7 +16,7 @@ public class AppLog { // T for Tag public enum T {READER, EDITOR, MEDIA, NUX, API, STATS, UTILS, NOTIFS, DB, POSTS, COMMENTS, THEMES, TESTS, PROFILING, - SIMPERIUM, SUGGESTION, MAIN, SETTINGS, PLANS} + SIMPERIUM, SUGGESTION, MAIN, SETTINGS, PLANS, PEOPLE} public static final String TAG = "WordPress"; public static final int HEADER_LINE_COUNT = 2; From ee9b0d55029480b909cdd9af1fff8517faf938f7 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 1 Apr 2016 14:03:39 +0300 Subject: [PATCH 22/37] Fixed a variable name in PeopleTable --- .../main/java/org/wordpress/android/datasets/PeopleTable.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 25494e0c3143..675eb0eac48a 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -77,8 +77,8 @@ public static List getPeople(int localTableBlogId) { try { while (c.moveToNext()) { - Person comment = getPersonFromCursor(c, localTableBlogId); - people.add(comment); + Person person = getPersonFromCursor(c, localTableBlogId); + people.add(person); } return people; From e2d6e173cc5e5618c79116f06ccb033e09e18fd7 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 1 Apr 2016 14:07:00 +0300 Subject: [PATCH 23/37] Fixed a typo in getPersonID method name --- .../main/java/org/wordpress/android/datasets/PeopleTable.java | 2 +- .../src/main/java/org/wordpress/android/models/Person.java | 2 +- .../main/java/org/wordpress/android/ui/ActivityLauncher.java | 2 +- .../java/org/wordpress/android/ui/people/PeopleAdapter.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) 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 675eb0eac48a..9eb557da01a5 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -53,7 +53,7 @@ public static void save(Person person) { public static void save(Person person, SQLiteDatabase database) { ContentValues values = new ContentValues(); - values.put("person_id", person.getPersonId()); + values.put("person_id", person.getPersonID()); values.put("local_blog_id", person.getLocalTableBlogId()); values.put("user_name", person.getUsername()); values.put("first_name", person.getFirstName()); diff --git a/WordPress/src/main/java/org/wordpress/android/models/Person.java b/WordPress/src/main/java/org/wordpress/android/models/Person.java index a9d1184d274b..b18b7805fb4f 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/Person.java +++ b/WordPress/src/main/java/org/wordpress/android/models/Person.java @@ -47,7 +47,7 @@ public static Person fromJSON(JSONObject json, int localTableBlogId) { return new Person(personID, localTableBlogId, username, firstName, lastName, displayName, avatarUrl, role); } - public long getPersonId() { + public long getPersonID() { return personID; } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java b/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java index b5eb345e5369..22d9177b8800 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java @@ -285,7 +285,7 @@ public static void addSelfHostedSiteForResult(Activity activity) { public static void viewPersonDetails(Context context, Person person) { Intent intent = new Intent(context, PersonActivity.class); - intent.putExtra(PersonActivity.EXTRA_PERSON_ID, person.getPersonId()); + intent.putExtra(PersonActivity.EXTRA_PERSON_ID, person.getPersonID()); intent.putExtra(PersonActivity.EXTRA_LOCAL_BLOG_ID, person.getLocalTableBlogId()); slideInFromRight(context, intent); } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java index 2816faab18a7..7d3b3ba98bdf 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java @@ -60,7 +60,7 @@ public long getItemId(int position) { if (person == null) { return 0; } - return person.getPersonId(); + return person.getPersonID(); } @Override From b2f6061ae23aecbd66ac89da389bc7f46b8a5e68 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 1 Apr 2016 14:08:41 +0300 Subject: [PATCH 24/37] Fixed a possible NPE convertion JSON to Person model --- .../org/wordpress/android/ui/people/utils/PeopleUtils.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java b/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java index 74ff18397880..7df793216d27 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java @@ -61,7 +61,9 @@ public static List peopleListFromJSON(JSONArray jsonArray, int localTabl for (int i = 0; i < jsonArray.length(); i++) { Person person = Person.fromJSON(jsonArray.optJSONObject(i), localTableBlogId); - peopleList.add(person); + if (person != null) { + peopleList.add(person); + } } return peopleList; From 6e8ac8d9cca55eef908502607e75c20d549328c7 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 1 Apr 2016 14:11:05 +0300 Subject: [PATCH 25/37] Fixed a comment for the change from the remote site id to local one --- .../wordpress/android/ui/people/PeopleManagementActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 ba1ca44b2265..521f58c951b8 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 @@ -43,7 +43,7 @@ public void onCreate(Bundle savedInstanceState) { if (mBlog != null) { ListView listView = (ListView)findViewById(android.R.id.list); - // People are saved with their dotcom blog id + // People are saved with the local blog id that they are belong to mPeopleAdapter = new PeopleAdapter(this, mLocalBlogId); listView.setAdapter(mPeopleAdapter); From 526113e35663902489178f49706e01d63aaf9a9a Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 4 Apr 2016 14:34:40 +0300 Subject: [PATCH 26/37] Wrap saving people to DB in a transaction --- .../org/wordpress/android/datasets/PeopleTable.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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 9eb557da01a5..13acee6a31a7 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -65,8 +65,14 @@ public static void save(Person person, SQLiteDatabase database) { } public static void savePeople(List peopleList) { - for (Person person : peopleList) { - PeopleTable.save(person); + getWritableDb().beginTransaction(); + try { + for (Person person : peopleList) { + PeopleTable.save(person); + } + getWritableDb().setTransactionSuccessful(); + } finally { + getWritableDb().endTransaction(); } } From 05b18fe96802a93a0e1f7a4840beff1948408e8c Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 4 Apr 2016 14:38:30 +0300 Subject: [PATCH 27/37] Adds braces to if for single statements --- .../main/java/org/wordpress/android/datasets/CommentTable.java | 3 ++- .../main/java/org/wordpress/android/datasets/PeopleTable.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/datasets/CommentTable.java b/WordPress/src/main/java/org/wordpress/android/datasets/CommentTable.java index 4aea9bb3827f..9545ec10f019 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/CommentTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/CommentTable.java @@ -116,8 +116,9 @@ public static Comment getComment(int localBlogId, long commentId) { String[] args = {Integer.toString(localBlogId), Long.toString(commentId)}; Cursor c = getReadableDb().rawQuery("SELECT * FROM " + COMMENTS_TABLE + " WHERE blog_id=? AND comment_id=?", args); try { - if (!c.moveToFirst()) + if (!c.moveToFirst()) { return null; + } return getCommentFromCursor(c); } finally { SqlUtils.closeCursor(c); 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 13acee6a31a7..cf78237d4da9 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -103,8 +103,9 @@ public static Person getPerson(long personId, int localTableBlogId) { String[] args = { Long.toString(personId), Integer.toString(localTableBlogId) }; Cursor c = getReadableDb().rawQuery("SELECT * FROM " + PEOPLE_TABLE + " WHERE person_id=? AND local_blog_id=?", args); try { - if (!c.moveToFirst()) + if (!c.moveToFirst()) { return null; + } return getPersonFromCursor(c, localTableBlogId); } finally { SqlUtils.closeCursor(c); From f9d4c4f6e7e21ec67781e8b561a73c52ddda0a60 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 5 Apr 2016 12:54:56 +0300 Subject: [PATCH 28/37] Adds a comment which explains why we pick the first role from network response --- WordPress/src/main/java/org/wordpress/android/models/Person.java | 1 + 1 file changed, 1 insertion(+) diff --git a/WordPress/src/main/java/org/wordpress/android/models/Person.java b/WordPress/src/main/java/org/wordpress/android/models/Person.java index b18b7805fb4f..1c6a3e852c32 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/Person.java +++ b/WordPress/src/main/java/org/wordpress/android/models/Person.java @@ -42,6 +42,7 @@ public static Person fromJSON(JSONObject json, int localTableBlogId) { String lastName = json.optString("last_name"); String displayName = json.optString("nice_name"); String avatarUrl = json.optString("avatar_URL"); + // We don't support multiple roles, so the first role is picked just as it's in Calypso Role role = Role.fromKey(json.optJSONArray("roles").optString(0)); return new Person(personID, localTableBlogId, username, firstName, lastName, displayName, avatarUrl, role); From 03002cc4e2dfb94a8d2fcf29d3048a3b70a405da Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 5 Apr 2016 13:02:52 +0300 Subject: [PATCH 29/37] Handle unsupported case for Role enum instead of using default --- .../src/main/java/org/wordpress/android/models/Role.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/models/Role.java b/WordPress/src/main/java/org/wordpress/android/models/Role.java index 75d5be9a139e..b8daefd8a325 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/Role.java +++ b/WordPress/src/main/java/org/wordpress/android/models/Role.java @@ -45,9 +45,11 @@ public static String toKey(Role role) { return KEY_AUTHOR; case CONTRIBUTOR: return KEY_CONTRIBUTOR; - default: + case UNSUPPORTED: return "unsupported"; } + // this is just a fallback for when we don't know the role returned by the server + return "unsupported"; } // This method is be used to determine the role of the user from network request & db From 4ba9d28cec745fa5de844c2e5268e6a478eb2278 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 5 Apr 2016 13:16:38 +0300 Subject: [PATCH 30/37] Person ID shouldn't be read as optional from the json --- .../org/wordpress/android/models/Person.java | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/models/Person.java b/WordPress/src/main/java/org/wordpress/android/models/Person.java index 1c6a3e852c32..86f4957c73a4 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/Person.java +++ b/WordPress/src/main/java/org/wordpress/android/models/Person.java @@ -1,6 +1,8 @@ package org.wordpress.android.models; +import org.json.JSONException; import org.json.JSONObject; +import org.wordpress.android.util.AppLog; public class Person { private long personID; @@ -36,16 +38,25 @@ public static Person fromJSON(JSONObject json, int localTableBlogId) { return null; } - long personID = Long.parseLong(json.optString("ID")); - String username = json.optString("login"); - String firstName = json.optString("first_name"); - String lastName = json.optString("last_name"); - String displayName = json.optString("nice_name"); - String avatarUrl = json.optString("avatar_URL"); - // We don't support multiple roles, so the first role is picked just as it's in Calypso - Role role = Role.fromKey(json.optJSONArray("roles").optString(0)); + // Response parameters can be found in https://developer.wordpress.com/docs/api/1.1/get/sites/%24site/users/%24user_id/ + try { + long personID = Long.parseLong(json.getString("ID")); + String username = json.optString("login"); + String firstName = json.optString("first_name"); + String lastName = json.optString("last_name"); + String displayName = json.optString("nice_name"); + String avatarUrl = json.optString("avatar_URL"); + // We don't support multiple roles, so the first role is picked just as it's in Calypso + Role role = Role.fromKey(json.optJSONArray("roles").optString(0)); + + return new Person(personID, localTableBlogId, username, firstName, lastName, displayName, avatarUrl, role); + } catch (JSONException e) { + AppLog.e(AppLog.T.PEOPLE, "JSON exception occurred while parsing the user json: " + e); + } catch (NumberFormatException e) { + AppLog.e(AppLog.T.PEOPLE, "The ID parsed from the JSON couldn't be converted to long: " + e); + } - return new Person(personID, localTableBlogId, username, firstName, lastName, displayName, avatarUrl, role); + return null; } public long getPersonID() { From f83707508377bfdb4c4fb608df339933cfaacb53 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 5 Apr 2016 13:19:41 +0300 Subject: [PATCH 31/37] peopleListFromJSON should be private --- .../java/org/wordpress/android/ui/people/utils/PeopleUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java b/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java index 7df793216d27..48d1c3b0d292 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java @@ -52,7 +52,7 @@ public void onErrorResponse(VolleyError volleyError) { WordPress.getRestClientUtilsV1_1().get(path, listener, errorListener); } - public static List peopleListFromJSON(JSONArray jsonArray, int localTableBlogId) { + private static List peopleListFromJSON(JSONArray jsonArray, int localTableBlogId) { if (jsonArray == null) { return null; } From a1ead5fe2c121549b6923163cb051aaa8c42fdc0 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 5 Apr 2016 13:26:02 +0300 Subject: [PATCH 32/37] Instead of overriding notifyDataSetChanged pass the people list to PeopleAdapter --- .../wordpress/android/ui/people/PeopleAdapter.java | 14 ++++---------- .../ui/people/PeopleManagementActivity.java | 9 +++++++-- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java index 7d3b3ba98bdf..4d1296560cd7 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleAdapter.java @@ -8,7 +8,6 @@ import android.widget.TextView; import org.wordpress.android.R; -import org.wordpress.android.datasets.PeopleTable; import org.wordpress.android.models.Person; import org.wordpress.android.models.Role; import org.wordpress.android.util.GravatarUtils; @@ -21,21 +20,16 @@ public class PeopleAdapter extends BaseAdapter { private final LayoutInflater mInflater; private List mPeopleList; private int mAvatarSz; - private int mLocalBlogId; - public PeopleAdapter(Context context, int localBlogId) { + public PeopleAdapter(Context context, List peopleList) { mContext = context; mAvatarSz = context.getResources().getDimensionPixelSize(R.dimen.avatar_sz_medium); mInflater = LayoutInflater.from(context); - mLocalBlogId = localBlogId; - mPeopleList = PeopleTable.getPeople(mLocalBlogId); + mPeopleList = peopleList; } - @Override - public void notifyDataSetChanged() { - mPeopleList = PeopleTable.getPeople(mLocalBlogId); - - super.notifyDataSetChanged(); + public void setPeopleList(List peopleList) { + mPeopleList = peopleList; } @Override 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 521f58c951b8..a28a29f580e9 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 @@ -13,12 +13,15 @@ import org.wordpress.android.R; import org.wordpress.android.WordPress; +import org.wordpress.android.datasets.PeopleTable; import org.wordpress.android.models.Blog; import org.wordpress.android.models.Person; import org.wordpress.android.ui.ActivityLauncher; import org.wordpress.android.ui.accounts.BlogUtils; import org.wordpress.android.ui.people.utils.PeopleUtils; +import java.util.List; + public class PeopleManagementActivity extends AppCompatActivity { private int mLocalBlogId = BlogUtils.BLOG_ID_INVALID; @@ -43,8 +46,8 @@ public void onCreate(Bundle savedInstanceState) { if (mBlog != null) { ListView listView = (ListView)findViewById(android.R.id.list); - // People are saved with the local blog id that they are belong to - mPeopleAdapter = new PeopleAdapter(this, mLocalBlogId); + List peopleList = PeopleTable.getPeople(mLocalBlogId); + mPeopleAdapter = new PeopleAdapter(this, peopleList); listView.setAdapter(mPeopleAdapter); final Activity context = this; @@ -79,6 +82,8 @@ private void refreshUsersList() { PeopleUtils.fetchUsers(mBlog.getDotComBlogId(), mLocalBlogId, new PeopleUtils.Callback() { @Override public void onSuccess() { + List peopleList = PeopleTable.getPeople(mLocalBlogId); + mPeopleAdapter.setPeopleList(peopleList); mPeopleAdapter.notifyDataSetChanged(); } From 50389f6ab4e5d7c95346bc48a63e5b6341d23e9b Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 5 Apr 2016 13:29:45 +0300 Subject: [PATCH 33/37] Remove unnecessary global variables from PeopleManagementActivity --- .../ui/people/PeopleManagementActivity.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) 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 a28a29f580e9..c2e7bd826669 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 @@ -24,16 +24,14 @@ public class PeopleManagementActivity extends AppCompatActivity { - private int mLocalBlogId = BlogUtils.BLOG_ID_INVALID; - private Blog mBlog; private PeopleAdapter mPeopleAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mLocalBlogId = BlogUtils.getBlogLocalId(WordPress.getCurrentBlog()); - mBlog = WordPress.getBlog(mLocalBlogId); + int localBlogId = BlogUtils.getBlogLocalId(WordPress.getCurrentBlog()); + Blog blog = WordPress.getBlog(localBlogId); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { @@ -44,9 +42,9 @@ public void onCreate(Bundle savedInstanceState) { setTitle(R.string.people); - if (mBlog != null) { + if (blog != null) { ListView listView = (ListView)findViewById(android.R.id.list); - List peopleList = PeopleTable.getPeople(mLocalBlogId); + List peopleList = PeopleTable.getPeople(localBlogId); mPeopleAdapter = new PeopleAdapter(this, peopleList); listView.setAdapter(mPeopleAdapter); @@ -59,7 +57,7 @@ public void onItemClick(AdapterView parent, View view, int position, long id) } }); - refreshUsersList(); + refreshUsersList(blog.getDotComBlogId(), localBlogId); } } @@ -78,11 +76,11 @@ public boolean onOptionsItemSelected(final MenuItem item) { return super.onOptionsItemSelected(item); } - private void refreshUsersList() { - PeopleUtils.fetchUsers(mBlog.getDotComBlogId(), mLocalBlogId, new PeopleUtils.Callback() { + private void refreshUsersList(String dotComBlogId, final int localBlogId) { + PeopleUtils.fetchUsers(dotComBlogId, localBlogId, new PeopleUtils.Callback() { @Override public void onSuccess() { - List peopleList = PeopleTable.getPeople(mLocalBlogId); + List peopleList = PeopleTable.getPeople(localBlogId); mPeopleAdapter.setPeopleList(peopleList); mPeopleAdapter.notifyDataSetChanged(); } From 9a083b94a220eec56dab20a98b16508d077a8b20 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 5 Apr 2016 13:34:28 +0300 Subject: [PATCH 34/37] Remove unnecessary global variables from PersonActivity --- .../wordpress/android/ui/people/PersonActivity.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java index 5914cc82065e..acae297c18d8 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java @@ -19,15 +19,12 @@ public class PersonActivity extends AppCompatActivity { public static final String EXTRA_PERSON_ID = "EXTRA_PERSON_ID"; public static final String EXTRA_LOCAL_BLOG_ID = "EXTRA_LOCAL_BLOG_ID"; - private long mPersonId; - private int mLocalBlogId; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mPersonId = getIntent().getExtras().getLong(EXTRA_PERSON_ID); - mLocalBlogId = getIntent().getExtras().getInt(EXTRA_LOCAL_BLOG_ID); + long personId = getIntent().getExtras().getLong(EXTRA_PERSON_ID); + int localBlogId = getIntent().getExtras().getInt(EXTRA_LOCAL_BLOG_ID); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { @@ -38,7 +35,7 @@ protected void onCreate(Bundle savedInstanceState) { setTitle(R.string.edit_user); - refreshUserDetails(); + refreshUserDetails(personId, localBlogId); } @Override @@ -56,14 +53,14 @@ public boolean onOptionsItemSelected(final MenuItem item) { return super.onOptionsItemSelected(item); } - private void refreshUserDetails() { + private void refreshUserDetails(long personId, int localBlogId) { WPNetworkImageView imgAvatar = (WPNetworkImageView) findViewById(R.id.person_avatar); TextView txtDisplayName = (TextView) findViewById(R.id.person_display_name); TextView txtUsername = (TextView) findViewById(R.id.person_username); TextView txtRole = (TextView) findViewById(R.id.person_role); TextView txtRemove = (TextView) findViewById(R.id.person_remove); - Person person = PeopleTable.getPerson(mPersonId, mLocalBlogId); + Person person = PeopleTable.getPerson(personId, localBlogId); if (person != null) { int avatarSz = getResources().getDimensionPixelSize(R.dimen.avatar_sz_large); From 17d3578c1cec6fc69191ada15e15e2aa69a9e769 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 5 Apr 2016 13:44:57 +0300 Subject: [PATCH 35/37] Adds onJSONException to PeopleUtils.Callback --- .../android/ui/people/PeopleManagementActivity.java | 6 ++++++ .../org/wordpress/android/ui/people/utils/PeopleUtils.java | 5 +++++ 2 files changed, 11 insertions(+) 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 c2e7bd826669..cdd3ac167dbf 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 @@ -11,6 +11,7 @@ import com.android.volley.VolleyError; +import org.json.JSONException; import org.wordpress.android.R; import org.wordpress.android.WordPress; import org.wordpress.android.datasets.PeopleTable; @@ -87,7 +88,12 @@ public void onSuccess() { @Override public void onError(VolleyError error) { + //TODO: show some kind of error to the user + } + @Override + public void onJSONException(JSONException exception) { + //TODO: show some kind of error to the user } }); } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java b/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java index 48d1c3b0d292..258877d67423 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java @@ -33,6 +33,9 @@ public void onResponse(JSONObject jsonObject) { } catch (JSONException e) { AppLog.e(T.API, "JSON exception occurred while parsing the response for sites/%s/users: " + e); + if (callback != null) { + callback.onJSONException(e); + } } } } @@ -73,5 +76,7 @@ public interface Callback { void onSuccess(); void onError(VolleyError error); + + void onJSONException(JSONException e); } } From 5e7898f11800507db99d92e868d673296758ff92 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 5 Apr 2016 15:57:17 +0300 Subject: [PATCH 36/37] Move saving the people to DB to the Activity from PeopleUtils --- .../ui/people/PeopleManagementActivity.java | 4 ++-- .../android/ui/people/utils/PeopleUtils.java | 14 ++++---------- 2 files changed, 6 insertions(+), 12 deletions(-) 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 cdd3ac167dbf..05cf4b9f9a2f 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 @@ -80,8 +80,8 @@ public boolean onOptionsItemSelected(final MenuItem item) { private void refreshUsersList(String dotComBlogId, final int localBlogId) { PeopleUtils.fetchUsers(dotComBlogId, localBlogId, new PeopleUtils.Callback() { @Override - public void onSuccess() { - List peopleList = PeopleTable.getPeople(localBlogId); + public void onSuccess(List peopleList) { + PeopleTable.savePeople(peopleList); mPeopleAdapter.setPeopleList(peopleList); mPeopleAdapter.notifyDataSetChanged(); } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java b/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java index 258877d67423..c5b79c200d68 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/utils/PeopleUtils.java @@ -7,7 +7,6 @@ import org.json.JSONException; import org.json.JSONObject; import org.wordpress.android.WordPress; -import org.wordpress.android.datasets.PeopleTable; import org.wordpress.android.models.Person; import org.wordpress.android.util.AppLog; import org.wordpress.android.util.AppLog.T; @@ -21,21 +20,16 @@ public static void fetchUsers(String siteID, final int localTableBlogId, final P com.wordpress.rest.RestRequest.Listener listener = new RestRequest.Listener() { @Override public void onResponse(JSONObject jsonObject) { - if (jsonObject != null) { + if (jsonObject != null && callback != null) { try { JSONArray jsonArray = jsonObject.getJSONArray("users"); List people = peopleListFromJSON(jsonArray, localTableBlogId); - PeopleTable.savePeople(people); + callback.onSuccess(people); - if (callback != null) { - callback.onSuccess(); - } } catch (JSONException e) { AppLog.e(T.API, "JSON exception occurred while parsing the response for sites/%s/users: " + e); - if (callback != null) { - callback.onJSONException(e); - } + callback.onJSONException(e); } } } @@ -73,7 +67,7 @@ private static List peopleListFromJSON(JSONArray jsonArray, int localTab } public interface Callback { - void onSuccess(); + void onSuccess(List peopleList); void onError(VolleyError error); From 37f109d6339d93c164f32c3387376115e94ec190 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 5 Apr 2016 16:07:06 +0300 Subject: [PATCH 37/37] Adds @Nullable to fromJSON method in Person --- .../src/main/java/org/wordpress/android/models/Person.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/models/Person.java b/WordPress/src/main/java/org/wordpress/android/models/Person.java index 86f4957c73a4..3ec954b46013 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/Person.java +++ b/WordPress/src/main/java/org/wordpress/android/models/Person.java @@ -1,5 +1,7 @@ package org.wordpress.android.models; +import android.support.annotation.Nullable; + import org.json.JSONException; import org.json.JSONObject; import org.wordpress.android.util.AppLog; @@ -33,6 +35,7 @@ public Person(long personID, this.role = role; } + @Nullable public static Person fromJSON(JSONObject json, int localTableBlogId) { if (json == null) { return null;