From 33818dfadfe156adad35404820758f68fc3436bc Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 26 Apr 2016 20:42:27 +0300 Subject: [PATCH 01/64] Update the people list row layout to match the latest design --- .../main/res/layout/people_list_fragment.xml | 3 +- .../src/main/res/layout/people_list_row.xml | 42 +++++++++++-------- WordPress/src/main/res/values/dimens.xml | 2 +- 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/WordPress/src/main/res/layout/people_list_fragment.xml b/WordPress/src/main/res/layout/people_list_fragment.xml index 98e98a5e7578..0db447806ef6 100644 --- a/WordPress/src/main/res/layout/people_list_fragment.xml +++ b/WordPress/src/main/res/layout/people_list_fragment.xml @@ -6,10 +6,9 @@ diff --git a/WordPress/src/main/res/layout/people_list_row.xml b/WordPress/src/main/res/layout/people_list_row.xml index 45417b26d3c6..503e5a81be33 100644 --- a/WordPress/src/main/res/layout/people_list_row.xml +++ b/WordPress/src/main/res/layout/people_list_row.xml @@ -1,56 +1,62 @@ + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="@dimen/people_list_row_height" + android:background="?android:selectableItemBackground"> + android:layout_marginStart="@dimen/margin_extra_large" + android:layout_marginTop="@dimen/margin_extra_large"/> + android:textSize="@dimen/text_sz_large" + tools:text="display_name"/> + tools:text="username"/> + android:textColor="@color/grey" + android:textSize="@dimen/text_sz_small" + tools:text="role"/> diff --git a/WordPress/src/main/res/values/dimens.xml b/WordPress/src/main/res/values/dimens.xml index 33110aa1c98a..3a0c0e3a8f84 100644 --- a/WordPress/src/main/res/values/dimens.xml +++ b/WordPress/src/main/res/values/dimens.xml @@ -270,6 +270,6 @@ 79dp - 84dp + 72dp 1dp From c44dc22102ccb17ed7913b7a00fb9607da6a2290 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 26 Apr 2016 20:44:30 +0300 Subject: [PATCH 02/64] Don't use bg color and right align role --- .../main/java/org/wordpress/android/ui/people/PeopleAdapter.java | 1 - WordPress/src/main/res/layout/people_list_row.xml | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) 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 c21f31c47147..a5499ec8a37f 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 @@ -78,7 +78,6 @@ public View getView(int position, View convertView, ViewGroup parent) { holder.txtDisplayName.setText(person.getDisplayName()); holder.txtUsername.setText(String.format("@%s", person.getUsername())); holder.txtRole.setText(Role.getLabel(mContext, person.getRole())); - holder.txtRole.setBackgroundColor(Role.backgroundColor(mContext, person.getRole())); } return convertView; diff --git a/WordPress/src/main/res/layout/people_list_row.xml b/WordPress/src/main/res/layout/people_list_row.xml index 503e5a81be33..b0db599874fe 100644 --- a/WordPress/src/main/res/layout/people_list_row.xml +++ b/WordPress/src/main/res/layout/people_list_row.xml @@ -54,6 +54,7 @@ android:layout_toEndOf="@id/people_list_row_display_name" android:layout_toRightOf="@id/people_list_row_display_name" android:ellipsize="end" + android:gravity="end" android:maxLines="1" android:textColor="@color/grey" android:textSize="@dimen/text_sz_small" From f7f834e3f6fe4b963dd6ecf23070f27a34b49789 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 26 Apr 2016 20:46:54 +0300 Subject: [PATCH 03/64] Change avatar size for people screen --- WordPress/src/main/res/layout/people_list_row.xml | 4 ++-- WordPress/src/main/res/values/dimens.xml | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/WordPress/src/main/res/layout/people_list_row.xml b/WordPress/src/main/res/layout/people_list_row.xml index b0db599874fe..38d43160e328 100644 --- a/WordPress/src/main/res/layout/people_list_row.xml +++ b/WordPress/src/main/res/layout/people_list_row.xml @@ -7,8 +7,8 @@ 79dp + 40dp 72dp 1dp From e52766b3a2ae0eb649786014b97b5ca25d2ca0d7 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 26 Apr 2016 20:59:24 +0300 Subject: [PATCH 04/64] Change people list background to white --- WordPress/src/main/res/layout/people_list_fragment.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/WordPress/src/main/res/layout/people_list_fragment.xml b/WordPress/src/main/res/layout/people_list_fragment.xml index 0db447806ef6..ff0a135870f8 100644 --- a/WordPress/src/main/res/layout/people_list_fragment.xml +++ b/WordPress/src/main/res/layout/people_list_fragment.xml @@ -2,7 +2,8 @@ + android:layout_height="match_parent" + android:background="@color/white"> Date: Wed, 27 Apr 2016 14:43:36 +0300 Subject: [PATCH 05/64] Change people list divider to have a left margin --- WordPress/src/main/res/drawable/people_list_divider.xml | 8 ++++++++ WordPress/src/main/res/layout/people_list_fragment.xml | 3 +-- WordPress/src/main/res/values/dimens.xml | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 WordPress/src/main/res/drawable/people_list_divider.xml diff --git a/WordPress/src/main/res/drawable/people_list_divider.xml b/WordPress/src/main/res/drawable/people_list_divider.xml new file mode 100644 index 000000000000..09d74f3d5075 --- /dev/null +++ b/WordPress/src/main/res/drawable/people_list_divider.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/WordPress/src/main/res/layout/people_list_fragment.xml b/WordPress/src/main/res/layout/people_list_fragment.xml index ff0a135870f8..d74a617eadae 100644 --- a/WordPress/src/main/res/layout/people_list_fragment.xml +++ b/WordPress/src/main/res/layout/people_list_fragment.xml @@ -10,7 +10,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/margin_medium" - android:divider="@color/grey_lighten_20" - android:dividerHeight="@dimen/people_list_divider_height"/> + android:divider="@drawable/people_list_divider" /> diff --git a/WordPress/src/main/res/values/dimens.xml b/WordPress/src/main/res/values/dimens.xml index f172eb3b9c0f..53f9b419c979 100644 --- a/WordPress/src/main/res/values/dimens.xml +++ b/WordPress/src/main/res/values/dimens.xml @@ -273,4 +273,5 @@ 40dp 72dp 1dp + 64dp From d925e88eaefaf21e6c066a302524603f97090419 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 27 Apr 2016 15:43:45 +0300 Subject: [PATCH 06/64] Display name should be retrieved as for Person --- .../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 3ec954b46013..e0ea455dae60 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) { String username = json.optString("login"); String firstName = json.optString("first_name"); String lastName = json.optString("last_name"); - String displayName = json.optString("nice_name"); + String displayName = json.optString("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)); From 51a324540756320941be51a793745844f5aa27a8 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 27 Apr 2016 17:10:17 +0300 Subject: [PATCH 07/64] Extract person_detail layout for better reusability --- .../src/main/res/layout/people_list_row.xml | 56 ++++--------------- .../src/main/res/layout/person_detail.xml | 45 +++++++++++++++ 2 files changed, 57 insertions(+), 44 deletions(-) create mode 100644 WordPress/src/main/res/layout/person_detail.xml diff --git a/WordPress/src/main/res/layout/people_list_row.xml b/WordPress/src/main/res/layout/people_list_row.xml index 38d43160e328..9a3ee03ffc61 100644 --- a/WordPress/src/main/res/layout/people_list_row.xml +++ b/WordPress/src/main/res/layout/people_list_row.xml @@ -1,46 +1,14 @@ - + - - - - - + + + + + + + + + + \ No newline at end of file From 22e7fff3aa9396872f211e06ae1746bc6b43fd28 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 27 Apr 2016 17:13:13 +0300 Subject: [PATCH 08/64] Remove margin after avatar for person_detail --- WordPress/src/main/res/layout/person_detail.xml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/WordPress/src/main/res/layout/person_detail.xml b/WordPress/src/main/res/layout/person_detail.xml index 7cbc65b5a514..526987450dc4 100644 --- a/WordPress/src/main/res/layout/person_detail.xml +++ b/WordPress/src/main/res/layout/person_detail.xml @@ -9,18 +9,13 @@ android:id="@+id/people_list_row_avatar" android:layout_width="@dimen/people_avatar_sz" android:layout_height="@dimen/people_avatar_sz" - android:layout_marginBottom="@dimen/margin_extra_large" - android:layout_marginLeft="@dimen/margin_extra_large" - android:layout_marginStart="@dimen/margin_extra_large" - android:layout_marginTop="@dimen/margin_extra_large"/> + android:layout_margin="@dimen/margin_extra_large"/> Date: Wed, 27 Apr 2016 17:30:38 +0300 Subject: [PATCH 09/64] Use custom toolbar in PeopleManagementActivity layout --- WordPress/src/main/AndroidManifest.xml | 2 +- .../res/layout/people_management_activity.xml | 20 ++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/WordPress/src/main/AndroidManifest.xml b/WordPress/src/main/AndroidManifest.xml index d8c7b762be0a..98ca003388ea 100644 --- a/WordPress/src/main/AndroidManifest.xml +++ b/WordPress/src/main/AndroidManifest.xml @@ -337,7 +337,7 @@ + android:theme="@style/Calypso.NoActionBar"/> - + + + + + + + From 9f42d04d3c43f4c12a92a8c1abaed180af75a552 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 27 Apr 2016 17:31:23 +0300 Subject: [PATCH 10/64] Setup custom toolbar in PeopleManagementActivity as it got broken --- .../android/ui/people/PeopleManagementActivity.java | 7 ++++++- 1 file changed, 6 insertions(+), 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 6392dc4e7b0e..3d06b0426c48 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 @@ -5,6 +5,7 @@ import android.os.Bundle; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; import android.view.MenuItem; import com.android.volley.VolleyError; @@ -29,12 +30,16 @@ public class PeopleManagementActivity extends AppCompatActivity implements Peopl public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setContentView(R.layout.people_management_activity); + + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { + actionBar.setTitle(R.string.people); actionBar.setHomeButtonEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true); } - setContentView(R.layout.people_management_activity); int localBlogId = BlogUtils.getBlogLocalId(WordPress.getCurrentBlog()); Blog blog = WordPress.getBlog(localBlogId); From 1442ec30fa2a1938feb321d7f9d339a9e6f2413e Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 27 Apr 2016 17:44:59 +0300 Subject: [PATCH 11/64] Fix the divider margin to match the latest changes --- WordPress/src/main/res/values/dimens.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/res/values/dimens.xml b/WordPress/src/main/res/values/dimens.xml index 53f9b419c979..a97d26961666 100644 --- a/WordPress/src/main/res/values/dimens.xml +++ b/WordPress/src/main/res/values/dimens.xml @@ -273,5 +273,5 @@ 40dp 72dp 1dp - 64dp + 72dp From 676181876b319622a1e476684a72b7161c6693ee Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 28 Apr 2016 14:15:08 +0300 Subject: [PATCH 12/64] Refactor person UI ids for better reusability --- .../android/ui/people/PeopleAdapter.java | 8 ++++---- .../src/main/res/layout/people_list_row.xml | 2 +- .../src/main/res/layout/person_detail.xml | 18 +++++++++--------- 3 files changed, 14 insertions(+), 14 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 a5499ec8a37f..a11b7d4cfd36 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 @@ -90,10 +90,10 @@ private class PeopleViewHolder { private final TextView txtRole; PeopleViewHolder(View row) { - imgAvatar = (WPNetworkImageView) row.findViewById(R.id.people_list_row_avatar); - txtDisplayName = (TextView) row.findViewById(R.id.people_list_row_display_name); - txtUsername = (TextView) row.findViewById(R.id.people_list_row_username); - txtRole = (TextView) row.findViewById(R.id.people_list_row_role); + imgAvatar = (WPNetworkImageView) row.findViewById(R.id.person_avatar); + txtDisplayName = (TextView) row.findViewById(R.id.person_display_name); + txtUsername = (TextView) row.findViewById(R.id.person_username); + txtRole = (TextView) row.findViewById(R.id.person_role); } } } \ No newline at end of file diff --git a/WordPress/src/main/res/layout/people_list_row.xml b/WordPress/src/main/res/layout/people_list_row.xml index 9a3ee03ffc61..0dc3e5789879 100644 --- a/WordPress/src/main/res/layout/people_list_row.xml +++ b/WordPress/src/main/res/layout/people_list_row.xml @@ -11,7 +11,7 @@ layout="@layout/person_detail"/> Date: Thu, 28 Apr 2016 14:31:47 +0300 Subject: [PATCH 13/64] Reuse the person_detail layout in detail fragment --- .../res/layout/person_detail_fragment.xml | 41 ++----------------- 1 file changed, 3 insertions(+), 38 deletions(-) diff --git a/WordPress/src/main/res/layout/person_detail_fragment.xml b/WordPress/src/main/res/layout/person_detail_fragment.xml index 17ddd3ee5f5d..34f29f209feb 100644 --- a/WordPress/src/main/res/layout/person_detail_fragment.xml +++ b/WordPress/src/main/res/layout/person_detail_fragment.xml @@ -1,7 +1,7 @@ - - - - - - - - - + layout="@layout/person_detail"/> Date: Thu, 28 Apr 2016 17:32:46 +0300 Subject: [PATCH 14/64] Fix the role not showing up in the person details page --- WordPress/src/main/res/layout/people_list_row.xml | 2 +- WordPress/src/main/res/layout/person_detail.xml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/WordPress/src/main/res/layout/people_list_row.xml b/WordPress/src/main/res/layout/people_list_row.xml index 0dc3e5789879..623f678bcc73 100644 --- a/WordPress/src/main/res/layout/people_list_row.xml +++ b/WordPress/src/main/res/layout/people_list_row.xml @@ -3,7 +3,7 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="@dimen/people_list_row_height" + android:layout_height="wrap_content" android:background="?android:selectableItemBackground"> + android:layout_height="wrap_content" + android:minHeight="@dimen/people_list_row_height"> Date: Thu, 28 Apr 2016 17:44:20 +0300 Subject: [PATCH 15/64] Make sure the display name in person details don't push role out of bounds --- .../src/main/res/layout/people_list_row.xml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/WordPress/src/main/res/layout/people_list_row.xml b/WordPress/src/main/res/layout/people_list_row.xml index 623f678bcc73..ffccf2f16ce6 100644 --- a/WordPress/src/main/res/layout/people_list_row.xml +++ b/WordPress/src/main/res/layout/people_list_row.xml @@ -6,10 +6,6 @@ android:layout_height="wrap_content" android:background="?android:selectableItemBackground"> - - + + From 2fbf331f605c656614f6746353ecf471f97fb912 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 28 Apr 2016 17:48:04 +0300 Subject: [PATCH 16/64] No need to set an id for the include anymore --- WordPress/src/main/res/layout/people_list_row.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/WordPress/src/main/res/layout/people_list_row.xml b/WordPress/src/main/res/layout/people_list_row.xml index ffccf2f16ce6..1d8d15dab35b 100644 --- a/WordPress/src/main/res/layout/people_list_row.xml +++ b/WordPress/src/main/res/layout/people_list_row.xml @@ -23,7 +23,6 @@ tools:text="role"/> Date: Thu, 28 Apr 2016 17:52:51 +0300 Subject: [PATCH 17/64] Use match_parent for person_detail to remove unnecessary alignLeft --- WordPress/src/main/res/layout/people_list_row.xml | 4 +--- WordPress/src/main/res/layout/person_detail.xml | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/WordPress/src/main/res/layout/people_list_row.xml b/WordPress/src/main/res/layout/people_list_row.xml index 1d8d15dab35b..522af08edc58 100644 --- a/WordPress/src/main/res/layout/people_list_row.xml +++ b/WordPress/src/main/res/layout/people_list_row.xml @@ -24,10 +24,8 @@ diff --git a/WordPress/src/main/res/layout/person_detail.xml b/WordPress/src/main/res/layout/person_detail.xml index bfe75162c43d..352ab2a6eaeb 100644 --- a/WordPress/src/main/res/layout/person_detail.xml +++ b/WordPress/src/main/res/layout/person_detail.xml @@ -2,7 +2,7 @@ From 4d92a89c97b4938f7022943035f960cbb9cb46a2 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 28 Apr 2016 21:20:49 +0300 Subject: [PATCH 18/64] Update person detail page's layout for the latest design --- .../ui/people/PersonDetailFragment.java | 10 ------ .../res/layout/person_detail_fragment.xml | 36 +++++++------------ 2 files changed, 13 insertions(+), 33 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index 7f65a208c769..6a672c22e90a 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -28,7 +28,6 @@ public class PersonDetailFragment extends Fragment { private TextView mDisplayNameTextView; private TextView mUsernameTextView; private TextView mRoleTextView; - private TextView mRemoveTextView; public static PersonDetailFragment newInstance(long personID, int localTableBlogID) { PersonDetailFragment personDetailFragment = new PersonDetailFragment(); @@ -63,7 +62,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa mDisplayNameTextView = (TextView) rootView.findViewById(R.id.person_display_name); mUsernameTextView = (TextView) rootView.findViewById(R.id.person_username); mRoleTextView = (TextView) rootView.findViewById(R.id.person_role); - mRemoveTextView = (TextView) rootView.findViewById(R.id.person_remove); return rootView; } @@ -87,14 +85,6 @@ public void refreshPersonDetails() { mDisplayNameTextView.setText(person.getDisplayName()); mUsernameTextView.setText(person.getUsername()); mRoleTextView.setText(Role.getLabel(getActivity(), person.getRole())); - mRemoveTextView.setText(String.format(getString(R.string.remove_user), person.getFirstName().toUpperCase())); - - mRemoveTextView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - //TODO: remove user - } - }); } else { AppLog.w(AppLog.T.PEOPLE, "Person returned null from DB for personID: " + mPersonID + " & localTableBlogID: " + mLocalTableBlogID); diff --git a/WordPress/src/main/res/layout/person_detail_fragment.xml b/WordPress/src/main/res/layout/person_detail_fragment.xml index 34f29f209feb..abae03250b36 100644 --- a/WordPress/src/main/res/layout/person_detail_fragment.xml +++ b/WordPress/src/main/res/layout/person_detail_fragment.xml @@ -8,12 +8,11 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/default_background" - android:orientation="vertical"> + android:background="@color/white"> + layout="@layout/person_detail" /> + tools:text="@string/role_admin" /> - + android:layout_height="@dimen/people_list_divider_height" + android:layout_below="@id/person_role" + android:layout_marginTop="@dimen/margin_extra_large" + android:background="@color/grey_lighten_20" /> - + From 3935713b8de31732687cab311605372730d2c2c3 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 29 Apr 2016 14:13:31 +0300 Subject: [PATCH 19/64] Fixed some spacing issues in person detail fragment --- WordPress/src/main/res/layout/person_detail_fragment.xml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/WordPress/src/main/res/layout/person_detail_fragment.xml b/WordPress/src/main/res/layout/person_detail_fragment.xml index abae03250b36..57538c011c61 100644 --- a/WordPress/src/main/res/layout/person_detail_fragment.xml +++ b/WordPress/src/main/res/layout/person_detail_fragment.xml @@ -19,9 +19,11 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" + android:layout_alignParentStart="true" android:layout_below="@id/person_details" android:layout_marginLeft="@dimen/margin_extra_large" - android:layout_marginTop="@dimen/margin_extra_large" + android:layout_marginStart="@dimen/margin_extra_large" + android:layout_marginTop="@dimen/margin_medium" android:ellipsize="end" android:text="@string/role" android:textColor="@color/grey_dark" @@ -32,9 +34,9 @@ android:id="@+id/person_role" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignParentLeft="true" android:layout_below="@id/person_role_label" - android:layout_marginLeft="@dimen/margin_extra_large" + android:layout_alignLeft="@id/person_role_label" + android:layout_alignStart="@id/person_role_label" android:ellipsize="end" android:maxLines="1" android:textColor="@color/grey" From b79890427d3f522c61ad14678f4781facdb4968c Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 29 Apr 2016 15:11:46 +0300 Subject: [PATCH 20/64] Sets up role container and checks capabilities to edit the role --- .../ui/people/PersonDetailFragment.java | 32 ++++++++- .../res/layout/person_detail_fragment.xml | 65 +++++++++++-------- 2 files changed, 68 insertions(+), 29 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index 6a672c22e90a..841a3abccac0 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -7,17 +7,21 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.LinearLayout; import android.widget.TextView; 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.Capability; import org.wordpress.android.models.Person; import org.wordpress.android.models.Role; import org.wordpress.android.util.AppLog; import org.wordpress.android.util.GravatarUtils; import org.wordpress.android.widgets.WPNetworkImageView; -public class PersonDetailFragment extends Fragment { +public class PersonDetailFragment extends Fragment implements View.OnClickListener { private static String ARG_PERSON_ID = "person_id"; private static String ARG_LOCAL_TABLE_BLOG_ID = "local_table_blog_id"; @@ -27,6 +31,7 @@ public class PersonDetailFragment extends Fragment { private WPNetworkImageView mAvatarImageView; private TextView mDisplayNameTextView; private TextView mUsernameTextView; + private LinearLayout mRoleContainer; private TextView mRoleTextView; public static PersonDetailFragment newInstance(long personID, int localTableBlogID) { @@ -61,6 +66,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa mAvatarImageView = (WPNetworkImageView) rootView.findViewById(R.id.person_avatar); mDisplayNameTextView = (TextView) rootView.findViewById(R.id.person_display_name); mUsernameTextView = (TextView) rootView.findViewById(R.id.person_username); + mRoleContainer = (LinearLayout) rootView.findViewById(R.id.person_role_container); mRoleTextView = (TextView) rootView.findViewById(R.id.person_role); return rootView; @@ -85,6 +91,8 @@ public void refreshPersonDetails() { mDisplayNameTextView.setText(person.getDisplayName()); mUsernameTextView.setText(person.getUsername()); mRoleTextView.setText(Role.getLabel(getActivity(), person.getRole())); + + setupRoleContainerForCapability(); } else { AppLog.w(AppLog.T.PEOPLE, "Person returned null from DB for personID: " + mPersonID + " & localTableBlogID: " + mLocalTableBlogID); @@ -96,4 +104,26 @@ public void setPersonDetails(long personID, int localTableBlogID) { mLocalTableBlogID = localTableBlogID; refreshPersonDetails(); } + + // Checks current user's capabilities to decide whether she can change the role or not + @SuppressWarnings("deprecation") + private void setupRoleContainerForCapability() { + Blog blog = WordPress.getBlog(mLocalTableBlogID); + boolean canChangeRole = blog != null && blog.hasCapability(Capability.EDIT_USERS); + if (canChangeRole) { + mRoleContainer.setOnClickListener(this); + } else { + // Remove the selectableItemBackground if the user can't be edited + if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) { + mRoleContainer.setBackgroundDrawable(null); + } else { + mRoleContainer.setBackground(null); + } + } + } + + @Override + public void onClick(View v) { + //TODO: change user role + } } diff --git a/WordPress/src/main/res/layout/person_detail_fragment.xml b/WordPress/src/main/res/layout/person_detail_fragment.xml index 57538c011c61..4754a67603f9 100644 --- a/WordPress/src/main/res/layout/person_detail_fragment.xml +++ b/WordPress/src/main/res/layout/person_detail_fragment.xml @@ -8,47 +8,56 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/white"> + android:background="@color/white" + android:clickable="true"> + layout="@layout/person_detail"/> - - - + android:background="?android:selectableItemBackground" + android:orientation="vertical"> + + + + + + + android:layout_below="@id/person_role_container" + android:background="@color/grey_lighten_20"/> From 9250010255d88e9a5aa201e68536e1029ff6fc2d Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 29 Apr 2016 15:40:47 +0300 Subject: [PATCH 21/64] Remove background color from Role enum as it's not used anymore --- .../org/wordpress/android/models/Role.java | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) 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 b8daefd8a325..f250c295e6dc 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/Role.java +++ b/WordPress/src/main/java/org/wordpress/android/models/Role.java @@ -1,17 +1,16 @@ package org.wordpress.android.models; import android.content.Context; -import android.support.v4.content.ContextCompat; import org.wordpress.android.R; public enum Role { - SUPER_ADMIN(R.string.role_super_admin, R.color.orange_fire), - ADMIN(R.string.role_admin, R.color.grey_dark), - EDITOR(R.string.role_editor, R.color.blue_dark), - AUTHOR(R.string.role_author, R.color.blue_wordpress), - CONTRIBUTOR(R.string.role_contributor, R.color.blue_wordpress), - UNSUPPORTED(R.string.role_unsupported, R.color.blue_wordpress); + SUPER_ADMIN(R.string.role_super_admin), + ADMIN(R.string.role_admin), + EDITOR(R.string.role_editor), + AUTHOR(R.string.role_author), + CONTRIBUTOR(R.string.role_contributor), + UNSUPPORTED(R.string.role_unsupported); private static String KEY_SUPER_ADMIN = "super_administrator"; private static String KEY_ADMIN = "administrator"; @@ -20,11 +19,9 @@ public enum Role { private static String KEY_CONTRIBUTOR = "contributor"; private final int label; - private final int backgroundColor; - Role(int label, int backgroundColor) { + Role(int label) { this.label = label; - this.backgroundColor = backgroundColor; } // Label to be used in UI @@ -68,8 +65,4 @@ public static Role fromKey(String value) { return Role.CONTRIBUTOR; return Role.UNSUPPORTED; } - - public static int backgroundColor(Context context, Role role) { - return ContextCompat.getColor(context, role.backgroundColor); - } } From 493276fbb979561994e4bfae2c2344b15f4ffaa0 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 29 Apr 2016 15:53:44 +0300 Subject: [PATCH 22/64] Initial implementation of select role dialog --- .../org/wordpress/android/models/Role.java | 9 ++++++ .../ui/people/PersonDetailFragment.java | 30 +++++++++++++++---- 2 files changed, 34 insertions(+), 5 deletions(-) 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 f250c295e6dc..86a5d91e190d 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/Role.java +++ b/WordPress/src/main/java/org/wordpress/android/models/Role.java @@ -65,4 +65,13 @@ public static Role fromKey(String value) { return Role.CONTRIBUTOR; return Role.UNSUPPORTED; } + + public static String[] getRoles(Context context) { + return new String[] { + Role.getLabel(context, Role.ADMIN), + Role.getLabel(context, Role.EDITOR), + Role.getLabel(context, Role.AUTHOR), + Role.getLabel(context, Role.CONTRIBUTOR), + }; + } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index 841a3abccac0..dfd152a6fd43 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -2,11 +2,15 @@ import android.animation.Animator; import android.animation.AnimatorInflater; +import android.app.AlertDialog; import android.app.Fragment; +import android.content.Context; +import android.content.DialogInterface; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ArrayAdapter; import android.widget.LinearLayout; import android.widget.TextView; @@ -44,8 +48,8 @@ public static PersonDetailFragment newInstance(long personID, int localTableBlog } /** - * Sets the enter & pop animation for the fragment. In order to keep the animation even after the configuration - * changes, this method is used instead of FragmentTransaction for the animation. + * Sets the enter & pop animation for the fragment. In order to keep the animation even after the configuration + * changes, this method is used instead of FragmentTransaction for the animation. */ @Override public Animator onCreateAnimator(int transit, boolean enter, int nextAnim) { @@ -110,11 +114,11 @@ public void setPersonDetails(long personID, int localTableBlogID) { private void setupRoleContainerForCapability() { Blog blog = WordPress.getBlog(mLocalTableBlogID); boolean canChangeRole = blog != null && blog.hasCapability(Capability.EDIT_USERS); - if (canChangeRole) { + if (!canChangeRole) { mRoleContainer.setOnClickListener(this); } else { // Remove the selectableItemBackground if the user can't be edited - if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) { + if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) { mRoleContainer.setBackgroundDrawable(null); } else { mRoleContainer.setBackground(null); @@ -124,6 +128,22 @@ private void setupRoleContainerForCapability() { @Override public void onClick(View v) { - //TODO: change user role + Context context = getActivity(); + + AlertDialog.Builder builderSingle = new AlertDialog.Builder(context); + builderSingle.setTitle("Role"); + + final ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, + android.R.layout.simple_list_item_1, Role.getRoles(context)); + + builderSingle.setNegativeButton(R.string.cancel, null); + + builderSingle.setAdapter(arrayAdapter, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + //String strName = arrayAdapter.getItem(which); + } + }); + builderSingle.show(); } } From 688abd8be6f202c862bec58b73f6837e6e0db758 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 5 May 2016 14:36:02 +0300 Subject: [PATCH 23/64] Fixed: Role enum should have been deleted in the merge --- .../org/wordpress/android/models/Role.java | 77 ------------------- 1 file changed, 77 deletions(-) delete mode 100644 WordPress/src/main/java/org/wordpress/android/models/Role.java diff --git a/WordPress/src/main/java/org/wordpress/android/models/Role.java b/WordPress/src/main/java/org/wordpress/android/models/Role.java deleted file mode 100644 index 86a5d91e190d..000000000000 --- a/WordPress/src/main/java/org/wordpress/android/models/Role.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.wordpress.android.models; - -import android.content.Context; - -import org.wordpress.android.R; - -public enum Role { - SUPER_ADMIN(R.string.role_super_admin), - ADMIN(R.string.role_admin), - EDITOR(R.string.role_editor), - AUTHOR(R.string.role_author), - CONTRIBUTOR(R.string.role_contributor), - UNSUPPORTED(R.string.role_unsupported); - - 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; - - Role(int label) { - this.label = label; - } - - // Label to be used in UI - public static String getLabel(Context context, Role role) { - return context.getString(role.label); - } - - // Returns the key for that role - public static String toKey(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; - 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 - public static Role fromKey(String value) { - if (value == null) - return Role.UNSUPPORTED; - if (value.equals(KEY_SUPER_ADMIN)) - return Role.SUPER_ADMIN; - if (value.equals(KEY_ADMIN)) - return Role.ADMIN; - if (value.equals(KEY_EDITOR)) - return Role.EDITOR; - if (value.equals(KEY_AUTHOR)) - return Role.AUTHOR; - if (value.equals(KEY_CONTRIBUTOR)) - return Role.CONTRIBUTOR; - return Role.UNSUPPORTED; - } - - public static String[] getRoles(Context context) { - return new String[] { - Role.getLabel(context, Role.ADMIN), - Role.getLabel(context, Role.EDITOR), - Role.getLabel(context, Role.AUTHOR), - Role.getLabel(context, Role.CONTRIBUTOR), - }; - } -} From 97005c7a905e88a046136887915d24ebbaf3a4be Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 5 May 2016 16:26:24 +0300 Subject: [PATCH 24/64] RoleListAdapter introduced. Better styling for the role list --- .../ui/people/PersonDetailFragment.java | 71 ++++++++++++++++--- .../src/main/res/layout/role_list_row.xml | 41 +++++++++++ 2 files changed, 101 insertions(+), 11 deletions(-) create mode 100644 WordPress/src/main/res/layout/role_list_row.xml diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index 98d6aac1d05a..788186275af0 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -6,12 +6,16 @@ import android.app.Fragment; import android.content.Context; import android.content.DialogInterface; +import android.graphics.Typeface; import android.os.Bundle; +import android.support.v4.content.ContextCompat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; +import android.widget.Button; import android.widget.LinearLayout; +import android.widget.RadioButton; import android.widget.TextView; import org.wordpress.android.R; @@ -23,6 +27,7 @@ import org.wordpress.android.util.AppLog; import org.wordpress.android.util.GravatarUtils; import org.wordpress.android.util.StringUtils; +import org.wordpress.android.widgets.TypefaceCache; import org.wordpress.android.widgets.WPNetworkImageView; public class PersonDetailFragment extends Fragment implements View.OnClickListener { @@ -130,20 +135,64 @@ private void setupRoleContainerForCapability() { public void onClick(View v) { Context context = getActivity(); - AlertDialog.Builder builderSingle = new AlertDialog.Builder(context); - builderSingle.setTitle("Role"); + AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.Calypso_AlertDialog); + builder.setTitle(R.string.role); + builder.setNegativeButton(R.string.cancel, null); - final ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, - android.R.layout.simple_list_item_1, Role.getRoles(context)); + String[] roles = getResources().getStringArray(R.array.roles); + ArrayAdapter arrayAdapter = new RoleListAdapter(context, R.layout.role_list_row, roles); + builder.setAdapter(arrayAdapter, null); - builderSingle.setNegativeButton(R.string.cancel, null); + AlertDialog dialog = builder.show(); + Button negative = dialog.getButton(DialogInterface.BUTTON_NEGATIVE); - builderSingle.setAdapter(arrayAdapter, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - //String strName = arrayAdapter.getItem(which); + if (negative != null) { + Typeface typeface = TypefaceCache.getTypeface(context, TypefaceCache.FAMILY_DEFAULT_LIGHT, Typeface.BOLD); + negative.setTypeface(typeface); + negative.setTextColor(ContextCompat.getColor(context, R.color.blue_medium)); + } + } + + private class RoleListAdapter extends ArrayAdapter { + private int mSelectedIndex; + + public RoleListAdapter(Context context, int resource, String[] objects) { + super(context, resource, objects); + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + if (convertView == null) { + convertView = View.inflate(getContext(), R.layout.role_list_row, null); } - }); - builderSingle.show(); + + final RadioButton radioButton = (RadioButton) convertView.findViewById(R.id.radio); + TextView mainText = (TextView) convertView.findViewById(R.id.main_text); + mainText.setText(getItem(position)); + + if (radioButton != null) { + radioButton.setChecked(mSelectedIndex == position); + radioButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + changeSelection(position); + } + }); + } + + convertView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + changeSelection(position); + } + }); + + return convertView; + } + + private void changeSelection(int position) { + mSelectedIndex = position; + notifyDataSetChanged(); + } } } diff --git a/WordPress/src/main/res/layout/role_list_row.xml b/WordPress/src/main/res/layout/role_list_row.xml new file mode 100644 index 000000000000..d0abc1cdd3d4 --- /dev/null +++ b/WordPress/src/main/res/layout/role_list_row.xml @@ -0,0 +1,41 @@ + + + + + + + + From 7a7efd26688629a4bf5e0969ec2a736974eb6a2b Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 5 May 2016 20:25:18 +0300 Subject: [PATCH 25/64] Update user role fully implemented --- .../ui/people/PersonDetailFragment.java | 54 +++++++++++++++---- 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index 788186275af0..2081222cb68f 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -24,6 +24,7 @@ import org.wordpress.android.models.Blog; import org.wordpress.android.models.Capability; import org.wordpress.android.models.Person; +import org.wordpress.android.ui.people.utils.PeopleUtils; import org.wordpress.android.util.AppLog; import org.wordpress.android.util.GravatarUtils; import org.wordpress.android.util.StringUtils; @@ -43,6 +44,8 @@ public class PersonDetailFragment extends Fragment implements View.OnClickListen private LinearLayout mRoleContainer; private TextView mRoleTextView; + private String mSelectedRole; + public static PersonDetailFragment newInstance(long personID, int localTableBlogID) { PersonDetailFragment personDetailFragment = new PersonDetailFragment(); Bundle bundle = new Bundle(); @@ -102,6 +105,7 @@ public void refreshPersonDetails() { mRoleTextView.setText(StringUtils.capitalize(person.getRole())); setupRoleContainerForCapability(); + mSelectedRole = person.getRole(); } else { AppLog.w(AppLog.T.PEOPLE, "Person returned null from DB for personID: " + mPersonID + " & localTableBlogID: " + mLocalTableBlogID); @@ -137,11 +141,25 @@ public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.Calypso_AlertDialog); builder.setTitle(R.string.role); - builder.setNegativeButton(R.string.cancel, null); + builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Person person = PeopleTable.getPerson(mPersonID, mLocalTableBlogID); + if (person != null) { + mSelectedRole = person.getRole(); + } + } + }); + builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + updatePersonRole(mSelectedRole); + } + }); - String[] roles = getResources().getStringArray(R.array.roles); - ArrayAdapter arrayAdapter = new RoleListAdapter(context, R.layout.role_list_row, roles); - builder.setAdapter(arrayAdapter, null); + final String[] roles = getResources().getStringArray(R.array.roles); + ArrayAdapter roleAdapter = new RoleListAdapter(context, R.layout.role_list_row, roles); + builder.setAdapter(roleAdapter, null); AlertDialog dialog = builder.show(); Button negative = dialog.getButton(DialogInterface.BUTTON_NEGATIVE); @@ -153,9 +171,26 @@ public void onClick(View v) { } } - private class RoleListAdapter extends ArrayAdapter { - private int mSelectedIndex; + private void updatePersonRole(String newRole) { + Person person = PeopleTable.getPerson(mPersonID, mLocalTableBlogID); + if (person == null || newRole == null || newRole.equalsIgnoreCase(person.getRole())) { + return; + } + PeopleUtils.updateRole(person.getBlogId(), person.getPersonID() + "", newRole, mLocalTableBlogID, new PeopleUtils.UpdateUserCallback() { + @Override + public void onSuccess(Person person) { + PeopleTable.save(person); + refreshPersonDetails(); + } + + @Override + public void onError() { + + } + }); + } + private class RoleListAdapter extends ArrayAdapter { public RoleListAdapter(Context context, int resource, String[] objects) { super(context, resource, objects); } @@ -168,10 +203,11 @@ public View getView(final int position, View convertView, ViewGroup parent) { final RadioButton radioButton = (RadioButton) convertView.findViewById(R.id.radio); TextView mainText = (TextView) convertView.findViewById(R.id.main_text); - mainText.setText(getItem(position)); + String role = getItem(position); + mainText.setText(role); if (radioButton != null) { - radioButton.setChecked(mSelectedIndex == position); + radioButton.setChecked(mSelectedRole.equalsIgnoreCase(role)); radioButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -191,7 +227,7 @@ public void onClick(View v) { } private void changeSelection(int position) { - mSelectedIndex = position; + mSelectedRole = getItem(position); notifyDataSetChanged(); } } From c27b3e15cbafef86e911f50cb20eaabbdc5208d0 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 6 May 2016 19:41:18 +0300 Subject: [PATCH 26/64] Change update role network request parameters --- .../android/ui/people/utils/PeopleUtils.java | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) 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 3ab39d7255bf..6086e5464c02 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 @@ -12,7 +12,9 @@ import org.wordpress.android.util.AppLog.T; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class PeopleUtils { @@ -79,19 +81,10 @@ public void onErrorResponse(VolleyError volleyError) { } }; - try { - JSONObject jsonObject = new JSONObject(); - JSONArray roles = new JSONArray(); - roles.put(newRole); - jsonObject.put("roles", roles); - - String path = String.format("sites/%s/users/%s", blogId, userID); - WordPress.getRestClientUtilsV1_1().post(path, jsonObject, null, listener, errorListener); - } catch (JSONException e) { - if (callback != null) { - callback.onError(); - } - } + Map params = new HashMap<>(); + params.put("roles", newRole.toLowerCase()); + String path = String.format("sites/%s/users/%s", blogId, userID); + WordPress.getRestClientUtilsV1_1().post(path, params, null, listener, errorListener); } private static List peopleListFromJSON(JSONArray jsonArray, String blogId, int localTableBlogId) From d14121f6f95f0d7f30278d6baeda7811ac3d771a Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 6 May 2016 19:53:16 +0300 Subject: [PATCH 27/64] Make the update role request from activity to refresh both fragments --- .../ui/people/PeopleManagementActivity.java | 35 ++++++++++- .../ui/people/PersonDetailFragment.java | 59 ++++++++++++------- 2 files changed, 72 insertions(+), 22 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 de5509315071..698de383af34 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 @@ -19,7 +19,8 @@ import java.util.List; -public class PeopleManagementActivity extends AppCompatActivity implements PeopleListFragment.OnPersonSelectedListener { +public class PeopleManagementActivity extends AppCompatActivity + implements PeopleListFragment.OnPersonSelectedListener, PersonDetailFragment.OnChangeListener { private static final String KEY_PEOPLE_LIST_FRAGMENT = "people-list-fragment"; private static final String KEY_PERSON_DETAIL_FRAGMENT = "person-detail-fragment"; @@ -125,4 +126,36 @@ public void onPersonSelected(Person person) { fragmentTransaction.commit(); } } + + @Override + public void onRoleChanged(long personID, int localTableBlogId, String newRole) { + Person person = PeopleTable.getPerson(personID, localTableBlogId); + if (person == null || newRole == null || newRole.equalsIgnoreCase(person.getRole())) { + return; + } + PeopleUtils.updateRole(person.getBlogId(), person.getPersonID() + "", newRole, localTableBlogId, new PeopleUtils.UpdateUserCallback() { + @Override + public void onSuccess(Person person) { + PeopleTable.save(person); + + FragmentManager fragmentManager = getFragmentManager(); + PeopleListFragment peopleListFragment = (PeopleListFragment) fragmentManager + .findFragmentByTag(KEY_PEOPLE_LIST_FRAGMENT); + PersonDetailFragment personDetailFragment = (PersonDetailFragment) fragmentManager + .findFragmentByTag(KEY_PERSON_DETAIL_FRAGMENT); + + if (peopleListFragment != null) { + peopleListFragment.refreshPeopleList(); + } + if (personDetailFragment != null) { + personDetailFragment.refreshPersonDetails(); + } + } + + @Override + public void onError() { + + } + }); + } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index 2081222cb68f..44489b0581a4 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -2,6 +2,7 @@ import android.animation.Animator; import android.animation.AnimatorInflater; +import android.app.Activity; import android.app.AlertDialog; import android.app.Fragment; import android.content.Context; @@ -24,7 +25,6 @@ import org.wordpress.android.models.Blog; import org.wordpress.android.models.Capability; import org.wordpress.android.models.Person; -import org.wordpress.android.ui.people.utils.PeopleUtils; import org.wordpress.android.util.AppLog; import org.wordpress.android.util.GravatarUtils; import org.wordpress.android.util.StringUtils; @@ -45,6 +45,7 @@ public class PersonDetailFragment extends Fragment implements View.OnClickListen private TextView mRoleTextView; private String mSelectedRole; + private OnChangeListener mListener; public static PersonDetailFragment newInstance(long personID, int localTableBlogID) { PersonDetailFragment personDetailFragment = new PersonDetailFragment(); @@ -55,6 +56,34 @@ public static PersonDetailFragment newInstance(long personID, int localTableBlog return personDetailFragment; } + @Override + public void onAttach(Context context) { + super.onAttach(context); + try { + mListener = (OnChangeListener) context; + } catch (ClassCastException e) { + throw new ClassCastException(context.toString() + " must implement OnChangeListener"); + } + } + + // We need to override this for devices pre API 23 + @SuppressWarnings("deprecation") + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + try { + mListener = (OnChangeListener) activity; + } catch (ClassCastException e) { + throw new ClassCastException(activity.toString() + " must implement OnChangeListener"); + } + } + + @Override + public void onDetach() { + super.onDetach(); + mListener = null; + } + /** * Sets the enter & pop animation for the fragment. In order to keep the animation even after the configuration * changes, this method is used instead of FragmentTransaction for the animation. @@ -153,7 +182,9 @@ public void onClick(DialogInterface dialog, int which) { builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - updatePersonRole(mSelectedRole); + if (mListener != null) { + mListener.onRoleChanged(mPersonID, mLocalTableBlogID, mSelectedRole); + } } }); @@ -171,25 +202,6 @@ public void onClick(DialogInterface dialog, int which) { } } - private void updatePersonRole(String newRole) { - Person person = PeopleTable.getPerson(mPersonID, mLocalTableBlogID); - if (person == null || newRole == null || newRole.equalsIgnoreCase(person.getRole())) { - return; - } - PeopleUtils.updateRole(person.getBlogId(), person.getPersonID() + "", newRole, mLocalTableBlogID, new PeopleUtils.UpdateUserCallback() { - @Override - public void onSuccess(Person person) { - PeopleTable.save(person); - refreshPersonDetails(); - } - - @Override - public void onError() { - - } - }); - } - private class RoleListAdapter extends ArrayAdapter { public RoleListAdapter(Context context, int resource, String[] objects) { super(context, resource, objects); @@ -231,4 +243,9 @@ private void changeSelection(int position) { notifyDataSetChanged(); } } + + // Container Activity must implement this interface + public interface OnChangeListener { + void onRoleChanged(long personID, int localTableBlogId, String newRole); + } } From 4a27fd2ba34c54a6afd8942c95455d17f4e81cb5 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 6 May 2016 20:01:35 +0300 Subject: [PATCH 28/64] Remove duplicate code by introducing refreshOnScreenFragmentDetails method --- .../ui/people/PeopleManagementActivity.java | 44 ++++++++----------- 1 file changed, 18 insertions(+), 26 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 698de383af34..0b562b36daaa 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 @@ -84,19 +84,7 @@ private void refreshUsersList(String dotComBlogId, final int localTableBlogId) { @Override public void onSuccess(List peopleList) { PeopleTable.savePeople(peopleList); - - FragmentManager fragmentManager = getFragmentManager(); - PeopleListFragment peopleListFragment = (PeopleListFragment) fragmentManager - .findFragmentByTag(KEY_PEOPLE_LIST_FRAGMENT); - PersonDetailFragment personDetailFragment = (PersonDetailFragment) fragmentManager - .findFragmentByTag(KEY_PERSON_DETAIL_FRAGMENT); - - if (peopleListFragment != null) { - peopleListFragment.refreshPeopleList(); - } - if (personDetailFragment != null) { - personDetailFragment.refreshPersonDetails(); - } + refreshOnScreenFragmentDetails(); } @Override @@ -137,19 +125,7 @@ public void onRoleChanged(long personID, int localTableBlogId, String newRole) { @Override public void onSuccess(Person person) { PeopleTable.save(person); - - FragmentManager fragmentManager = getFragmentManager(); - PeopleListFragment peopleListFragment = (PeopleListFragment) fragmentManager - .findFragmentByTag(KEY_PEOPLE_LIST_FRAGMENT); - PersonDetailFragment personDetailFragment = (PersonDetailFragment) fragmentManager - .findFragmentByTag(KEY_PERSON_DETAIL_FRAGMENT); - - if (peopleListFragment != null) { - peopleListFragment.refreshPeopleList(); - } - if (personDetailFragment != null) { - personDetailFragment.refreshPersonDetails(); - } + refreshOnScreenFragmentDetails(); } @Override @@ -158,4 +134,20 @@ public void onError() { } }); } + + // This helper method is used after a successful network request + private void refreshOnScreenFragmentDetails() { + FragmentManager fragmentManager = getFragmentManager(); + PeopleListFragment peopleListFragment = (PeopleListFragment) fragmentManager + .findFragmentByTag(KEY_PEOPLE_LIST_FRAGMENT); + PersonDetailFragment personDetailFragment = (PersonDetailFragment) fragmentManager + .findFragmentByTag(KEY_PERSON_DETAIL_FRAGMENT); + + if (peopleListFragment != null) { + peopleListFragment.refreshPeopleList(); + } + if (personDetailFragment != null) { + personDetailFragment.refreshPersonDetails(); + } + } } From 22d6576bed3edfd23f22e996290f3d853e636505 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 9 May 2016 11:13:45 +0300 Subject: [PATCH 29/64] Adds a helpful comment for resetting the selected role --- .../org/wordpress/android/ui/people/PersonDetailFragment.java | 1 + 1 file changed, 1 insertion(+) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index 44489b0581a4..67bc518be796 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -175,6 +175,7 @@ public void onClick(View v) { public void onClick(DialogInterface dialog, int which) { Person person = PeopleTable.getPerson(mPersonID, mLocalTableBlogID); if (person != null) { + // reset the selected role since the dialog is cancelled mSelectedRole = person.getRole(); } } From 6b2977bf31ba8f54908619ea1bd63c8a01c646a7 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 9 May 2016 11:16:13 +0300 Subject: [PATCH 30/64] Better naming for the role label in change role dialog --- .../org/wordpress/android/ui/people/PersonDetailFragment.java | 2 +- WordPress/src/main/res/layout/role_list_row.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index 67bc518be796..b8a09ec4d6c6 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -215,7 +215,7 @@ public View getView(final int position, View convertView, ViewGroup parent) { } final RadioButton radioButton = (RadioButton) convertView.findViewById(R.id.radio); - TextView mainText = (TextView) convertView.findViewById(R.id.main_text); + TextView mainText = (TextView) convertView.findViewById(R.id.role_label); String role = getItem(position); mainText.setText(role); diff --git a/WordPress/src/main/res/layout/role_list_row.xml b/WordPress/src/main/res/layout/role_list_row.xml index d0abc1cdd3d4..07891321dafd 100644 --- a/WordPress/src/main/res/layout/role_list_row.xml +++ b/WordPress/src/main/res/layout/role_list_row.xml @@ -24,7 +24,7 @@ tools:targetApi="LOLLIPOP"/> Date: Mon, 9 May 2016 11:17:27 +0300 Subject: [PATCH 31/64] Fix: Role container should be enabled if the user has edit_users capability --- .../org/wordpress/android/ui/people/PersonDetailFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index b8a09ec4d6c6..dfca84376959 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -152,7 +152,7 @@ public void setPersonDetails(long personID, int localTableBlogID) { private void setupRoleContainerForCapability() { Blog blog = WordPress.getBlog(mLocalTableBlogID); boolean canChangeRole = blog != null && blog.hasCapability(Capability.EDIT_USERS); - if (!canChangeRole) { + if (canChangeRole) { mRoleContainer.setOnClickListener(this); } else { // Remove the selectableItemBackground if the user can't be edited From 68feb3fe44fe41aaee6ebe4c6e58443ea9a2f58f Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 9 May 2016 13:33:28 +0300 Subject: [PATCH 32/64] Order people list by display name & username --- .../main/java/org/wordpress/android/datasets/PeopleTable.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 16a71dfc1d10..35481fa85c79 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -80,7 +80,8 @@ public static void savePeople(List peopleList) { public static List getPeople(int localTableBlogId) { List people = new ArrayList<>(); String[] args = { Integer.toString(localTableBlogId) }; - Cursor c = getReadableDb().rawQuery("SELECT * FROM " + PEOPLE_TABLE + " WHERE local_blog_id=?", args); + Cursor c = getReadableDb().rawQuery("SELECT * FROM " + PEOPLE_TABLE + + " WHERE local_blog_id=? ORDER BY display_name, user_name", args); try { while (c.moveToNext()) { From 5ba685ba08067b00b55a270db7e499f543fc76bd Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 9 May 2016 14:41:25 +0300 Subject: [PATCH 33/64] Show error message for fetch people list & update user role --- .../android/ui/people/PeopleManagementActivity.java | 9 +++++++-- WordPress/src/main/res/values/strings.xml | 2 ++ 2 files changed, 9 insertions(+), 2 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 0b562b36daaa..fd06bce184ac 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 @@ -16,6 +16,7 @@ import org.wordpress.android.ui.ActivityLauncher; import org.wordpress.android.ui.accounts.BlogUtils; import org.wordpress.android.ui.people.utils.PeopleUtils; +import org.wordpress.android.util.ToastUtils; import java.util.List; @@ -89,7 +90,9 @@ public void onSuccess(List peopleList) { @Override public void onError() { - //TODO: show some kind of error to the user + ToastUtils.showToast(PeopleManagementActivity.this, + R.string.error_fetch_people_list, + ToastUtils.Duration.LONG); } }); } @@ -130,7 +133,9 @@ public void onSuccess(Person person) { @Override public void onError() { - + ToastUtils.showToast(PeopleManagementActivity.this, + R.string.error_update_role, + ToastUtils.Duration.LONG); } }); } diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index c0732ea2206f..ef80e6ebbc9a 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -1023,6 +1023,8 @@ Couldn\'t retrieve site info Couldn\'t save site info This post or page was published on another site + Couldn\'t retrieve users for the site + Couldn\'t update role of the user Add media From 62f57aced00e7ee31635341668282475cedacad1 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 9 May 2016 14:45:28 +0300 Subject: [PATCH 34/64] Update updateRole method signature to avoid unnecessary String cast --- .../wordpress/android/ui/people/PeopleManagementActivity.java | 3 ++- .../org/wordpress/android/ui/people/utils/PeopleUtils.java | 4 ++-- 2 files changed, 4 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 fd06bce184ac..bf475eb3f6a0 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 @@ -124,7 +124,8 @@ public void onRoleChanged(long personID, int localTableBlogId, String newRole) { if (person == null || newRole == null || newRole.equalsIgnoreCase(person.getRole())) { return; } - PeopleUtils.updateRole(person.getBlogId(), person.getPersonID() + "", newRole, localTableBlogId, new PeopleUtils.UpdateUserCallback() { + PeopleUtils.updateRole(person.getBlogId(), person.getPersonID(), newRole, localTableBlogId, + new PeopleUtils.UpdateUserCallback() { @Override public void onSuccess(Person person) { PeopleTable.save(person); 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 6086e5464c02..2cf381b90885 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 @@ -50,7 +50,7 @@ public void onErrorResponse(VolleyError volleyError) { WordPress.getRestClientUtilsV1_1().get(path, listener, errorListener); } - public static void updateRole(final String blogId, String userID, String newRole, final int localTableBlogId, + public static void updateRole(final String blogId, long userID, String newRole, final int localTableBlogId, final UpdateUserCallback callback) { com.wordpress.rest.RestRequest.Listener listener = new RestRequest.Listener() { @Override @@ -83,7 +83,7 @@ public void onErrorResponse(VolleyError volleyError) { Map params = new HashMap<>(); params.put("roles", newRole.toLowerCase()); - String path = String.format("sites/%s/users/%s", blogId, userID); + String path = String.format("sites/%s/users/%d", blogId, userID); WordPress.getRestClientUtilsV1_1().post(path, params, null, listener, errorListener); } From affa51e52a98a22c674eb642ed8044bbe99b248c Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 9 May 2016 17:56:58 +0300 Subject: [PATCH 35/64] Check promote_users instead of edit_users for updating user role --- .../main/java/org/wordpress/android/models/Capability.java | 5 ++--- .../wordpress/android/ui/people/PersonDetailFragment.java | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/models/Capability.java b/WordPress/src/main/java/org/wordpress/android/models/Capability.java index 28436c73269a..2a418a0f82ae 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/Capability.java +++ b/WordPress/src/main/java/org/wordpress/android/models/Capability.java @@ -5,9 +5,8 @@ * A list of capabilities can be found in: https://codex.wordpress.org/Roles_and_Capabilities#Capabilities */ public enum Capability { - EDIT_USERS("edit_users"), // Check if user can change another user's role - LIST_USERS("list_users"), // Check if user can visit People page - PROMOTE_USERS("promote_users"); // Check if user can invite another user + PROMOTE_USERS("promote_users"), // Check if user can change another user's role + LIST_USERS("list_users"); // Check if user can visit People page private final String label; diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index dfca84376959..060766641468 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -151,7 +151,7 @@ public void setPersonDetails(long personID, int localTableBlogID) { @SuppressWarnings("deprecation") private void setupRoleContainerForCapability() { Blog blog = WordPress.getBlog(mLocalTableBlogID); - boolean canChangeRole = blog != null && blog.hasCapability(Capability.EDIT_USERS); + boolean canChangeRole = blog != null && blog.hasCapability(Capability.PROMOTE_USERS); if (canChangeRole) { mRoleContainer.setOnClickListener(this); } else { From c5333c37eacbd8e3dd9af8c0bb6304f18068a407 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 9 May 2016 18:01:36 +0300 Subject: [PATCH 36/64] Current user shouldn't be able to update her own role --- .../wordpress/android/ui/people/PersonDetailFragment.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index 060766641468..9c8f20c9f7c9 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -22,6 +22,8 @@ import org.wordpress.android.R; import org.wordpress.android.WordPress; import org.wordpress.android.datasets.PeopleTable; +import org.wordpress.android.models.Account; +import org.wordpress.android.models.AccountHelper; import org.wordpress.android.models.Blog; import org.wordpress.android.models.Capability; import org.wordpress.android.models.Person; @@ -151,7 +153,9 @@ public void setPersonDetails(long personID, int localTableBlogID) { @SuppressWarnings("deprecation") private void setupRoleContainerForCapability() { Blog blog = WordPress.getBlog(mLocalTableBlogID); - boolean canChangeRole = blog != null && blog.hasCapability(Capability.PROMOTE_USERS); + Account account = AccountHelper.getDefaultAccount(); + boolean isCurrentUser = account.getUserId() == mPersonID; + boolean canChangeRole = (blog != null) && !isCurrentUser && blog.hasCapability(Capability.PROMOTE_USERS); if (canChangeRole) { mRoleContainer.setOnClickListener(this); } else { From 8b323a2fd247d0593084b8c372e2d4e61abb02a3 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 10 May 2016 14:46:56 +0300 Subject: [PATCH 37/64] Role container alpha set for the disabled state --- .../org/wordpress/android/ui/people/PersonDetailFragment.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index 9c8f20c9f7c9..75d92f67df84 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -165,6 +165,8 @@ private void setupRoleContainerForCapability() { } else { mRoleContainer.setBackground(null); } + // Change transparency to give a visual cue to the user that it's disabled + mRoleContainer.setAlpha(0.5f); } } From d4487849c8863fcca31e98c4f1faee96a56b0048 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 10 May 2016 15:48:53 +0300 Subject: [PATCH 38/64] Adds remove user button to person detail page --- .../org/wordpress/android/models/Capability.java | 3 ++- .../android/ui/people/PersonDetailFragment.java | 13 +++++++++++++ WordPress/src/main/res/drawable/gridicons_trash.xml | 9 +++++++++ WordPress/src/main/res/menu/person_detail.xml | 9 +++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 WordPress/src/main/res/drawable/gridicons_trash.xml create mode 100644 WordPress/src/main/res/menu/person_detail.xml diff --git a/WordPress/src/main/java/org/wordpress/android/models/Capability.java b/WordPress/src/main/java/org/wordpress/android/models/Capability.java index 2a418a0f82ae..2ae03aeac063 100644 --- a/WordPress/src/main/java/org/wordpress/android/models/Capability.java +++ b/WordPress/src/main/java/org/wordpress/android/models/Capability.java @@ -5,8 +5,9 @@ * A list of capabilities can be found in: https://codex.wordpress.org/Roles_and_Capabilities#Capabilities */ public enum Capability { + LIST_USERS("list_users"), // Check if user can visit People page PROMOTE_USERS("promote_users"), // Check if user can change another user's role - LIST_USERS("list_users"); // Check if user can visit People page + REMOVE_USERS("remove_users"); // Check if user can remove another user private final String label; diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index 75d92f67df84..0f0836359c0a 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -11,6 +11,8 @@ import android.os.Bundle; import android.support.v4.content.ContextCompat; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; @@ -86,6 +88,12 @@ public void onDetach() { mListener = null; } + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.person_detail, menu); + super.onCreateOptionsMenu(menu, inflater); + } + /** * Sets the enter & pop animation for the fragment. In order to keep the animation even after the configuration * changes, this method is used instead of FragmentTransaction for the animation. @@ -112,6 +120,11 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa mRoleContainer = (LinearLayout) rootView.findViewById(R.id.person_role_container); mRoleTextView = (TextView) rootView.findViewById(R.id.person_role); + Blog blog = WordPress.getBlog(mLocalTableBlogID); + if (blog != null && blog.hasCapability(Capability.REMOVE_USERS)) { + setHasOptionsMenu(true); + } + return rootView; } diff --git a/WordPress/src/main/res/drawable/gridicons_trash.xml b/WordPress/src/main/res/drawable/gridicons_trash.xml new file mode 100644 index 000000000000..a1ff3f401b4c --- /dev/null +++ b/WordPress/src/main/res/drawable/gridicons_trash.xml @@ -0,0 +1,9 @@ + + + diff --git a/WordPress/src/main/res/menu/person_detail.xml b/WordPress/src/main/res/menu/person_detail.xml new file mode 100644 index 000000000000..dfe107a3a26b --- /dev/null +++ b/WordPress/src/main/res/menu/person_detail.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file From b1060666fd549677ba553c5be239b76b31b115f6 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 10 May 2016 18:10:14 +0300 Subject: [PATCH 39/64] Remove user network call implemented in PeopleUtils --- .../android/ui/people/utils/PeopleUtils.java | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) 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 2cf381b90885..d8c688dad602 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 @@ -50,7 +50,7 @@ public void onErrorResponse(VolleyError volleyError) { WordPress.getRestClientUtilsV1_1().get(path, listener, errorListener); } - public static void updateRole(final String blogId, long userID, String newRole, final int localTableBlogId, + public static void updateRole(final String blogId, long personID, String newRole, final int localTableBlogId, final UpdateUserCallback callback) { com.wordpress.rest.RestRequest.Listener listener = new RestRequest.Listener() { @Override @@ -83,10 +83,41 @@ public void onErrorResponse(VolleyError volleyError) { Map params = new HashMap<>(); params.put("roles", newRole.toLowerCase()); - String path = String.format("sites/%s/users/%d", blogId, userID); + String path = String.format("sites/%s/users/%d", blogId, personID); WordPress.getRestClientUtilsV1_1().post(path, params, null, listener, errorListener); } + public static void removePerson(String blogId, final long personID, final int localTableBlogId, + final RemoveUserCallback callback) { + com.wordpress.rest.RestRequest.Listener listener = new RestRequest.Listener() { + @Override + public void onResponse(JSONObject jsonObject) { + if (jsonObject != null && callback != null) { + // check if the call was successful + boolean success = jsonObject.optBoolean("success"); + if (success) { + callback.onSuccess(personID, localTableBlogId); + } else { + callback.onError(); + } + } + } + }; + + RestRequest.ErrorListener errorListener = new RestRequest.ErrorListener() { + @Override + public void onErrorResponse(VolleyError volleyError) { + AppLog.e(T.API, volleyError); + if (callback != null) { + callback.onError(); + } + } + }; + + String path = String.format("sites/%s/users/%d/delete", blogId, personID); + WordPress.getRestClientUtilsV1_1().post(path, listener, errorListener); + } + private static List peopleListFromJSON(JSONArray jsonArray, String blogId, int localTableBlogId) throws JSONException { if (jsonArray == null) { @@ -109,6 +140,10 @@ public interface FetchUsersCallback extends Callback { void onSuccess(List peopleList); } + public interface RemoveUserCallback extends Callback { + void onSuccess(long personID, int localTableBlogId); + } + public interface UpdateUserCallback extends Callback { void onSuccess(Person person); } From 59e8371d7db3b3438e0bf800aefc2fefef2bbace Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 10 May 2016 18:51:40 +0300 Subject: [PATCH 40/64] Adds remove user functionality to person detail page --- .../ui/people/PeopleManagementActivity.java | 34 +++++++++++++++++++ WordPress/src/main/res/menu/person_detail.xml | 2 +- WordPress/src/main/res/values/strings.xml | 3 +- 3 files changed, 37 insertions(+), 2 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 bf475eb3f6a0..a8ff97669d4e 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 @@ -25,6 +25,8 @@ public class PeopleManagementActivity extends AppCompatActivity private static final String KEY_PEOPLE_LIST_FRAGMENT = "people-list-fragment"; private static final String KEY_PERSON_DETAIL_FRAGMENT = "person-detail-fragment"; + private Person mSelectedPerson; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -66,6 +68,9 @@ public void finish() { public void onBackPressed() { if (getFragmentManager().getBackStackEntryCount() > 0 ){ getFragmentManager().popBackStack(); + + // navigated back to people list + mSelectedPerson = null; } else { super.onBackPressed(); } @@ -76,6 +81,9 @@ public boolean onOptionsItemSelected(final MenuItem item) { if (item.getItemId() == android.R.id.home) { onBackPressed(); return true; + } else if (item.getItemId() == R.id.remove_person) { + removeSelectedPerson(); + return true; } return super.onOptionsItemSelected(item); } @@ -103,6 +111,8 @@ public void onPersonSelected(Person person) { PersonDetailFragment personDetailFragment = (PersonDetailFragment) fragmentManager .findFragmentByTag(KEY_PERSON_DETAIL_FRAGMENT); + mSelectedPerson = person; + long personID = person.getPersonID(); int localTableBlogID = person.getLocalTableBlogId(); if (personDetailFragment == null) { @@ -141,6 +151,30 @@ public void onError() { }); } + private void removeSelectedPerson() { + if (mSelectedPerson == null) { + return; + } + PeopleUtils.removePerson(mSelectedPerson.getBlogId(), + mSelectedPerson.getPersonID(), + mSelectedPerson.getLocalTableBlogId(), + new PeopleUtils.RemoveUserCallback() { + @Override + public void onSuccess(long personID, int localTableBlogId) { + ToastUtils.showToast(PeopleManagementActivity.this, + R.string.person_removed, + ToastUtils.Duration.LONG); + } + + @Override + public void onError() { + ToastUtils.showToast(PeopleManagementActivity.this, + R.string.error_remove_user, + ToastUtils.Duration.LONG); + } + }); + } + // This helper method is used after a successful network request private void refreshOnScreenFragmentDetails() { FragmentManager fragmentManager = getFragmentManager(); diff --git a/WordPress/src/main/res/menu/person_detail.xml b/WordPress/src/main/res/menu/person_detail.xml index dfe107a3a26b..0d5fa9557ef0 100644 --- a/WordPress/src/main/res/menu/person_detail.xml +++ b/WordPress/src/main/res/menu/person_detail.xml @@ -2,7 +2,7 @@ diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index ef80e6ebbc9a..ffc1704fcd1e 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -1025,6 +1025,7 @@ This post or page was published on another site Couldn\'t retrieve users for the site Couldn\'t update role of the user + Couldn\'t remove user Add media @@ -1365,7 +1366,7 @@ People Edit User Role - REMOVE %s + User removed successfully My Profile From 1f395a7dcafec91b8eef9a9cfa8b25fa1de1cfa6 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 11 May 2016 12:15:14 +0300 Subject: [PATCH 41/64] When a fresh list of people is received, delete the old ones --- .../org/wordpress/android/datasets/PeopleTable.java | 10 +++++++++- .../android/ui/people/PeopleManagementActivity.java | 2 +- 2 files changed, 10 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 35481fa85c79..55d2df06d3ec 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -65,9 +65,12 @@ public static void save(Person person, SQLiteDatabase database) { database.insertWithOnConflict(PEOPLE_TABLE, null, values, SQLiteDatabase.CONFLICT_REPLACE); } - public static void savePeople(List peopleList) { + public static void savePeople(List peopleList, int localTableBlogId) { getWritableDb().beginTransaction(); try { + //We have a fresh list, remove the previous list of people in case it was deleted on remote + PeopleTable.deletePeopleForBlog(localTableBlogId); + for (Person person : peopleList) { PeopleTable.save(person); } @@ -77,6 +80,11 @@ public static void savePeople(List peopleList) { } } + public static int deletePeopleForBlog(int localTableBlogId) { + String[] args = new String[]{Integer.toString(localTableBlogId)}; + return getWritableDb().delete(PEOPLE_TABLE, "local_blog_id=?", args); + } + public static List getPeople(int localTableBlogId) { List people = new ArrayList<>(); String[] args = { Integer.toString(localTableBlogId) }; 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 a8ff97669d4e..ae2c86d2f6cc 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 @@ -92,7 +92,7 @@ private void refreshUsersList(String dotComBlogId, final int localTableBlogId) { PeopleUtils.fetchUsers(dotComBlogId, localTableBlogId, new PeopleUtils.FetchUsersCallback() { @Override public void onSuccess(List peopleList) { - PeopleTable.savePeople(peopleList); + PeopleTable.savePeople(peopleList, localTableBlogId); refreshOnScreenFragmentDetails(); } From 85e692f55a5a8111e02dc706bf75863e38ebe2da Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 11 May 2016 12:17:47 +0300 Subject: [PATCH 42/64] When a blog is deleted from DB, delete people for that blog --- WordPress/src/main/java/org/wordpress/android/WordPressDB.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/WordPressDB.java b/WordPress/src/main/java/org/wordpress/android/WordPressDB.java index 5418645f3139..c43dbd4fa6c2 100644 --- a/WordPress/src/main/java/org/wordpress/android/WordPressDB.java +++ b/WordPress/src/main/java/org/wordpress/android/WordPressDB.java @@ -760,6 +760,7 @@ public boolean deleteBlog(Context ctx, int id) { int rowsAffected = db.delete(BLOGS_TABLE, "id=?", new String[]{Integer.toString(id)}); deleteQuickPressShortcutsForLocalTableBlogId(ctx, id); deleteAllPostsForLocalTableBlogId(id); + PeopleTable.deletePeopleForBlog(id); return (rowsAffected > 0); } @@ -769,6 +770,7 @@ public boolean deleteWordPressComBlogs(Context ctx) { int localBlogId = MapUtils.getMapInt(blog, "id"); deleteQuickPressShortcutsForLocalTableBlogId(ctx, localBlogId); deleteAllPostsForLocalTableBlogId(localBlogId); + PeopleTable.deletePeopleForBlog(localBlogId); } // H4ck alert: We need to delete the Jetpack sites that were added in the initial From 2702f0fad3db1a0ecb3dfc083d1bf385b728f2a0 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 11 May 2016 13:17:19 +0300 Subject: [PATCH 43/64] When a user is removed, go back to the list and refresh --- .../android/datasets/PeopleTable.java | 9 ++++- .../ui/people/PeopleManagementActivity.java | 37 ++++++++++++++----- 2 files changed, 34 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 55d2df06d3ec..8ae861704570 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -80,9 +80,14 @@ public static void savePeople(List peopleList, int localTableBlogId) { } } - public static int deletePeopleForBlog(int localTableBlogId) { + public static void deletePeopleForBlog(int localTableBlogId) { String[] args = new String[]{Integer.toString(localTableBlogId)}; - return getWritableDb().delete(PEOPLE_TABLE, "local_blog_id=?", args); + getWritableDb().delete(PEOPLE_TABLE, "local_blog_id=?", args); + } + + public static void deletePerson(long personID, int localTableBlogId) { + String[] args = new String[]{Long.toString(personID), Integer.toString(localTableBlogId)}; + getWritableDb().delete(PEOPLE_TABLE, "person_id=? AND local_blog_id=?", args); } public static List getPeople(int localTableBlogId) { 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 ae2c86d2f6cc..9c13c9029e56 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java @@ -66,12 +66,7 @@ public void finish() { @Override public void onBackPressed() { - if (getFragmentManager().getBackStackEntryCount() > 0 ){ - getFragmentManager().popBackStack(); - - // navigated back to people list - mSelectedPerson = null; - } else { + if (!navigateBackToPeopleListFragment()) { super.onBackPressed(); } } @@ -161,6 +156,11 @@ private void removeSelectedPerson() { new PeopleUtils.RemoveUserCallback() { @Override public void onSuccess(long personID, int localTableBlogId) { + // remove the person from db, navigate back to list fragment and refresh it + PeopleTable.deletePerson(personID, localTableBlogId); + navigateBackToPeopleListFragment(); + refreshPeopleListFragment(); + ToastUtils.showToast(PeopleManagementActivity.this, R.string.person_removed, ToastUtils.Duration.LONG); @@ -178,16 +178,33 @@ public void onError() { // This helper method is used after a successful network request private void refreshOnScreenFragmentDetails() { FragmentManager fragmentManager = getFragmentManager(); - PeopleListFragment peopleListFragment = (PeopleListFragment) fragmentManager - .findFragmentByTag(KEY_PEOPLE_LIST_FRAGMENT); PersonDetailFragment personDetailFragment = (PersonDetailFragment) fragmentManager .findFragmentByTag(KEY_PERSON_DETAIL_FRAGMENT); + if (personDetailFragment != null) { + personDetailFragment.refreshPersonDetails(); + } + + refreshPeopleListFragment(); + } + + private void refreshPeopleListFragment() { + FragmentManager fragmentManager = getFragmentManager(); + PeopleListFragment peopleListFragment = (PeopleListFragment) fragmentManager + .findFragmentByTag(KEY_PEOPLE_LIST_FRAGMENT); if (peopleListFragment != null) { peopleListFragment.refreshPeopleList(); } - if (personDetailFragment != null) { - personDetailFragment.refreshPersonDetails(); + } + + private boolean navigateBackToPeopleListFragment() { + if (getFragmentManager().getBackStackEntryCount() > 0) { + getFragmentManager().popBackStack(); + + // navigated back to people list + mSelectedPerson = null; + return true; } + return false; } } From bb093202ecbf96a5888ef00c5166c5779f718681 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 11 May 2016 15:47:33 +0300 Subject: [PATCH 44/64] Remove unnecessary styling from role change dialog --- .../android/ui/people/PersonDetailFragment.java | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index 0f0836359c0a..623c98229213 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -7,16 +7,13 @@ import android.app.Fragment; import android.content.Context; import android.content.DialogInterface; -import android.graphics.Typeface; import android.os.Bundle; -import android.support.v4.content.ContextCompat; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; -import android.widget.Button; import android.widget.LinearLayout; import android.widget.RadioButton; import android.widget.TextView; @@ -32,7 +29,6 @@ import org.wordpress.android.util.AppLog; import org.wordpress.android.util.GravatarUtils; import org.wordpress.android.util.StringUtils; -import org.wordpress.android.widgets.TypefaceCache; import org.wordpress.android.widgets.WPNetworkImageView; public class PersonDetailFragment extends Fragment implements View.OnClickListener { @@ -212,14 +208,7 @@ public void onClick(DialogInterface dialog, int which) { ArrayAdapter roleAdapter = new RoleListAdapter(context, R.layout.role_list_row, roles); builder.setAdapter(roleAdapter, null); - AlertDialog dialog = builder.show(); - Button negative = dialog.getButton(DialogInterface.BUTTON_NEGATIVE); - - if (negative != null) { - Typeface typeface = TypefaceCache.getTypeface(context, TypefaceCache.FAMILY_DEFAULT_LIGHT, Typeface.BOLD); - negative.setTypeface(typeface); - negative.setTextColor(ContextCompat.getColor(context, R.color.blue_medium)); - } + builder.show(); } private class RoleListAdapter extends ArrayAdapter { From 42b8b7b61335492a3a1ac1f69de61702493fc393 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 11 May 2016 18:24:43 +0300 Subject: [PATCH 45/64] Better toast message after a user is removed --- .../ui/people/PeopleManagementActivity.java | 16 +++++++++++----- WordPress/src/main/res/values/strings.xml | 3 ++- 2 files changed, 13 insertions(+), 6 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 9c13c9029e56..52db35db5c28 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 @@ -157,13 +157,19 @@ private void removeSelectedPerson() { @Override public void onSuccess(long personID, int localTableBlogId) { // remove the person from db, navigate back to list fragment and refresh it - PeopleTable.deletePerson(personID, localTableBlogId); + Person person = PeopleTable.getPerson(personID, localTableBlogId); + String text; + if (person != null) { + PeopleTable.deletePerson(personID, localTableBlogId); + text = getString(R.string.person_removed, person.getUsername()); + } else { + text = getString(R.string.person_removed_general); + } + + ToastUtils.showToast(PeopleManagementActivity.this, text, ToastUtils.Duration.LONG); + navigateBackToPeopleListFragment(); refreshPeopleListFragment(); - - ToastUtils.showToast(PeopleManagementActivity.this, - R.string.person_removed, - ToastUtils.Duration.LONG); } @Override diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index ffc1704fcd1e..fd5e0e13ee8c 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -1366,7 +1366,8 @@ People Edit User Role - User removed successfully + Successfully removed @%s + User removed successfully My Profile From dbdbd4183106004c7019a04a44739d47b9227923 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 11 May 2016 18:38:09 +0300 Subject: [PATCH 46/64] Add a confirmation dialog for removing a person --- .../ui/people/PeopleManagementActivity.java | 22 ++++++++++++++++++- WordPress/src/main/res/values/strings.xml | 4 +++- 2 files changed, 24 insertions(+), 2 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 52db35db5c28..be7786ebe6ed 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 @@ -1,7 +1,9 @@ package org.wordpress.android.ui.people; +import android.app.AlertDialog; import android.app.FragmentManager; import android.app.FragmentTransaction; +import android.content.DialogInterface; import android.os.Bundle; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; @@ -77,7 +79,7 @@ public boolean onOptionsItemSelected(final MenuItem item) { onBackPressed(); return true; } else if (item.getItemId() == R.id.remove_person) { - removeSelectedPerson(); + confirmRemovePerson(); return true; } return super.onOptionsItemSelected(item); @@ -146,6 +148,24 @@ public void onError() { }); } + private void confirmRemovePerson() { + if (mSelectedPerson == null) { + return; + } + + AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.Calypso_AlertDialog); + builder.setTitle(getString(R.string.person_remove_confirmation_title, mSelectedPerson.getDisplayName())); + builder.setMessage(getString(R.string.person_remove_confirmation_message, mSelectedPerson.getDisplayName())); + builder.setNegativeButton(R.string.cancel, null); + builder.setPositiveButton(R.string.remove, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + removeSelectedPerson(); + } + }); + builder.show(); + } + private void removeSelectedPerson() { if (mSelectedPerson == null) { return; diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index fd5e0e13ee8c..9dba288ed87b 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -1366,7 +1366,9 @@ People Edit User Role - Successfully removed @%s + Remove %1$s + If you remove %1$s, that user will no longer be able to access this site, but any content that was created by %1$s will remain on the site.\n\nWould you still like to remove this user? + Successfully removed @%1$s User removed successfully From fff6640b0388335c412de1e94117fe506e73809c Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 12 May 2016 18:32:03 +0300 Subject: [PATCH 47/64] Don't show remove user button if it's the current user --- .../org/wordpress/android/ui/people/PersonDetailFragment.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index 623c98229213..b3de332c7f70 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -116,8 +116,10 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa mRoleContainer = (LinearLayout) rootView.findViewById(R.id.person_role_container); mRoleTextView = (TextView) rootView.findViewById(R.id.person_role); + Account account = AccountHelper.getDefaultAccount(); + boolean isCurrentUser = account.getUserId() == mPersonID; Blog blog = WordPress.getBlog(mLocalTableBlogID); - if (blog != null && blog.hasCapability(Capability.REMOVE_USERS)) { + if (!isCurrentUser && blog != null && blog.hasCapability(Capability.REMOVE_USERS)) { setHasOptionsMenu(true); } From 7f1cbef6ea4e31d5861e0d63111298f4ad2fa9a3 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 12 May 2016 18:36:20 +0300 Subject: [PATCH 48/64] Move OnClickListener for role change to inline --- .../android/ui/people/PersonDetailFragment.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index b3de332c7f70..41c694e1b05c 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -31,7 +31,7 @@ import org.wordpress.android.util.StringUtils; import org.wordpress.android.widgets.WPNetworkImageView; -public class PersonDetailFragment extends Fragment implements View.OnClickListener { +public class PersonDetailFragment extends Fragment { private static String ARG_PERSON_ID = "person_id"; private static String ARG_LOCAL_TABLE_BLOG_ID = "local_table_blog_id"; @@ -168,7 +168,12 @@ private void setupRoleContainerForCapability() { boolean isCurrentUser = account.getUserId() == mPersonID; boolean canChangeRole = (blog != null) && !isCurrentUser && blog.hasCapability(Capability.PROMOTE_USERS); if (canChangeRole) { - mRoleContainer.setOnClickListener(this); + mRoleContainer.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + showRoleChangeDialog(); + } + }); } else { // Remove the selectableItemBackground if the user can't be edited if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) { @@ -181,8 +186,7 @@ private void setupRoleContainerForCapability() { } } - @Override - public void onClick(View v) { + private void showRoleChangeDialog() { Context context = getActivity(); AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.Calypso_AlertDialog); From f20e9e39d256b4ef90634e368c0828679ff076d1 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 12 May 2016 18:37:41 +0300 Subject: [PATCH 49/64] Wrap to 120 chars in PeopleTable --- .../java/org/wordpress/android/datasets/PeopleTable.java | 6 ++++-- 1 file changed, 4 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 8ae861704570..6139a39f4f6d 100644 --- a/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java +++ b/WordPress/src/main/java/org/wordpress/android/datasets/PeopleTable.java @@ -116,7 +116,8 @@ public static List getPeople(int localTableBlogId) { */ 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); + Cursor c = getReadableDb().rawQuery("SELECT * FROM " + PEOPLE_TABLE + + " WHERE person_id=? AND local_blog_id=?", args); try { if (!c.moveToFirst()) { return null; @@ -137,6 +138,7 @@ private static Person getPersonFromCursor(Cursor c, int localTableBlogId) { String avatarUrl = c.getString(c.getColumnIndex("avatar_url")); String role = c.getString(c.getColumnIndex("role")); - return new Person(personId, blogId, localTableBlogId, username, firstName, lastName, displayName, avatarUrl, role); + return new Person(personId, blogId, localTableBlogId, username, + firstName, lastName, displayName, avatarUrl, role); } } From 4f7ad0f5381a631b5e5b7e27f5c498d09427bfa4 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 12 May 2016 18:54:45 +0300 Subject: [PATCH 50/64] Instead of keeping a reference to selecter person, get it from fragment --- .../ui/people/PeopleManagementActivity.java | 35 +++++++++++-------- .../ui/people/PersonDetailFragment.java | 8 +++-- 2 files changed, 27 insertions(+), 16 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 be7786ebe6ed..66c4e8a1a1d8 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 @@ -27,8 +27,6 @@ public class PeopleManagementActivity extends AppCompatActivity private static final String KEY_PEOPLE_LIST_FRAGMENT = "people-list-fragment"; private static final String KEY_PERSON_DETAIL_FRAGMENT = "person-detail-fragment"; - private Person mSelectedPerson; - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -108,8 +106,6 @@ public void onPersonSelected(Person person) { PersonDetailFragment personDetailFragment = (PersonDetailFragment) fragmentManager .findFragmentByTag(KEY_PERSON_DETAIL_FRAGMENT); - mSelectedPerson = person; - long personID = person.getPersonID(); int localTableBlogID = person.getLocalTableBlogId(); if (personDetailFragment == null) { @@ -149,13 +145,14 @@ public void onError() { } private void confirmRemovePerson() { - if (mSelectedPerson == null) { + Person person = getCurrentPerson(); + if (person == null) { return; } AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.Calypso_AlertDialog); - builder.setTitle(getString(R.string.person_remove_confirmation_title, mSelectedPerson.getDisplayName())); - builder.setMessage(getString(R.string.person_remove_confirmation_message, mSelectedPerson.getDisplayName())); + builder.setTitle(getString(R.string.person_remove_confirmation_title, person.getDisplayName())); + builder.setMessage(getString(R.string.person_remove_confirmation_message, person.getDisplayName())); builder.setNegativeButton(R.string.cancel, null); builder.setPositiveButton(R.string.remove, new DialogInterface.OnClickListener() { @Override @@ -167,12 +164,13 @@ public void onClick(DialogInterface dialog, int which) { } private void removeSelectedPerson() { - if (mSelectedPerson == null) { + Person person = getCurrentPerson(); + if (person == null) { return; } - PeopleUtils.removePerson(mSelectedPerson.getBlogId(), - mSelectedPerson.getPersonID(), - mSelectedPerson.getLocalTableBlogId(), + PeopleUtils.removePerson(person.getBlogId(), + person.getPersonID(), + person.getLocalTableBlogId(), new PeopleUtils.RemoveUserCallback() { @Override public void onSuccess(long personID, int localTableBlogId) { @@ -226,11 +224,20 @@ private void refreshPeopleListFragment() { private boolean navigateBackToPeopleListFragment() { if (getFragmentManager().getBackStackEntryCount() > 0) { getFragmentManager().popBackStack(); - - // navigated back to people list - mSelectedPerson = null; return true; } return false; } + + private Person getCurrentPerson() { + FragmentManager fragmentManager = getFragmentManager(); + PersonDetailFragment personDetailFragment = (PersonDetailFragment) fragmentManager + .findFragmentByTag(KEY_PERSON_DETAIL_FRAGMENT); + + if (personDetailFragment == null) { + return null; + } + + return personDetailFragment.getCurrentPerson(); + } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index 41c694e1b05c..aa611a79aa62 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -136,7 +136,7 @@ public void onResume() { public void refreshPersonDetails() { if (!isAdded()) return; - Person person = PeopleTable.getPerson(mPersonID, mLocalTableBlogID); + Person person = getCurrentPerson(); if (person != null) { int avatarSz = getResources().getDimensionPixelSize(R.dimen.avatar_sz_large); String avatarUrl = GravatarUtils.fixGravatarUrl(person.getAvatarUrl(), avatarSz); @@ -194,7 +194,7 @@ private void showRoleChangeDialog() { builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - Person person = PeopleTable.getPerson(mPersonID, mLocalTableBlogID); + Person person = getCurrentPerson(); if (person != null) { // reset the selected role since the dialog is cancelled mSelectedRole = person.getRole(); @@ -259,6 +259,10 @@ private void changeSelection(int position) { } } + public Person getCurrentPerson() { + return PeopleTable.getPerson(mPersonID, mLocalTableBlogID); + } + // Container Activity must implement this interface public interface OnChangeListener { void onRoleChanged(long personID, int localTableBlogId, String newRole); From f36411bd863f0a2bb3286bfb29bc5cf8ef6d78a2 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 12 May 2016 18:58:39 +0300 Subject: [PATCH 51/64] Better handle of deprecation warning for clearing background drawable --- .../ui/people/PersonDetailFragment.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index aa611a79aa62..00560368e509 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -161,7 +161,6 @@ public void setPersonDetails(long personID, int localTableBlogID) { } // Checks current user's capabilities to decide whether she can change the role or not - @SuppressWarnings("deprecation") private void setupRoleContainerForCapability() { Blog blog = WordPress.getBlog(mLocalTableBlogID); Account account = AccountHelper.getDefaultAccount(); @@ -175,17 +174,22 @@ public void onClick(View v) { } }); } else { - // Remove the selectableItemBackground if the user can't be edited - if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) { - mRoleContainer.setBackgroundDrawable(null); - } else { - mRoleContainer.setBackground(null); - } + clearRoleContainerBackground(); // Change transparency to give a visual cue to the user that it's disabled mRoleContainer.setAlpha(0.5f); } } + @SuppressWarnings("deprecation") + // Remove the selectableItemBackground if the user can't be edited + private void clearRoleContainerBackground() { + if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) { + mRoleContainer.setBackgroundDrawable(null); + } else { + mRoleContainer.setBackground(null); + } + } + private void showRoleChangeDialog() { Context context = getActivity(); From 941fe1f92c5fd9b0cf8033fa88f5aded885451de Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 13 May 2016 17:39:55 +0300 Subject: [PATCH 52/64] Role array set as translatable, administrator changed to admin --- WordPress/src/main/res/values/roles.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WordPress/src/main/res/values/roles.xml b/WordPress/src/main/res/values/roles.xml index 6d454c26ee33..51d0f1fda5fd 100644 --- a/WordPress/src/main/res/values/roles.xml +++ b/WordPress/src/main/res/values/roles.xml @@ -1,8 +1,8 @@ - + - Administrator + Admin Editor From 73774da9c6660fe1f1c5f6f0a6cdb8941a699ca5 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 13 May 2016 17:45:47 +0300 Subject: [PATCH 53/64] Move clearRoleContainerBackground comment to invocation --- .../org/wordpress/android/ui/people/PersonDetailFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index 00560368e509..f5f1d46c727f 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -174,6 +174,7 @@ public void onClick(View v) { } }); } else { + // Remove the selectableItemBackground if the user can't be edited clearRoleContainerBackground(); // Change transparency to give a visual cue to the user that it's disabled mRoleContainer.setAlpha(0.5f); @@ -181,7 +182,6 @@ public void onClick(View v) { } @SuppressWarnings("deprecation") - // Remove the selectableItemBackground if the user can't be edited private void clearRoleContainerBackground() { if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) { mRoleContainer.setBackgroundDrawable(null); From 5d1ff379b976ba4c0406587ff62d5bce0680dc32 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 16 May 2016 14:08:52 +0300 Subject: [PATCH 54/64] getCurrentPerson method renamed as loadPerson --- .../android/ui/people/PeopleManagementActivity.java | 2 +- .../wordpress/android/ui/people/PersonDetailFragment.java | 6 +++--- 2 files changed, 4 insertions(+), 4 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 66c4e8a1a1d8..9f804071673c 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 @@ -238,6 +238,6 @@ private Person getCurrentPerson() { return null; } - return personDetailFragment.getCurrentPerson(); + return personDetailFragment.loadPerson(); } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index f5f1d46c727f..78afbd7e7ed0 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -136,7 +136,7 @@ public void onResume() { public void refreshPersonDetails() { if (!isAdded()) return; - Person person = getCurrentPerson(); + Person person = loadPerson(); if (person != null) { int avatarSz = getResources().getDimensionPixelSize(R.dimen.avatar_sz_large); String avatarUrl = GravatarUtils.fixGravatarUrl(person.getAvatarUrl(), avatarSz); @@ -198,7 +198,7 @@ private void showRoleChangeDialog() { builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - Person person = getCurrentPerson(); + Person person = loadPerson(); if (person != null) { // reset the selected role since the dialog is cancelled mSelectedRole = person.getRole(); @@ -263,7 +263,7 @@ private void changeSelection(int position) { } } - public Person getCurrentPerson() { + public Person loadPerson() { return PeopleTable.getPerson(mPersonID, mLocalTableBlogID); } From 9cb439941d52be41da05486f4c00c65a04187870 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 16 May 2016 14:22:06 +0300 Subject: [PATCH 55/64] Person role label top margin increased --- WordPress/src/main/res/layout/people_list_row.xml | 2 +- WordPress/src/main/res/values/dimens.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/WordPress/src/main/res/layout/people_list_row.xml b/WordPress/src/main/res/layout/people_list_row.xml index 522af08edc58..8a7c678a524b 100644 --- a/WordPress/src/main/res/layout/people_list_row.xml +++ b/WordPress/src/main/res/layout/people_list_row.xml @@ -14,7 +14,7 @@ android:layout_alignParentRight="true" android:layout_marginEnd="@dimen/margin_extra_large" android:layout_marginRight="@dimen/margin_extra_large" - android:layout_marginTop="@dimen/margin_extra_large" + android:layout_marginTop="@dimen/people_list_row_role_margin_top" android:ellipsize="end" android:gravity="end" android:maxLines="1" diff --git a/WordPress/src/main/res/values/dimens.xml b/WordPress/src/main/res/values/dimens.xml index bf753f617328..251ea322adab 100644 --- a/WordPress/src/main/res/values/dimens.xml +++ b/WordPress/src/main/res/values/dimens.xml @@ -277,6 +277,7 @@ 40dp 72dp + 20dp 1dp 72dp From da32d116b0f02c14759ea5f9c7676cc0a20e9a8c Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 16 May 2016 14:45:40 +0300 Subject: [PATCH 56/64] Keep reference to selected role in the adapter instead of fragment --- .../ui/people/PersonDetailFragment.java | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index 78afbd7e7ed0..4b010352b2c5 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -44,7 +44,7 @@ public class PersonDetailFragment extends Fragment { private LinearLayout mRoleContainer; private TextView mRoleTextView; - private String mSelectedRole; + private RoleListAdapter mRoleListAdapter; private OnChangeListener mListener; public static PersonDetailFragment newInstance(long personID, int localTableBlogID) { @@ -147,7 +147,6 @@ public void refreshPersonDetails() { mRoleTextView.setText(StringUtils.capitalize(person.getRole())); setupRoleContainerForCapability(); - mSelectedRole = person.getRole(); } else { AppLog.w(AppLog.T.PEOPLE, "Person returned null from DB for personID: " + mPersonID + " & localTableBlogID: " + mLocalTableBlogID); @@ -195,33 +194,33 @@ private void showRoleChangeDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.Calypso_AlertDialog); builder.setTitle(R.string.role); - builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Person person = loadPerson(); - if (person != null) { - // reset the selected role since the dialog is cancelled - mSelectedRole = person.getRole(); - } - } - }); + builder.setNegativeButton(R.string.cancel, null); builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (mListener != null) { - mListener.onRoleChanged(mPersonID, mLocalTableBlogID, mSelectedRole); + String role = mRoleListAdapter.getSelectedRole(); + mListener.onRoleChanged(mPersonID, mLocalTableBlogID, role); } } }); - final String[] roles = getResources().getStringArray(R.array.roles); - ArrayAdapter roleAdapter = new RoleListAdapter(context, R.layout.role_list_row, roles); - builder.setAdapter(roleAdapter, null); + if (mRoleListAdapter == null) { + final String[] roles = getResources().getStringArray(R.array.roles); + mRoleListAdapter = new RoleListAdapter(context, R.layout.role_list_row, roles); + } + Person person = loadPerson(); + if (person != null) { + mRoleListAdapter.setSelectedRole(person.getRole()); + } + builder.setAdapter(mRoleListAdapter, null); builder.show(); } private class RoleListAdapter extends ArrayAdapter { + private String mSelectedRole; + public RoleListAdapter(Context context, int resource, String[] objects) { super(context, resource, objects); } @@ -261,6 +260,14 @@ private void changeSelection(int position) { mSelectedRole = getItem(position); notifyDataSetChanged(); } + + public String getSelectedRole() { + return mSelectedRole; + } + + public void setSelectedRole(String role) { + mSelectedRole = role; + } } public Person loadPerson() { From 60ce5cf137856a79805ce24e49d7e33650a4c5c6 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 16 May 2016 16:03:42 +0300 Subject: [PATCH 57/64] Introduce RoleChangeDialogFragment to fix dialog dismiss issue on rotate --- .../ui/people/PeopleManagementActivity.java | 2 +- .../ui/people/PersonDetailFragment.java | 127 +------------- .../ui/people/RoleChangeDialogFragment.java | 160 ++++++++++++++++++ 3 files changed, 170 insertions(+), 119 deletions(-) create mode 100644 WordPress/src/main/java/org/wordpress/android/ui/people/RoleChangeDialogFragment.java 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 9f804071673c..4131e7457693 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 @@ -23,7 +23,7 @@ import java.util.List; public class PeopleManagementActivity extends AppCompatActivity - implements PeopleListFragment.OnPersonSelectedListener, PersonDetailFragment.OnChangeListener { + implements PeopleListFragment.OnPersonSelectedListener, RoleChangeDialogFragment.OnChangeListener { private static final String KEY_PEOPLE_LIST_FRAGMENT = "people-list-fragment"; private static final String KEY_PERSON_DETAIL_FRAGMENT = "person-detail-fragment"; diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index 4b010352b2c5..76c19b86dc83 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -2,7 +2,6 @@ import android.animation.Animator; import android.animation.AnimatorInflater; -import android.app.Activity; import android.app.AlertDialog; import android.app.Fragment; import android.content.Context; @@ -44,9 +43,6 @@ public class PersonDetailFragment extends Fragment { private LinearLayout mRoleContainer; private TextView mRoleTextView; - private RoleListAdapter mRoleListAdapter; - private OnChangeListener mListener; - public static PersonDetailFragment newInstance(long personID, int localTableBlogID) { PersonDetailFragment personDetailFragment = new PersonDetailFragment(); Bundle bundle = new Bundle(); @@ -56,34 +52,6 @@ public static PersonDetailFragment newInstance(long personID, int localTableBlog return personDetailFragment; } - @Override - public void onAttach(Context context) { - super.onAttach(context); - try { - mListener = (OnChangeListener) context; - } catch (ClassCastException e) { - throw new ClassCastException(context.toString() + " must implement OnChangeListener"); - } - } - - // We need to override this for devices pre API 23 - @SuppressWarnings("deprecation") - @Override - public void onAttach(Activity activity) { - super.onAttach(activity); - try { - mListener = (OnChangeListener) activity; - } catch (ClassCastException e) { - throw new ClassCastException(activity.toString() + " must implement OnChangeListener"); - } - } - - @Override - public void onDetach() { - super.onDetach(); - mListener = null; - } - @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.person_detail, menu); @@ -180,6 +148,15 @@ public void onClick(View v) { } } + private void showRoleChangeDialog() { + Person person = loadPerson(); + if (person == null) { + return; + } + RoleChangeDialogFragment.newInstance(person.getPersonID(), person.getLocalTableBlogId(), person.getRole()) + .show(getFragmentManager(), null); + } + @SuppressWarnings("deprecation") private void clearRoleContainerBackground() { if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) { @@ -189,93 +166,7 @@ private void clearRoleContainerBackground() { } } - private void showRoleChangeDialog() { - Context context = getActivity(); - - AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.Calypso_AlertDialog); - builder.setTitle(R.string.role); - builder.setNegativeButton(R.string.cancel, null); - builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - if (mListener != null) { - String role = mRoleListAdapter.getSelectedRole(); - mListener.onRoleChanged(mPersonID, mLocalTableBlogID, role); - } - } - }); - - if (mRoleListAdapter == null) { - final String[] roles = getResources().getStringArray(R.array.roles); - mRoleListAdapter = new RoleListAdapter(context, R.layout.role_list_row, roles); - } - Person person = loadPerson(); - if (person != null) { - mRoleListAdapter.setSelectedRole(person.getRole()); - } - builder.setAdapter(mRoleListAdapter, null); - - builder.show(); - } - - private class RoleListAdapter extends ArrayAdapter { - private String mSelectedRole; - - public RoleListAdapter(Context context, int resource, String[] objects) { - super(context, resource, objects); - } - - @Override - public View getView(final int position, View convertView, ViewGroup parent) { - if (convertView == null) { - convertView = View.inflate(getContext(), R.layout.role_list_row, null); - } - - final RadioButton radioButton = (RadioButton) convertView.findViewById(R.id.radio); - TextView mainText = (TextView) convertView.findViewById(R.id.role_label); - String role = getItem(position); - mainText.setText(role); - - if (radioButton != null) { - radioButton.setChecked(mSelectedRole.equalsIgnoreCase(role)); - radioButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - changeSelection(position); - } - }); - } - - convertView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - changeSelection(position); - } - }); - - return convertView; - } - - private void changeSelection(int position) { - mSelectedRole = getItem(position); - notifyDataSetChanged(); - } - - public String getSelectedRole() { - return mSelectedRole; - } - - public void setSelectedRole(String role) { - mSelectedRole = role; - } - } - public Person loadPerson() { return PeopleTable.getPerson(mPersonID, mLocalTableBlogID); } - - // Container Activity must implement this interface - public interface OnChangeListener { - void onRoleChanged(long personID, int localTableBlogId, String newRole); - } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/RoleChangeDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/RoleChangeDialogFragment.java new file mode 100644 index 000000000000..f9c03ef08c88 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/RoleChangeDialogFragment.java @@ -0,0 +1,160 @@ +package org.wordpress.android.ui.people; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; +import android.content.Context; +import android.content.DialogInterface; +import android.os.Bundle; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.RadioButton; +import android.widget.TextView; + +import org.wordpress.android.R; + +public class RoleChangeDialogFragment extends DialogFragment { + private static final String PERSON_ID_TAG = "person_id"; + private static final String PERSON_LOCAL_TABLE_BLOG_ID_TAG = "local_table_blog_id"; + private static final String ROLE_TAG = "role"; + + private RoleListAdapter mRoleListAdapter; + private OnChangeListener mListener; + + public static RoleChangeDialogFragment newInstance(long personID, int localTableBlogId, String role) { + RoleChangeDialogFragment roleChangeDialogFragment = new RoleChangeDialogFragment(); + Bundle args = new Bundle(); + + args.putLong(PERSON_ID_TAG, personID); + args.putInt(PERSON_LOCAL_TABLE_BLOG_ID_TAG, localTableBlogId); + if (role != null) { + args.putString(ROLE_TAG, role); + } + + roleChangeDialogFragment.setArguments(args); + return roleChangeDialogFragment; + } + + @Override + public void onAttach(Context context) { + super.onAttach(context); + try { + mListener = (OnChangeListener) context; + } catch (ClassCastException e) { + throw new ClassCastException(context.toString() + " must implement OnChangeListener"); + } + } + + // We need to override this for devices pre API 23 + @SuppressWarnings("deprecation") + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + try { + mListener = (OnChangeListener) activity; + } catch (ClassCastException e) { + throw new ClassCastException(activity.toString() + " must implement OnChangeListener"); + } + } + + @Override + public void onDetach() { + super.onDetach(); + mListener = null; + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.Calypso_AlertDialog); + builder.setTitle(R.string.role); + builder.setNegativeButton(R.string.cancel, null); + builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (mListener != null) { + String role = mRoleListAdapter.getSelectedRole(); + Bundle args = getArguments(); + if (args != null) { + long personID = args.getLong(PERSON_ID_TAG); + int localTableBlogId = args.getInt(PERSON_LOCAL_TABLE_BLOG_ID_TAG); + mListener.onRoleChanged(personID, localTableBlogId, role); + } + } + } + }); + + if (mRoleListAdapter == null) { + final String[] roles = getResources().getStringArray(R.array.roles); + mRoleListAdapter = new RoleListAdapter(getActivity(), R.layout.role_list_row, roles); + } + Bundle args = getArguments(); + if (args != null) { + String role = args.getString(ROLE_TAG); + mRoleListAdapter.setSelectedRole(role); + } + builder.setAdapter(mRoleListAdapter, null); + + return builder.create(); + } + + private class RoleListAdapter extends ArrayAdapter { + private String mSelectedRole; + + public RoleListAdapter(Context context, int resource, String[] objects) { + super(context, resource, objects); + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + if (convertView == null) { + convertView = View.inflate(getContext(), R.layout.role_list_row, null); + } + + final RadioButton radioButton = (RadioButton) convertView.findViewById(R.id.radio); + TextView mainText = (TextView) convertView.findViewById(R.id.role_label); + String role = getItem(position); + mainText.setText(role); + + if (radioButton != null) { + if (mSelectedRole != null) { + radioButton.setChecked(mSelectedRole.equalsIgnoreCase(role)); + } + radioButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + changeSelection(position); + } + }); + } + + convertView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + changeSelection(position); + } + }); + + return convertView; + } + + private void changeSelection(int position) { + mSelectedRole = getItem(position); + notifyDataSetChanged(); + } + + public String getSelectedRole() { + return mSelectedRole; + } + + public void setSelectedRole(String role) { + mSelectedRole = role; + } + } + + // Container Activity must implement this interface + public interface OnChangeListener { + void onRoleChanged(long personID, int localTableBlogId, String newRole); + } +} From 01dfa297ab0ae518a3c230ed4bc9c8e4c76324c4 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 16 May 2016 17:36:30 +0300 Subject: [PATCH 58/64] Change selectable role from Admin to Administrator --- WordPress/src/main/res/values/roles.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/res/values/roles.xml b/WordPress/src/main/res/values/roles.xml index 51d0f1fda5fd..db9574b9de74 100644 --- a/WordPress/src/main/res/values/roles.xml +++ b/WordPress/src/main/res/values/roles.xml @@ -2,7 +2,7 @@ - Admin + Administrator Editor From 6538a3559028736cb9327cfbbe1760299c20cce3 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 16 May 2016 17:50:09 +0300 Subject: [PATCH 59/64] Save role change dialog state to fix rotation issue --- .../ui/people/RoleChangeDialogFragment.java | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/RoleChangeDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/RoleChangeDialogFragment.java index f9c03ef08c88..775a7950b020 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/RoleChangeDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/RoleChangeDialogFragment.java @@ -23,6 +23,15 @@ public class RoleChangeDialogFragment extends DialogFragment { private RoleListAdapter mRoleListAdapter; private OnChangeListener mListener; + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + String role = mRoleListAdapter.getSelectedRole(); + if (role != null) { + outState.putString(ROLE_TAG, role); + } + } + public static RoleChangeDialogFragment newInstance(long personID, int localTableBlogId, String role) { RoleChangeDialogFragment roleChangeDialogFragment = new RoleChangeDialogFragment(); Bundle args = new Bundle(); @@ -89,10 +98,15 @@ public void onClick(DialogInterface dialog, int which) { final String[] roles = getResources().getStringArray(R.array.roles); mRoleListAdapter = new RoleListAdapter(getActivity(), R.layout.role_list_row, roles); } - Bundle args = getArguments(); - if (args != null) { - String role = args.getString(ROLE_TAG); - mRoleListAdapter.setSelectedRole(role); + if (savedInstanceState != null) { + String savedRole = savedInstanceState.getString(ROLE_TAG); + mRoleListAdapter.setSelectedRole(savedRole); + } else { + Bundle args = getArguments(); + if (args != null) { + String role = args.getString(ROLE_TAG); + mRoleListAdapter.setSelectedRole(role); + } } builder.setAdapter(mRoleListAdapter, null); From d3de340639715d520c8e9840c0d271946241d06e Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 18 May 2016 11:18:00 +0300 Subject: [PATCH 60/64] Change tool text for role label in person detail fragment --- WordPress/src/main/res/layout/person_detail_fragment.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/res/layout/person_detail_fragment.xml b/WordPress/src/main/res/layout/person_detail_fragment.xml index 4754a67603f9..f872141cd396 100644 --- a/WordPress/src/main/res/layout/person_detail_fragment.xml +++ b/WordPress/src/main/res/layout/person_detail_fragment.xml @@ -49,7 +49,7 @@ android:maxLines="1" android:textColor="@color/grey" android:textSize="@dimen/text_sz_medium" - tools:text="@string/role_admin"/> + tools:text="@string/role"/> From 29182ed7b92c55657759194d99c3f1793ea0138e Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 18 May 2016 11:43:41 +0300 Subject: [PATCH 61/64] Update toolbar elevation for detail page for larger toolbar look --- .../ui/people/PeopleManagementActivity.java | 12 ++++++++++++ .../android/ui/people/PersonDetailFragment.java | 14 +++++++++----- 2 files changed, 21 insertions(+), 5 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 4131e7457693..47757548bc52 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 @@ -117,6 +117,12 @@ public void onPersonSelected(Person person) { FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.fragment_container, personDetailFragment, KEY_PERSON_DETAIL_FRAGMENT); fragmentTransaction.addToBackStack(null); + + // remove the toolbar elevation for larger toolbar look + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setElevation(0); + } fragmentTransaction.commit(); } } @@ -224,6 +230,12 @@ private void refreshPeopleListFragment() { private boolean navigateBackToPeopleListFragment() { if (getFragmentManager().getBackStackEntryCount() > 0) { getFragmentManager().popBackStack(); + + // reset the toolbar elevation + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setElevation(getResources().getDimension(R.dimen.appbar_elevation)); + } return true; } return false; diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index 76c19b86dc83..c0d3fcec76d0 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -2,19 +2,16 @@ import android.animation.Animator; import android.animation.AnimatorInflater; -import android.app.AlertDialog; import android.app.Fragment; -import android.content.Context; -import android.content.DialogInterface; import android.os.Bundle; +import android.support.v4.content.ContextCompat; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ArrayAdapter; import android.widget.LinearLayout; -import android.widget.RadioButton; +import android.widget.RelativeLayout; import android.widget.TextView; import org.wordpress.android.R; @@ -84,6 +81,13 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa mRoleContainer = (LinearLayout) rootView.findViewById(R.id.person_role_container); mRoleTextView = (TextView) rootView.findViewById(R.id.person_role); + // set the background color here since we are including a layout + RelativeLayout detailsLayout = (RelativeLayout) rootView.findViewById(R.id.person_details); + detailsLayout.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.color_primary)); + + mDisplayNameTextView.setTextColor(ContextCompat.getColor(getActivity(), R.color.white)); + mUsernameTextView.setTextColor(ContextCompat.getColor(getActivity(), R.color.white)); + Account account = AccountHelper.getDefaultAccount(); boolean isCurrentUser = account.getUserId() == mPersonID; Blog blog = WordPress.getBlog(mLocalTableBlogID); From f2c748bfa31b988948817fc586ae372267b0db7c Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 18 May 2016 11:53:01 +0300 Subject: [PATCH 62/64] Get rid of an extra null check in RoleChangeDialogFragment --- .../wordpress/android/ui/people/RoleChangeDialogFragment.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/RoleChangeDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/RoleChangeDialogFragment.java index 775a7950b020..088064c0ec24 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/RoleChangeDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/RoleChangeDialogFragment.java @@ -132,9 +132,7 @@ public View getView(final int position, View convertView, ViewGroup parent) { mainText.setText(role); if (radioButton != null) { - if (mSelectedRole != null) { - radioButton.setChecked(mSelectedRole.equalsIgnoreCase(role)); - } + radioButton.setChecked(role.equalsIgnoreCase(mSelectedRole)); radioButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { From 25537729474a4defcc16b504fe417f3c8394ed14 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 18 May 2016 12:00:29 +0300 Subject: [PATCH 63/64] Revert "Update toolbar elevation for detail page for larger toolbar look" This reverts commit 29182ed7b92c55657759194d99c3f1793ea0138e. --- .../ui/people/PeopleManagementActivity.java | 12 ------------ .../android/ui/people/PersonDetailFragment.java | 14 +++++--------- 2 files changed, 5 insertions(+), 21 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 47757548bc52..4131e7457693 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 @@ -117,12 +117,6 @@ public void onPersonSelected(Person person) { FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.fragment_container, personDetailFragment, KEY_PERSON_DETAIL_FRAGMENT); fragmentTransaction.addToBackStack(null); - - // remove the toolbar elevation for larger toolbar look - ActionBar actionBar = getSupportActionBar(); - if (actionBar != null) { - actionBar.setElevation(0); - } fragmentTransaction.commit(); } } @@ -230,12 +224,6 @@ private void refreshPeopleListFragment() { private boolean navigateBackToPeopleListFragment() { if (getFragmentManager().getBackStackEntryCount() > 0) { getFragmentManager().popBackStack(); - - // reset the toolbar elevation - ActionBar actionBar = getSupportActionBar(); - if (actionBar != null) { - actionBar.setElevation(getResources().getDimension(R.dimen.appbar_elevation)); - } return true; } return false; diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java index c0d3fcec76d0..76c19b86dc83 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -2,16 +2,19 @@ import android.animation.Animator; import android.animation.AnimatorInflater; +import android.app.AlertDialog; import android.app.Fragment; +import android.content.Context; +import android.content.DialogInterface; import android.os.Bundle; -import android.support.v4.content.ContextCompat; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ArrayAdapter; import android.widget.LinearLayout; -import android.widget.RelativeLayout; +import android.widget.RadioButton; import android.widget.TextView; import org.wordpress.android.R; @@ -81,13 +84,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa mRoleContainer = (LinearLayout) rootView.findViewById(R.id.person_role_container); mRoleTextView = (TextView) rootView.findViewById(R.id.person_role); - // set the background color here since we are including a layout - RelativeLayout detailsLayout = (RelativeLayout) rootView.findViewById(R.id.person_details); - detailsLayout.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.color_primary)); - - mDisplayNameTextView.setTextColor(ContextCompat.getColor(getActivity(), R.color.white)); - mUsernameTextView.setTextColor(ContextCompat.getColor(getActivity(), R.color.white)); - Account account = AccountHelper.getDefaultAccount(); boolean isCurrentUser = account.getUserId() == mPersonID; Blog blog = WordPress.getBlog(mLocalTableBlogID); From 907b0bbb34cb58a5a34b04804003379a69353090 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 18 May 2016 12:07:19 +0300 Subject: [PATCH 64/64] Remove null check for role before adding into the bundle --- .../wordpress/android/ui/people/RoleChangeDialogFragment.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/RoleChangeDialogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/RoleChangeDialogFragment.java index 088064c0ec24..6cd733931feb 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/RoleChangeDialogFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/RoleChangeDialogFragment.java @@ -27,9 +27,7 @@ public class RoleChangeDialogFragment extends DialogFragment { public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); String role = mRoleListAdapter.getSelectedRole(); - if (role != null) { - outState.putString(ROLE_TAG, role); - } + outState.putString(ROLE_TAG, role); } public static RoleChangeDialogFragment newInstance(long personID, int localTableBlogId, String role) {