Reload groups and filters when provider status changes
And avoid showing "Create new..." when no group-writable accounts
are available.
Bug 29450322
Bug 28842403
Change-Id: Iac024b1a23e317930b6ac6ceaa175e50a2dd7d84
diff --git a/src/com/android/contacts/ContactsDrawerActivity.java b/src/com/android/contacts/ContactsDrawerActivity.java
index 62a9258..888db49 100644
--- a/src/com/android/contacts/ContactsDrawerActivity.java
+++ b/src/com/android/contacts/ContactsDrawerActivity.java
@@ -125,7 +125,11 @@
menu.removeItem(R.id.nav_help);
}
- // Set up fragment manager to load groups and filters.
+ loadGroupsAndFilters();
+ }
+
+ // Set up fragment manager to load groups and filters.
+ protected void loadGroupsAndFilters() {
final FragmentManager fragmentManager = getFragmentManager();
final FragmentTransaction transaction = fragmentManager.beginTransaction();
addGroupsAndFiltersFragments(transaction);
@@ -191,6 +195,11 @@
}
}
+ // Don't show "Create new..." menu if there's no group-writable accounts available.
+ if (!ContactsUtils.areGroupWritableAccountsAvailable(this)) {
+ return;
+ }
+
// Create a menu item in the sub menu to add new groups
final MenuItem menuItem = subMenu.add(R.id.nav_groups_items, Menu.NONE, Menu.NONE,
getString(R.string.menu_new_group_action_bar));
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index d5c5b9b..9ac7152 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -21,12 +21,9 @@
import android.app.FragmentTransaction;
import android.content.ActivityNotFoundException;
import android.content.ContentUris;
-import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
-import android.graphics.Color;
-import android.graphics.PorterDuff;
import android.graphics.Rect;
import android.net.Uri;
import android.os.Bundle;
@@ -34,15 +31,10 @@
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.ProviderStatus;
import android.provider.ContactsContract.QuickContact;
-import android.support.design.widget.NavigationView;
import android.support.v13.app.FragmentPagerAdapter;
import android.support.v4.view.GravityCompat;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
-import android.support.v4.widget.DrawerLayout;
-import android.support.v7.app.AppCompatActivity;
-import android.support.v7.widget.Toolbar;
-import android.telecom.TelecomManager;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyCharacterMap;
@@ -60,11 +52,7 @@
import com.android.contacts.ContactsDrawerActivity;
import com.android.contacts.R;
import com.android.contacts.activities.ActionBarAdapter.TabState;
-import com.android.contacts.common.ContactsUtils;
import com.android.contacts.common.activity.RequestPermissionsActivity;
-import com.android.contacts.common.compat.BlockedNumberContractCompat;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.compat.TelecomManagerUtil;
import com.android.contacts.common.interactions.ImportExportDialogFragment;
import com.android.contacts.common.list.ContactEntryListFragment;
import com.android.contacts.common.list.ContactListFilter;
@@ -78,16 +66,10 @@
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.util.AccountFilterUtil;
import com.android.contacts.common.util.Constants;
import com.android.contacts.common.util.ImplicitIntentsUtil;
import com.android.contacts.common.widget.FloatingActionButtonController;
-import com.android.contacts.editor.ContactEditorFragment;
import com.android.contacts.editor.EditorIntents;
-import com.android.contacts.group.GroupListItem;
-import com.android.contacts.group.GroupUtil;
-import com.android.contacts.group.GroupsFragment;
-import com.android.contacts.interactions.AccountFiltersFragment;
import com.android.contacts.interactions.ContactDeletionInteraction;
import com.android.contacts.interactions.ContactMultiDeletionInteraction;
import com.android.contacts.interactions.ContactMultiDeletionInteraction.MultiContactDeleteListener;
@@ -100,9 +82,6 @@
import com.android.contacts.list.OnContactsUnavailableActionListener;
import com.android.contacts.quickcontact.QuickContactActivity;
import com.android.contacts.util.DialogManager;
-import com.android.contacts.util.PhoneCapabilityTester;
-import com.android.contactsbind.Assistants;
-import com.android.contactsbind.HelpUtils;
import java.util.List;
import java.util.Locale;
@@ -879,9 +858,24 @@
@Override
public void onProviderStatusChange() {
+ reloadGroupsAndFiltersIfNeeded();
updateViewConfiguration(false);
}
+ private void reloadGroupsAndFiltersIfNeeded() {
+ final int providerStatus = mProviderStatusWatcher.getProviderStatus();
+ final Menu menu = mNavigationView.getMenu();
+ final MenuItem groupsMenuItem = menu.findItem(R.id.nav_groups);
+ final SubMenu subMenu = groupsMenuItem.getSubMenu();
+
+ // Reload groups and filters if provider status changes to "normal" and there's no groups
+ // loaded or just a "Create new..." menu item is in the menu.
+ if (subMenu != null && subMenu.size() <= 1 && providerStatus == ProviderStatus.STATUS_NORMAL
+ && !mProviderStatus.equals(providerStatus)) {
+ loadGroupsAndFilters();
+ }
+ }
+
private void updateViewConfiguration(boolean forceUpdate) {
int providerStatus = mProviderStatusWatcher.getProviderStatus();
if (!forceUpdate && (mProviderStatus != null)