diff options
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java')
-rw-r--r-- | WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java | 664 |
1 files changed, 664 insertions, 0 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 new file mode 100644 index 000000000..3c0e43c70 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/people/PeopleManagementActivity.java @@ -0,0 +1,664 @@ +package org.wordpress.android.ui.people; + +import android.app.AlertDialog; +import android.app.Fragment; +import android.app.FragmentManager; +import android.app.FragmentTransaction; +import android.content.DialogInterface; +import android.os.Bundle; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.MenuItem; + +import org.wordpress.android.R; +import org.wordpress.android.WordPress; +import org.wordpress.android.analytics.AnalyticsTracker; +import org.wordpress.android.datasets.PeopleTable; +import org.wordpress.android.models.Blog; +import org.wordpress.android.models.PeopleListFilter; +import org.wordpress.android.models.Person; +import org.wordpress.android.ui.people.utils.PeopleUtils; +import org.wordpress.android.util.AnalyticsUtils; +import org.wordpress.android.util.NetworkUtils; +import org.wordpress.android.util.ToastUtils; + +import java.util.List; + +import de.greenrobot.event.EventBus; + + +public class PeopleManagementActivity extends AppCompatActivity + implements PeopleListFragment.OnPersonSelectedListener, PeopleListFragment.OnFetchPeopleListener { + private static final String KEY_PEOPLE_LIST_FRAGMENT = "people-list-fragment"; + private static final String KEY_PERSON_DETAIL_FRAGMENT = "person-detail-fragment"; + private static final String KEY_PEOPLE_INVITE_FRAGMENT = "people-invite-fragment"; + private static final String KEY_TITLE = "page-title"; + + private static final String KEY_USERS_END_OF_LIST_REACHED = "users-end-of-list-reached"; + private static final String KEY_FOLLOWERS_END_OF_LIST_REACHED = "followers-end-of-list-reached"; + private static final String KEY_EMAIL_FOLLOWERS_END_OF_LIST_REACHED = "email-followers-end-of-list-reached"; + private static final String KEY_VIEWERS_END_OF_LIST_REACHED = "viewers-end-of-list-reached"; + + private static final String KEY_USERS_FETCH_REQUEST_IN_PROGRESS = "users-fetch-request-in-progress"; + private static final String KEY_FOLLOWERS_FETCH_REQUEST_IN_PROGRESS = "followers-fetch-request-in-progress"; + private static final String KEY_EMAIL_FOLLOWERS_FETCH_REQUEST_IN_PROGRESS = "email-followers-fetch-request-in-progress"; + private static final String KEY_VIEWERS_FETCH_REQUEST_IN_PROGRESS = "viewers-fetch-request-in-progress"; + + private static final String KEY_HAS_REFRESHED_USERS = "has-refreshed-users"; + private static final String KEY_HAS_REFRESHED_FOLLOWERS = "has-refreshed-followers"; + private static final String KEY_HAS_REFRESHED_EMAIL_FOLLOWERS = "has-refreshed-email-followers"; + private static final String KEY_HAS_REFRESHED_VIEWERS = "has-refreshed-viewers"; + + private static final String KEY_FOLLOWERS_LAST_FETCHED_PAGE = "followers-last-fetched-page"; + private static final String KEY_EMAIL_FOLLOWERS_LAST_FETCHED_PAGE = "email-followers-last-fetched-page"; + + // End of list reached variables will be true when there is no more data to fetch + private boolean mUsersEndOfListReached; + private boolean mFollowersEndOfListReached; + private boolean mEmailFollowersEndOfListReached; + private boolean mViewersEndOfListReached; + + // We only allow the lists to be refreshed once to avoid syncing and jumping animation issues + private boolean mHasRefreshedUsers; + private boolean mHasRefreshedFollowers; + private boolean mHasRefreshedEmailFollowers; + private boolean mHasRefreshedViewers; + + // If we are currently making a request for a certain filter + private boolean mUsersFetchRequestInProgress; + private boolean mFollowersFetchRequestInProgress; + private boolean mEmailFollowersFetchRequestInProgress; + private boolean mViewersFetchRequestInProgress; + + // Keep track of the last page we received from remote + private int mFollowersLastFetchedPage; + private int mEmailFollowersLastFetchedPage; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.people_management_activity); + + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setHomeButtonEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.setElevation(0); + } + + Blog blog = WordPress.getCurrentBlog(); + if (blog == null) { + ToastUtils.showToast(this, R.string.blog_not_found); + finish(); + return; + } + + FragmentManager fragmentManager = getFragmentManager(); + + if (savedInstanceState == null) { + // only delete cached people if there is a connection + if (NetworkUtils.isNetworkAvailable(this)) { + PeopleTable.deletePeopleExceptForFirstPage(blog.getLocalTableBlogId()); + } + + if (actionBar != null) { + actionBar.setTitle(R.string.people); + } + + PeopleListFragment peopleListFragment = PeopleListFragment.newInstance(blog.getLocalTableBlogId()); + peopleListFragment.setOnPersonSelectedListener(this); + peopleListFragment.setOnFetchPeopleListener(this); + + mUsersEndOfListReached = false; + mFollowersEndOfListReached = false; + mEmailFollowersEndOfListReached = false; + mViewersEndOfListReached = false; + + mHasRefreshedUsers = false; + mHasRefreshedFollowers = false; + mHasRefreshedEmailFollowers = false; + mHasRefreshedViewers = false; + + mUsersFetchRequestInProgress = false; + mFollowersFetchRequestInProgress = false; + mEmailFollowersFetchRequestInProgress = false; + mViewersFetchRequestInProgress = false; + mFollowersLastFetchedPage = 0; + mEmailFollowersLastFetchedPage = 0; + + + fragmentManager.beginTransaction() + .add(R.id.fragment_container, peopleListFragment, KEY_PEOPLE_LIST_FRAGMENT) + .commit(); + } else { + mUsersEndOfListReached = savedInstanceState.getBoolean(KEY_USERS_END_OF_LIST_REACHED); + mFollowersEndOfListReached = savedInstanceState.getBoolean(KEY_FOLLOWERS_END_OF_LIST_REACHED); + mEmailFollowersEndOfListReached = savedInstanceState.getBoolean(KEY_EMAIL_FOLLOWERS_END_OF_LIST_REACHED); + mViewersEndOfListReached = savedInstanceState.getBoolean(KEY_VIEWERS_END_OF_LIST_REACHED); + + mHasRefreshedUsers = savedInstanceState.getBoolean(KEY_HAS_REFRESHED_USERS); + mHasRefreshedFollowers = savedInstanceState.getBoolean(KEY_HAS_REFRESHED_FOLLOWERS); + mHasRefreshedEmailFollowers = savedInstanceState.getBoolean(KEY_HAS_REFRESHED_EMAIL_FOLLOWERS); + mHasRefreshedViewers = savedInstanceState.getBoolean(KEY_HAS_REFRESHED_VIEWERS); + + mUsersFetchRequestInProgress = savedInstanceState.getBoolean(KEY_USERS_FETCH_REQUEST_IN_PROGRESS); + mFollowersFetchRequestInProgress = savedInstanceState.getBoolean(KEY_FOLLOWERS_FETCH_REQUEST_IN_PROGRESS); + mEmailFollowersFetchRequestInProgress = savedInstanceState.getBoolean(KEY_EMAIL_FOLLOWERS_FETCH_REQUEST_IN_PROGRESS); + mViewersFetchRequestInProgress = savedInstanceState.getBoolean(KEY_VIEWERS_FETCH_REQUEST_IN_PROGRESS); + + mFollowersLastFetchedPage = savedInstanceState.getInt(KEY_FOLLOWERS_LAST_FETCHED_PAGE); + mEmailFollowersLastFetchedPage = savedInstanceState.getInt(KEY_EMAIL_FOLLOWERS_LAST_FETCHED_PAGE); + + CharSequence title = savedInstanceState.getCharSequence(KEY_TITLE); + if (actionBar != null && title != null) { + actionBar.setTitle(title); + } + + PeopleListFragment peopleListFragment = getListFragment(); + if (peopleListFragment != null) { + peopleListFragment.setOnPersonSelectedListener(this); + peopleListFragment.setOnFetchPeopleListener(this); + } + } + } + + @Override + public void onSaveInstanceState(Bundle outState){ + super.onSaveInstanceState(outState); + outState.putBoolean(KEY_USERS_END_OF_LIST_REACHED, mUsersEndOfListReached); + outState.putBoolean(KEY_FOLLOWERS_END_OF_LIST_REACHED, mFollowersEndOfListReached); + outState.putBoolean(KEY_EMAIL_FOLLOWERS_END_OF_LIST_REACHED, mEmailFollowersEndOfListReached); + outState.putBoolean(KEY_VIEWERS_END_OF_LIST_REACHED, mViewersEndOfListReached); + + outState.putBoolean(KEY_HAS_REFRESHED_USERS, mHasRefreshedUsers); + outState.putBoolean(KEY_HAS_REFRESHED_FOLLOWERS, mHasRefreshedFollowers); + outState.putBoolean(KEY_HAS_REFRESHED_EMAIL_FOLLOWERS, mHasRefreshedEmailFollowers); + outState.putBoolean(KEY_HAS_REFRESHED_VIEWERS, mHasRefreshedViewers); + + outState.putBoolean(KEY_USERS_FETCH_REQUEST_IN_PROGRESS, mUsersFetchRequestInProgress); + outState.putBoolean(KEY_FOLLOWERS_FETCH_REQUEST_IN_PROGRESS, mFollowersFetchRequestInProgress); + outState.putBoolean(KEY_EMAIL_FOLLOWERS_FETCH_REQUEST_IN_PROGRESS, mEmailFollowersFetchRequestInProgress); + outState.putBoolean(KEY_VIEWERS_FETCH_REQUEST_IN_PROGRESS, mViewersFetchRequestInProgress); + + outState.putInt(KEY_FOLLOWERS_LAST_FETCHED_PAGE, mFollowersLastFetchedPage); + outState.putInt(KEY_EMAIL_FOLLOWERS_LAST_FETCHED_PAGE, mEmailFollowersLastFetchedPage); + + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + outState.putCharSequence(KEY_TITLE, actionBar.getTitle()); + } + } + + @Override + public void onStart() { + super.onStart(); + EventBus.getDefault().register(this); + } + + @Override + public void onStop() { + EventBus.getDefault().unregister(this); + super.onStop(); + } + + @Override + public void onBackPressed() { + if (!navigateBackToPeopleListFragment()) { + super.onBackPressed(); + } + } + + @Override + public boolean onOptionsItemSelected(final MenuItem item) { + if (item.getItemId() == android.R.id.home) { + onBackPressed(); + return true; + } else if (item.getItemId() == R.id.remove_person) { + confirmRemovePerson(); + return true; + } else if (item.getItemId() == R.id.invite) { + FragmentManager fragmentManager = getFragmentManager(); + Fragment peopleInviteFragment = fragmentManager.findFragmentByTag(KEY_PERSON_DETAIL_FRAGMENT); + + if (peopleInviteFragment == null) { + Blog blog = WordPress.getCurrentBlog(); + peopleInviteFragment = PeopleInviteFragment.newInstance(blog.getDotComBlogId()); + } + if (!peopleInviteFragment.isAdded()) { + FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); + fragmentTransaction.replace(R.id.fragment_container, peopleInviteFragment, KEY_PEOPLE_INVITE_FRAGMENT); + fragmentTransaction.addToBackStack(null); + fragmentTransaction.commit(); + } + } else if (item.getItemId() == R.id.send_invitation) { + FragmentManager fragmentManager = getFragmentManager(); + Fragment peopleInviteFragment = fragmentManager.findFragmentByTag(KEY_PEOPLE_INVITE_FRAGMENT); + if (peopleInviteFragment != null) { + ((InvitationSender) peopleInviteFragment).send(); + } + } + return super.onOptionsItemSelected(item); + } + + private boolean fetchUsersList(String dotComBlogId, final int localTableBlogId, final int offset) { + if (mUsersEndOfListReached || mUsersFetchRequestInProgress || !NetworkUtils.checkConnection(this)) { + return false; + } + + mUsersFetchRequestInProgress = true; + + PeopleUtils.fetchUsers(dotComBlogId, localTableBlogId, offset, new PeopleUtils.FetchUsersCallback() { + @Override + public void onSuccess(List<Person> peopleList, boolean isEndOfList) { + boolean isFreshList = (offset == 0); + mHasRefreshedUsers = true; + mUsersEndOfListReached = isEndOfList; + PeopleTable.saveUsers(peopleList, localTableBlogId, isFreshList); + + PeopleListFragment peopleListFragment = getListFragment(); + if (peopleListFragment != null) { + peopleListFragment.fetchingRequestFinished(PeopleListFilter.TEAM, isFreshList, true); + } + + refreshOnScreenFragmentDetails(); + mUsersFetchRequestInProgress = false; + } + + @Override + public void onError() { + PeopleListFragment peopleListFragment = getListFragment(); + if (peopleListFragment != null) { + boolean isFirstPage = offset == 0; + peopleListFragment.fetchingRequestFinished(PeopleListFilter.TEAM, isFirstPage, false); + } + mUsersFetchRequestInProgress = false; + ToastUtils.showToast(PeopleManagementActivity.this, + R.string.error_fetch_users_list, + ToastUtils.Duration.SHORT); + } + }); + + return true; + } + + private boolean fetchFollowersList(String dotComBlogId, final int localTableBlogId, final int page) { + if (mFollowersEndOfListReached || mFollowersFetchRequestInProgress || !NetworkUtils.checkConnection(this)) { + return false; + } + + mFollowersFetchRequestInProgress = true; + + PeopleUtils.fetchFollowers(dotComBlogId, localTableBlogId, page, new PeopleUtils.FetchFollowersCallback() { + @Override + public void onSuccess(List<Person> peopleList, int pageFetched, boolean isEndOfList) { + boolean isFreshList = (page == 1); + mHasRefreshedFollowers = true; + mFollowersLastFetchedPage = pageFetched; + mFollowersEndOfListReached = isEndOfList; + PeopleTable.saveFollowers(peopleList, localTableBlogId, isFreshList); + + PeopleListFragment peopleListFragment = getListFragment(); + if (peopleListFragment != null) { + peopleListFragment.fetchingRequestFinished(PeopleListFilter.FOLLOWERS, isFreshList, true); + } + + refreshOnScreenFragmentDetails(); + mFollowersFetchRequestInProgress = false; + } + + @Override + public void onError() { + PeopleListFragment peopleListFragment = getListFragment(); + if (peopleListFragment != null) { + boolean isFirstPage = page == 1; + peopleListFragment.fetchingRequestFinished(PeopleListFilter.FOLLOWERS, isFirstPage, false); + } + mFollowersFetchRequestInProgress = false; + ToastUtils.showToast(PeopleManagementActivity.this, + R.string.error_fetch_followers_list, + ToastUtils.Duration.SHORT); + } + }); + + return true; + } + + private boolean fetchEmailFollowersList(String dotComBlogId, final int localTableBlogId, final int page) { + if (mEmailFollowersEndOfListReached || mEmailFollowersFetchRequestInProgress || !NetworkUtils.checkConnection(this)) { + return false; + } + + mEmailFollowersFetchRequestInProgress = true; + + PeopleUtils.fetchEmailFollowers(dotComBlogId, localTableBlogId, page, new PeopleUtils.FetchFollowersCallback() { + @Override + public void onSuccess(List<Person> peopleList, int pageFetched, boolean isEndOfList) { + boolean isFreshList = (page == 1); + mHasRefreshedEmailFollowers = true; + mEmailFollowersLastFetchedPage = pageFetched; + mEmailFollowersEndOfListReached = isEndOfList; + PeopleTable.saveEmailFollowers(peopleList, localTableBlogId, isFreshList); + + PeopleListFragment peopleListFragment = getListFragment(); + if (peopleListFragment != null) { + peopleListFragment.fetchingRequestFinished(PeopleListFilter.EMAIL_FOLLOWERS, isFreshList, true); + } + + refreshOnScreenFragmentDetails(); + mEmailFollowersFetchRequestInProgress = false; + } + + @Override + public void onError() { + PeopleListFragment peopleListFragment = getListFragment(); + if (peopleListFragment != null) { + boolean isFirstPage = page == 1; + peopleListFragment.fetchingRequestFinished(PeopleListFilter.EMAIL_FOLLOWERS, isFirstPage, false); + } + mEmailFollowersFetchRequestInProgress = false; + ToastUtils.showToast(PeopleManagementActivity.this, + R.string.error_fetch_email_followers_list, + ToastUtils.Duration.SHORT); + } + }); + + return true; + } + + private boolean fetchViewersList(String dotComBlogId, final int localTableBlogId, final int offset) { + if (mViewersEndOfListReached || mViewersFetchRequestInProgress || !NetworkUtils.checkConnection(this)) { + return false; + } + + mViewersFetchRequestInProgress = true; + + PeopleUtils.fetchViewers(dotComBlogId, localTableBlogId, offset, new PeopleUtils.FetchViewersCallback() { + @Override + public void onSuccess(List<Person> peopleList, boolean isEndOfList) { + boolean isFreshList = (offset == 0); + mHasRefreshedViewers = true; + mViewersEndOfListReached = isEndOfList; + PeopleTable.saveViewers(peopleList, localTableBlogId, isFreshList); + + PeopleListFragment peopleListFragment = getListFragment(); + if (peopleListFragment != null) { + peopleListFragment.fetchingRequestFinished(PeopleListFilter.VIEWERS, isFreshList, true); + } + + refreshOnScreenFragmentDetails(); + mViewersFetchRequestInProgress = false; + } + + @Override + public void onError() { + PeopleListFragment peopleListFragment = getListFragment(); + if (peopleListFragment != null) { + boolean isFirstPage = offset == 0; + peopleListFragment.fetchingRequestFinished(PeopleListFilter.VIEWERS, isFirstPage, false); + } + mViewersFetchRequestInProgress = false; + ToastUtils.showToast(PeopleManagementActivity.this, + R.string.error_fetch_viewers_list, + ToastUtils.Duration.SHORT); + } + }); + + return true; + } + + @Override + public void onPersonSelected(Person person) { + PersonDetailFragment personDetailFragment = getDetailFragment(); + + long personID = person.getPersonID(); + int localTableBlogID = person.getLocalTableBlogId(); + + if (personDetailFragment == null) { + personDetailFragment = PersonDetailFragment.newInstance(personID, localTableBlogID, person.getPersonType()); + } else { + personDetailFragment.setPersonDetails(personID, localTableBlogID); + } + if (!personDetailFragment.isAdded()) { + AnalyticsUtils.trackWithCurrentBlogDetails(AnalyticsTracker.Stat.OPENED_PERSON); + FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); + fragmentTransaction.replace(R.id.fragment_container, personDetailFragment, KEY_PERSON_DETAIL_FRAGMENT); + fragmentTransaction.addToBackStack(null); + + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setTitle(""); + } + + fragmentTransaction.commit(); + } + } + + public void onEventMainThread(RoleChangeDialogFragment.RoleChangeEvent event) { + if(!NetworkUtils.checkConnection(this)) { + return; + } + + final Person person = PeopleTable.getUser(event.personID, event.localTableBlogId); + if (person == null || event.newRole == null || person.getRole() == event.newRole) { + return; + } + + String blogId = WordPress.getCurrentRemoteBlogId(); + if (blogId == null) { + return; + } + + final PersonDetailFragment personDetailFragment = getDetailFragment(); + if (personDetailFragment != null) { + // optimistically update the role + personDetailFragment.changeRole(event.newRole); + } + + PeopleUtils.updateRole(blogId, person.getPersonID(), event.newRole, event.localTableBlogId, + new PeopleUtils.UpdateUserCallback() { + @Override + public void onSuccess(Person person) { + AnalyticsUtils.trackWithCurrentBlogDetails(AnalyticsTracker.Stat.PERSON_UPDATED); + PeopleTable.saveUser(person); + refreshOnScreenFragmentDetails(); + } + + @Override + public void onError() { + // change the role back to it's original value + if (personDetailFragment != null) { + personDetailFragment.refreshPersonDetails(); + } + ToastUtils.showToast(PeopleManagementActivity.this, + R.string.error_update_role, + ToastUtils.Duration.LONG); + } + }); + } + + private void confirmRemovePerson() { + Person person = getCurrentPerson(); + if (person == null) { + return; + } + + AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.Calypso_AlertDialog); + builder.setTitle(getString(R.string.person_remove_confirmation_title, person.getDisplayName())); + if (person.getPersonType() == Person.PersonType.USER) { + builder.setMessage(getString(R.string.user_remove_confirmation_message, person.getDisplayName())); + } else if(person.getPersonType() == Person.PersonType.VIEWER) { + builder.setMessage(R.string.viewer_remove_confirmation_message); + } else { + builder.setMessage(R.string.follower_remove_confirmation_message); + } + builder.setNegativeButton(R.string.cancel, null); + builder.setPositiveButton(R.string.remove, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + removeSelectedPerson(); + } + }); + builder.show(); + } + + private void removeSelectedPerson() { + if(!NetworkUtils.checkConnection(this)) { + return; + } + + Person person = getCurrentPerson(); + if (person == null) { + return; + } + String blogId = WordPress.getCurrentRemoteBlogId(); + if (blogId == null) { + return; + } + + final Person.PersonType personType = person.getPersonType(); + final String displayName = person.getDisplayName(); + + PeopleUtils.RemovePersonCallback callback = new PeopleUtils.RemovePersonCallback() { + @Override + public void onSuccess(long personID, int localTableBlogId) { + if (personType == Person.PersonType.USER) { + AnalyticsUtils.trackWithCurrentBlogDetails(AnalyticsTracker.Stat.PERSON_REMOVED); + } + + // remove the person from db, navigate back to list fragment and refresh it + PeopleTable.deletePerson(personID, localTableBlogId, personType); + + String message = getString(R.string.person_removed, displayName); + ToastUtils.showToast(PeopleManagementActivity.this, message, ToastUtils.Duration.LONG); + + navigateBackToPeopleListFragment(); + refreshPeopleListFragment(); + } + + @Override + public void onError() { + int errorMessageRes; + switch (personType) { + case USER: + errorMessageRes = R.string.error_remove_user; + break; + case VIEWER: + errorMessageRes = R.string.error_remove_viewer; + break; + default: + errorMessageRes = R.string.error_remove_follower; + break; + } + ToastUtils.showToast(PeopleManagementActivity.this, + errorMessageRes, + ToastUtils.Duration.LONG); + } + }; + + if (personType == Person.PersonType.FOLLOWER || personType == Person.PersonType.EMAIL_FOLLOWER) { + PeopleUtils.removeFollower(blogId, person.getPersonID(), person.getLocalTableBlogId(), + personType, callback); + } else if(personType == Person.PersonType.VIEWER) { + PeopleUtils.removeViewer(blogId, person.getPersonID(), person.getLocalTableBlogId(), callback); + } else { + PeopleUtils.removeUser(blogId, person.getPersonID(), person.getLocalTableBlogId(), callback); + } + } + + // This helper method is used after a successful network request + private void refreshOnScreenFragmentDetails() { + refreshPeopleListFragment(); + refreshDetailFragment(); + } + + private void refreshPeopleListFragment() { + PeopleListFragment peopleListFragment = getListFragment(); + if (peopleListFragment != null) { + peopleListFragment.refreshPeopleList(false); + } + } + + private void refreshDetailFragment() { + PersonDetailFragment personDetailFragment = getDetailFragment(); + if (personDetailFragment != null) { + personDetailFragment.refreshPersonDetails(); + } + } + + private boolean navigateBackToPeopleListFragment() { + FragmentManager fragmentManager = getFragmentManager(); + if (fragmentManager.getBackStackEntryCount() > 0) { + fragmentManager.popBackStack(); + + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setTitle(R.string.people); + } + return true; + } + return false; + } + + private Person getCurrentPerson() { + PersonDetailFragment personDetailFragment = getDetailFragment(); + + if (personDetailFragment == null) { + return null; + } + + return personDetailFragment.loadPerson(); + } + + @Override + public boolean onFetchFirstPage(PeopleListFilter filter) { + Blog blog = WordPress.getCurrentBlog(); + if (filter == PeopleListFilter.TEAM && !mHasRefreshedUsers) { + return fetchUsersList(blog.getDotComBlogId(), blog.getLocalTableBlogId(), 0); + } else if (filter == PeopleListFilter.FOLLOWERS && !mHasRefreshedFollowers) { + return fetchFollowersList(blog.getDotComBlogId(), blog.getLocalTableBlogId(), 1); + } else if (filter == PeopleListFilter.EMAIL_FOLLOWERS && !mHasRefreshedEmailFollowers) { + return fetchEmailFollowersList(blog.getDotComBlogId(), blog.getLocalTableBlogId(), 1); + } else if (filter == PeopleListFilter.VIEWERS && !mHasRefreshedViewers) { + return fetchViewersList(blog.getDotComBlogId(), blog.getLocalTableBlogId(), 0); + } + return false; + } + + @Override + public boolean onFetchMorePeople(PeopleListFilter filter) { + if (filter == PeopleListFilter.TEAM && !mUsersEndOfListReached) { + Blog blog = WordPress.getCurrentBlog(); + int count = PeopleTable.getUsersCountForLocalBlogId(blog.getLocalTableBlogId()); + return fetchUsersList(blog.getDotComBlogId(), blog.getLocalTableBlogId(), count); + } else if (filter == PeopleListFilter.FOLLOWERS && !mFollowersEndOfListReached) { + Blog blog = WordPress.getCurrentBlog(); + int pageToFetch = mFollowersLastFetchedPage + 1; + return fetchFollowersList(blog.getDotComBlogId(), blog.getLocalTableBlogId(), pageToFetch); + } else if (filter == PeopleListFilter.EMAIL_FOLLOWERS && !mEmailFollowersEndOfListReached) { + Blog blog = WordPress.getCurrentBlog(); + int pageToFetch = mEmailFollowersLastFetchedPage + 1; + return fetchEmailFollowersList(blog.getDotComBlogId(), blog.getLocalTableBlogId(), pageToFetch); + } else if (filter == PeopleListFilter.VIEWERS && !mViewersEndOfListReached) { + Blog blog = WordPress.getCurrentBlog(); + int count = PeopleTable.getViewersCountForLocalBlogId(blog.getLocalTableBlogId()); + return fetchViewersList(blog.getDotComBlogId(), blog.getLocalTableBlogId(), count); + } + return false; + } + + private PeopleListFragment getListFragment() { + return (PeopleListFragment) getFragmentManager().findFragmentByTag(KEY_PEOPLE_LIST_FRAGMENT); + } + + private PersonDetailFragment getDetailFragment() { + return (PersonDetailFragment) getFragmentManager().findFragmentByTag(KEY_PERSON_DETAIL_FRAGMENT); + } + + public interface InvitationSender { + void send(); + } +} |