Merge "Hide assistant menu in AOSP Contacts" into ub-contactsdialer-i-dev
diff --git a/src-bind/com/android/contactsbind/ObjectFactory.java b/src-bind/com/android/contactsbind/ObjectFactory.java
index c5170be..e8b9ceb 100644
--- a/src-bind/com/android/contactsbind/ObjectFactory.java
+++ b/src-bind/com/android/contactsbind/ObjectFactory.java
@@ -20,7 +20,6 @@
 
 import com.android.contacts.logging.Logger;
 import com.android.contacts.util.DeviceLocalAccountTypeFactory;
-import com.android.contactsbind.search.AutocompleteHelper;
 
 /**
  * Creates default bindings for overlays.
@@ -31,10 +30,6 @@
         return null;
     }
 
-    public static AutocompleteHelper getAutocompleteHelper(Context context) {
-        return null;
-    }
-
     public static DeviceLocalAccountTypeFactory getDeviceLocalAccountTypeFactory(Context context) {
         return new DeviceLocalAccountTypeFactory.Default(context);
     }
diff --git a/src-bind/com/android/contactsbind/search/AutocompleteHelper.java b/src-bind/com/android/contactsbind/search/AutocompleteHelper.java
deleted file mode 100644
index ff0678c..0000000
--- a/src-bind/com/android/contactsbind/search/AutocompleteHelper.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contactsbind.search;
-
-import android.database.Cursor;
-
-public final class AutocompleteHelper {
-
-    public static final String TAG = "Autocomplete";
-
-    public interface Listener {
-        void onAutocompletesAvailable(Cursor cursor);
-    }
-
-    public AutocompleteHelper() {
-    }
-
-    public void setListener(Listener listener) {
-    }
-
-    public void setProjection(String[] projection) {
-    }
-
-    public void setQuery(String query) {
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/contacts/Experiments.java b/src/com/android/contacts/Experiments.java
index 9dbe1bf..97b0474 100644
--- a/src/com/android/contacts/Experiments.java
+++ b/src/com/android/contacts/Experiments.java
@@ -48,16 +48,6 @@
     public static final String PULL_TO_REFRESH_CANCEL_REFRESH_MILLIS =
             "PullToRefresh__cancel_refresh_millis";
 
-    /**
-     * Search study boolean indicating whether to inject yenta search results before CP2 results.
-     */
-    public static final String SEARCH_YENTA = "Search__yenta";
-
-    /**
-     * The time to wait for Yenta search results before giving up.
-     */
-    public static final String SEARCH_YENTA_TIMEOUT_MILLIS = "Search__yenta_timeout";
-
     private Experiments() {
     }
 }
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index a23eaad..34b4f40 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -1237,12 +1237,5 @@
         return intent;
     }
 
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (requestCode == DefaultContactBrowseListFragment.ACTIVITY_REQUEST_QUICK_CONTACT &&
-                resultCode == ContactDeletionInteraction.RESULT_CODE_DELETED &&
-                mContactsListFragment != null) {
-            mContactsListFragment.maybeRestartDefaultDirectoryPartitionLoader();
-        }
-    }
+
 }
diff --git a/src/com/android/contacts/interactions/ContactDeletionInteraction.java b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
index e63fca4..161571c 100644
--- a/src/com/android/contacts/interactions/ContactDeletionInteraction.java
+++ b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
@@ -81,10 +81,6 @@
     private static final int COLUMN_INDEX_DISPLAY_NAME = 5;
     private static final int COLUMN_INDEX_DISPLAY_NAME_ALT = 6;
 
-    public interface Listener {
-        void onDeletionFinished();
-    }
-
     private boolean mActive;
     private Uri mContactUri;
     private String mDisplayName;
@@ -92,7 +88,6 @@
     private boolean mFinishActivityWhenDone;
     private Context mContext;
     private AlertDialog mDialog;
-    private Listener mListener;
 
     /** This is a wrapper around the fragment's loader manager to be used only during testing. */
     private TestLoaderManagerBase mTestLoaderManager;
@@ -351,9 +346,6 @@
 
     protected void doDeleteContact(Uri contactUri) {
         mContext.startService(ContactSaveService.createDeleteContactIntent(mContext, contactUri));
-        if (mListener != null) {
-            mListener.onDeletionFinished();
-        }
         if (isAdded() && mFinishActivityWhenDone) {
             getActivity().setResult(RESULT_CODE_DELETED);
             getActivity().finish();
@@ -370,8 +362,4 @@
             Toast.makeText(mContext, deleteToastMessage, Toast.LENGTH_LONG).show();
         }
     }
-
-    public void setListener(Listener listener) {
-        mListener = listener;
-    }
 }
diff --git a/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java b/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java
index 3e1dd5d..695e9f6 100644
--- a/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java
+++ b/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java
@@ -313,9 +313,7 @@
     protected void doDeleteContact(long[] contactIds, final String[] names) {
         mContext.startService(ContactSaveService.createDeleteMultipleContactsIntent(mContext,
                 contactIds, names));
-        if (mListener != null) {
-            mListener.onDeletionFinished();
-        }
+        mListener.onDeletionFinished();
     }
 
     public void setListener(MultiContactDeleteListener listener) {
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index d8620a8..6115b50 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -348,22 +348,6 @@
         mLoadPriorityDirectoriesOnly = false;
     }
 
-    /** Restarts the {@link DirectoryPartition} with {@link Directory#DEFAULT} directory ID. */
-    protected void restartDefaultDirectoryPartitionLoader() {
-        if (mAdapter == null) return;
-        int partitionCount = mAdapter.getPartitionCount();
-        for (int i = 0; i < partitionCount; i++) {
-            final Partition partition = mAdapter.getPartition(i);
-            if (partition instanceof DirectoryPartition) {
-                final DirectoryPartition directoryPartition = (DirectoryPartition) partition;
-                long directoryId = directoryPartition.getDirectoryId();
-                if (directoryId == Directory.DEFAULT) {
-                    loadDirectoryPartitionDelayed(i, directoryPartition);
-                }
-            }
-        }
-    }
-
     @Override
     public Loader<Cursor> onCreateLoader(int id, Bundle args) {
         if (id == DIRECTORY_LOADER_ID) {
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index a174b91..f4d244e 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -97,7 +97,6 @@
     private static final String KEY_SEARCH_RESULT_CLICKED = "search_result_clicked";
 
     private static final int ACTIVITY_REQUEST_CODE_SHARE = 0;
-    public static final int ACTIVITY_REQUEST_QUICK_CONTACT = 1000;
 
     private View mSearchHeaderView;
     private View mSearchProgress;
@@ -943,24 +942,14 @@
                         /* count */ getAdapter().getCount(),
                         /* clickedIndex */ position, /* numSelected */ 0);
 
-                // Start QuickContact "for result" in case we're using yenta search and need
-                // to manually reload the default directory partition when contacts are deleted.
-                // The QuickContact Activity result is handled in PeopleActivity.
-                ImplicitIntentsUtil.startQuickContactForResult(getActivity(), contactLookupUri,
-                        previousScreen, ACTIVITY_REQUEST_QUICK_CONTACT);
+                ImplicitIntentsUtil.startQuickContact(
+                        getActivity(), contactLookupUri, previousScreen);
             }
         }
 
         @Override
         public void onDeleteContactAction(Uri contactUri) {
-            final ContactDeletionInteraction interacton =
-                    ContactDeletionInteraction.start(mActivity, contactUri, false);
-            interacton.setListener(new ContactDeletionInteraction.Listener() {
-                @Override
-                public void onDeletionFinished() {
-                    maybeRestartDefaultDirectoryPartitionLoader();
-                }
-            });
+            ContactDeletionInteraction.start(mActivity, contactUri, false);
         }
 
         @Override
@@ -1168,16 +1157,6 @@
                 /* numSelected */ getSelectedContactIds().size());
             mActionBarAdapter.setSelectionMode(false);
             mIsDeletionInProgress = false;
-            maybeRestartDefaultDirectoryPartitionLoader();
-        }
-    }
-
-    // Because the yenta search loader is not automatically restarted when contacts are deleted
-    // we must manually restart it when contacts displayed in yenta search results are deleted
-    // either on this fragment directly or after opening QuickContact.
-    public void maybeRestartDefaultDirectoryPartitionLoader() {
-        if (isSearchMode() && Flags.getInstance().getBoolean(Experiments.SEARCH_YENTA)) {
-            restartDefaultDirectoryPartitionLoader();
         }
     }
 
@@ -1204,7 +1183,7 @@
                     /* listType */ getListTypeIncludingSearch(),
                     /* count */ getAdapter().getCount(), /* clickedIndex */ -1,
                     /* numSelected */ getAdapter().getSelectedContactIds().size());
-                break;
+
 // TODO fix or remove multipicker code: ag/54762
 //                else if (resultCode == RESULT_CANCELED && mMode == MODE_PICK_MULTIPLE_PHONES) {
 //                    // Finish the activity if the sub activity was canceled as back key is used
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
index d8344c6..bc76331 100644
--- a/src/com/android/contacts/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -31,11 +31,9 @@
 import android.text.TextUtils;
 import android.view.View;
 
-import com.android.contacts.Experiments;
 import com.android.contacts.compat.ContactsCompat;
 import com.android.contacts.model.account.AccountWithDataSet;
 import com.android.contacts.preference.ContactsPreferences;
-import com.android.contactsbind.experiments.Flags;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -116,13 +114,6 @@
                 loader.setUri(builder.build());
                 loader.setProjection(getProjection(true));
                 sortOrder = STREQUENT_SORT;
-                if (Flags.getInstance().getBoolean(Experiments.SEARCH_YENTA)
-                        && loader instanceof FavoritesAndContactsLoader
-                        && directoryId == Directory.DEFAULT) {
-                    final FavoritesAndContactsLoader favoritesAndContactsLoader =
-                            (FavoritesAndContactsLoader) loader;
-                    favoritesAndContactsLoader.setAutocompleteQuery(query);
-                }
             }
         } else {
             final ContactListFilter filter = getFilter();
diff --git a/src/com/android/contacts/list/FavoritesAndContactsLoader.java b/src/com/android/contacts/list/FavoritesAndContactsLoader.java
index 5868d29..54e5f3f 100644
--- a/src/com/android/contacts/list/FavoritesAndContactsLoader.java
+++ b/src/com/android/contacts/list/FavoritesAndContactsLoader.java
@@ -22,38 +22,24 @@
 import android.database.sqlite.SQLiteException;
 import android.os.Bundle;
 import android.provider.ContactsContract.Contacts;
-import android.util.Log;
 
-import com.android.contacts.Experiments;
-import com.android.contactsbind.ObjectFactory;
-import com.android.contactsbind.experiments.Flags;
-import com.android.contactsbind.search.AutocompleteHelper;
 import com.google.common.collect.Lists;
 
 import java.util.List;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
 
 /**
  * A loader for use in the default contact list, which will also query for favorite contacts
  * if configured to do so.
  */
-public class FavoritesAndContactsLoader extends CursorLoader implements
-        AutocompleteHelper.Listener {
+public class FavoritesAndContactsLoader extends CursorLoader {
 
     private boolean mLoadFavorites;
 
     private String[] mProjection;
 
-    private String mAutocompleteQuery;
-    private CountDownLatch mAutocompleteLatch = new CountDownLatch(1);
-    private Cursor mAutocompleteCursor;
-    private int mAutocompleteTimeout;
 
     public FavoritesAndContactsLoader(Context context) {
         super(context);
-        mAutocompleteTimeout = Flags.getInstance().getInteger(
-                Experiments.SEARCH_YENTA_TIMEOUT_MILLIS);
     }
 
     /** Whether to load favorites and merge results in before any other results. */
@@ -61,10 +47,6 @@
         mLoadFavorites = flag;
     }
 
-    public void setAutocompleteQuery(String autocompleteQuery) {
-        mAutocompleteQuery = autocompleteQuery;
-    }
-
     public void setProjection(String[] projection) {
         super.setProjection(projection);
         mProjection = projection;
@@ -76,36 +58,8 @@
         if (mLoadFavorites) {
             cursors.add(loadFavoritesContacts());
         }
-
-        if (mAutocompleteQuery != null) {
-            final AutocompleteHelper autocompleteHelper =
-                    ObjectFactory.getAutocompleteHelper(getContext());
-            if (autocompleteHelper != null) {
-                autocompleteHelper.setListener(this);
-                autocompleteHelper.setProjection(mProjection);
-                autocompleteHelper.setQuery(mAutocompleteQuery);
-                try {
-                    if (!mAutocompleteLatch.await(mAutocompleteTimeout, TimeUnit.MILLISECONDS)) {
-                        logw("Timeout expired before receiving autocompletions");
-                    }
-                } catch (InterruptedException e) {
-                    logw("Interrupted while waiting for autocompletions");
-                }
-                if (mAutocompleteCursor != null) {
-                    cursors.add(mAutocompleteCursor);
-                    // TODO: exclude these results from the main loader results, see b/30742359
-                }
-            }
-        }
-
-        // TODO: if the autocomplete experiment in on, only show those results even if they're empty
-        final Cursor contactsCursor = mAutocompleteQuery == null ? loadContacts() : null;
-        if (mAutocompleteQuery == null) {
-            cursors.add(contactsCursor);
-        }
-        // Guard against passing an empty array to the MergeCursor constructor
-        if (cursors.isEmpty()) cursors.add(null);
-
+        final Cursor contactsCursor = loadContacts();
+        cursors.add(contactsCursor);
         return new MergeCursor(cursors.toArray(new Cursor[cursors.size()])) {
             @Override
             public Bundle getExtras() {
@@ -139,18 +93,4 @@
                 Contacts.CONTENT_URI, mProjection, selection.toString(), new String[]{"1"},
                 getSortOrder());
     }
-
-    @Override
-    public void onAutocompletesAvailable(Cursor cursor) {
-        if (cursor != null && cursor.getCount() > 0) {
-            mAutocompleteCursor = cursor;
-            mAutocompleteLatch.countDown();
-        }
-    }
-
-    private static void logw(String message) {
-        if (Log.isLoggable(AutocompleteHelper.TAG, Log.WARN)) {
-            Log.w(AutocompleteHelper.TAG, message);
-        }
-    }
 }