Hide FAB if the account is read-only
Bug 28505361
Change-Id: Ib19f8dfcea3d23bc480c450076cbd9aeffdd7452
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 892e831..6642749 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -75,6 +75,8 @@
import com.android.contacts.common.logging.ListEvent;
import com.android.contacts.common.logging.Logger;
import com.android.contacts.common.logging.ScreenEvent.ScreenType;
+import com.android.contacts.common.model.AccountTypeManager;
+import com.android.contacts.common.model.account.AccountWithDataSet;
import com.android.contacts.common.preference.ContactsPreferenceActivity;
import com.android.contacts.common.util.AccountFilterUtil;
import com.android.contacts.common.util.Constants;
@@ -138,6 +140,7 @@
private ContactsRequest mRequest;
private ActionBarAdapter mActionBarAdapter;
+ private List<AccountWithDataSet> mWritableAccounts;
private FloatingActionButtonController mFloatingActionButtonController;
private View mFloatingActionButtonContainer;
private boolean wasLastFabAnimationScaleIn = false;
@@ -563,12 +566,25 @@
private void initializeFabVisibility() {
final boolean hideFab = mActionBarAdapter.isSearchMode()
- || mActionBarAdapter.isSelectionMode();
+ || mActionBarAdapter.isSelectionMode()
+ || !shouldShowFabForAccount();
mFloatingActionButtonContainer.setVisibility(hideFab ? View.GONE : View.VISIBLE);
mFloatingActionButtonController.resetIn();
wasLastFabAnimationScaleIn = !hideFab;
}
+ private boolean shouldShowFabForAccount() {
+ return isCurrentAccountFilterWritable()
+ || isAllContactsFilter(mContactListFilterController.getFilter());
+ }
+
+ private boolean isCurrentAccountFilterWritable() {
+ final ContactListFilter currentFilter = mContactListFilterController.getFilter();
+ final AccountWithDataSet accountOfCurrentFilter = new AccountWithDataSet(
+ currentFilter.accountName, currentFilter.accountType, currentFilter.dataSet);
+ return mWritableAccounts != null && mWritableAccounts.contains(accountOfCurrentFilter);
+ }
+
private void showFabWithAnimation(boolean showFab) {
if (mFloatingActionButtonContainer == null) {
return;
@@ -596,6 +612,7 @@
}
setFilterAndUpdateTitle(mContactListFilterController.getFilter());
+ showFabWithAnimation(shouldShowFabForAccount());
invalidateOptionsMenuIfNeeded();
}
@@ -981,6 +998,9 @@
// Get rid of the default memu item overlay and show original account icons.
menuItem.getIcon().setColorFilter(Color.TRANSPARENT, PorterDuff.Mode.SRC_ATOP);
}
+
+ mWritableAccounts = AccountTypeManager.getInstance(this).getAccounts(true);
+ initializeFabVisibility();
}
@Override
@@ -1057,8 +1077,7 @@
if (mAllFragment.isSearchMode()) {
previousScreen = ScreenType.SEARCH;
} else {
- if (mAllFragment.getFilter().filterType ==
- ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
+ if (isAllContactsFilter(mContactListFilterController.getFilter())) {
if (position < mAllFragment.getAdapter().getNumberOfFavorites()) {
previousScreen = ScreenType.FAVORITES;
} else {
@@ -1558,7 +1577,11 @@
// Persist filter only when it's of the type FILTER_TYPE_ALL_ACCOUNTS.
private void persistFilterIfNeeded(ContactListFilter filter) {
- mContactListFilterController.setContactListFilter(filter, /* persistent */
- filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
+ mContactListFilterController.setContactListFilter(filter,
+ /* persistent */ isAllContactsFilter(filter));
+ }
+
+ private boolean isAllContactsFilter(ContactListFilter filter) {
+ return filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS;
}
}