First pass on assistants left nav
Create new assistant and remove duplicates menu item for
Google Contacts. Duplicates will live in the new assistants
fragment.
Test: manual
- Open left nav to see new Assistant
- Click on assistant to view new section
Bug:31822010
Change-Id: I0b9d77dd73e45c12fa3853864d09f555563def9a
diff --git a/src/com/android/contacts/ContactsDrawerActivity.java b/src/com/android/contacts/ContactsDrawerActivity.java
index 3fc3c9d..68b9884 100644
--- a/src/com/android/contacts/ContactsDrawerActivity.java
+++ b/src/com/android/contacts/ContactsDrawerActivity.java
@@ -20,13 +20,13 @@
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Intent;
+import android.content.res.Configuration;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.os.Bundle;
import android.provider.ContactsContract.Intents;
import android.support.annotation.LayoutRes;
import android.support.design.widget.NavigationView;
-import android.support.v4.content.ContextCompat;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
@@ -49,6 +49,8 @@
import com.android.contacts.common.list.ContactListFilter;
import com.android.contacts.common.list.ContactListFilterController;
import com.android.contacts.common.model.AccountTypeManager;
+import com.android.contacts.common.model.account.AccountDisplayInfo;
+import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
import com.android.contacts.common.model.account.AccountWithDataSet;
import com.android.contacts.common.preference.ContactsPreferenceActivity;
import com.android.contacts.common.util.AccountFilterUtil;
@@ -69,8 +71,6 @@
import com.android.contacts.interactions.AccountFiltersFragment.AccountFiltersListener;
import com.android.contacts.list.DefaultContactBrowseListFragment;
import com.android.contacts.list.MultiSelectContactsListFragment;
-import com.android.contacts.common.model.account.AccountDisplayInfo;
-import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
import com.android.contacts.util.SharedPreferenceUtil;
import com.android.contactsbind.HelpUtils;
import com.android.contactsbind.ObjectFactory;
@@ -94,7 +94,7 @@
public enum ContactsView {
NONE,
ALL_CONTACTS,
- DUPLICATES,
+ ASSISTANT,
GROUP_VIEW,
ACCOUNT_VIEW,
}
@@ -223,8 +223,15 @@
mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
mToggle = new ContactsActionBarDrawerToggle(this, mDrawer, mToolbar,
R.string.navigation_drawer_open, R.string.navigation_drawer_close);
+
mDrawer.setDrawerListener(mToggle);
- mToggle.syncState();
+ // Set fallback handler for when drawer is disabled.
+ mToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ onBackPressed();
+ }
+ });
// Set up navigation mode.
if (savedState != null) {
@@ -246,16 +253,32 @@
}
}
+ public void setDrawerLockMode(boolean enabled) {
+ // Prevent drawer from being opened by sliding from the start of screen.
+ mDrawer.setDrawerLockMode(enabled ? DrawerLayout.LOCK_MODE_UNLOCKED
+ : DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
+
+ // Order of these statements matter.
+ // Display back button and disable drawer indicator.
+ if (enabled) {
+ getSupportActionBar().setDisplayHomeAsUpEnabled(false);
+ mToggle.setDrawerIndicatorEnabled(true);
+ } else {
+ mToggle.setDrawerIndicatorEnabled(false);
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ }
+ }
+
private void setUpMenu() {
final Menu menu = mNavigationView.getMenu();
- if (ObjectFactory.getDuplicatesFragment() == null) {
- menu.removeItem(R.id.nav_find_duplicates);
+ if (ObjectFactory.getAssistantFragment() == null) {
+ menu.removeItem(R.id.nav_assistant);
} else {
- final MenuItem findDupMenu = menu.findItem(R.id.nav_find_duplicates);
- mIdMenuMap.put(R.id.nav_find_duplicates, findDupMenu);
- if (isDuplicatesView()) {
- updateMenuSelection(findDupMenu);
+ final MenuItem assistantMenu = menu.findItem(R.id.nav_assistant);
+ mIdMenuMap.put(R.id.nav_assistant, assistantMenu);
+ if (isAssistantView()) {
+ updateMenuSelection(assistantMenu);
}
}
@@ -306,6 +329,18 @@
getWindow().setStatusBarColor(Color.TRANSPARENT);
}
+ @Override
+ protected void onPostCreate(Bundle savedInstanceState) {
+ super.onPostCreate(savedInstanceState);
+ mToggle.syncState();
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ mToggle.onConfigurationChanged(newConfig);
+ }
+
// Set up fragment manager to load groups and filters.
protected void loadGroupsAndFilters() {
final FragmentManager fragmentManager = getFragmentManager();
@@ -429,8 +464,8 @@
return mCurrentView == ContactsView.GROUP_VIEW;
}
- protected boolean isDuplicatesView() {
- return mCurrentView == ContactsView.DUPLICATES;
+ protected boolean isAssistantView() {
+ return mCurrentView == ContactsView.ASSISTANT;
}
protected boolean isAllContactsView() {
@@ -442,7 +477,7 @@
}
public boolean isInSecondLevel() {
- return isGroupView() || isDuplicatesView();
+ return isGroupView() || isAssistantView();
}
protected abstract void onGroupMenuItemClicked(long groupId, String title);
@@ -556,9 +591,9 @@
HelpUtils.launchHelpAndFeedbackForMainScreen(ContactsDrawerActivity.this);
} else if (id == R.id.nav_all_contacts) {
switchToAllContacts();
- } else if (id == R.id.nav_find_duplicates) {
- if (!isDuplicatesView()) {
- launchFindDuplicates();
+ } else if (id == R.id.nav_assistant) {
+ if (!isAssistantView()) {
+ launchAssistant();
updateMenuSelection(item);
}
} else if (item.getIntent() != null) {
@@ -599,7 +634,7 @@
mContactListFilterController, AppCompatActivity.RESULT_OK, intent);
}
- protected abstract void launchFindDuplicates();
+ protected abstract void launchAssistant();
protected abstract DefaultContactBrowseListFragment getAllFragment();
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index b2a0a07..1950eb2 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -20,15 +20,13 @@
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
-import android.content.ContentResolver;
import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
-import android.content.SyncStatusObserver;
import android.content.IntentFilter;
-import android.graphics.Color;
-import android.graphics.drawable.ColorDrawable;
+import android.content.SyncStatusObserver;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@@ -40,7 +38,6 @@
import android.support.v4.content.LocalBroadcastManager;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.SwipeRefreshLayout;
-import android.text.TextUtils;
import android.util.Log;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
@@ -65,8 +62,6 @@
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.AccountDisplayInfo;
-import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
import com.android.contacts.common.model.account.AccountWithDataSet;
import com.android.contacts.common.util.AccountFilterUtil;
import com.android.contacts.common.util.Constants;
@@ -96,9 +91,11 @@
private static final String TAG_ALL = "contacts-all";
private static final String TAG_UNAVAILABLE = "contacts-unavailable";
private static final String TAG_GROUP_VIEW = "contacts-groups";
- private static final String TAG_DUPLICATES = "contacts-duplicates";
- private static final String TAG_SECOND_LEVEL = "second-level";
- // Tag for DuplicatesUtilFragment.java
+ public static final String TAG_ASSISTANT = "contacts-assistant";
+ public static final String TAG_SECOND_LEVEL = "second-level";
+ public static final String TAG_THIRD_LEVEL = "third-level";
+
+ public static final String TAG_DUPLICATES = "DuplicatesFragment";
public static final String TAG_DUPLICATES_UTIL = "DuplicatesUtilFragment";
private static final String KEY_GROUP_URI = "groupUri";
@@ -631,8 +628,8 @@
return;
}
- if (isDuplicatesView()) {
- switchToAllContacts();
+ if (isAssistantView()) {
+ onBackPressedAssistantView();
return;
}
@@ -662,6 +659,14 @@
}
}
+ private void onBackPressedAssistantView() {
+ if (!popThirdLevel()) {
+ switchToAllContacts();
+ } else {
+ setDrawerLockMode(/* enabled */ true);
+ }
+ }
+
// Returns true if back event is handled in this method.
private boolean maybeHandleInAllFragment() {
if (isAllFragmentInSelectionMode()) {
@@ -769,8 +774,8 @@
}
@Override
- protected void launchFindDuplicates() {
- switchView(ContactsView.DUPLICATES);
+ protected void launchAssistant() {
+ switchView(ContactsView.ASSISTANT);
}
private void switchView(ContactsView contactsView) {
@@ -784,20 +789,14 @@
}
transaction.replace(
R.id.contacts_list_container, mMembersFragment, TAG_GROUP_VIEW);
- } else if (isDuplicatesView()) {
- Fragment duplicatesFragment = fragmentManager.findFragmentByTag(TAG_DUPLICATES);
- Fragment duplicatesUtilFragment =
- fragmentManager.findFragmentByTag(TAG_DUPLICATES_UTIL);
- if (duplicatesFragment == null || duplicatesUtilFragment == null) {
- duplicatesFragment = ObjectFactory.getDuplicatesFragment();
- duplicatesUtilFragment = ObjectFactory.getDuplicatesUtilFragment();
- duplicatesUtilFragment.setTargetFragment(duplicatesFragment, /* requestCode */ 0);
+ } else if(isAssistantView()) {
+ Fragment assistantFragment = fragmentManager.findFragmentByTag(TAG_ASSISTANT);
+ if (assistantFragment == null) {
+ assistantFragment = ObjectFactory.getAssistantFragment();
}
- transaction.replace(
- R.id.contacts_list_container, duplicatesFragment, TAG_DUPLICATES);
- if (!duplicatesUtilFragment.isAdded()) {
- transaction.add(duplicatesUtilFragment, TAG_DUPLICATES_UTIL);
- resetToolBarStatusBarColor();
+ if (assistantFragment != null) {
+ transaction.replace(
+ R.id.contacts_list_container, assistantFragment, TAG_ASSISTANT);
}
resetToolBarStatusBarColor();
}
@@ -821,6 +820,11 @@
super.switchToAllContacts();
}
+ private boolean popThirdLevel() {
+ return getFragmentManager().popBackStackImmediate(
+ TAG_THIRD_LEVEL, FragmentManager.POP_BACK_STACK_INCLUSIVE);
+ }
+
private void popSecondLevel() {
getFragmentManager().popBackStackImmediate(
TAG_SECOND_LEVEL, FragmentManager.POP_BACK_STACK_INCLUSIVE);