diff --git a/quickstep/res/layout/fallback_search_input.xml b/quickstep/res/layout/fallback_search_input.xml
new file mode 100644
index 0000000..0fb2924
--- /dev/null
+++ b/quickstep/res/layout/fallback_search_input.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2020 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.
+-->
+<com.android.launcher3.search.FallbackSearchInputView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:layout_gravity="center_vertical"
+    android:layout_marginLeft="48dp"
+    android:layout_marginRight="48dp"
+    android:background="@android:color/transparent"
+    android:focusableInTouchMode="true"
+    android:gravity="start|center_vertical"
+    android:inputType="textNoSuggestions"
+    android:imeOptions="actionSearch|flagNoExtractUi"
+    android:maxLines="1"
+    android:privateImeOptions="bc_search"
+    android:scrollHorizontally="true"
+    android:singleLine="true"
+    android:textColor="?android:attr/textColorSecondary"
+    android:textColorHint="?android:attr/textColorTertiary"
+    android:textSize="16sp" />
\ No newline at end of file
diff --git a/quickstep/res/layout/search_edu_view.xml b/quickstep/res/layout/search_edu_view.xml
new file mode 100644
index 0000000..d89f5c7
--- /dev/null
+++ b/quickstep/res/layout/search_edu_view.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2008 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.
+-->
+<com.android.launcher3.search.DeviceSearchEdu
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:layout_gravity="center_horizontal"
+    android:orientation="vertical">
+
+
+    <FrameLayout
+        android:layout_height="wrap_content"
+        android:id="@+id/search_box_wrapper"
+        android:layout_width="match_parent">
+
+        <include
+            layout="@layout/fallback_search_input"
+            android:id="@+id/mock_search_box" />
+    </FrameLayout>
+
+    <LinearLayout
+        android:layout_height="wrap_content"
+        android:id="@+id/edu_wrapper"
+        android:padding="24dp"
+        android:layout_marginTop="40dp"
+        android:orientation="vertical"
+        android:layout_width="match_parent">
+
+        <TextView
+            style="@style/TextHeadline"
+            android:layout_width="match_parent"
+            android:gravity="center"
+            android:textSize="24sp"
+            android:textColor="?android:attr/textColorPrimary"
+            android:layout_height="wrap_content"
+            android:text="@string/search_edu_primary" />
+
+        <TextView
+            style="@style/TextHeadline"
+            android:layout_width="match_parent"
+            android:gravity="center"
+            android:textSize="18sp"
+            android:layout_marginTop="30dp"
+            android:textColor="?android:attr/textColorPrimary"
+            android:layout_height="wrap_content"
+            android:text="@string/search_edu_secondary" />
+
+        <Button
+            android:id="@+id/dismiss_edu"
+            android:layout_width="wrap_content"
+            android:layout_marginTop="@dimen/dynamic_grid_edge_margin"
+            android:background="?android:attr/selectableItemBackground"
+            android:layout_height="wrap_content"
+            android:textColor="?android:attr/textColorPrimary"
+            android:gravity="center"
+            android:layout_gravity="center"
+            android:text="@string/search_edu_dismiss" />
+
+    </LinearLayout>
+
+</com.android.launcher3.search.DeviceSearchEdu>
\ No newline at end of file
diff --git a/quickstep/res/values/strings.xml b/quickstep/res/values/strings.xml
index 4b45b10..9a4487c 100644
--- a/quickstep/res/values/strings.xml
+++ b/quickstep/res/values/strings.xml
@@ -93,6 +93,15 @@
     <!-- content description for hotseat items -->
     <string name="hotseat_prediction_content_description">Predicted app: <xliff:g id="title" example="Chrome">%1$s</xliff:g></string>
 
+    <!-- primary educational text shown for first time search users -->
+    <string name="search_edu_primary">Search your phone for apps, people, settings and more!</string>
+    <!-- secondary educational text shown for first time search users -->
+    <string name="search_edu_secondary">Tap keyboard search button to launch the first search
+        result.</string>
+
+    <!-- Dismiss button string for search education view -->
+    <string name="search_edu_dismiss">Got it.</string>
+
     <!-- Title shown during interactive part of Back gesture tutorial for right edge. [CHAR LIMIT=30] -->
     <string name="back_gesture_tutorial_playground_title_swipe_inward_right_edge" translatable="false">Try the back gesture</string>
     <!-- Subtitle shown during interactive parts of Back gesture tutorial for right edge. [CHAR LIMIT=60] -->
diff --git a/quickstep/src/com/android/launcher3/search/DeviceSearchEdu.java b/quickstep/src/com/android/launcher3/search/DeviceSearchEdu.java
new file mode 100644
index 0000000..425e557
--- /dev/null
+++ b/quickstep/src/com/android/launcher3/search/DeviceSearchEdu.java
@@ -0,0 +1,221 @@
+/*
+ * Copyright (C) 2021 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.search;
+
+import static com.android.launcher3.util.OnboardingPrefs.SEARCH_EDU_SEEN;
+
+import android.animation.PropertyValuesHolder;
+import android.content.Context;
+import android.graphics.Rect;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.util.AttributeSet;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import androidx.core.graphics.ColorUtils;
+
+import com.android.launcher3.AbstractFloatingView;
+import com.android.launcher3.Insettable;
+import com.android.launcher3.Launcher;
+import com.android.launcher3.LauncherState;
+import com.android.launcher3.R;
+import com.android.launcher3.anim.Interpolators;
+import com.android.launcher3.statemanager.StateManager;
+import com.android.launcher3.util.Themes;
+import com.android.launcher3.views.AbstractSlideInView;
+
+/**
+ * Feature education for on-device Search. Shown the first time user opens AllApps Search
+ */
+public class DeviceSearchEdu extends AbstractSlideInView implements
+        StateManager.StateListener<LauncherState>, TextWatcher, Insettable,
+        TextView.OnEditorActionListener {
+
+    private static final long ANIMATION_DURATION = 350;
+    private static final int ANIMATION_CONTENT_TRANSLATION = 200;
+
+    private EditText mEduInput;
+
+    private View mInputWrapper;
+    private EditText mSearchInput;
+
+    private boolean mSwitchFocusOnDismiss;
+
+
+    public DeviceSearchEdu(Context context) {
+        this(context, null, 0);
+    }
+
+    public DeviceSearchEdu(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public DeviceSearchEdu(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+
+    private void close(boolean animate, boolean markAsSeen) {
+        handleClose(animate);
+        if (markAsSeen) {
+            mLauncher.getOnboardingPrefs().markChecked(SEARCH_EDU_SEEN);
+        }
+    }
+
+    @Override
+    protected void handleClose(boolean animate) {
+        handleClose(animate, ANIMATION_DURATION);
+        mLauncher.getStateManager().removeStateListener(this);
+    }
+
+    @Override
+    protected boolean isOfType(int type) {
+        return false;
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        mSearchInput = mLauncher.getAppsView().getSearchUiManager().getEditText();
+        mInputWrapper = findViewById(R.id.search_box_wrapper);
+        mContent = findViewById(R.id.edu_wrapper);
+
+        mEduInput = findViewById(R.id.mock_search_box);
+        mEduInput.setHint(R.string.all_apps_on_device_search_bar_hint);
+        mEduInput.addTextChangedListener(this);
+        if (mSearchInput != null) {
+            mEduInput.getLayoutParams().height = mSearchInput.getHeight();
+            mEduInput.setOnEditorActionListener(this);
+        } else {
+            mEduInput.setVisibility(INVISIBLE);
+        }
+
+        findViewById(R.id.dismiss_edu).setOnClickListener((view) -> {
+            mSwitchFocusOnDismiss = true;
+            close(true, true);
+        });
+    }
+
+    private void showInternal() {
+        mLauncher.getStateManager().addStateListener(this);
+        AbstractFloatingView.closeAllOpenViews(mLauncher);
+        attachToContainer();
+        if (mSearchInput != null) {
+            Rect r = mLauncher.getViewBounds(mSearchInput);
+            mEduInput.requestFocus();
+            InputMethodManager imm = mLauncher.getSystemService(InputMethodManager.class);
+            imm.showSoftInput(mEduInput, InputMethodManager.SHOW_IMPLICIT);
+            ((LayoutParams) mInputWrapper.getLayoutParams()).setMargins(0, r.top, 0, 0);
+        }
+        animateOpen();
+    }
+
+    @Override
+    protected int getScrimColor(Context context) {
+        return ColorUtils.setAlphaComponent(Themes.getAttrColor(context, R.attr.allAppsScrimColor),
+                230);
+    }
+
+    protected void setTranslationShift(float translationShift) {
+        mTranslationShift = translationShift;
+        mContent.setAlpha(getBoxedProgress(1 - mTranslationShift, .25f, 1));
+        mContent.setTranslationY(ANIMATION_CONTENT_TRANSLATION * translationShift);
+        if (mColorScrim != null) {
+            mColorScrim.setAlpha(getBoxedProgress(1 - mTranslationShift, 0, .75f));
+        }
+    }
+
+    /**
+     * Given input [0-1], returns progress within bounds [min,max] allowing for staged animations
+     */
+    private float getBoxedProgress(float input, float min, float max) {
+        if (input < min) return 0;
+        if (input > max) return 1;
+        return (input - min) / (max - min);
+    }
+
+    private void animateOpen() {
+        if (mIsOpen || mOpenCloseAnimator.isRunning()) {
+            return;
+        }
+        mIsOpen = true;
+        mOpenCloseAnimator.setValues(
+                PropertyValuesHolder.ofFloat(TRANSLATION_SHIFT, TRANSLATION_SHIFT_OPENED));
+        mOpenCloseAnimator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
+        mOpenCloseAnimator.setDuration(ANIMATION_DURATION);
+        mOpenCloseAnimator.start();
+    }
+
+    /**
+     * Show On-device search education view.
+     */
+    public static void show(Launcher launcher) {
+        LayoutInflater layoutInflater = LayoutInflater.from(launcher);
+        ((DeviceSearchEdu) layoutInflater.inflate(
+                R.layout.search_edu_view, launcher.getDragLayer(),
+                false)).showInternal();
+    }
+
+    @Override
+    public void onStateTransitionStart(LauncherState toState) {
+        close(true, false);
+    }
+
+    @Override
+    protected void onCloseComplete() {
+        super.onCloseComplete();
+        if (mSearchInput != null && mSwitchFocusOnDismiss) {
+            mSearchInput.requestFocus();
+            mSearchInput.setSelection(mSearchInput.getText().length());
+        }
+    }
+
+    @Override
+    public void afterTextChanged(Editable editable) {
+        //Does nothing
+    }
+
+    @Override
+    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+        //Does nothing
+    }
+
+    @Override
+    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+        if (mSearchInput != null) {
+            mSearchInput.setText(charSequence.toString());
+            mSwitchFocusOnDismiss = true;
+            close(true, true);
+        }
+    }
+
+    @Override
+    public void setInsets(Rect insets) {
+
+    }
+
+    @Override
+    public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
+        mSearchInput.onEditorAction(i);
+        close(true, true);
+        return true;
+    }
+}
diff --git a/quickstep/src/com/android/launcher3/search/FallbackSearchInputView.java b/quickstep/src/com/android/launcher3/search/FallbackSearchInputView.java
new file mode 100644
index 0000000..7b10622
--- /dev/null
+++ b/quickstep/src/com/android/launcher3/search/FallbackSearchInputView.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2021 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.search;
+
+import static com.android.launcher3.LauncherState.ALL_APPS;
+
+import android.content.Context;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+
+import com.android.launcher3.ExtendedEditText;
+import com.android.launcher3.Launcher;
+import com.android.launcher3.allapps.AllAppsContainerView;
+import com.android.launcher3.allapps.AllAppsGridAdapter.AdapterItem;
+import com.android.launcher3.allapps.AllAppsStore;
+import com.android.launcher3.allapps.AlphabeticalAppsList;
+import com.android.launcher3.allapps.FloatingHeaderView;
+import com.android.launcher3.allapps.search.AllAppsSearchBarController;
+import com.android.launcher3.allapps.search.SearchAlgorithm;
+
+import java.util.ArrayList;
+
+/**
+ * A search view shown in all apps for on device search
+ */
+public class FallbackSearchInputView extends ExtendedEditText
+        implements AllAppsSearchBarController.Callbacks, AllAppsStore.OnUpdateListener {
+
+    private final AllAppsSearchBarController mSearchBarController;
+
+    private AlphabeticalAppsList mApps;
+    private Runnable mOnResultsChanged;
+    private AllAppsContainerView mAppsView;
+
+    public FallbackSearchInputView(Context context) {
+        this(context, null);
+    }
+
+    public FallbackSearchInputView(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public FallbackSearchInputView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        mSearchBarController = new AllAppsSearchBarController();
+    }
+
+    @Override
+    protected void onAttachedToWindow() {
+        super.onAttachedToWindow();
+        Launcher.getLauncher(getContext()).getAppsView().getAppsStore().addUpdateListener(this);
+    }
+
+    @Override
+    protected void onDetachedFromWindow() {
+        super.onDetachedFromWindow();
+        Launcher.getLauncher(getContext()).getAppsView().getAppsStore().removeUpdateListener(this);
+    }
+
+    /**
+     * Initializes SearchInput
+     */
+    public void initialize(AllAppsContainerView appsView, SearchAlgorithm algo, Runnable changed) {
+        mOnResultsChanged = changed;
+        mApps = appsView.getApps();
+        mAppsView = appsView;
+        mSearchBarController.initialize(algo, this, Launcher.getLauncher(getContext()), this);
+    }
+
+    @Override
+    public void onSearchResult(String query, ArrayList<AdapterItem> items) {
+        if (mApps != null && getParent() != null) {
+            mApps.setSearchResults(items);
+            notifyResultChanged();
+            collapseAppsViewHeader(true);
+            mAppsView.setLastSearchQuery(query);
+        }
+    }
+
+    @Override
+    public void onAppendSearchResult(String query, ArrayList<AdapterItem> items) {
+        if (mApps != null && getParent() != null) {
+            mApps.appendSearchResults(items);
+            notifyResultChanged();
+        }
+    }
+
+    @Override
+    public void clearSearchResult() {
+        if (getParent() != null && mApps != null) {
+            mApps.setSearchResults(null);
+            notifyResultChanged();
+            collapseAppsViewHeader(false);
+            mAppsView.onClearSearchResult();
+        }
+    }
+
+    @Override
+    public void onAppsUpdated() {
+        mSearchBarController.refreshSearchResult();
+    }
+
+    private void collapseAppsViewHeader(boolean collapse) {
+        FloatingHeaderView header = mAppsView.getFloatingHeaderView();
+        if (header != null) {
+            header.setCollapsed(collapse);
+        }
+    }
+
+    private void notifyResultChanged() {
+        if (mOnResultsChanged != null) {
+            mOnResultsChanged.run();
+        }
+        mAppsView.onSearchResultsChanged();
+    }
+
+    @Override
+    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
+        // TODO: Consider animating the state transition here
+        if (focused) {
+            // Getting focus will open the keyboard. Go to the all-apps state, so that the input
+            // box is at the top and there is enough space below to show search results.
+            Launcher.getLauncher(getContext()).getStateManager().goToState(ALL_APPS, false);
+        }
+        super.onFocusChanged(focused, direction, previouslyFocusedRect);
+    }
+}
diff --git a/quickstep/src/com/android/quickstep/util/QuickstepOnboardingPrefs.java b/quickstep/src/com/android/quickstep/util/QuickstepOnboardingPrefs.java
index a85f0d2..9ee9f00 100644
--- a/quickstep/src/com/android/quickstep/util/QuickstepOnboardingPrefs.java
+++ b/quickstep/src/com/android/quickstep/util/QuickstepOnboardingPrefs.java
@@ -29,6 +29,7 @@
 import com.android.launcher3.Workspace;
 import com.android.launcher3.config.FeatureFlags;
 import com.android.launcher3.hybridhotseat.HotseatPredictionController;
+import com.android.launcher3.search.DeviceSearchEdu;
 import com.android.launcher3.statemanager.StateManager;
 import com.android.launcher3.statemanager.StateManager.StateListener;
 import com.android.launcher3.uioverrides.QuickstepLauncher;
@@ -41,6 +42,7 @@
  */
 public class QuickstepOnboardingPrefs extends OnboardingPrefs<QuickstepLauncher> {
 
+
     public QuickstepOnboardingPrefs(QuickstepLauncher launcher, SharedPreferences sharedPrefs) {
         super(launcher, sharedPrefs);
 
@@ -131,5 +133,18 @@
                 }
             });
         }
+
+        if (FeatureFlags.ENABLE_DEVICE_SEARCH.get() && !getBoolean(SEARCH_EDU_SEEN)) {
+            stateManager.addStateListener(new StateListener<LauncherState>() {
+                @Override
+                public void onStateTransitionStart(LauncherState toState) {
+                    if (toState == ALL_APPS) {
+                        mLauncher.getAllAppsController().getInsetController().setSearchEduRunnable(
+                                () -> DeviceSearchEdu.show(launcher));
+                        stateManager.removeStateListener(this);
+                    }
+                }
+            });
+        }
     }
 }
diff --git a/src/com/android/launcher3/allapps/AllAppsInsetTransitionController.java b/src/com/android/launcher3/allapps/AllAppsInsetTransitionController.java
index 93da1c0..1cf98e1 100644
--- a/src/com/android/launcher3/allapps/AllAppsInsetTransitionController.java
+++ b/src/com/android/launcher3/allapps/AllAppsInsetTransitionController.java
@@ -44,6 +44,8 @@
     private WindowInsetsAnimationController mAnimationController;
     private WindowInsetsAnimationControlListener mCurrentRequest;
 
+    private Runnable mSearchEduRunnable;
+
     private float mAllAppsHeight;
 
     private int mDownInsetBottom;
@@ -55,12 +57,28 @@
     private float mDown, mCurrent;
     private View mApps;
 
+    /**
+     *
+     */
+    public boolean showSearchEduIfNecessary() {
+        if (mSearchEduRunnable == null) {
+            return false;
+        }
+        mSearchEduRunnable.run();
+        return true;
+    }
+
+    public void setSearchEduRunnable(Runnable eduRunnable) {
+        mSearchEduRunnable = eduRunnable;
+    }
+
     // Only purpose of these states is to keep track of fast fling transition
     enum State {
         RESET, DRAG_START_BOTTOM, DRAG_START_BOTTOM_IME_CANCELLED,
         FLING_END_TOP, FLING_END_TOP_IME_CANCELLED,
         DRAG_START_TOP, FLING_END_BOTTOM
     }
+
     private State mState;
 
     public AllAppsInsetTransitionController(float allAppsHeight, View appsView) {
@@ -77,7 +95,7 @@
         boolean imeVisible = insets.isVisible(WindowInsets.Type.ime());
 
         if (DEBUG) {
-            Log.d(TAG, "\nhide imeVisible=" +  imeVisible);
+            Log.d(TAG, "\nhide imeVisible=" + imeVisible);
         }
         if (insets.isVisible(WindowInsets.Type.ime())) {
             mApps.getWindowInsetsController().hide(WindowInsets.Type.ime());
@@ -107,7 +125,7 @@
         // mShownAtDown = mApps.getRootWindowInsets().isVisible(WindowInsets.Type.ime());
 
         if (DEBUG) {
-            Log.d(TAG, "\nonDragStart progress=" +  progress
+            Log.d(TAG, "\nonDragStart progress=" + progress
                     + " mDownInsets=" + mDownInsetBottom
                     + " mShownAtDown=" + mShownAtDown);
         }
@@ -123,7 +141,7 @@
                         }
                         if (controller != null) {
                             if (mCurrentRequest == this && !handleFinishOnFling(controller)) {
-                                    mAnimationController = controller;
+                                mAnimationController = controller;
                             } else {
                                 controller.finish(false /* just don't show */);
                             }
diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java
index c03619e..2f805fd 100644
--- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java
+++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java
@@ -270,11 +270,10 @@
             if (Float.compare(mProgress, 0f) == 0) {
                 mLauncher.getLiveSearchManager().start();
                 EditText editText = mAppsView.getSearchUiManager().getEditText();
-                if (editText != null) {
+                if (editText != null && !mInsetController.showSearchEduIfNecessary()) {
                     editText.requestFocus();
                 }
-            }
-            else {
+            } else {
                 mLauncher.getLiveSearchManager().stop();
             }
             // TODO: should make the controller hide synchronously
diff --git a/src/com/android/launcher3/util/OnboardingPrefs.java b/src/com/android/launcher3/util/OnboardingPrefs.java
index 14df0f3..2e279fa 100644
--- a/src/com/android/launcher3/util/OnboardingPrefs.java
+++ b/src/com/android/launcher3/util/OnboardingPrefs.java
@@ -36,13 +36,15 @@
     public static final String HOME_BOUNCE_COUNT = "launcher.home_bounce_count";
     public static final String HOTSEAT_DISCOVERY_TIP_COUNT = "launcher.hotseat_discovery_tip_count";
     public static final String HOTSEAT_LONGPRESS_TIP_SEEN = "launcher.hotseat_longpress_tip_seen";
+    public static final String SEARCH_EDU_SEEN = "launcher.search_edu";
 
     /**
      * Events that either have happened or have not (booleans).
      */
     @StringDef(value = {
             HOME_BOUNCE_SEEN,
-            HOTSEAT_LONGPRESS_TIP_SEEN
+            HOTSEAT_LONGPRESS_TIP_SEEN,
+            SEARCH_EDU_SEEN
     })
     @Retention(RetentionPolicy.SOURCE)
     public @interface EventBoolKey {}
diff --git a/src/com/android/launcher3/views/AbstractSlideInView.java b/src/com/android/launcher3/views/AbstractSlideInView.java
index 11c1029..e08f881 100644
--- a/src/com/android/launcher3/views/AbstractSlideInView.java
+++ b/src/com/android/launcher3/views/AbstractSlideInView.java
@@ -64,7 +64,7 @@
     protected final ObjectAnimator mOpenCloseAnimator;
 
     protected View mContent;
-    private final View mColorScrim;
+    protected final View mColorScrim;
     protected Interpolator mScrollInterpolator;
 
     // range [0, 1], 0=> completely open, 1=> completely closed
@@ -216,7 +216,6 @@
         return mLauncher.getDragLayer();
     }
 
-
     protected static View createColorScrim(Context context, int bgColor) {
         View view = new View(context);
         view.forceHasOverlappingRendering(false);
