diff --git a/quickstep/res/values/strings.xml b/quickstep/res/values/strings.xml
index 52bd48b2ff..6af0d602ab 100644
--- a/quickstep/res/values/strings.xml
+++ b/quickstep/res/values/strings.xml
@@ -53,8 +53,6 @@
App suggestions
-
- All apps
Your predicted apps
diff --git a/res/layout/all_apps.xml b/res/layout/all_apps.xml
index 9ac6ed0f77..a34baef214 100644
--- a/res/layout/all_apps.xml
+++ b/res/layout/all_apps.xml
@@ -42,10 +42,19 @@
+
+
+
-
+
\ No newline at end of file
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index b1294b4c58..4d137c84b5 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -103,6 +103,7 @@
6dp
2dp
128dp
+ 150dp
8dp
diff --git a/res/values/strings.xml b/res/values/strings.xml
index f315725a7a..d7a150655f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1,5 +1,4 @@
-
-
App
+
+ All apps
@@ -193,7 +194,7 @@
%1$s is not allowed to make phone calls
-
+
Can\'t load widget
@@ -308,7 +309,7 @@
Widgets list closed
-
+
Add to Home screen
diff --git a/src/com/android/launcher3/allapps/FloatingHeaderView.java b/src/com/android/launcher3/allapps/FloatingHeaderView.java
index debb5b20c1..3ca03034a3 100644
--- a/src/com/android/launcher3/allapps/FloatingHeaderView.java
+++ b/src/com/android/launcher3/allapps/FloatingHeaderView.java
@@ -47,6 +47,7 @@ public class FloatingHeaderView extends LinearLayout implements
ValueAnimator.AnimatorUpdateListener, PluginListener, Insettable,
OnHeightUpdatedListener {
+ private static final long ALL_APPS_CONTENT_ANIM_DURATION = 150;
private final Rect mRVClip = new Rect(0, 0, Integer.MAX_VALUE, Integer.MAX_VALUE);
private final Rect mHeaderClip = new Rect(0, 0, Integer.MAX_VALUE, Integer.MAX_VALUE);
private final ValueAnimator mAnimator = ValueAnimator.ofInt(0, 0);
@@ -108,6 +109,14 @@ public class FloatingHeaderView extends LinearLayout implements
// enabled or disabled, and represent the current set of all rows.
private FloatingHeaderRow[] mAllRows = FloatingHeaderRow.NO_ROWS;
+
+ // members for handling suggestion state
+ private final ValueAnimator mAllAppsContentAnimator = ValueAnimator.ofFloat(0, 0);
+ private View mAllAppsButton;
+ private int mAllAppsContentFadeInOffset;
+ private boolean mInSuggestionMode = false;
+
+
public FloatingHeaderView(@NonNull Context context) {
this(context, null);
}
@@ -118,12 +127,20 @@ public class FloatingHeaderView extends LinearLayout implements
.getDimensionPixelSize(R.dimen.all_apps_header_top_padding);
mHeaderProtectionSupported = context.getResources().getBoolean(
R.bool.config_header_protection_supported);
+ mAllAppsContentFadeInOffset = context.getResources()
+ .getDimensionPixelSize(R.dimen.all_apps_content_fade_in_offset);
+ mAllAppsContentAnimator.setDuration(ALL_APPS_CONTENT_ANIM_DURATION);
+ mAllAppsContentAnimator.addUpdateListener(this::onAllAppsContentAnimationUpdate);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
mTabLayout = findViewById(R.id.tabs);
+ mAllAppsButton = findViewById(R.id.all_apps_button);
+ if (mAllAppsButton != null) {
+ mAllAppsButton.setOnClickListener(this::onAllAppsButtonClicked);
+ }
// Find all floating header rows.
ArrayList rows = new ArrayList<>();
@@ -312,6 +329,7 @@ public class FloatingHeaderView extends LinearLayout implements
}
mTabLayout.setTranslationY(mTranslationY);
+ setSuggestionMode(false);
int clipHeight = mHeaderTopPadding - getPaddingBottom();
mRVClip.top = mTabsHidden ? clipHeight : 0;
@@ -347,6 +365,7 @@ public class FloatingHeaderView extends LinearLayout implements
mTranslationY = 0;
applyVerticalMove();
}
+ setSuggestionMode(false);
mHeaderCollapsed = false;
mSnappedScrolledY = -mMaxTranslation;
mCurrentRV.scrollToTop();
@@ -442,6 +461,38 @@ public class FloatingHeaderView extends LinearLayout implements
}
return Math.max(getHeight() - getPaddingTop() + mTranslationY, 0);
}
+
+ /**
+ * When suggestion mode is enabled, hides AllApps content view and shows AllApps button.
+ */
+ public void setSuggestionMode(boolean isSuggestMode) {
+ if (mInSuggestionMode == isSuggestMode || mAllAppsButton == null) return;
+ if (!FeatureFlags.ENABLE_ONE_SEARCH.get()) return;
+ AllAppsContainerView allApps = (AllAppsContainerView) getParent();
+ mInSuggestionMode = isSuggestMode;
+ if (isSuggestMode) {
+ mTabLayout.setVisibility(GONE);
+ mAllAppsButton.setVisibility(VISIBLE);
+ allApps.getContentView().setVisibility(GONE);
+ } else {
+ mTabLayout.setVisibility(mTabsHidden ? GONE : VISIBLE);
+ mAllAppsButton.setVisibility(GONE);
+ allApps.getContentView().setVisibility(VISIBLE);
+ }
+ }
+
+ private void onAllAppsButtonClicked(View view) {
+ setSuggestionMode(false);
+ mAllAppsContentAnimator.start();
+ }
+
+ private void onAllAppsContentAnimationUpdate(ValueAnimator valueAnimator) {
+ float prog = valueAnimator.getAnimatedFraction();
+ View allAppsList = ((AllAppsContainerView) getParent()).getContentView();
+ allAppsList.setAlpha(255 * prog);
+ allAppsList.setTranslationY((1 - prog) * mAllAppsContentFadeInOffset);
+ }
+
}