From f6a4c01c00e266eb2a334b7e34abfdb3825b0a5f Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 7 Apr 2016 14:41:28 +0300 Subject: [PATCH 01/43] PeopleListFragment introduced --- .../android/ui/people/PeopleListFragment.java | 22 ++++++ .../ui/people/PeopleManagementActivity.java | 74 +++---------------- .../main/res/layout/people_list_fragment.xml | 6 ++ WordPress/src/main/res/values/dimens.xml | 1 + 4 files changed, 38 insertions(+), 65 deletions(-) create mode 100644 WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java create mode 100644 WordPress/src/main/res/layout/people_list_fragment.xml diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java new file mode 100644 index 000000000000..754d66dfea0d --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java @@ -0,0 +1,22 @@ +package org.wordpress.android.ui.people; + +import android.app.Fragment; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import org.wordpress.android.R; + +public class PeopleListFragment extends Fragment { + + public static PeopleListFragment newInstance() { + return new PeopleListFragment(); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.people_list_fragment, container, false); + return rootView; + } +} 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 05cf4b9f9a2f..09a162303612 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,64 +1,29 @@ package org.wordpress.android.ui.people; -import android.app.Activity; +import android.app.FragmentManager; import android.os.Bundle; -import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ListView; -import com.android.volley.VolleyError; - -import org.json.JSONException; import org.wordpress.android.R; -import org.wordpress.android.WordPress; -import org.wordpress.android.datasets.PeopleTable; -import org.wordpress.android.models.Blog; -import org.wordpress.android.models.Person; import org.wordpress.android.ui.ActivityLauncher; -import org.wordpress.android.ui.accounts.BlogUtils; -import org.wordpress.android.ui.people.utils.PeopleUtils; - -import java.util.List; public class PeopleManagementActivity extends AppCompatActivity { - private PeopleAdapter mPeopleAdapter; + private PeopleListFragment mPeopleListFragment; @Override - public void onCreate(Bundle savedInstanceState) { + protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - - int localBlogId = BlogUtils.getBlogLocalId(WordPress.getCurrentBlog()); - Blog blog = WordPress.getBlog(localBlogId); - - ActionBar actionBar = getSupportActionBar(); - if (actionBar != null) { - actionBar.setHomeButtonEnabled(true); - actionBar.setDisplayHomeAsUpEnabled(true); - } setContentView(R.layout.people_management_activity); - setTitle(R.string.people); - - if (blog != null) { - ListView listView = (ListView)findViewById(android.R.id.list); - List peopleList = PeopleTable.getPeople(localBlogId); - mPeopleAdapter = new PeopleAdapter(this, peopleList); - listView.setAdapter(mPeopleAdapter); + FragmentManager fragmentManager = getFragmentManager(); + if (mPeopleListFragment == null) { + mPeopleListFragment = PeopleListFragment.newInstance(); - final Activity context = this; - listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - Person person = (Person) parent.getItemAtPosition(position); - ActivityLauncher.viewPersonDetails(context, person); - } - }); - - refreshUsersList(blog.getDotComBlogId(), localBlogId); + fragmentManager.beginTransaction() + .add(android.R.id.content, mPeopleListFragment) + .commit(); } } @@ -76,25 +41,4 @@ public boolean onOptionsItemSelected(final MenuItem item) { } return super.onOptionsItemSelected(item); } - - private void refreshUsersList(String dotComBlogId, final int localBlogId) { - PeopleUtils.fetchUsers(dotComBlogId, localBlogId, new PeopleUtils.Callback() { - @Override - public void onSuccess(List peopleList) { - PeopleTable.savePeople(peopleList); - mPeopleAdapter.setPeopleList(peopleList); - mPeopleAdapter.notifyDataSetChanged(); - } - - @Override - public void onError(VolleyError error) { - //TODO: show some kind of error to the user - } - - @Override - public void onJSONException(JSONException exception) { - //TODO: show some kind of error to the user - } - }); - } } diff --git a/WordPress/src/main/res/layout/people_list_fragment.xml b/WordPress/src/main/res/layout/people_list_fragment.xml new file mode 100644 index 000000000000..0543d016d73b --- /dev/null +++ b/WordPress/src/main/res/layout/people_list_fragment.xml @@ -0,0 +1,6 @@ + + \ No newline at end of file diff --git a/WordPress/src/main/res/values/dimens.xml b/WordPress/src/main/res/values/dimens.xml index ce4c53f17c2a..33110aa1c98a 100644 --- a/WordPress/src/main/res/values/dimens.xml +++ b/WordPress/src/main/res/values/dimens.xml @@ -271,4 +271,5 @@ 84dp + 1dp From 2d4ab809f730e39977deca683c33ec78fdab69da Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 7 Apr 2016 14:59:06 +0300 Subject: [PATCH 02/43] Fixes the people list fragment and people management activity layouts By mistake I've switched the layouts for the above files. --- .../main/res/layout/people_list_fragment.xml | 18 ++++++++++++++---- .../res/layout/people_management_activity.xml | 18 ++++-------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/WordPress/src/main/res/layout/people_list_fragment.xml b/WordPress/src/main/res/layout/people_list_fragment.xml index 0543d016d73b..d6f905ca7883 100644 --- a/WordPress/src/main/res/layout/people_list_fragment.xml +++ b/WordPress/src/main/res/layout/people_list_fragment.xml @@ -1,6 +1,16 @@ - + + \ No newline at end of file + android:layout_height="wrap_content" + android:layout_margin="@dimen/margin_extra_large" + android:divider="@color/grey_lighten_20" + android:dividerHeight="@dimen/people_list_divider_height" /> + + \ No newline at end of file diff --git a/WordPress/src/main/res/layout/people_management_activity.xml b/WordPress/src/main/res/layout/people_management_activity.xml index 08332b249e8c..0543d016d73b 100644 --- a/WordPress/src/main/res/layout/people_management_activity.xml +++ b/WordPress/src/main/res/layout/people_management_activity.xml @@ -1,16 +1,6 @@ - - - - - \ No newline at end of file + android:layout_height="match_parent"/> \ No newline at end of file From 598c3519369ee258a934e6d295423a46d635584a Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 7 Apr 2016 15:00:07 +0300 Subject: [PATCH 03/43] PeopleListFragment is now reusable by having a setPeopleList method. --- .../android/ui/people/PeopleListFragment.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java index 754d66dfea0d..d912ba545cb6 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java @@ -5,11 +5,18 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ListView; import org.wordpress.android.R; +import org.wordpress.android.models.Person; + +import java.util.List; public class PeopleListFragment extends Fragment { + private ListView mListView; + public static PeopleListFragment newInstance() { return new PeopleListFragment(); } @@ -17,6 +24,28 @@ public static PeopleListFragment newInstance() { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.people_list_fragment, container, false); + + mListView = (ListView) rootView.findViewById(android.R.id.list); + + mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + //Person person = (Person) parent.getItemAtPosition(position); + //TODO: show details for person + } + }); + return rootView; } + + public void setPeopleList(List peopleList) { + PeopleAdapter peopleAdapter = (PeopleAdapter) mListView.getAdapter(); + if (peopleAdapter == null) { + peopleAdapter = new PeopleAdapter(getActivity(), peopleList); + mListView.setAdapter(peopleAdapter); + } else { + peopleAdapter.setPeopleList(peopleList); + peopleAdapter.notifyDataSetChanged(); + } + } } From c420774ad4103a9724a3926dbe26571d1632cd93 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 7 Apr 2016 15:38:12 +0300 Subject: [PATCH 04/43] PeopleManagementActivity now sets & updates PeopleListFragment --- .../ui/people/PeopleManagementActivity.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java index 09a162303612..c6878449c58b 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 @@ -2,11 +2,23 @@ import android.app.FragmentManager; import android.os.Bundle; +import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; +import com.android.volley.VolleyError; + +import org.json.JSONException; import org.wordpress.android.R; +import org.wordpress.android.WordPress; +import org.wordpress.android.datasets.PeopleTable; +import org.wordpress.android.models.Blog; +import org.wordpress.android.models.Person; import org.wordpress.android.ui.ActivityLauncher; +import org.wordpress.android.ui.accounts.BlogUtils; +import org.wordpress.android.ui.people.utils.PeopleUtils; + +import java.util.List; public class PeopleManagementActivity extends AppCompatActivity { @@ -15,8 +27,19 @@ public class PeopleManagementActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + int localBlogId = BlogUtils.getBlogLocalId(WordPress.getCurrentBlog()); + Blog blog = WordPress.getBlog(localBlogId); + + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setHomeButtonEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + } setContentView(R.layout.people_management_activity); + setTitle(R.string.people); + FragmentManager fragmentManager = getFragmentManager(); if (mPeopleListFragment == null) { mPeopleListFragment = PeopleListFragment.newInstance(); @@ -25,6 +48,10 @@ protected void onCreate(Bundle savedInstanceState) { .add(android.R.id.content, mPeopleListFragment) .commit(); } + + if (blog != null) { + refreshUsersList(blog.getDotComBlogId(), localBlogId); + } } @Override @@ -41,4 +68,24 @@ public boolean onOptionsItemSelected(final MenuItem item) { } return super.onOptionsItemSelected(item); } + + private void refreshUsersList(String dotComBlogId, final int localBlogId) { + PeopleUtils.fetchUsers(dotComBlogId, localBlogId, new PeopleUtils.Callback() { + @Override + public void onSuccess(List peopleList) { + PeopleTable.savePeople(peopleList); + mPeopleListFragment.setPeopleList(peopleList); + } + + @Override + public void onError(VolleyError error) { + //TODO: show some kind of error to the user + } + + @Override + public void onJSONException(JSONException exception) { + //TODO: show some kind of error to the user + } + }); + } } From dcef47cf7877c4b2373621b4cf0e240a01574a3a Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 7 Apr 2016 22:49:24 +0300 Subject: [PATCH 05/43] PersonDetailFragment introduced --- .../ui/people/PersonDetailFragment.java | 60 +++++++++++++++++++ ...ctivity.xml => person_detail_fragment.xml} | 0 2 files changed, 60 insertions(+) create mode 100644 WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java rename WordPress/src/main/res/layout/{person_activity.xml => person_detail_fragment.xml} (100%) 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 new file mode 100644 index 000000000000..0e12c8e1cd54 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PersonDetailFragment.java @@ -0,0 +1,60 @@ +package org.wordpress.android.ui.people; + +import android.app.Fragment; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import org.wordpress.android.R; +import org.wordpress.android.models.Person; +import org.wordpress.android.models.Role; +import org.wordpress.android.util.GravatarUtils; +import org.wordpress.android.widgets.WPNetworkImageView; + +public class PersonDetailFragment extends Fragment { + + private WPNetworkImageView mAvatarImageView; + private TextView mDisplayNameTextView; + private TextView mUsernameTextView; + private TextView mRoleTextView; + private TextView mRemoveTextView; + + public static PersonDetailFragment newInstance() { + return new PersonDetailFragment(); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.person_detail_fragment, container, false); + + 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); + mRoleTextView = (TextView) rootView.findViewById(R.id.person_role); + mRemoveTextView = (TextView) rootView.findViewById(R.id.person_remove); + + return rootView; + } + + public void setPerson(Person person) { + if (person != null) { + int avatarSz = getResources().getDimensionPixelSize(R.dimen.avatar_sz_large); + String avatarUrl = GravatarUtils.fixGravatarUrl(person.getAvatarUrl(), avatarSz); + + mAvatarImageView.setImageUrl(avatarUrl, WPNetworkImageView.ImageType.AVATAR); + mDisplayNameTextView.setText(person.getDisplayName()); + mUsernameTextView.setText(person.getUsername()); + mRoleTextView.setText(Role.getLabel(this, 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 + } + }); + } + } +} diff --git a/WordPress/src/main/res/layout/person_activity.xml b/WordPress/src/main/res/layout/person_detail_fragment.xml similarity index 100% rename from WordPress/src/main/res/layout/person_activity.xml rename to WordPress/src/main/res/layout/person_detail_fragment.xml From 73dbe5f0d7c62d69bfffc33fdc3361adb88183e7 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 7 Apr 2016 22:51:00 +0300 Subject: [PATCH 06/43] PersonActivity is removed as it's no longer used --- WordPress/src/main/AndroidManifest.xml | 4 - .../android/ui/ActivityLauncher.java | 9 -- .../android/ui/people/PersonActivity.java | 83 ------------------- 3 files changed, 96 deletions(-) delete mode 100644 WordPress/src/main/java/org/wordpress/android/ui/people/PersonActivity.java diff --git a/WordPress/src/main/AndroidManifest.xml b/WordPress/src/main/AndroidManifest.xml index 37f09d51bbc4..d04b362aaba7 100644 --- a/WordPress/src/main/AndroidManifest.xml +++ b/WordPress/src/main/AndroidManifest.xml @@ -338,10 +338,6 @@ android:name="org.wordpress.android.ui.people.PeopleManagementActivity" android:theme="@style/CalypsoTheme"/> - - Date: Thu, 7 Apr 2016 22:52:27 +0300 Subject: [PATCH 07/43] Fixes usage of this instead of getActivity() in PersonDetailFragment --- .../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 0e12c8e1cd54..c06ae9bb5365 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 @@ -46,7 +46,7 @@ public void setPerson(Person person) { mAvatarImageView.setImageUrl(avatarUrl, WPNetworkImageView.ImageType.AVATAR); mDisplayNameTextView.setText(person.getDisplayName()); mUsernameTextView.setText(person.getUsername()); - mRoleTextView.setText(Role.getLabel(this, person.getRole())); + mRoleTextView.setText(Role.getLabel(getActivity(), person.getRole())); mRemoveTextView.setText(String.format(getString(R.string.remove_user), person.getFirstName().toUpperCase())); mRemoveTextView.setOnClickListener(new View.OnClickListener() { From a539f3f142dc2f801c833292944f5da5077831dd Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 11 Apr 2016 16:42:09 +0300 Subject: [PATCH 08/43] Open PersonDetailFragment when a person is selected --- .../wordpress/android/ui/people/PeopleListFragment.java | 5 +++-- .../android/ui/people/PeopleManagementActivity.java | 9 +++++++++ .../android/ui/people/PersonDetailFragment.java | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java index d912ba545cb6..cba0d56a915c 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java @@ -30,8 +30,9 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { - //Person person = (Person) parent.getItemAtPosition(position); - //TODO: show details for person + Person person = (Person) parent.getItemAtPosition(position); + PeopleManagementActivity activity = (PeopleManagementActivity) getActivity(); + activity.viewPersonDetails(person); } }); 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 c6878449c58b..4e0707708837 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 @@ -88,4 +88,13 @@ public void onJSONException(JSONException exception) { } }); } + + public void viewPersonDetails(Person person) { + PersonDetailFragment fragment = PersonDetailFragment.newInstance(); + getFragmentManager().beginTransaction() + .replace(android.R.id.content, fragment) + .addToBackStack(null) + .commit(); + fragment.setPerson(person); + } } 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 c06ae9bb5365..a307caa6b2ee 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 @@ -39,7 +39,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa } public void setPerson(Person person) { - if (person != null) { + if (isAdded() && person != null) { int avatarSz = getResources().getDimensionPixelSize(R.dimen.avatar_sz_large); String avatarUrl = GravatarUtils.fixGravatarUrl(person.getAvatarUrl(), avatarSz); From 4557dbe4f2f47d2b6d05c4af81a2fdba64bdf287 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 11 Apr 2016 16:48:40 +0300 Subject: [PATCH 09/43] Override onBackPressed so the previous fragment is shown for People Management --- .../android/ui/people/PeopleManagementActivity.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java index 4e0707708837..8d02af93c11f 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 @@ -60,6 +60,15 @@ public void finish() { ActivityLauncher.slideOutToRight(this); } + @Override + public void onBackPressed() { + if (getFragmentManager().getBackStackEntryCount() > 0 ){ + getFragmentManager().popBackStack(); + } else { + super.onBackPressed(); + } + } + @Override public boolean onOptionsItemSelected(final MenuItem item) { if (item.getItemId() == android.R.id.home) { From 4f94b87d13c6b971b909c86d35ba04e5791bc5fa Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 11 Apr 2016 16:50:26 +0300 Subject: [PATCH 10/43] Check isAdded() in setPeopleList for PeopleListFragment --- .../org/wordpress/android/ui/people/PeopleListFragment.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java index cba0d56a915c..c6badd8ddcd5 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java @@ -40,6 +40,8 @@ public void onItemClick(AdapterView parent, View view, int position, long id) } public void setPeopleList(List peopleList) { + if (!isAdded()) return; + PeopleAdapter peopleAdapter = (PeopleAdapter) mListView.getAdapter(); if (peopleAdapter == null) { peopleAdapter = new PeopleAdapter(getActivity(), peopleList); From 43bb643eaa427ff8052a22e0e8aa64c3d0575eea Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 11 Apr 2016 17:01:19 +0300 Subject: [PATCH 11/43] OnPersonSelectedListener introduced to communicate with the activity --- .../android/ui/people/PeopleListFragment.java | 20 +++++++++++++++++-- .../ui/people/PeopleManagementActivity.java | 5 +++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java index c6badd8ddcd5..39582db77166 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java @@ -1,6 +1,7 @@ package org.wordpress.android.ui.people; import android.app.Fragment; +import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -16,11 +17,22 @@ public class PeopleListFragment extends Fragment { private ListView mListView; + private OnPersonSelectedListener mListener; public static PeopleListFragment newInstance() { return new PeopleListFragment(); } + @Override + public void onAttach(Context context) { + super.onAttach(context); + try { + mListener = (OnPersonSelectedListener) context; + } catch (ClassCastException e) { + throw new ClassCastException(context.toString() + " must implement OnPersonSelectedListener"); + } + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.people_list_fragment, container, false); @@ -31,8 +43,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa @Override public void onItemClick(AdapterView parent, View view, int position, long id) { Person person = (Person) parent.getItemAtPosition(position); - PeopleManagementActivity activity = (PeopleManagementActivity) getActivity(); - activity.viewPersonDetails(person); + mListener.onPersonSelected(person); } }); @@ -51,4 +62,9 @@ public void setPeopleList(List peopleList) { peopleAdapter.notifyDataSetChanged(); } } + + // Container Activity must implement this interface + public interface OnPersonSelectedListener { + void onPersonSelected(Person person); + } } 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 8d02af93c11f..3a19709678b0 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 @@ -20,7 +20,7 @@ import java.util.List; -public class PeopleManagementActivity extends AppCompatActivity { +public class PeopleManagementActivity extends AppCompatActivity implements PeopleListFragment.OnPersonSelectedListener { private PeopleListFragment mPeopleListFragment; @@ -98,7 +98,8 @@ public void onJSONException(JSONException exception) { }); } - public void viewPersonDetails(Person person) { + @Override + public void onPersonSelected(Person person) { PersonDetailFragment fragment = PersonDetailFragment.newInstance(); getFragmentManager().beginTransaction() .replace(android.R.id.content, fragment) From f913f58b7eecc33479b09f123e2893e534766afc Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 12 Apr 2016 14:40:46 +0300 Subject: [PATCH 12/43] Instead of setPerson, use newInstance method to pass person details --- .../ui/people/PeopleManagementActivity.java | 3 +- .../ui/people/PersonDetailFragment.java | 62 +++++++++++++------ 2 files changed, 44 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 3a19709678b0..997ea45a37a5 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 @@ -100,11 +100,10 @@ public void onJSONException(JSONException exception) { @Override public void onPersonSelected(Person person) { - PersonDetailFragment fragment = PersonDetailFragment.newInstance(); + PersonDetailFragment fragment = PersonDetailFragment.newInstance(person.getPersonID(), person.getLocalTableBlogId()); getFragmentManager().beginTransaction() .replace(android.R.id.content, fragment) .addToBackStack(null) .commit(); - fragment.setPerson(person); } } 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 a307caa6b2ee..b682678ebc22 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 @@ -8,12 +8,18 @@ import android.widget.TextView; import org.wordpress.android.R; +import org.wordpress.android.datasets.PeopleTable; import org.wordpress.android.models.Person; import org.wordpress.android.models.Role; import org.wordpress.android.util.GravatarUtils; import org.wordpress.android.widgets.WPNetworkImageView; 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"; + + private long mPersonID; + private int mLocalTableBlogID; private WPNetworkImageView mAvatarImageView; private TextView mDisplayNameTextView; @@ -21,14 +27,22 @@ public class PersonDetailFragment extends Fragment { private TextView mRoleTextView; private TextView mRemoveTextView; - public static PersonDetailFragment newInstance() { - return new PersonDetailFragment(); + public static PersonDetailFragment newInstance(long personID, int localTableBlogID) { + PersonDetailFragment personDetailFragment = new PersonDetailFragment(); + Bundle bundle = new Bundle(); + bundle.putLong(ARG_PERSON_ID, personID); + bundle.putInt(ARG_LOCAL_TABLE_BLOG_ID, localTableBlogID); + personDetailFragment.setArguments(bundle); + return personDetailFragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.person_detail_fragment, container, false); + mPersonID = getArguments().getLong(ARG_PERSON_ID); + mLocalTableBlogID = getArguments().getInt(ARG_LOCAL_TABLE_BLOG_ID); + 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); @@ -38,23 +52,33 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa return rootView; } - public void setPerson(Person person) { - if (isAdded() && person != null) { - int avatarSz = getResources().getDimensionPixelSize(R.dimen.avatar_sz_large); - String avatarUrl = GravatarUtils.fixGravatarUrl(person.getAvatarUrl(), avatarSz); - - mAvatarImageView.setImageUrl(avatarUrl, WPNetworkImageView.ImageType.AVATAR); - 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 - } - }); + @Override + public void onResume() { + super.onResume(); + + refreshPersonDetails(); + } + + public void refreshPersonDetails() { + if (isAdded()) { + Person person = PeopleTable.getPerson(mPersonID, mLocalTableBlogID); + if (person != null) { + int avatarSz = getResources().getDimensionPixelSize(R.dimen.avatar_sz_large); + String avatarUrl = GravatarUtils.fixGravatarUrl(person.getAvatarUrl(), avatarSz); + + mAvatarImageView.setImageUrl(avatarUrl, WPNetworkImageView.ImageType.AVATAR); + 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 + } + }); + } } } } From 95703244d8bba6db7432517670a727173d12fae4 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 12 Apr 2016 14:57:30 +0300 Subject: [PATCH 13/43] Refresh person detail fragment when the people list is updated --- .../ui/people/PeopleManagementActivity.java | 22 ++++++++++++++----- .../ui/people/PersonDetailFragment.java | 5 +++++ 2 files changed, 22 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 997ea45a37a5..25945fc190e0 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,6 +23,7 @@ public class PeopleManagementActivity extends AppCompatActivity implements PeopleListFragment.OnPersonSelectedListener { private PeopleListFragment mPeopleListFragment; + private PersonDetailFragment mPersonDetailFragment; @Override protected void onCreate(Bundle savedInstanceState) { @@ -84,6 +85,9 @@ private void refreshUsersList(String dotComBlogId, final int localBlogId) { public void onSuccess(List peopleList) { PeopleTable.savePeople(peopleList); mPeopleListFragment.setPeopleList(peopleList); + if (mPersonDetailFragment != null) { + mPersonDetailFragment.refreshPersonDetails(); + } } @Override @@ -100,10 +104,18 @@ public void onJSONException(JSONException exception) { @Override public void onPersonSelected(Person person) { - PersonDetailFragment fragment = PersonDetailFragment.newInstance(person.getPersonID(), person.getLocalTableBlogId()); - getFragmentManager().beginTransaction() - .replace(android.R.id.content, fragment) - .addToBackStack(null) - .commit(); + long personID = person.getPersonID(); + int localTableBlogID = person.getLocalTableBlogId(); + if (mPersonDetailFragment == null) { + mPersonDetailFragment = PersonDetailFragment.newInstance(personID, localTableBlogID); + } else { + mPersonDetailFragment.setPersonDetails(personID, localTableBlogID); + } + if (!mPersonDetailFragment.isAdded()) { + getFragmentManager().beginTransaction() + .replace(android.R.id.content, mPersonDetailFragment) + .addToBackStack(null) + .commit(); + } } } 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 b682678ebc22..2a2aff82f345 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 @@ -81,4 +81,9 @@ public void onClick(View v) { } } } + + public void setPersonDetails(long personID, int localTableBlogID) { + mPersonID = personID; + mLocalTableBlogID = localTableBlogID; + } } From ba5f3300206dc21f426ee03a210b668fd8ec5f35 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 12 Apr 2016 16:22:20 +0300 Subject: [PATCH 14/43] When person details change update the UI --- .../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 2a2aff82f345..c9f90f7d2c8b 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 @@ -85,5 +85,6 @@ public void onClick(View v) { public void setPersonDetails(long personID, int localTableBlogID) { mPersonID = personID; mLocalTableBlogID = localTableBlogID; + refreshPersonDetails(); } } From 345e9358eb1811820bd819b6d45eda52e64d58d2 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 12 Apr 2016 16:56:19 +0300 Subject: [PATCH 15/43] Instead of using setPeopleList method, pass the blog id to refresh people list --- .../android/ui/people/PeopleListFragment.java | 23 ++++++++++++++++--- .../ui/people/PeopleManagementActivity.java | 6 +++-- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java index 39582db77166..fcde62b6e885 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java @@ -10,17 +10,24 @@ import android.widget.ListView; import org.wordpress.android.R; +import org.wordpress.android.datasets.PeopleTable; import org.wordpress.android.models.Person; import java.util.List; public class PeopleListFragment extends Fragment { + private static String ARG_LOCAL_TABLE_BLOG_ID = "LOCAL_TABLE_BLOG_ID"; + private int mLocalTableBlogID; private ListView mListView; private OnPersonSelectedListener mListener; - public static PeopleListFragment newInstance() { - return new PeopleListFragment(); + public static PeopleListFragment newInstance(int localTableBlogID) { + PeopleListFragment peopleListFragment = new PeopleListFragment(); + Bundle bundle = new Bundle(); + bundle.putInt(ARG_LOCAL_TABLE_BLOG_ID, localTableBlogID); + peopleListFragment.setArguments(bundle); + return peopleListFragment; } @Override @@ -37,6 +44,7 @@ public void onAttach(Context context) { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.people_list_fragment, container, false); + mLocalTableBlogID = getArguments().getInt(ARG_LOCAL_TABLE_BLOG_ID); mListView = (ListView) rootView.findViewById(android.R.id.list); mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @@ -50,9 +58,18 @@ public void onItemClick(AdapterView parent, View view, int position, long id) return rootView; } - public void setPeopleList(List peopleList) { + @Override + public void onResume() { + super.onResume(); + + refreshPeopleList(); + } + + public void refreshPeopleList() { if (!isAdded()) return; + List peopleList = PeopleTable.getPeople(mLocalTableBlogID); + PeopleAdapter peopleAdapter = (PeopleAdapter) mListView.getAdapter(); if (peopleAdapter == null) { peopleAdapter = new PeopleAdapter(getActivity(), peopleList); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java index 25945fc190e0..c91c00514204 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java @@ -43,7 +43,7 @@ protected void onCreate(Bundle savedInstanceState) { FragmentManager fragmentManager = getFragmentManager(); if (mPeopleListFragment == null) { - mPeopleListFragment = PeopleListFragment.newInstance(); + mPeopleListFragment = PeopleListFragment.newInstance(localBlogId); fragmentManager.beginTransaction() .add(android.R.id.content, mPeopleListFragment) @@ -84,7 +84,9 @@ private void refreshUsersList(String dotComBlogId, final int localBlogId) { @Override public void onSuccess(List peopleList) { PeopleTable.savePeople(peopleList); - mPeopleListFragment.setPeopleList(peopleList); + if (mPeopleListFragment != null) { + mPeopleListFragment.refreshPeopleList(); + } if (mPersonDetailFragment != null) { mPersonDetailFragment.refreshPersonDetails(); } From 77dd11c6b061162b178cb22cab1a4eb4458845b4 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 12 Apr 2016 16:57:45 +0300 Subject: [PATCH 16/43] Nullify listener onDetach for PeopleListFragment --- .../android/ui/people/PeopleListFragment.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java index fcde62b6e885..374df7835205 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java @@ -40,6 +40,12 @@ public void onAttach(Context context) { } } + @Override + public void onDetach() { + super.onDetach(); + mListener = null; + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.people_list_fragment, container, false); @@ -50,8 +56,10 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { - Person person = (Person) parent.getItemAtPosition(position); - mListener.onPersonSelected(person); + if (mListener != null) { + Person person = (Person) parent.getItemAtPosition(position); + mListener.onPersonSelected(person); + } } }); From a173b85141590b4e4975f7f023c85f5fd19f3a44 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 12 Apr 2016 17:04:53 +0300 Subject: [PATCH 17/43] Instead of keeping a reference to fragments use tags --- .../ui/people/PeopleManagementActivity.java | 47 +++++++++++-------- 1 file changed, 28 insertions(+), 19 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 c91c00514204..5f4faebbbdab 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java @@ -21,32 +21,33 @@ import java.util.List; public class PeopleManagementActivity extends AppCompatActivity implements PeopleListFragment.OnPersonSelectedListener { - - private PeopleListFragment mPeopleListFragment; - private PersonDetailFragment mPersonDetailFragment; + private static final String KEY_PEOPLE_LIST_FRAGMENT = "people-list-fragment"; + private static final String KEY_PERSON_DETAIL_FRAGMENT = "person-detail-fragment"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - int localBlogId = BlogUtils.getBlogLocalId(WordPress.getCurrentBlog()); - Blog blog = WordPress.getBlog(localBlogId); - ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setHomeButtonEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true); } setContentView(R.layout.people_management_activity); - setTitle(R.string.people); + int localBlogId = BlogUtils.getBlogLocalId(WordPress.getCurrentBlog()); + Blog blog = WordPress.getBlog(localBlogId); + FragmentManager fragmentManager = getFragmentManager(); - if (mPeopleListFragment == null) { - mPeopleListFragment = PeopleListFragment.newInstance(localBlogId); + PeopleListFragment peopleListFragment = (PeopleListFragment) fragmentManager.findFragmentByTag(KEY_PEOPLE_LIST_FRAGMENT); + PersonDetailFragment personDetailFragment = (PersonDetailFragment) fragmentManager.findFragmentByTag(KEY_PERSON_DETAIL_FRAGMENT); + + if (peopleListFragment == null && personDetailFragment == null) { + peopleListFragment = PeopleListFragment.newInstance(localBlogId); fragmentManager.beginTransaction() - .add(android.R.id.content, mPeopleListFragment) + .add(android.R.id.content, peopleListFragment) .commit(); } @@ -84,11 +85,16 @@ private void refreshUsersList(String dotComBlogId, final int localBlogId) { @Override public void onSuccess(List peopleList) { PeopleTable.savePeople(peopleList); - if (mPeopleListFragment != null) { - mPeopleListFragment.refreshPeopleList(); + + 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 (mPersonDetailFragment != null) { - mPersonDetailFragment.refreshPersonDetails(); + if (personDetailFragment != null) { + personDetailFragment.refreshPersonDetails(); } } @@ -106,16 +112,19 @@ public void onJSONException(JSONException exception) { @Override public void onPersonSelected(Person person) { + FragmentManager fragmentManager = getFragmentManager(); + PersonDetailFragment personDetailFragment = (PersonDetailFragment) fragmentManager.findFragmentByTag(KEY_PERSON_DETAIL_FRAGMENT); + long personID = person.getPersonID(); int localTableBlogID = person.getLocalTableBlogId(); - if (mPersonDetailFragment == null) { - mPersonDetailFragment = PersonDetailFragment.newInstance(personID, localTableBlogID); + if (personDetailFragment == null) { + personDetailFragment = PersonDetailFragment.newInstance(personID, localTableBlogID); } else { - mPersonDetailFragment.setPersonDetails(personID, localTableBlogID); + personDetailFragment.setPersonDetails(personID, localTableBlogID); } - if (!mPersonDetailFragment.isAdded()) { + if (!personDetailFragment.isAdded()) { getFragmentManager().beginTransaction() - .replace(android.R.id.content, mPersonDetailFragment) + .replace(android.R.id.content, personDetailFragment) .addToBackStack(null) .commit(); } From 4bd521f6a27eb2e0020bbdc60d52def107204857 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 12 Apr 2016 17:06:24 +0300 Subject: [PATCH 18/43] Simplify refreshPersonDetails by returning immediately if fragment is not added --- .../ui/people/PersonDetailFragment.java | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 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 c9f90f7d2c8b..72e303c3950f 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 @@ -60,25 +60,25 @@ public void onResume() { } public void refreshPersonDetails() { - if (isAdded()) { - Person person = PeopleTable.getPerson(mPersonID, mLocalTableBlogID); - if (person != null) { - int avatarSz = getResources().getDimensionPixelSize(R.dimen.avatar_sz_large); - String avatarUrl = GravatarUtils.fixGravatarUrl(person.getAvatarUrl(), avatarSz); - - mAvatarImageView.setImageUrl(avatarUrl, WPNetworkImageView.ImageType.AVATAR); - 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 - } - }); - } + if (!isAdded()) return; + + Person person = PeopleTable.getPerson(mPersonID, mLocalTableBlogID); + if (person != null) { + int avatarSz = getResources().getDimensionPixelSize(R.dimen.avatar_sz_large); + String avatarUrl = GravatarUtils.fixGravatarUrl(person.getAvatarUrl(), avatarSz); + + mAvatarImageView.setImageUrl(avatarUrl, WPNetworkImageView.ImageType.AVATAR); + 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 + } + }); } } From 45ceb24e4fdf79b8e1bf36b01d16bc83d65bc7fb Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 12 Apr 2016 17:22:29 +0300 Subject: [PATCH 19/43] Only create people list fragment for the first time (fixes rotation issue) --- .../android/ui/people/PeopleManagementActivity.java | 10 +++------- 1 file changed, 3 insertions(+), 7 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 5f4faebbbdab..b6050aedc68f 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 @@ -39,14 +39,10 @@ protected void onCreate(Bundle savedInstanceState) { int localBlogId = BlogUtils.getBlogLocalId(WordPress.getCurrentBlog()); Blog blog = WordPress.getBlog(localBlogId); - FragmentManager fragmentManager = getFragmentManager(); - PeopleListFragment peopleListFragment = (PeopleListFragment) fragmentManager.findFragmentByTag(KEY_PEOPLE_LIST_FRAGMENT); - PersonDetailFragment personDetailFragment = (PersonDetailFragment) fragmentManager.findFragmentByTag(KEY_PERSON_DETAIL_FRAGMENT); + if (savedInstanceState == null) { + PeopleListFragment peopleListFragment = PeopleListFragment.newInstance(localBlogId); - if (peopleListFragment == null && personDetailFragment == null) { - peopleListFragment = PeopleListFragment.newInstance(localBlogId); - - fragmentManager.beginTransaction() + getFragmentManager().beginTransaction() .add(android.R.id.content, peopleListFragment) .commit(); } From f97b3ec036012491344195626ff7cf14c985aaf2 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Tue, 12 Apr 2016 17:52:22 +0300 Subject: [PATCH 20/43] Fix: Add the fragment tags during transactions --- .../wordpress/android/ui/people/PeopleManagementActivity.java | 4 ++-- 1 file changed, 2 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 b6050aedc68f..ca4271a5b072 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java @@ -43,7 +43,7 @@ protected void onCreate(Bundle savedInstanceState) { PeopleListFragment peopleListFragment = PeopleListFragment.newInstance(localBlogId); getFragmentManager().beginTransaction() - .add(android.R.id.content, peopleListFragment) + .add(android.R.id.content, peopleListFragment, KEY_PEOPLE_LIST_FRAGMENT) .commit(); } @@ -120,7 +120,7 @@ public void onPersonSelected(Person person) { } if (!personDetailFragment.isAdded()) { getFragmentManager().beginTransaction() - .replace(android.R.id.content, personDetailFragment) + .replace(android.R.id.content, personDetailFragment, KEY_PERSON_DETAIL_FRAGMENT) .addToBackStack(null) .commit(); } From 3c88fa310355638393c8b14b42cd94b3cea4a323 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 13 Apr 2016 15:53:57 +0300 Subject: [PATCH 21/43] First stab at adding slide in-out animation to People Management fragments --- .../android/ui/people/PeopleManagementActivity.java | 10 ++++++---- .../main/res/animator/fragment_slide_in_from_right.xml | 9 +++++++++ .../main/res/animator/fragment_slide_out_to_left.xml | 9 +++++++++ 3 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 WordPress/src/main/res/animator/fragment_slide_in_from_right.xml create mode 100644 WordPress/src/main/res/animator/fragment_slide_out_to_left.xml 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 ca4271a5b072..bf813354f36f 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,6 +1,7 @@ package org.wordpress.android.ui.people; import android.app.FragmentManager; +import android.app.FragmentTransaction; import android.os.Bundle; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; @@ -119,10 +120,11 @@ public void onPersonSelected(Person person) { personDetailFragment.setPersonDetails(personID, localTableBlogID); } if (!personDetailFragment.isAdded()) { - getFragmentManager().beginTransaction() - .replace(android.R.id.content, personDetailFragment, KEY_PERSON_DETAIL_FRAGMENT) - .addToBackStack(null) - .commit(); + FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); + fragmentTransaction.setCustomAnimations(R.animator.fragment_slide_in_from_right, R.animator.fragment_slide_out_to_left); + fragmentTransaction.replace(android.R.id.content, personDetailFragment); + fragmentTransaction.addToBackStack(null); + fragmentTransaction.commit(); } } } diff --git a/WordPress/src/main/res/animator/fragment_slide_in_from_right.xml b/WordPress/src/main/res/animator/fragment_slide_in_from_right.xml new file mode 100644 index 000000000000..cd4358c17f85 --- /dev/null +++ b/WordPress/src/main/res/animator/fragment_slide_in_from_right.xml @@ -0,0 +1,9 @@ + + \ No newline at end of file diff --git a/WordPress/src/main/res/animator/fragment_slide_out_to_left.xml b/WordPress/src/main/res/animator/fragment_slide_out_to_left.xml new file mode 100644 index 000000000000..bd7dd77080c7 --- /dev/null +++ b/WordPress/src/main/res/animator/fragment_slide_out_to_left.xml @@ -0,0 +1,9 @@ + + \ No newline at end of file From d5b29ed246c9de2f984e7ff10d1ac9558c87faf7 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 13 Apr 2016 15:56:28 +0300 Subject: [PATCH 22/43] Removing android:interpolator fixes the weirdness in the animation --- WordPress/src/main/res/animator/fragment_slide_in_from_right.xml | 1 - WordPress/src/main/res/animator/fragment_slide_out_to_left.xml | 1 - 2 files changed, 2 deletions(-) diff --git a/WordPress/src/main/res/animator/fragment_slide_in_from_right.xml b/WordPress/src/main/res/animator/fragment_slide_in_from_right.xml index cd4358c17f85..6ca1f0978444 100644 --- a/WordPress/src/main/res/animator/fragment_slide_in_from_right.xml +++ b/WordPress/src/main/res/animator/fragment_slide_in_from_right.xml @@ -2,7 +2,6 @@ Date: Wed, 13 Apr 2016 16:14:57 +0300 Subject: [PATCH 23/43] Use the correct container for the fragments for PeopleManagementActivity --- .../wordpress/android/ui/people/PeopleManagementActivity.java | 4 ++-- 1 file changed, 2 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 bf813354f36f..4e89bed79df1 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 @@ -44,7 +44,7 @@ protected void onCreate(Bundle savedInstanceState) { PeopleListFragment peopleListFragment = PeopleListFragment.newInstance(localBlogId); getFragmentManager().beginTransaction() - .add(android.R.id.content, peopleListFragment, KEY_PEOPLE_LIST_FRAGMENT) + .add(R.id.fragment_container, peopleListFragment, KEY_PEOPLE_LIST_FRAGMENT) .commit(); } @@ -122,7 +122,7 @@ public void onPersonSelected(Person person) { if (!personDetailFragment.isAdded()) { FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.setCustomAnimations(R.animator.fragment_slide_in_from_right, R.animator.fragment_slide_out_to_left); - fragmentTransaction.replace(android.R.id.content, personDetailFragment); + fragmentTransaction.replace(R.id.fragment_container, personDetailFragment); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } From efac6dcf62176d0db0cb0b529cc2487fd8a9ac9f Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 13 Apr 2016 16:28:59 +0300 Subject: [PATCH 24/43] Add missing person detail fragment tag --- .../wordpress/android/ui/people/PeopleManagementActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java index 4e89bed79df1..29debf82b8ea 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 @@ -122,7 +122,7 @@ public void onPersonSelected(Person person) { if (!personDetailFragment.isAdded()) { FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.setCustomAnimations(R.animator.fragment_slide_in_from_right, R.animator.fragment_slide_out_to_left); - fragmentTransaction.replace(R.id.fragment_container, personDetailFragment); + fragmentTransaction.replace(R.id.fragment_container, personDetailFragment, KEY_PERSON_DETAIL_FRAGMENT); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } From dbcea61153a0ee137e63065dac951c56a9d5bb7a Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 13 Apr 2016 16:50:31 +0300 Subject: [PATCH 25/43] Use XFraction instead of X for animation fragments --- .../android/ui/SlidingFrameLayout.java | 26 +++++++++++++++++++ .../animator/fragment_slide_in_from_right.xml | 4 +-- .../animator/fragment_slide_out_to_left.xml | 4 +-- .../res/layout/people_management_activity.xml | 6 ++--- 4 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 WordPress/src/main/java/org/wordpress/android/ui/SlidingFrameLayout.java diff --git a/WordPress/src/main/java/org/wordpress/android/ui/SlidingFrameLayout.java b/WordPress/src/main/java/org/wordpress/android/ui/SlidingFrameLayout.java new file mode 100644 index 000000000000..cb87c0402628 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/SlidingFrameLayout.java @@ -0,0 +1,26 @@ +package org.wordpress.android.ui; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.FrameLayout; + +public class SlidingFrameLayout extends FrameLayout { + + public SlidingFrameLayout(Context context) { + super(context); + } + + public SlidingFrameLayout(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public float getXFraction() { + int width = getWidth(); + return (width == 0) ? 0 : getX() / (float) width; + } + + public void setXFraction(float xFraction) { + int width = getWidth(); + setX((width > 0) ? (xFraction * width) : 0); + } +} diff --git a/WordPress/src/main/res/animator/fragment_slide_in_from_right.xml b/WordPress/src/main/res/animator/fragment_slide_in_from_right.xml index 6ca1f0978444..13a665bc9495 100644 --- a/WordPress/src/main/res/animator/fragment_slide_in_from_right.xml +++ b/WordPress/src/main/res/animator/fragment_slide_in_from_right.xml @@ -2,7 +2,7 @@ \ No newline at end of file diff --git a/WordPress/src/main/res/animator/fragment_slide_out_to_left.xml b/WordPress/src/main/res/animator/fragment_slide_out_to_left.xml index f0c5c3d48f13..cee33493cdb6 100644 --- a/WordPress/src/main/res/animator/fragment_slide_out_to_left.xml +++ b/WordPress/src/main/res/animator/fragment_slide_out_to_left.xml @@ -2,7 +2,7 @@ \ No newline at end of file diff --git a/WordPress/src/main/res/layout/people_management_activity.xml b/WordPress/src/main/res/layout/people_management_activity.xml index 0543d016d73b..dad4d5629247 100644 --- a/WordPress/src/main/res/layout/people_management_activity.xml +++ b/WordPress/src/main/res/layout/people_management_activity.xml @@ -1,6 +1,6 @@ - \ No newline at end of file + android:layout_height="match_parent"/> From 6cd57f46b0bf54974fc7ff098904f922e9907b7b Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Wed, 13 Apr 2016 17:09:38 +0300 Subject: [PATCH 26/43] Implement onAttach(Activity activity) for older devices --- .../android/ui/people/PeopleListFragment.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java index 374df7835205..c1006493ec1b 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java @@ -1,5 +1,6 @@ package org.wordpress.android.ui.people; +import android.app.Activity; import android.app.Fragment; import android.content.Context; import android.os.Bundle; @@ -40,6 +41,18 @@ public void onAttach(Context context) { } } + // We need to override this for devices pre API 23 + @SuppressWarnings("deprecation") + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + try { + mListener = (OnPersonSelectedListener) activity; + } catch (ClassCastException e) { + throw new ClassCastException(activity.toString() + " must implement OnPersonSelectedListener"); + } + } + @Override public void onDetach() { super.onDetach(); From 09aee84f189a3d3f3bccb23e2e9fe040b517cab3 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 14 Apr 2016 13:40:54 +0300 Subject: [PATCH 27/43] Convert PeopleListFragment to ListFragment from a regular Fragment --- .../android/ui/people/PeopleListFragment.java | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java index c1006493ec1b..9752f427ba2a 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java @@ -1,14 +1,14 @@ package org.wordpress.android.ui.people; import android.app.Activity; -import android.app.Fragment; +import android.app.ListFragment; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; -import android.widget.ListView; +import android.widget.AdapterView.OnItemClickListener; import org.wordpress.android.R; import org.wordpress.android.datasets.PeopleTable; @@ -16,11 +16,10 @@ import java.util.List; -public class PeopleListFragment extends Fragment { +public class PeopleListFragment extends ListFragment implements OnItemClickListener { private static String ARG_LOCAL_TABLE_BLOG_ID = "LOCAL_TABLE_BLOG_ID"; private int mLocalTableBlogID; - private ListView mListView; private OnPersonSelectedListener mListener; public static PeopleListFragment newInstance(int localTableBlogID) { @@ -61,22 +60,15 @@ public void onDetach() { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.people_list_fragment, container, false); + return inflater.inflate(R.layout.people_list_fragment, container, false); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); mLocalTableBlogID = getArguments().getInt(ARG_LOCAL_TABLE_BLOG_ID); - mListView = (ListView) rootView.findViewById(android.R.id.list); - - mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - if (mListener != null) { - Person person = (Person) parent.getItemAtPosition(position); - mListener.onPersonSelected(person); - } - } - }); - - return rootView; + getListView().setOnItemClickListener(this); } @Override @@ -91,16 +83,24 @@ public void refreshPeopleList() { List peopleList = PeopleTable.getPeople(mLocalTableBlogID); - PeopleAdapter peopleAdapter = (PeopleAdapter) mListView.getAdapter(); + PeopleAdapter peopleAdapter = (PeopleAdapter) getListAdapter(); if (peopleAdapter == null) { peopleAdapter = new PeopleAdapter(getActivity(), peopleList); - mListView.setAdapter(peopleAdapter); + setListAdapter(peopleAdapter); } else { peopleAdapter.setPeopleList(peopleList); peopleAdapter.notifyDataSetChanged(); } } + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + if (mListener != null) { + Person person = (Person) parent.getItemAtPosition(position); + mListener.onPersonSelected(person); + } + } + // Container Activity must implement this interface public interface OnPersonSelectedListener { void onPersonSelected(Person person); From 16cde86709cb542dbdb8151691e02ac10eb39f63 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 14 Apr 2016 14:23:21 +0300 Subject: [PATCH 28/43] Use custom sliding layout for fragments instead of activity --- ...Layout.java => SlidingRelativeLayout.java} | 8 +++--- .../main/res/layout/people_list_fragment.xml | 26 +++++++++---------- .../res/layout/people_management_activity.xml | 2 +- .../res/layout/person_detail_fragment.xml | 6 +++-- 4 files changed, 22 insertions(+), 20 deletions(-) rename WordPress/src/main/java/org/wordpress/android/ui/{SlidingFrameLayout.java => SlidingRelativeLayout.java} (66%) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/SlidingFrameLayout.java b/WordPress/src/main/java/org/wordpress/android/ui/SlidingRelativeLayout.java similarity index 66% rename from WordPress/src/main/java/org/wordpress/android/ui/SlidingFrameLayout.java rename to WordPress/src/main/java/org/wordpress/android/ui/SlidingRelativeLayout.java index cb87c0402628..765daeec9cfb 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/SlidingFrameLayout.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/SlidingRelativeLayout.java @@ -2,15 +2,15 @@ import android.content.Context; import android.util.AttributeSet; -import android.widget.FrameLayout; +import android.widget.RelativeLayout; -public class SlidingFrameLayout extends FrameLayout { +public class SlidingRelativeLayout extends RelativeLayout { - public SlidingFrameLayout(Context context) { + public SlidingRelativeLayout(Context context) { super(context); } - public SlidingFrameLayout(Context context, AttributeSet attrs) { + public SlidingRelativeLayout(Context context, AttributeSet attrs) { super(context, attrs); } diff --git a/WordPress/src/main/res/layout/people_list_fragment.xml b/WordPress/src/main/res/layout/people_list_fragment.xml index d6f905ca7883..29f0261f907d 100644 --- a/WordPress/src/main/res/layout/people_list_fragment.xml +++ b/WordPress/src/main/res/layout/people_list_fragment.xml @@ -1,16 +1,16 @@ - - - + android:layout_height="match_parent"> + + - \ No newline at end of file + diff --git a/WordPress/src/main/res/layout/people_management_activity.xml b/WordPress/src/main/res/layout/people_management_activity.xml index dad4d5629247..f78b1f2c997e 100644 --- a/WordPress/src/main/res/layout/people_management_activity.xml +++ b/WordPress/src/main/res/layout/people_management_activity.xml @@ -1,5 +1,5 @@ - - - + + From 3468e2a115b114e2ccacefd7ce8d1547aaeb8570 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 14 Apr 2016 16:18:26 +0300 Subject: [PATCH 29/43] Adds slide_in_from_left & slide_out_to_right animations for fragments --- .../android/ui/people/PeopleManagementActivity.java | 3 ++- .../src/main/res/animator/fragment_slide_in_from_left.xml | 8 ++++++++ .../main/res/animator/fragment_slide_in_from_right.xml | 2 +- .../src/main/res/animator/fragment_slide_out_to_left.xml | 2 +- .../src/main/res/animator/fragment_slide_out_to_right.xml | 8 ++++++++ 5 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 WordPress/src/main/res/animator/fragment_slide_in_from_left.xml create mode 100644 WordPress/src/main/res/animator/fragment_slide_out_to_right.xml 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 29debf82b8ea..b645ca46e7b4 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 @@ -121,7 +121,8 @@ public void onPersonSelected(Person person) { } if (!personDetailFragment.isAdded()) { FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); - fragmentTransaction.setCustomAnimations(R.animator.fragment_slide_in_from_right, R.animator.fragment_slide_out_to_left); + fragmentTransaction.setCustomAnimations(R.animator.fragment_slide_in_from_right, R.animator.fragment_slide_out_to_left, + R.animator.fragment_slide_in_from_left, R.animator.fragment_slide_out_to_right); fragmentTransaction.replace(R.id.fragment_container, personDetailFragment, KEY_PERSON_DETAIL_FRAGMENT); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); diff --git a/WordPress/src/main/res/animator/fragment_slide_in_from_left.xml b/WordPress/src/main/res/animator/fragment_slide_in_from_left.xml new file mode 100644 index 000000000000..fe2e8117036c --- /dev/null +++ b/WordPress/src/main/res/animator/fragment_slide_in_from_left.xml @@ -0,0 +1,8 @@ + + diff --git a/WordPress/src/main/res/animator/fragment_slide_in_from_right.xml b/WordPress/src/main/res/animator/fragment_slide_in_from_right.xml index 13a665bc9495..81b626f1750f 100644 --- a/WordPress/src/main/res/animator/fragment_slide_in_from_right.xml +++ b/WordPress/src/main/res/animator/fragment_slide_in_from_right.xml @@ -5,4 +5,4 @@ android:propertyName="xFraction" android:valueFrom="1.0" android:valueTo="0" - android:valueType="floatType"/> \ No newline at end of file + android:valueType="floatType"/> diff --git a/WordPress/src/main/res/animator/fragment_slide_out_to_left.xml b/WordPress/src/main/res/animator/fragment_slide_out_to_left.xml index cee33493cdb6..5e152320e96d 100644 --- a/WordPress/src/main/res/animator/fragment_slide_out_to_left.xml +++ b/WordPress/src/main/res/animator/fragment_slide_out_to_left.xml @@ -5,4 +5,4 @@ android:propertyName="xFraction" android:valueFrom="0" android:valueTo="-1.0" - android:valueType="floatType"/> \ No newline at end of file + android:valueType="floatType"/> diff --git a/WordPress/src/main/res/animator/fragment_slide_out_to_right.xml b/WordPress/src/main/res/animator/fragment_slide_out_to_right.xml new file mode 100644 index 000000000000..99a03620c0dc --- /dev/null +++ b/WordPress/src/main/res/animator/fragment_slide_out_to_right.xml @@ -0,0 +1,8 @@ + + From 33eac9b4fbac44d4afc43c14726f129e8d3f4051 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Thu, 14 Apr 2016 16:21:03 +0300 Subject: [PATCH 30/43] Adds interpolator to fragment animations to match the activity counterparts --- WordPress/src/main/res/animator/fragment_slide_in_from_left.xml | 1 + WordPress/src/main/res/animator/fragment_slide_in_from_right.xml | 1 + WordPress/src/main/res/animator/fragment_slide_out_to_left.xml | 1 + WordPress/src/main/res/animator/fragment_slide_out_to_right.xml | 1 + 4 files changed, 4 insertions(+) diff --git a/WordPress/src/main/res/animator/fragment_slide_in_from_left.xml b/WordPress/src/main/res/animator/fragment_slide_in_from_left.xml index fe2e8117036c..618429a36b24 100644 --- a/WordPress/src/main/res/animator/fragment_slide_in_from_left.xml +++ b/WordPress/src/main/res/animator/fragment_slide_in_from_left.xml @@ -2,6 +2,7 @@ Date: Thu, 14 Apr 2016 16:26:23 +0300 Subject: [PATCH 31/43] Refactor SlidingRelativeLayout so the first animation frame is drawn correctly --- .../android/ui/SlidingRelativeLayout.java | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/SlidingRelativeLayout.java b/WordPress/src/main/java/org/wordpress/android/ui/SlidingRelativeLayout.java index 765daeec9cfb..b7f584543a6b 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/SlidingRelativeLayout.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/SlidingRelativeLayout.java @@ -2,10 +2,13 @@ import android.content.Context; import android.util.AttributeSet; +import android.view.ViewTreeObserver; import android.widget.RelativeLayout; public class SlidingRelativeLayout extends RelativeLayout { + private float xFraction = 0; + public SlidingRelativeLayout(Context context) { super(context); } @@ -14,13 +17,32 @@ public SlidingRelativeLayout(Context context, AttributeSet attrs) { super(context, attrs); } - public float getXFraction() { - int width = getWidth(); - return (width == 0) ? 0 : getX() / (float) width; + private ViewTreeObserver.OnPreDrawListener preDrawListener = null; + + // This implementation fixes the first frame not being translated: http://trickyandroid.com/fragments-translate-animation/ + public void setXFraction(float fraction) { + this.xFraction = fraction; + + if (getWidth() == 0) { + if (preDrawListener == null) { + preDrawListener = new ViewTreeObserver.OnPreDrawListener() { + @Override + public boolean onPreDraw() { + getViewTreeObserver().removeOnPreDrawListener(preDrawListener); + setXFraction(xFraction); + return true; + } + }; + getViewTreeObserver().addOnPreDrawListener(preDrawListener); + } + return; + } + + float translationX = getWidth() * fraction; + setTranslationX(translationX); } - public void setXFraction(float xFraction) { - int width = getWidth(); - setX((width > 0) ? (xFraction * width) : 0); + public float getXFraction() { + return this.xFraction; } } From 8d30df1ad3847b7c0bd47d3ab3d2f071fad391b7 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 15 Apr 2016 10:42:47 +0300 Subject: [PATCH 32/43] Fix AndroidManifest entry for PeopleManagementActivity --- WordPress/src/main/AndroidManifest.xml | 3 ++- .../wordpress/android/ui/people/PeopleManagementActivity.java | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/WordPress/src/main/AndroidManifest.xml b/WordPress/src/main/AndroidManifest.xml index d04b362aaba7..cfffcea88225 100644 --- a/WordPress/src/main/AndroidManifest.xml +++ b/WordPress/src/main/AndroidManifest.xml @@ -335,7 +335,8 @@ 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 b645ca46e7b4..bd2c5d68ab4b 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 @@ -35,7 +35,6 @@ protected void onCreate(Bundle savedInstanceState) { actionBar.setDisplayHomeAsUpEnabled(true); } setContentView(R.layout.people_management_activity); - setTitle(R.string.people); int localBlogId = BlogUtils.getBlogLocalId(WordPress.getCurrentBlog()); Blog blog = WordPress.getBlog(localBlogId); From 8ab36c9c7fcd118dd23d6d84ca1413293d6d56ed Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 15 Apr 2016 10:50:44 +0300 Subject: [PATCH 33/43] Follow the naming conventions for properties in SlidingRelativeLayout --- .../android/ui/SlidingRelativeLayout.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/SlidingRelativeLayout.java b/WordPress/src/main/java/org/wordpress/android/ui/SlidingRelativeLayout.java index b7f584543a6b..d32df5bba4e1 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/SlidingRelativeLayout.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/SlidingRelativeLayout.java @@ -7,7 +7,7 @@ public class SlidingRelativeLayout extends RelativeLayout { - private float xFraction = 0; + private float mXFraction = 0; public SlidingRelativeLayout(Context context) { super(context); @@ -17,23 +17,23 @@ public SlidingRelativeLayout(Context context, AttributeSet attrs) { super(context, attrs); } - private ViewTreeObserver.OnPreDrawListener preDrawListener = null; + private ViewTreeObserver.OnPreDrawListener mPreDrawListener = null; // This implementation fixes the first frame not being translated: http://trickyandroid.com/fragments-translate-animation/ public void setXFraction(float fraction) { - this.xFraction = fraction; + mXFraction = fraction; if (getWidth() == 0) { - if (preDrawListener == null) { - preDrawListener = new ViewTreeObserver.OnPreDrawListener() { + if (mPreDrawListener == null) { + mPreDrawListener = new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { - getViewTreeObserver().removeOnPreDrawListener(preDrawListener); - setXFraction(xFraction); + getViewTreeObserver().removeOnPreDrawListener(mPreDrawListener); + setXFraction(mXFraction); return true; } }; - getViewTreeObserver().addOnPreDrawListener(preDrawListener); + getViewTreeObserver().addOnPreDrawListener(mPreDrawListener); } return; } @@ -43,6 +43,6 @@ public boolean onPreDraw() { } public float getXFraction() { - return this.xFraction; + return mXFraction; } } From ae4c73d12e14258d3aabe12457cbdc6b9c93c398 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 15 Apr 2016 10:52:16 +0300 Subject: [PATCH 34/43] Convert constant strings to all lowercase to be consistent --- .../org/wordpress/android/ui/people/PeopleListFragment.java | 2 +- .../org/wordpress/android/ui/people/PersonDetailFragment.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java index 9752f427ba2a..09f271a7652c 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java @@ -17,7 +17,7 @@ import java.util.List; public class PeopleListFragment extends ListFragment implements OnItemClickListener { - private static String ARG_LOCAL_TABLE_BLOG_ID = "LOCAL_TABLE_BLOG_ID"; + private static String ARG_LOCAL_TABLE_BLOG_ID = "local_table_blog_id"; private int mLocalTableBlogID; private OnPersonSelectedListener mListener; 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 72e303c3950f..5d4b9cb83807 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 @@ -15,8 +15,8 @@ import org.wordpress.android.widgets.WPNetworkImageView; 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"; + private static String ARG_PERSON_ID = "person_id"; + private static String ARG_LOCAL_TABLE_BLOG_ID = "local_table_blog_id"; private long mPersonID; private int mLocalTableBlogID; From 663fcd2c7526a74cc2272a5bd4d3f98436912b5a Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 15 Apr 2016 10:55:04 +0300 Subject: [PATCH 35/43] notifyDataSetChanged moved to setPeopleList since it makes more sense to have it in Adapter --- .../main/java/org/wordpress/android/ui/people/PeopleAdapter.java | 1 + .../java/org/wordpress/android/ui/people/PeopleListFragment.java | 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 4d1296560cd7..c21f31c47147 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 @@ -30,6 +30,7 @@ public PeopleAdapter(Context context, List peopleList) { public void setPeopleList(List peopleList) { mPeopleList = peopleList; + notifyDataSetChanged(); } @Override diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java index 09f271a7652c..6c37a6d8845c 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleListFragment.java @@ -89,7 +89,6 @@ public void refreshPeopleList() { setListAdapter(peopleAdapter); } else { peopleAdapter.setPeopleList(peopleList); - peopleAdapter.notifyDataSetChanged(); } } From d2e1afee6b1006e944f7508fd9acfdb47f9dbbe9 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 15 Apr 2016 10:57:15 +0300 Subject: [PATCH 36/43] onCreate method should be public in PeopleManagementActivity --- .../wordpress/android/ui/people/PeopleManagementActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java index bd2c5d68ab4b..cd675a18679f 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 @@ -26,7 +26,7 @@ public class PeopleManagementActivity extends AppCompatActivity implements Peopl private static final String KEY_PERSON_DETAIL_FRAGMENT = "person-detail-fragment"; @Override - protected void onCreate(Bundle savedInstanceState) { + public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActionBar actionBar = getSupportActionBar(); From 9a40740f1c6f44718186f52935a422e5718a6d7b Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 15 Apr 2016 13:06:57 +0300 Subject: [PATCH 37/43] PeopleManagementActivity small styling & naming issues fixed --- .../ui/people/PeopleManagementActivity.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 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 cd675a18679f..5a2348899f2e 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 @@ -76,15 +76,17 @@ public boolean onOptionsItemSelected(final MenuItem item) { return super.onOptionsItemSelected(item); } - private void refreshUsersList(String dotComBlogId, final int localBlogId) { - PeopleUtils.fetchUsers(dotComBlogId, localBlogId, new PeopleUtils.Callback() { + private void refreshUsersList(String dotComBlogId, final int localTableBlogId) { + PeopleUtils.fetchUsers(dotComBlogId, localTableBlogId, new PeopleUtils.Callback() { @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); + PeopleListFragment peopleListFragment = (PeopleListFragment) fragmentManager + .findFragmentByTag(KEY_PEOPLE_LIST_FRAGMENT); + PersonDetailFragment personDetailFragment = (PersonDetailFragment) fragmentManager + .findFragmentByTag(KEY_PERSON_DETAIL_FRAGMENT); if (peopleListFragment != null) { peopleListFragment.refreshPeopleList(); @@ -109,7 +111,8 @@ public void onJSONException(JSONException exception) { @Override public void onPersonSelected(Person person) { FragmentManager fragmentManager = getFragmentManager(); - PersonDetailFragment personDetailFragment = (PersonDetailFragment) fragmentManager.findFragmentByTag(KEY_PERSON_DETAIL_FRAGMENT); + PersonDetailFragment personDetailFragment = (PersonDetailFragment) fragmentManager + .findFragmentByTag(KEY_PERSON_DETAIL_FRAGMENT); long personID = person.getPersonID(); int localTableBlogID = person.getLocalTableBlogId(); @@ -120,8 +123,10 @@ public void onPersonSelected(Person person) { } if (!personDetailFragment.isAdded()) { FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); - fragmentTransaction.setCustomAnimations(R.animator.fragment_slide_in_from_right, R.animator.fragment_slide_out_to_left, - R.animator.fragment_slide_in_from_left, R.animator.fragment_slide_out_to_right); + fragmentTransaction.setCustomAnimations(R.animator.fragment_slide_in_from_right, + R.animator.fragment_slide_out_to_left, + R.animator.fragment_slide_in_from_left, + R.animator.fragment_slide_out_to_right); fragmentTransaction.replace(R.id.fragment_container, personDetailFragment, KEY_PERSON_DETAIL_FRAGMENT); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); From ded9310eaa4fa28ac48ff0822035be0cce7c6924 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 15 Apr 2016 13:09:58 +0300 Subject: [PATCH 38/43] Adds log for null-check fail in PersonDetailFragment --- .../org/wordpress/android/ui/people/PersonDetailFragment.java | 4 ++++ 1 file changed, 4 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 5d4b9cb83807..95adb66234f5 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,7 @@ import org.wordpress.android.datasets.PeopleTable; 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; @@ -79,6 +80,9 @@ public void onClick(View v) { //TODO: remove user } }); + } else { + AppLog.w(AppLog.T.PEOPLE, "Person returned null from DB for personID: " + mPersonID + + " & localTableBlogID: " + mLocalTableBlogID); } } From fa7b198e894ae5b91e45441092aa87f297f1108c Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 15 Apr 2016 13:17:02 +0300 Subject: [PATCH 39/43] Adds @SuppressWarnings(UnusedDeclaration) and comment expaning the usage of xFraction --- .../wordpress/android/ui/SlidingRelativeLayout.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/SlidingRelativeLayout.java b/WordPress/src/main/java/org/wordpress/android/ui/SlidingRelativeLayout.java index d32df5bba4e1..eb268b156065 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/SlidingRelativeLayout.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/SlidingRelativeLayout.java @@ -19,7 +19,14 @@ public SlidingRelativeLayout(Context context, AttributeSet attrs) { private ViewTreeObserver.OnPreDrawListener mPreDrawListener = null; + // This property is used by the objectAnimator for Fragment slide animations. ex: `fragment_slide_in_from_left.xml` + @SuppressWarnings("UnusedDeclaration") + public float getXFraction() { + return mXFraction; + } + // This implementation fixes the first frame not being translated: http://trickyandroid.com/fragments-translate-animation/ + @SuppressWarnings("UnusedDeclaration") public void setXFraction(float fraction) { mXFraction = fraction; @@ -41,8 +48,4 @@ public boolean onPreDraw() { float translationX = getWidth() * fraction; setTranslationX(translationX); } - - public float getXFraction() { - return mXFraction; - } } From 2eac0f9c5e7156d001412ef9e67b1757a57ad764 Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Fri, 15 Apr 2016 15:45:41 +0300 Subject: [PATCH 40/43] Fixes the fragment animation issue and makes it more like activity version --- .../org/wordpress/android/ui/SlidingRelativeLayout.java | 2 +- .../android/ui/people/PeopleManagementActivity.java | 6 ++---- .../main/res/animator/fragment_slide_in_from_left.xml | 9 --------- .../src/main/res/animator/fragment_slide_out_to_left.xml | 9 --------- WordPress/src/main/res/layout/people_list_fragment.xml | 3 ++- WordPress/src/main/res/layout/person_detail_fragment.xml | 1 + 6 files changed, 6 insertions(+), 24 deletions(-) delete mode 100644 WordPress/src/main/res/animator/fragment_slide_in_from_left.xml delete mode 100644 WordPress/src/main/res/animator/fragment_slide_out_to_left.xml diff --git a/WordPress/src/main/java/org/wordpress/android/ui/SlidingRelativeLayout.java b/WordPress/src/main/java/org/wordpress/android/ui/SlidingRelativeLayout.java index eb268b156065..caea2d5cbabb 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/SlidingRelativeLayout.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/SlidingRelativeLayout.java @@ -19,7 +19,7 @@ public SlidingRelativeLayout(Context context, AttributeSet attrs) { private ViewTreeObserver.OnPreDrawListener mPreDrawListener = null; - // This property is used by the objectAnimator for Fragment slide animations. ex: `fragment_slide_in_from_left.xml` + // This property is used by the objectAnimator for Fragment slide animations. ex: `fragment_slide_in_from_right.xml` @SuppressWarnings("UnusedDeclaration") public float getXFraction() { return mXFraction; 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 5a2348899f2e..2eb93affe0d4 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 @@ -123,11 +123,9 @@ public void onPersonSelected(Person person) { } if (!personDetailFragment.isAdded()) { FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); - fragmentTransaction.setCustomAnimations(R.animator.fragment_slide_in_from_right, - R.animator.fragment_slide_out_to_left, - R.animator.fragment_slide_in_from_left, + fragmentTransaction.setCustomAnimations(R.animator.fragment_slide_in_from_right, 0, 0, R.animator.fragment_slide_out_to_right); - fragmentTransaction.replace(R.id.fragment_container, personDetailFragment, KEY_PERSON_DETAIL_FRAGMENT); + fragmentTransaction.add(R.id.fragment_container, personDetailFragment, KEY_PERSON_DETAIL_FRAGMENT); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } diff --git a/WordPress/src/main/res/animator/fragment_slide_in_from_left.xml b/WordPress/src/main/res/animator/fragment_slide_in_from_left.xml deleted file mode 100644 index 618429a36b24..000000000000 --- a/WordPress/src/main/res/animator/fragment_slide_in_from_left.xml +++ /dev/null @@ -1,9 +0,0 @@ - - diff --git a/WordPress/src/main/res/animator/fragment_slide_out_to_left.xml b/WordPress/src/main/res/animator/fragment_slide_out_to_left.xml deleted file mode 100644 index e4aceb83fbff..000000000000 --- a/WordPress/src/main/res/animator/fragment_slide_out_to_left.xml +++ /dev/null @@ -1,9 +0,0 @@ - - diff --git a/WordPress/src/main/res/layout/people_list_fragment.xml b/WordPress/src/main/res/layout/people_list_fragment.xml index 29f0261f907d..179a14ef0a88 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/default_background"> Date: Mon, 18 Apr 2016 16:02:07 +0300 Subject: [PATCH 41/43] Use onCreateAnimator instead of FragmentTransaction as config changes workaround --- .../ui/people/PeopleManagementActivity.java | 2 -- .../android/ui/people/PersonDetailFragment.java | 15 +++++++++++++++ 2 files changed, 15 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 2eb93affe0d4..6392dc4e7b0e 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 @@ -123,8 +123,6 @@ public void onPersonSelected(Person person) { } if (!personDetailFragment.isAdded()) { FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); - fragmentTransaction.setCustomAnimations(R.animator.fragment_slide_in_from_right, 0, 0, - R.animator.fragment_slide_out_to_right); fragmentTransaction.add(R.id.fragment_container, personDetailFragment, KEY_PERSON_DETAIL_FRAGMENT); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); 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 95adb66234f5..7f65a208c769 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 @@ -1,5 +1,7 @@ package org.wordpress.android.ui.people; +import android.animation.Animator; +import android.animation.AnimatorInflater; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; @@ -37,6 +39,19 @@ public static PersonDetailFragment newInstance(long personID, int localTableBlog return personDetailFragment; } + /** + * 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) { + if (enter) { + return AnimatorInflater.loadAnimator(getActivity(), R.animator.fragment_slide_in_from_right); + } else { + return AnimatorInflater.loadAnimator(getActivity(), R.animator.fragment_slide_out_to_right); + } + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.person_detail_fragment, container, false); From 12be72aabc3b535e855ff7a24fd014bd1f98fccd Mon Sep 17 00:00:00 2001 From: Oguz Kocer Date: Mon, 18 Apr 2016 17:06:04 +0300 Subject: [PATCH 42/43] Adds a comment explaining the usage of SlidingRelativeLayout and background color --- WordPress/src/main/res/layout/person_detail_fragment.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/WordPress/src/main/res/layout/person_detail_fragment.xml b/WordPress/src/main/res/layout/person_detail_fragment.xml index 46b0e725c0ff..17ddd3ee5f5d 100644 --- a/WordPress/src/main/res/layout/person_detail_fragment.xml +++ b/WordPress/src/main/res/layout/person_detail_fragment.xml @@ -1,4 +1,8 @@ + Date: Mon, 18 Apr 2016 17:07:16 +0300 Subject: [PATCH 43/43] No need to use SlidingRelativeLayout & background color in people list fragment layout --- WordPress/src/main/res/layout/people_list_fragment.xml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/WordPress/src/main/res/layout/people_list_fragment.xml b/WordPress/src/main/res/layout/people_list_fragment.xml index 179a14ef0a88..98e98a5e7578 100644 --- a/WordPress/src/main/res/layout/people_list_fragment.xml +++ b/WordPress/src/main/res/layout/people_list_fragment.xml @@ -1,9 +1,8 @@ - + android:layout_height="match_parent"> - +