diff --git a/Android.bp b/Android.bp
index c661986..9aeb3d4 100644
--- a/Android.bp
+++ b/Android.bp
@@ -272,8 +272,9 @@
 
 // Library with all the source code and dependencies for building Quickstep
 android_library {
-    name: "Launcher3QuickStepLib",
+    name: "Launcher3QuickStepLibGoogle",
     srcs: [
+        "src_overlay/google/com/android/launcher3/overlay/OverlayCallbackImpl.java",
         ":launcher-src",
         ":launcher-quickstep-src",
         ":launcher-build-config",
@@ -287,6 +288,37 @@
     // in QuickstepResLib to take precendece, so it should be the final
     // dependency. See b/208647810 for how this can go wrong.
     static_libs: [
+        "OmniLib",
+        "//vendor/omni:libGoogleFeed",
+        "SystemUI-statsd",
+        "QuickstepResLib",
+    ],
+    manifest: "quickstep/AndroidManifest.xml",
+    platform_apis: true,
+    min_sdk_version: "current",
+    // TODO(b/319712088): re-enable use_resource_processor
+    use_resource_processor: false,
+}
+
+android_library {
+    name: "Launcher3QuickStepLibMock",
+    srcs: [
+        "src_overlay/mock/com/android/launcher3/overlay/OverlayCallbackImpl.java",
+        "src_overlay/mock/com/google/android/libraries/gsa/launcherclient/LauncherClientCallbacks.java",
+        ":launcher-src",
+        ":launcher-quickstep-src",
+        ":launcher-build-config",
+    ],
+    resource_dirs: [],
+    libs: [
+        "framework-statsd",
+    ],
+    // Note the ordering here is important when it comes to resource
+    // overriding. We want the most specific resource overrides defined
+    // in QuickstepResLib to take precendece, so it should be the final
+    // dependency. See b/208647810 for how this can go wrong.
+    static_libs: [
+        "OmniLib",
         "SystemUI-statsd",
         "QuickstepResLib",
     ],
@@ -301,7 +333,7 @@
 android_app {
     name: "Launcher3QuickStep",
 
-    static_libs: ["Launcher3QuickStepLib"],
+    defaults: ["omni_launcher3_defaults"],
     optimize: {
         enabled: false,
     },
diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
index 2168f7a..183a496 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
@@ -130,6 +130,7 @@
 import com.android.launcher3.model.BgDataModel.FixedContainerItems;
 import com.android.launcher3.model.WellbeingModel;
 import com.android.launcher3.model.data.ItemInfo;
+import com.android.launcher3.overlay.OverlayCallbackImpl;
 import com.android.launcher3.popup.SystemShortcut;
 import com.android.launcher3.proxy.ProxyActivityStarter;
 import com.android.launcher3.statehandlers.DepthController;
@@ -187,6 +188,7 @@
 import com.android.quickstep.views.RecentsView;
 import com.android.quickstep.views.RecentsViewContainer;
 import com.android.quickstep.views.TaskView;
+import com.android.systemui.plugins.shared.LauncherOverlayManager;
 import com.android.systemui.shared.recents.model.Task;
 import com.android.systemui.shared.system.ActivityManagerWrapper;
 import com.android.systemui.unfold.RemoteUnfoldSharedComponent;
@@ -258,6 +260,11 @@
     }
 
     @Override
+    protected LauncherOverlayManager getDefaultOverlay() {
+        return new OverlayCallbackImpl(this);
+    }
+
+    @Override
     protected void setupViews() {
         super.setupViews();
 
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index e161967..a063d2f 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -26,5 +26,7 @@
     <string name="pref_qsb_location_workspace">Workspace</string>
     <string name="pref_qsb_location_workspace_value" translatable="false">1</string>
     <string name="pref_grid_title">Grid size</string>
+    <string name="left_tab_label">Google feed tab</string>
+    <string name="left_tab_description">Toggle Google feed intergration</string>
 
 </resources>
diff --git a/res/xml/launcher_preferences.xml b/res/xml/launcher_preferences.xml
index 94617d1..6c161fe 100644
--- a/res/xml/launcher_preferences.xml
+++ b/res/xml/launcher_preferences.xml
@@ -57,7 +57,6 @@
         android:summary="@string/pref_qsb_show_summary"
         android:title="@string/pref_qsb_show_title"/>
 
-
     <ListPreference
         android:key="pref_qsb_location"
         android:title="@string/pref_qsb_location_title"
@@ -67,6 +66,12 @@
         android:entryValues="@array/prefs_qsb_location_values"
         android:defaultValue="@string/pref_qsb_location_workspace_value"/>
 
+    <SwitchPreference
+        android:key="pref_left_tab"
+        android:title="@string/left_tab_label"
+        android:summary="@string/left_tab_description"
+        android:persistent="true" />
+
     <ListPreference
         android:key="pref_grid"
         android:title="@string/pref_grid_title"
diff --git a/src/com/android/launcher3/settings/SettingsActivity.java b/src/com/android/launcher3/settings/SettingsActivity.java
index 46995b2..815ea4b 100644
--- a/src/com/android/launcher3/settings/SettingsActivity.java
+++ b/src/com/android/launcher3/settings/SettingsActivity.java
@@ -63,6 +63,7 @@
 import com.android.launcher3.util.DisplayController;
 import com.android.launcher3.util.SettingsCache;
 
+import org.omnirom.omnilib.utils.PackageUtils;
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
@@ -95,6 +96,9 @@
     private static final int DELAY_HIGHLIGHT_DURATION_MILLIS = 600;
     public static final String SAVE_HIGHLIGHTED_KEY = "android:preference_highlighted";
 
+    private static final String SEARCH_PACKAGE = "com.google.android.googlequicksearchbox";
+    private static final String SHOW_LEFT_TAB_PREFERENCE_KEY = "pref_left_tab";
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -229,6 +233,17 @@
                 }
             });
 
+            Preference leftTabPage = findPreference(SHOW_LEFT_TAB_PREFERENCE_KEY);
+            if (!isSearchInstalled()) {
+                getPreferenceScreen().removePreference(leftTabPage);
+            }
+            leftTabPage.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+                public boolean onPreferenceChange(Preference preference, Object newValue) {
+                    new Handler().postDelayed(() -> Utilities.restart(getActivity()), Utilities.WAIT_BEFORE_RESTART);
+                    return true;
+                }
+            });
+
             final ListPreference grid = (ListPreference) findPreference(GRID_SIZE_PREFERENCE_KEY);
             InvariantDeviceProfile idp = InvariantDeviceProfile.INSTANCE.get(getContext());
             ArrayList<String> entries = new ArrayList<>();
@@ -425,5 +440,9 @@
             }
             return result;
         }
+
+        private boolean isSearchInstalled() {
+            return PackageUtils.isAvailableApp(SEARCH_PACKAGE, getActivity());
+        }
     }
 }
diff --git a/src_overlay/google/com/android/launcher3/overlay/OverlayCallbackImpl.java b/src_overlay/google/com/android/launcher3/overlay/OverlayCallbackImpl.java
new file mode 100644
index 0000000..d068cf5
--- /dev/null
+++ b/src_overlay/google/com/android/launcher3/overlay/OverlayCallbackImpl.java
@@ -0,0 +1,171 @@
+/*
+ * 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.launcher3.overlay;
+
+import android.app.Activity;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+
+import com.android.launcher3.Launcher;
+import com.android.launcher3.LauncherPrefs;
+import com.android.systemui.plugins.shared.LauncherOverlayManager;
+import com.android.systemui.plugins.shared.LauncherOverlayManager.LauncherOverlay;
+import com.android.systemui.plugins.shared.LauncherOverlayManager.LauncherOverlayCallbacks;
+
+import com.google.android.libraries.gsa.launcherclient.LauncherClient;
+import com.google.android.libraries.gsa.launcherclient.LauncherClientCallbacks;
+
+import java.io.PrintWriter;
+
+/**
+ * Implements {@link LauncherOverlay} and passes all the corresponding events to {@link
+ * LauncherClient}. {@see setClient}
+ *
+ * <p>Implements {@link LauncherClientCallbacks} and sends all the corresponding callbacks to {@link
+ * Launcher}.
+ */
+public class OverlayCallbackImpl
+        implements LauncherOverlay, LauncherClientCallbacks, LauncherOverlayManager,
+        SharedPreferences.OnSharedPreferenceChangeListener {
+
+    private static final String SHOW_LEFT_TAB_PREFERENCE_KEY = "pref_left_tab";
+
+    private final Launcher mLauncher;
+    private final LauncherClient mClient;
+
+    private LauncherOverlayCallbacks mLauncherOverlayCallbacks;
+    private boolean mWasOverlayAttached = false;
+
+    public OverlayCallbackImpl(Launcher launcher) {
+        SharedPreferences prefs = LauncherPrefs.getPrefs(launcher);
+
+        mLauncher = launcher;
+        mClient = new LauncherClient(mLauncher, this, getClientOptions(prefs));
+        prefs.registerOnSharedPreferenceChangeListener(this);
+    }
+
+    @Override
+    public void onDeviceProvideChanged() {
+        mClient.reattachOverlay();
+    }
+
+    @Override
+    public void onAttachedToWindow() {
+        mClient.onAttachedToWindow();
+    }
+
+    @Override
+    public void onDetachedFromWindow() {
+        mClient.onDetachedFromWindow();
+    }
+
+    @Override
+    public void dump(String prefix, PrintWriter w) {
+        mClient.dump(prefix, w);
+    }
+
+    @Override
+    public void openOverlay() {
+        mClient.showOverlay(true);
+    }
+
+    @Override
+    public void hideOverlay(boolean animate) {
+        mClient.hideOverlay(animate);
+    }
+
+    @Override
+    public void hideOverlay(int duration) {
+        mClient.hideOverlay(duration);
+    }
+
+    @Override
+    public void onActivityStarted() {
+        mClient.onStart();
+    }
+
+    @Override
+    public void onActivityResumed() {
+        mClient.onResume();
+    }
+
+    @Override
+    public void onActivityPaused() {
+        mClient.onPause();
+    }
+
+    @Override
+    public void onActivityStopped() {
+        mClient.onStop();
+    }
+
+    @Override
+    public void onActivityDestroyed() {
+        mClient.onDestroy();
+        mLauncher.getSharedPrefs().unregisterOnSharedPreferenceChangeListener(this);
+    }
+
+    @Override
+    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
+        if (SHOW_LEFT_TAB_PREFERENCE_KEY.equals(key)) {
+            mClient.setClientOptions(getClientOptions(prefs));
+        }
+    }
+
+    @Override
+    public void onServiceStateChanged(boolean overlayAttached, boolean hotwordActive) {
+        if (overlayAttached != mWasOverlayAttached) {
+            mWasOverlayAttached = overlayAttached;
+            mLauncher.setLauncherOverlay(overlayAttached ? this : null);
+        }
+    }
+
+    @Override
+    public void onOverlayScrollChanged(float progress) {
+        if (mLauncherOverlayCallbacks != null) {
+            mLauncherOverlayCallbacks.onOverlayScrollChanged(progress);
+        }
+    }
+
+    @Override
+    public void onScrollInteractionBegin() {
+        mClient.startMove();
+    }
+
+    @Override
+    public void onScrollInteractionEnd() {
+        mClient.endMove();
+    }
+
+    @Override
+    public void onScrollChange(float progress, boolean rtl) {
+        mClient.updateMove(progress);
+    }
+
+    @Override
+    public void setOverlayCallbacks(LauncherOverlayCallbacks callbacks) {
+        mLauncherOverlayCallbacks = callbacks;
+    }
+
+    private LauncherClient.ClientOptions getClientOptions(SharedPreferences prefs) {
+        return new LauncherClient.ClientOptions(
+                prefs.getBoolean(SHOW_LEFT_TAB_PREFERENCE_KEY, false),
+                true, /* enableHotword */
+                true /* enablePrewarming */
+        );
+    }
+}
diff --git a/src_overlay/mock/com/android/launcher3/overlay/OverlayCallbackImpl.java b/src_overlay/mock/com/android/launcher3/overlay/OverlayCallbackImpl.java
new file mode 100644
index 0000000..449cef8
--- /dev/null
+++ b/src_overlay/mock/com/android/launcher3/overlay/OverlayCallbackImpl.java
@@ -0,0 +1,121 @@
+/*
+ * 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.launcher3.overlay;
+
+import android.app.Activity;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+
+import com.android.launcher3.Launcher;
+import com.android.systemui.plugins.shared.LauncherOverlayManager;
+import com.android.systemui.plugins.shared.LauncherOverlayManager.LauncherOverlay;
+import com.android.systemui.plugins.shared.LauncherOverlayManager.LauncherOverlayCallbacks;
+
+import com.google.android.libraries.gsa.launcherclient.LauncherClientCallbacks;
+
+import java.io.PrintWriter;
+
+/**
+ * Implements {@link LauncherOverlay} and passes all the corresponding events to {@link
+ * LauncherClient}. {@see setClient}
+ *
+ * <p>Implements {@link LauncherClientCallbacks} and sends all the corresponding callbacks to {@link
+ * Launcher}.
+ */
+public class OverlayCallbackImpl
+        implements LauncherOverlay, LauncherClientCallbacks, LauncherOverlayManager,
+        SharedPreferences.OnSharedPreferenceChangeListener {
+
+    public OverlayCallbackImpl(Launcher launcher) {
+    }
+
+    @Override
+    public void onDeviceProvideChanged() {
+    }
+
+    @Override
+    public void onAttachedToWindow() {
+    }
+
+    @Override
+    public void onDetachedFromWindow() {
+    }
+
+    @Override
+    public void dump(String prefix, PrintWriter w) {
+    }
+
+    @Override
+    public void openOverlay() {
+    }
+
+    @Override
+    public void hideOverlay(boolean animate) {
+    }
+
+    @Override
+    public void hideOverlay(int duration) {
+    }
+
+    @Override
+    public void onActivityStarted() {
+    }
+
+    @Override
+    public void onActivityResumed() {
+    }
+
+    @Override
+    public void onActivityPaused() {
+    }
+
+    @Override
+    public void onActivityStopped() {
+    }
+
+    @Override
+    public void onActivityDestroyed() {
+    }
+
+    @Override
+    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
+    }
+
+    @Override
+    public void onServiceStateChanged(boolean overlayAttached, boolean hotwordActive) {
+    }
+
+    @Override
+    public void onOverlayScrollChanged(float progress) {
+    }
+
+    @Override
+    public void onScrollInteractionBegin() {
+    }
+
+    @Override
+    public void onScrollInteractionEnd() {
+    }
+
+    @Override
+    public void onScrollChange(float progress, boolean rtl) {
+    }
+
+    @Override
+    public void setOverlayCallbacks(LauncherOverlayCallbacks callbacks) {
+    }
+}
diff --git a/src_overlay/mock/com/google/android/libraries/gsa/launcherclient/LauncherClientCallbacks.java b/src_overlay/mock/com/google/android/libraries/gsa/launcherclient/LauncherClientCallbacks.java
new file mode 100644
index 0000000..3f9e6d1
--- /dev/null
+++ b/src_overlay/mock/com/google/android/libraries/gsa/launcherclient/LauncherClientCallbacks.java
@@ -0,0 +1,5 @@
+package com.google.android.libraries.gsa.launcherclient;
+public interface LauncherClientCallbacks {
+    void onOverlayScrollChanged(float progress);
+    void onServiceStateChanged(boolean overlayAttached, boolean hotwordActive);
+}
\ No newline at end of file
