From c119e2cf3083a7d8dabd5758dd1128dca8c0d6be Mon Sep 17 00:00:00 2001 From: Daniel Chapin Date: Tue, 2 Feb 2021 18:57:19 +0000 Subject: [PATCH 01/18] Revert "Make keyguard exit animation to remote animation." Revert "Make keyguard exit animation to remote animation." Revert "Make keyguard exit animation to remote animation." Revert submission 13354553-KeyguardRemoteAnimation Reason for revert: Bug: 179122467 Reverted Changes: I7a70add76:Make keyguard exit animation to remote animation. I1cd6a86c2:Make keyguard exit animation to remote animation. I1cd6a86c2:Make keyguard exit animation to remote animation. Change-Id: Ibef152b95638132ca8476f84b22bccb23dd13c97 (cherry picked from commit 1c720fd8c0bb5fe9bf687ce2c95042b5f22391ca) --- .../launcher3/LauncherAnimationRunner.java | 26 ++++--------------- .../QuickstepAppTransitionManagerImpl.java | 11 +++----- .../launcher3/WrappedAnimationRunnerImpl.java | 4 +-- .../WrappedLauncherAnimationRunner.java | 10 +++---- .../android/quickstep/RecentsActivity.java | 7 ++--- .../util/RemoteAnimationProvider.java | 7 ++--- 6 files changed, 16 insertions(+), 49 deletions(-) diff --git a/quickstep/src/com/android/launcher3/LauncherAnimationRunner.java b/quickstep/src/com/android/launcher3/LauncherAnimationRunner.java index 588d676ac7..034d51ff38 100644 --- a/quickstep/src/com/android/launcher3/LauncherAnimationRunner.java +++ b/quickstep/src/com/android/launcher3/LauncherAnimationRunner.java @@ -56,22 +56,17 @@ public abstract class LauncherAnimationRunner implements RemoteAnimationRunnerCo return mHandler; } - // Called only in S+ platform + // Called only in R+ platform @BinderThread - public void onAnimationStart( - int transit, - RemoteAnimationTargetCompat[] appTargets, - RemoteAnimationTargetCompat[] wallpaperTargets, - RemoteAnimationTargetCompat[] nonAppTargets, - Runnable runnable) { + public void onAnimationStart(RemoteAnimationTargetCompat[] appTargets, + RemoteAnimationTargetCompat[] wallpaperTargets, Runnable runnable) { Runnable r = () -> { finishExistingAnimation(); mAnimationResult = new AnimationResult(() -> { UI_HELPER_EXECUTOR.execute(runnable); mAnimationResult = null; }); - onCreateAnimation(transit, appTargets, wallpaperTargets, nonAppTargets, - mAnimationResult); + onCreateAnimation(appTargets, wallpaperTargets, mAnimationResult); }; if (mStartAtFrontOfQueue) { postAtFrontOfQueueAsynchronously(mHandler, r); @@ -80,14 +75,6 @@ public abstract class LauncherAnimationRunner implements RemoteAnimationRunnerCo } } - // Called only in R platform - @BinderThread - public void onAnimationStart(RemoteAnimationTargetCompat[] appTargets, - RemoteAnimationTargetCompat[] wallpaperTargets, Runnable runnable) { - onAnimationStart(0 /* transit */, appTargets, wallpaperTargets, - new RemoteAnimationTargetCompat[0], runnable); - } - // Called only in Q platform @BinderThread @Deprecated @@ -101,11 +88,8 @@ public abstract class LauncherAnimationRunner implements RemoteAnimationRunnerCo */ @UiThread public abstract void onCreateAnimation( - int transit, RemoteAnimationTargetCompat[] appTargets, - RemoteAnimationTargetCompat[] wallpaperTargets, - RemoteAnimationTargetCompat[] nonAppTargets, - AnimationResult result); + RemoteAnimationTargetCompat[] wallpaperTargets, AnimationResult result); @UiThread private void finishExistingAnimation() { diff --git a/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java b/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java index e6888d56fe..36c8bb8b99 100644 --- a/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java +++ b/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java @@ -865,10 +865,8 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans } @Override - public void onCreateAnimation(int transit, - RemoteAnimationTargetCompat[] appTargets, + public void onCreateAnimation(RemoteAnimationTargetCompat[] appTargets, RemoteAnimationTargetCompat[] wallpaperTargets, - RemoteAnimationTargetCompat[] nonAppTargets, LauncherAnimationRunner.AnimationResult result) { if (mLauncher.isDestroyed()) { AnimatorSet anim = new AnimatorSet(); @@ -881,8 +879,7 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans // If launcher is not resumed, wait until new async-frame after resume mLauncher.addOnResumeCallback(() -> postAsyncCallback(mHandler, () -> - onCreateAnimation(transit, appTargets, wallpaperTargets, - nonAppTargets, result))); + onCreateAnimation(appTargets, wallpaperTargets, result))); return; } @@ -966,10 +963,8 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans } @Override - public void onCreateAnimation(int transit, - RemoteAnimationTargetCompat[] appTargets, + public void onCreateAnimation(RemoteAnimationTargetCompat[] appTargets, RemoteAnimationTargetCompat[] wallpaperTargets, - RemoteAnimationTargetCompat[] nonAppTargets, LauncherAnimationRunner.AnimationResult result) { AnimatorSet anim = new AnimatorSet(); diff --git a/quickstep/src/com/android/launcher3/WrappedAnimationRunnerImpl.java b/quickstep/src/com/android/launcher3/WrappedAnimationRunnerImpl.java index 03cc28e49b..da2aee4386 100644 --- a/quickstep/src/com/android/launcher3/WrappedAnimationRunnerImpl.java +++ b/quickstep/src/com/android/launcher3/WrappedAnimationRunnerImpl.java @@ -26,9 +26,7 @@ import com.android.systemui.shared.system.RemoteAnimationTargetCompat; */ public interface WrappedAnimationRunnerImpl { Handler getHandler(); - void onCreateAnimation(int transit, - RemoteAnimationTargetCompat[] appTargets, + void onCreateAnimation(RemoteAnimationTargetCompat[] appTargets, RemoteAnimationTargetCompat[] wallpaperTargets, - RemoteAnimationTargetCompat[] nonAppTargets, LauncherAnimationRunner.AnimationResult result); } diff --git a/quickstep/src/com/android/launcher3/WrappedLauncherAnimationRunner.java b/quickstep/src/com/android/launcher3/WrappedLauncherAnimationRunner.java index 1e1631bed9..1753b62ca3 100644 --- a/quickstep/src/com/android/launcher3/WrappedLauncherAnimationRunner.java +++ b/quickstep/src/com/android/launcher3/WrappedLauncherAnimationRunner.java @@ -46,15 +46,11 @@ public class WrappedLauncherAnimationRunner { } @Override - public void onCreateAnimation(int transit, - RemoteAnimationTargetCompat[] appTargets, - RemoteAnimationTargetCompat[] wallpaperTargets, - RemoteAnimationTargetCompat[] nonAppTargets, - AnimationResult result) { + public void onCreateAnimation(RemoteAnimationTargetCompat[] appTargets, + RemoteAnimationTargetCompat[] wallpaperTargets, AnimationResult result) { AnimatorSet anim = composeRecentsLaunchAnimator(taskView, appTargets, wallpaperTargets); anim.addListener(resetStateListener()); diff --git a/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java b/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java index 3adb459aeb..19c6588877 100644 --- a/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java +++ b/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java @@ -43,11 +43,8 @@ public abstract class RemoteAnimationProvider { } @Override - public void onCreateAnimation(int transit, - RemoteAnimationTargetCompat[] appTargets, - RemoteAnimationTargetCompat[] wallpaperTargets, - RemoteAnimationTargetCompat[] nonApps, - AnimationResult result) { + public void onCreateAnimation(RemoteAnimationTargetCompat[] appTargets, + RemoteAnimationTargetCompat[] wallpaperTargets, AnimationResult result) { result.setAnimation(createWindowAnimation(appTargets, wallpaperTargets), context); } }; From 0d79f03ac3af641ec6811c30c6f124ed9026abfc Mon Sep 17 00:00:00 2001 From: Chris Fries Date: Tue, 9 Mar 2021 15:19:37 +0000 Subject: [PATCH 02/18] Revert "[Search] Support flexible results-per-row in AllApps" Revert "[Search] Support flexible results-per-row in AllApps" Revert submission 13786530-grid_adapter Bug: 182236647 Reason for revert: b/182236647 [TP1A][SP1A] Launcher crashing on opening Quick search bar from home screen Reverted Changes: I36882e12b:[Search] Support flexible results-per-row in AllAp... Idc3d24daf:[Search] Support flexible results-per-row in AllAp... Change-Id: Ief3888e63f4946fec43217ce66a1f0a3fb5ff64f (cherry picked from commit 0cf925dc542309e21c2407a9ad47975302944a1d) --- .../launcher3/allapps/AllAppsGridAdapter.java | 19 +++++++++---------- .../allapps/search/SearchAdapterProvider.java | 11 ++--------- 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java index a05e036701..5030c5e1a3 100644 --- a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java +++ b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java @@ -240,18 +240,20 @@ public class AllAppsGridAdapter extends @Override public int getSpanSize(int position) { int viewType = mApps.getAdapterItems().get(position).viewType; - int totalSpans = mGridLayoutMgr.getSpanCount(); if (isIconViewType(viewType)) { - return totalSpans / mAppsPerRow; + return 1 * SPAN_MULTIPLIER; } else if (mSearchAdapterProvider.isSearchView(viewType)) { - return totalSpans / mSearchAdapterProvider.getItemsPerRow(viewType, mAppsPerRow); + return mSearchAdapterProvider.getGridSpanSize(viewType, mAppsPerRow); } else { // Section breaks span the full width - return totalSpans; + return mAppsPerRow * SPAN_MULTIPLIER; } } } + // multiplier to support adapter item column count that is not mAppsPerRow. + public static final int SPAN_MULTIPLIER = 3; + private final BaseDraggingActivity mLauncher; private final LayoutInflater mLayoutInflater; private final AlphabeticalAppsList mApps; @@ -283,17 +285,14 @@ public class AllAppsGridAdapter extends mOnIconClickListener = launcher.getItemOnClickListener(); - mSearchAdapterProvider = searchAdapterProvider; setAppsPerRow(mLauncher.getDeviceProfile().inv.numAllAppsColumns); + + mSearchAdapterProvider = searchAdapterProvider; } public void setAppsPerRow(int appsPerRow) { mAppsPerRow = appsPerRow; - int totalSpans = mAppsPerRow; - for (int itemPerRow : mSearchAdapterProvider.getSupportedItemsPerRow()) { - totalSpans *= itemPerRow; - } - mGridLayoutMgr.setSpanCount(totalSpans); + mGridLayoutMgr.setSpanCount(mAppsPerRow * SPAN_MULTIPLIER); } /** diff --git a/src/com/android/launcher3/allapps/search/SearchAdapterProvider.java b/src/com/android/launcher3/allapps/search/SearchAdapterProvider.java index 6d491fdd2e..a79ec437fb 100644 --- a/src/com/android/launcher3/allapps/search/SearchAdapterProvider.java +++ b/src/com/android/launcher3/allapps/search/SearchAdapterProvider.java @@ -50,18 +50,11 @@ public abstract class SearchAdapterProvider { public abstract AllAppsGridAdapter.ViewHolder onCreateViewHolder(LayoutInflater layoutInflater, ViewGroup parent, int viewType); - /** - * Returns supported item per row combinations supported - */ - public int[] getSupportedItemsPerRow() { - return new int[]{}; - } - /** * Returns how many cells a view should span */ - public int getItemsPerRow(int viewType, int appsPerRow) { - return appsPerRow; + public int getGridSpanSize(int viewType, int appsPerRow) { + return appsPerRow * AllAppsGridAdapter.SPAN_MULTIPLIER; } /** From bf679d8343d100bd1cffc52a5f0a8e94ad69ac8e Mon Sep 17 00:00:00 2001 From: Steven Ng Date: Fri, 9 Apr 2021 15:25:43 +0100 Subject: [PATCH 03/18] Fix drag-n-drop for recommended widgets Bug: 184917820 Test: Drag-n-drop a recommended widget from the all widgets tray Change-Id: If9efffc2e156836ff1b4048c3d40782ba4d5976b (cherry picked from commit f7b7faed7747743941177ab4bdb48a50c15a5300) --- .../widget/picker/WidgetsRecommendationTableLayout.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/com/android/launcher3/widget/picker/WidgetsRecommendationTableLayout.java b/src/com/android/launcher3/widget/picker/WidgetsRecommendationTableLayout.java index 6569fb0d48..eacd01c590 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsRecommendationTableLayout.java +++ b/src/com/android/launcher3/widget/picker/WidgetsRecommendationTableLayout.java @@ -19,6 +19,7 @@ import android.content.Context; import android.util.AttributeSet; import android.view.Gravity; import android.view.LayoutInflater; +import android.view.View; import android.view.ViewGroup; import android.widget.TableLayout; import android.widget.TableRow; @@ -31,7 +32,6 @@ import com.android.launcher3.LauncherAppState; import com.android.launcher3.R; import com.android.launcher3.model.WidgetItem; import com.android.launcher3.widget.WidgetCell; -import com.android.launcher3.widget.WidgetImageView; import java.util.ArrayList; import java.util.List; @@ -119,9 +119,9 @@ public final class WidgetsRecommendationTableLayout extends TableLayout { getContext()).inflate(R.layout.widget_cell, parent, false); widget.setOnTouchListener(mWidgetCellOnTouchListener); - WidgetImageView preview = widget.findViewById(R.id.widget_preview); - preview.setOnClickListener(mWidgetCellOnClickListener); - preview.setOnLongClickListener(mWidgetCellOnLongClickListener); + View previewContainer = widget.findViewById(R.id.widget_preview_container); + previewContainer.setOnClickListener(mWidgetCellOnClickListener); + previewContainer.setOnLongClickListener(mWidgetCellOnLongClickListener); widget.setAnimatePreview(false); parent.addView(widget); From 60985576831ece5821c22aafcae803d80e9193ad Mon Sep 17 00:00:00 2001 From: Bill Lin Date: Mon, 26 Apr 2021 13:00:00 +0000 Subject: [PATCH 04/18] Revert "2/ Resolve gesture one handed conflicts swipe up recents" This reverts commit 789aa86617c99f290ec2cc25cb3539b0f4feaedf. Reason for revert: for clarify b/186197537 Change-Id: Ia921d073c2ad4e427c5436370313c2095f2adea8 (cherry picked from commit d7b6a429cd3d1eea3e1b6f6f9a9edf2cba10597b) --- .../src/com/android/quickstep/TouchInteractionService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java index 18c0b7a1ef..f3fe0b49a4 100644 --- a/quickstep/src/com/android/quickstep/TouchInteractionService.java +++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java @@ -515,8 +515,7 @@ public class TouchInteractionService extends Service implements PluginListener Date: Wed, 19 May 2021 09:38:35 -0700 Subject: [PATCH 05/18] Remove min/max values for RectFSpringAnim2. - Fixes crash on landscape - We added this to stop the windows from going way out of bounds. But we no longer need it since we've tightened up the stiffness so that it would take a super aggressive swipe/high velocity for the window to go out of bounds Bug: 188617892 Test: manual Change-Id: Icc2a0af0a1b26985502ddbc7a5a370e7eecdb346 (cherry picked from commit a2ef1a02384181ca17ae48f4bab14ec375006845) --- .../src/com/android/quickstep/util/RectFSpringAnim2.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/quickstep/src/com/android/quickstep/util/RectFSpringAnim2.java b/quickstep/src/com/android/quickstep/util/RectFSpringAnim2.java index 97be2b1787..edd3dc3e29 100644 --- a/quickstep/src/com/android/quickstep/util/RectFSpringAnim2.java +++ b/quickstep/src/com/android/quickstep/util/RectFSpringAnim2.java @@ -34,8 +34,6 @@ import androidx.dynamicanimation.animation.FloatPropertyCompat; import androidx.dynamicanimation.animation.SpringAnimation; import androidx.dynamicanimation.animation.SpringForce; -import com.android.launcher3.DeviceProfile; -import com.android.launcher3.InvariantDeviceProfile; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.util.DynamicResource; @@ -193,12 +191,8 @@ public class RectFSpringAnim2 extends RectFSpringAnim { * @param velocityPxPerMs Velocity of swipe in px/ms. */ public void start(Context context, PointF velocityPxPerMs) { - DeviceProfile dp = InvariantDeviceProfile.INSTANCE.get(context).getDeviceProfile(context); - mRectXAnim = new SpringAnimation(this, RECT_CENTER_X) .setStartValue(mCurrentCenterX) - .setMinValue(Math.min(0, mCurrentCenterX)) - .setMaxValue(Math.max(dp.widthPx, mCurrentCenterX)) .setStartVelocity(velocityPxPerMs.x * 1000) .setSpring(new SpringForce(mTargetX) .setStiffness(mXStiffness) @@ -210,8 +204,6 @@ public class RectFSpringAnim2 extends RectFSpringAnim { mRectYAnim = new SpringAnimation(this, RECT_Y) .setStartValue(mCurrentCenterY) - .setMinValue(Math.min(0, mCurrentCenterY)) - .setMaxValue(Math.max(dp.heightPx, mCurrentCenterY)) .setStartVelocity(velocityPxPerMs.y * 1000) .setSpring(new SpringForce(mTargetY) .setStiffness(mYStiffness) From fd08b1cb75e267292ccabdb9d861b4f5cd0f5860 Mon Sep 17 00:00:00 2001 From: Samuel Fufa Date: Wed, 8 Sep 2021 12:24:02 -0700 Subject: [PATCH 06/18] [Work] Fix work apps showing in personal tab The problem here is that we are tracking hasWorkApps and usingTabs using the same value. This leads to work/personal apps showing together when clearing search since mUsingTabs is overridden to false on setLastSearchQuery and later used to determine if tabs should show. Bug: 198546279 Test: Manual Change-Id: I7df5d65472703bedcc9dd688847d9ebd146d5f61 (cherry picked from commit 564e9ca223debed49ba61681717b5131127f60e0) --- res/values/strings.xml | 1 + .../allapps/AllAppsContainerView.java | 27 ++++++++++--------- .../allapps/LauncherAllAppsContainerView.java | 11 -------- 3 files changed, 15 insertions(+), 24 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index d1774e5a03..a6105ebe4a 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -153,6 +153,7 @@ Apps list + Search results Personal apps list Work apps list diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java index 57a3e1c7bb..e779ee80ea 100644 --- a/src/com/android/launcher3/allapps/AllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java @@ -120,6 +120,7 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo protected boolean mUsingTabs; private boolean mIsSearching; + private boolean mHasWorkApps; protected RecyclerViewFastScroller mTouchHandler; protected final Point mFastScrollerOffset = new Point(); @@ -191,7 +192,7 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo int currentPage = state.getInt(BUNDLE_KEY_CURRENT_PAGE, 0); if (currentPage != 0 && mViewPager != null) { mViewPager.setCurrentPage(currentPage); - rebindAdapters(true); + rebindAdapters(); } else { reset(true); } @@ -245,9 +246,10 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo break; } } + mHasWorkApps = hasWorkApps; if (!mAH[AdapterHolder.MAIN].appsList.hasFilter()) { - rebindAdapters(hasWorkApps); - if (hasWorkApps) { + rebindAdapters(); + if (mHasWorkApps) { resetWorkProfile(); } } @@ -324,6 +326,8 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo mViewPager.getNextPage() == 0 ? R.string.all_apps_button_personal_label : R.string.all_apps_button_work_label; + } else if (mIsSearching) { + descriptionRes = R.string.all_apps_search_results; } else { descriptionRes = R.string.all_apps_button_label; } @@ -372,7 +376,7 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo }); mHeader = findViewById(R.id.all_apps_header); - rebindAdapters(mUsingTabs, true /* force */); + rebindAdapters(true /* force */); mSearchContainer = findViewById(R.id.search_container_all_apps); mSearchUiManager = (SearchUiManager) mSearchContainer; @@ -441,11 +445,12 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo } } - private void rebindAdapters(boolean showTabs) { - rebindAdapters(showTabs, false /* force */); + private void rebindAdapters() { + rebindAdapters(false /* force */); } - protected void rebindAdapters(boolean showTabs, boolean force) { + protected void rebindAdapters(boolean force) { + boolean showTabs = mHasWorkApps && !mIsSearching; if (showTabs == mUsingTabs && !force) { return; } @@ -628,17 +633,13 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo mAH[i].adapter.setLastSearchQuery(query); } mIsSearching = true; - if (mUsingTabs) { - rebindAdapters(false); // hide tabs - } + rebindAdapters(); mHeader.setCollapsed(true); } public void onClearSearchResult() { - if (mUsingTabs) { - rebindAdapters(true); // show tabs - } mIsSearching = false; + rebindAdapters(); getActiveRecyclerView().scrollToTop(); } diff --git a/src/com/android/launcher3/allapps/LauncherAllAppsContainerView.java b/src/com/android/launcher3/allapps/LauncherAllAppsContainerView.java index f64b7cbd6c..b6dcec679b 100644 --- a/src/com/android/launcher3/allapps/LauncherAllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/LauncherAllAppsContainerView.java @@ -22,7 +22,6 @@ import android.view.MotionEvent; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; -import com.android.launcher3.statemanager.StateManager.StateListener; /** * AllAppsContainerView with launcher specific callbacks @@ -31,8 +30,6 @@ public class LauncherAllAppsContainerView extends AllAppsContainerView { private final Launcher mLauncher; - private StateListener mWorkTabListener; - public LauncherAllAppsContainerView(Context context) { this(context, null); } @@ -74,14 +71,6 @@ public class LauncherAllAppsContainerView extends AllAppsContainerView { mLauncher.getAllAppsController().setScrollRangeDelta(allAppsStartingPositionY); } - @Override - public void setupHeader() { - super.setupHeader(); - if (mWorkTabListener != null && !mUsingTabs) { - mLauncher.getStateManager().removeStateListener(mWorkTabListener); - } - } - @Override public void onActivePageChanged(int currentActivePage) { super.onActivePageChanged(currentActivePage); From 6d4b2244b6da22b1a1940237e9dcfb2852f58f51 Mon Sep 17 00:00:00 2001 From: Daniel Chapin Date: Thu, 21 Oct 2021 17:49:20 +0000 Subject: [PATCH 07/18] Revert "Adding support for dynamic letter spacing for icon labels" This reverts commit 0d69cb6ef7cfa1cf1c99575d61ba336782a45f66. Reason for revert: Droidfood blocking bug: 203740844 Change-Id: Ied4383744194601115c42ec43e12a94542d9ca35 (cherry picked from commit 1e872e150d62a3db94a24943f2cc4484aeac72e6) --- src/com/android/launcher3/BubbleTextView.java | 74 ------------------- .../launcher3/config/FeatureFlags.java | 4 - 2 files changed, 78 deletions(-) diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java index 78110474fd..0d01343a6d 100644 --- a/src/com/android/launcher3/BubbleTextView.java +++ b/src/com/android/launcher3/BubbleTextView.java @@ -16,7 +16,6 @@ package com.android.launcher3; -import static com.android.launcher3.config.FeatureFlags.ENABLE_ICON_LABEL_AUTO_SCALING; import static com.android.launcher3.graphics.PreloadIconDrawable.newPendingIcon; import static com.android.launcher3.icons.GraphicsUtils.setColorAlphaBound; @@ -34,7 +33,6 @@ import android.graphics.Rect; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.icu.text.MessageFormat; -import android.text.TextPaint; import android.text.TextUtils.TruncateAt; import android.util.AttributeSet; import android.util.Property; @@ -90,9 +88,6 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver, private static final int DISPLAY_SEARCH_RESULT = 6; private static final int DISPLAY_SEARCH_RESULT_SMALL = 7; - private static final float MIN_LETTER_SPACING = -0.5f; - private static final int MAX_SEARCH_LOOP_COUNT = 20; - private static final int[] STATE_PRESSED = new int[]{android.R.attr.state_pressed}; private static final float HIGHLIGHT_SCALE = 1.16f; @@ -465,75 +460,6 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver, return result; } - @Override - protected void onSizeChanged(int w, int h, int oldw, int oldh) { - super.onSizeChanged(w, h, oldw, oldh); - checkForEllipsis(); - } - - @Override - protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) { - super.onTextChanged(text, start, lengthBefore, lengthAfter); - checkForEllipsis(); - } - - private void checkForEllipsis() { - if (!ENABLE_ICON_LABEL_AUTO_SCALING.get()) { - return; - } - float width = getWidth() - getCompoundPaddingLeft() - getCompoundPaddingRight(); - if (width <= 0) { - return; - } - setLetterSpacing(0); - - String text = getText().toString(); - TextPaint paint = getPaint(); - if (paint.measureText(text) < width) { - return; - } - - float spacing = findBestSpacingValue(paint, text, width, MIN_LETTER_SPACING); - // Reset the paint value so that the call to TextView does appropriate diff. - paint.setLetterSpacing(0); - setLetterSpacing(spacing); - } - - /** - * Find the appropriate text spacing to display the provided text - * @param paint the paint used by the text view - * @param text the text to display - * @param allowedWidthPx available space to render the text - * @param minSpacingEm minimum spacing allowed between characters - * @return the final textSpacing value - * - * @see #setLetterSpacing(float) - */ - private float findBestSpacingValue(TextPaint paint, String text, float allowedWidthPx, - float minSpacingEm) { - paint.setLetterSpacing(minSpacingEm); - if (paint.measureText(text) > allowedWidthPx) { - // If there is no result at high limit, we can do anything more - return minSpacingEm; - } - - float lowLimit = 0; - float highLimit = minSpacingEm; - - for (int i = 0; i < MAX_SEARCH_LOOP_COUNT; i++) { - float value = (lowLimit + highLimit) / 2; - paint.setLetterSpacing(value); - if (paint.measureText(text) < allowedWidthPx) { - highLimit = value; - } else { - lowLimit = value; - } - } - - // At the end error on the higher side - return highLimit; - } - @SuppressWarnings("wrongcall") protected void drawWithoutDot(Canvas canvas) { super.onDraw(canvas); diff --git a/src/com/android/launcher3/config/FeatureFlags.java b/src/com/android/launcher3/config/FeatureFlags.java index 796c91213e..a3d9ba70ff 100644 --- a/src/com/android/launcher3/config/FeatureFlags.java +++ b/src/com/android/launcher3/config/FeatureFlags.java @@ -252,10 +252,6 @@ public final class FeatureFlags { "ENABLE_BACK_SWIPE_HOME_ANIMATION", true, "Enables home animation to icon when user swipes back."); - public static final BooleanFlag ENABLE_ICON_LABEL_AUTO_SCALING = getDebugFlag( - "ENABLE_ICON_LABEL_AUTO_SCALING", true, - "Enables scaling/spacing for icon labels to make more characters visible"); - public static void initialize(Context context) { synchronized (sDebugFlags) { for (DebugFlag flag : sDebugFlags) { From cff40067599204c8ffae1472cc6ae2c90f836979 Mon Sep 17 00:00:00 2001 From: Daniel Chapin Date: Fri, 21 Jan 2022 21:35:05 +0000 Subject: [PATCH 08/18] Revert "Allow items to be added alongside smartspace" This reverts commit e09067c2f476321f1eaa31e510b0f9bdc791a675. Reason for revert: Droidfood Blocking Bug: 215671574 Change-Id: Ida1597e6ed972ad8a2451f12ad7989fb3d0b3110 (cherry picked from commit d09b95222c5a8899c6b90b673fc2242a3e331edc) Merged-In:Ida1597e6ed972ad8a2451f12ad7989fb3d0b3110 --- res/raw/downgrade_schema.json | 3 +-- src/com/android/launcher3/LauncherProvider.java | 15 +-------------- src/com/android/launcher3/model/LoaderCursor.java | 10 ++++------ 3 files changed, 6 insertions(+), 22 deletions(-) diff --git a/res/raw/downgrade_schema.json b/res/raw/downgrade_schema.json index b8d0c6ff49..14eac9f6ed 100644 --- a/res/raw/downgrade_schema.json +++ b/res/raw/downgrade_schema.json @@ -2,9 +2,8 @@ // Note: Comments are not supported in JSON schema, but android parser is lenient. // Maximum DB version supported by this schema - "version" : 31, + "version" : 30, - "downgrade_to_30" : [], "downgrade_to_29" : [], "downgrade_to_28" : [ "ALTER TABLE favorites RENAME TO temp_favorites;", diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index e004a4b240..68e19cb85d 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -97,7 +97,7 @@ public class LauncherProvider extends ContentProvider { * Represents the schema of the database. Changes in scheme need not be backwards compatible. * When increasing the scheme version, ensure that downgrade_schema.json is updated */ - public static final int SCHEMA_VERSION = 31; + public static final int SCHEMA_VERSION = 30; public static final String AUTHORITY = BuildConfig.APPLICATION_ID + ".settings"; public static final String KEY_LAYOUT_PROVIDER_AUTHORITY = "KEY_LAYOUT_PROVIDER_AUTHORITY"; @@ -864,19 +864,6 @@ public class LauncherProvider extends ContentProvider { Favorites.SCREEN, IntArray.wrap(-777, -778)), null); } case 30: { - if (FeatureFlags.QSB_ON_FIRST_SCREEN) { - // Clean up first row in screen 0 as it might contain junk data. - Log.d(TAG, "Cleaning up first row"); - db.delete(Favorites.TABLE_NAME, - String.format(Locale.ENGLISH, - "%1$s = %2$d AND %3$s = %4$d AND %5$s = %6$d", - Favorites.SCREEN, 0, - Favorites.CONTAINER, Favorites.CONTAINER_DESKTOP, - Favorites.CELLY, 0), null); - } - return; - } - case 31: { // DB Upgraded successfully return; } diff --git a/src/com/android/launcher3/model/LoaderCursor.java b/src/com/android/launcher3/model/LoaderCursor.java index 739a64ac04..08b38e88ac 100644 --- a/src/com/android/launcher3/model/LoaderCursor.java +++ b/src/com/android/launcher3/model/LoaderCursor.java @@ -457,13 +457,11 @@ public class LoaderCursor extends CursorWrapper { if (!occupied.containsKey(item.screenId)) { GridOccupancy screen = new GridOccupancy(countX + 1, countY + 1); - if (item.screenId == Workspace.FIRST_SCREEN_ID && FeatureFlags.QSB_ON_FIRST_SCREEN) { - // Mark the first X columns (X is width of the search container) in the first row as - // occupied (if the feature is enabled) in order to account for the search - // container. - int spanX = mIDP.numSearchContainerColumns; + if (item.screenId == Workspace.FIRST_SCREEN_ID) { + // Mark the first row as occupied (if the feature is enabled) + // in order to account for the QSB. int spanY = FeatureFlags.EXPANDED_SMARTSPACE.get() ? 2 : 1; - screen.markCells(0, 0, spanX, spanY, true); + screen.markCells(0, 0, countX + 1, spanY, FeatureFlags.QSB_ON_FIRST_SCREEN); } occupied.put(item.screenId, screen); } From c0629496e93fea40f35e15ef83548155337e8010 Mon Sep 17 00:00:00 2001 From: Schneider Victor-tulias Date: Thu, 27 Jan 2022 16:26:31 -0800 Subject: [PATCH 09/18] Disable bulk icon loading Temporarily disabling bulk icon loading until a fix to b/216529986 and b/216590478 is ready. Bug: 216590478 Bug: 216529986 Test: manual Change-Id: I590ebb501a9ed6f017661b32b6e0d59fa911d7d7 (cherry picked from commit c4ae75d7b5926f0a2bb583f19911307b4e6c19d7) Merged-In:I590ebb501a9ed6f017661b32b6e0d59fa911d7d7 --- src/com/android/launcher3/config/FeatureFlags.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/config/FeatureFlags.java b/src/com/android/launcher3/config/FeatureFlags.java index cd168a27aa..a0ab56b5e4 100644 --- a/src/com/android/launcher3/config/FeatureFlags.java +++ b/src/com/android/launcher3/config/FeatureFlags.java @@ -135,12 +135,12 @@ public final class FeatureFlags { public static final BooleanFlag ENABLE_BULK_WORKSPACE_ICON_LOADING = getDebugFlag( "ENABLE_BULK_WORKSPACE_ICON_LOADING", - true, + false, "Enable loading workspace icons in bulk."); public static final BooleanFlag ENABLE_BULK_ALL_APPS_ICON_LOADING = getDebugFlag( "ENABLE_BULK_ALL_APPS_ICON_LOADING", - true, + false, "Enable loading all apps icons in bulk."); // Keep as DeviceFlag for remote disable in emergency. From 565ec8247bfbee24597bc7fa34a914e05d622bb6 Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Tue, 8 Feb 2022 10:23:41 -0800 Subject: [PATCH 10/18] Work folder name is only fetched from activity, not ActivityContext Bug: 217872881 Test: builds Change-Id: I36bc9c386772c20fce2d10bf1bfaad565046d38f (cherry picked from commit 57810aefa4709915d68eeefc26c99fc38c0d655d) Merged-In:I36bc9c386772c20fce2d10bf1bfaad565046d38f --- src/com/android/launcher3/folder/FolderNameProvider.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/com/android/launcher3/folder/FolderNameProvider.java b/src/com/android/launcher3/folder/FolderNameProvider.java index 7793b16807..2b621bd58b 100644 --- a/src/com/android/launcher3/folder/FolderNameProvider.java +++ b/src/com/android/launcher3/folder/FolderNameProvider.java @@ -27,14 +27,12 @@ import com.android.launcher3.R; import com.android.launcher3.model.AllAppsList; import com.android.launcher3.model.BaseModelUpdateTask; import com.android.launcher3.model.BgDataModel; -import com.android.launcher3.model.StringCache; import com.android.launcher3.model.data.AppInfo; import com.android.launcher3.model.data.FolderInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.launcher3.util.IntSparseArrayMap; import com.android.launcher3.util.Preconditions; import com.android.launcher3.util.ResourceBasedOverride; -import com.android.launcher3.views.ActivityContext; import java.util.ArrayList; import java.util.Arrays; @@ -109,9 +107,7 @@ public class FolderNameProvider implements ResourceBasedOverride { Set users = workspaceItemInfos.stream().map(w -> w.user) .collect(Collectors.toSet()); if (users.size() == 1 && !users.contains(Process.myUserHandle())) { - StringCache cache = ActivityContext.lookupContext(context).getStringCache(); - String workFolderName = cache != null - ? cache.workFolderName : context.getString(R.string.work_folder_name); + String workFolderName = context.getString(R.string.work_folder_name); setAsLastSuggestion(nameInfos, workFolderName); } From 546acd3aec71c142049cca31475bef8f1ca1f3ba Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Tue, 8 Feb 2022 10:23:41 -0800 Subject: [PATCH 11/18] Work folder name is only fetched from activity, not ActivityContext Bug: 217872881 Test: builds Change-Id: I36bc9c386772c20fce2d10bf1bfaad565046d38f (cherry picked from commit 57810aefa4709915d68eeefc26c99fc38c0d655d) Merged-In:I36bc9c386772c20fce2d10bf1bfaad565046d38f --- src/com/android/launcher3/folder/FolderNameProvider.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/com/android/launcher3/folder/FolderNameProvider.java b/src/com/android/launcher3/folder/FolderNameProvider.java index 7793b16807..2b621bd58b 100644 --- a/src/com/android/launcher3/folder/FolderNameProvider.java +++ b/src/com/android/launcher3/folder/FolderNameProvider.java @@ -27,14 +27,12 @@ import com.android.launcher3.R; import com.android.launcher3.model.AllAppsList; import com.android.launcher3.model.BaseModelUpdateTask; import com.android.launcher3.model.BgDataModel; -import com.android.launcher3.model.StringCache; import com.android.launcher3.model.data.AppInfo; import com.android.launcher3.model.data.FolderInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.launcher3.util.IntSparseArrayMap; import com.android.launcher3.util.Preconditions; import com.android.launcher3.util.ResourceBasedOverride; -import com.android.launcher3.views.ActivityContext; import java.util.ArrayList; import java.util.Arrays; @@ -109,9 +107,7 @@ public class FolderNameProvider implements ResourceBasedOverride { Set users = workspaceItemInfos.stream().map(w -> w.user) .collect(Collectors.toSet()); if (users.size() == 1 && !users.contains(Process.myUserHandle())) { - StringCache cache = ActivityContext.lookupContext(context).getStringCache(); - String workFolderName = cache != null - ? cache.workFolderName : context.getString(R.string.work_folder_name); + String workFolderName = context.getString(R.string.work_folder_name); setAsLastSuggestion(nameInfos, workFolderName); } From 11de8735f5f6adf64e6ee9a04e04eddd912b2244 Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Tue, 8 Feb 2022 10:23:41 -0800 Subject: [PATCH 12/18] Work folder name is only fetched from activity, not ActivityContext Bug: 217872881 Test: builds Change-Id: I36bc9c386772c20fce2d10bf1bfaad565046d38f (cherry picked from commit 57810aefa4709915d68eeefc26c99fc38c0d655d) Merged-In:I36bc9c386772c20fce2d10bf1bfaad565046d38f --- src/com/android/launcher3/folder/FolderNameProvider.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/com/android/launcher3/folder/FolderNameProvider.java b/src/com/android/launcher3/folder/FolderNameProvider.java index 7793b16807..2b621bd58b 100644 --- a/src/com/android/launcher3/folder/FolderNameProvider.java +++ b/src/com/android/launcher3/folder/FolderNameProvider.java @@ -27,14 +27,12 @@ import com.android.launcher3.R; import com.android.launcher3.model.AllAppsList; import com.android.launcher3.model.BaseModelUpdateTask; import com.android.launcher3.model.BgDataModel; -import com.android.launcher3.model.StringCache; import com.android.launcher3.model.data.AppInfo; import com.android.launcher3.model.data.FolderInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.launcher3.util.IntSparseArrayMap; import com.android.launcher3.util.Preconditions; import com.android.launcher3.util.ResourceBasedOverride; -import com.android.launcher3.views.ActivityContext; import java.util.ArrayList; import java.util.Arrays; @@ -109,9 +107,7 @@ public class FolderNameProvider implements ResourceBasedOverride { Set users = workspaceItemInfos.stream().map(w -> w.user) .collect(Collectors.toSet()); if (users.size() == 1 && !users.contains(Process.myUserHandle())) { - StringCache cache = ActivityContext.lookupContext(context).getStringCache(); - String workFolderName = cache != null - ? cache.workFolderName : context.getString(R.string.work_folder_name); + String workFolderName = context.getString(R.string.work_folder_name); setAsLastSuggestion(nameInfos, workFolderName); } From 74fe0425af6c7cb0c0baa4e9201aa61106710dff Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Tue, 8 Feb 2022 10:23:41 -0800 Subject: [PATCH 13/18] Work folder name is only fetched from activity, not ActivityContext Bug: 217872881 Test: builds Change-Id: I36bc9c386772c20fce2d10bf1bfaad565046d38f (cherry picked from commit 57810aefa4709915d68eeefc26c99fc38c0d655d) Merged-In:I36bc9c386772c20fce2d10bf1bfaad565046d38f --- src/com/android/launcher3/folder/FolderNameProvider.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/com/android/launcher3/folder/FolderNameProvider.java b/src/com/android/launcher3/folder/FolderNameProvider.java index 7793b16807..2b621bd58b 100644 --- a/src/com/android/launcher3/folder/FolderNameProvider.java +++ b/src/com/android/launcher3/folder/FolderNameProvider.java @@ -27,14 +27,12 @@ import com.android.launcher3.R; import com.android.launcher3.model.AllAppsList; import com.android.launcher3.model.BaseModelUpdateTask; import com.android.launcher3.model.BgDataModel; -import com.android.launcher3.model.StringCache; import com.android.launcher3.model.data.AppInfo; import com.android.launcher3.model.data.FolderInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.launcher3.util.IntSparseArrayMap; import com.android.launcher3.util.Preconditions; import com.android.launcher3.util.ResourceBasedOverride; -import com.android.launcher3.views.ActivityContext; import java.util.ArrayList; import java.util.Arrays; @@ -109,9 +107,7 @@ public class FolderNameProvider implements ResourceBasedOverride { Set users = workspaceItemInfos.stream().map(w -> w.user) .collect(Collectors.toSet()); if (users.size() == 1 && !users.contains(Process.myUserHandle())) { - StringCache cache = ActivityContext.lookupContext(context).getStringCache(); - String workFolderName = cache != null - ? cache.workFolderName : context.getString(R.string.work_folder_name); + String workFolderName = context.getString(R.string.work_folder_name); setAsLastSuggestion(nameInfos, workFolderName); } From fe4e974a53173e3c3a0dac417759579add92809b Mon Sep 17 00:00:00 2001 From: Schneider Victor-tulias Date: Fri, 18 Feb 2022 15:12:27 -0800 Subject: [PATCH 14/18] Fix icon loading null pointer. Filtering out icon itemInfos with null component names when loading icons in bulk Test: manual Fixes: 220380324 Fixes: 220345439 Change-Id: I0e6f9ae0a363d17497207c92eadcac64ca42693f (cherry picked from commit 5597e4825dc357a122d29672c4682da2e3ce8aca) (cherry picked from commit 2763365eb67a9dbcec5ab6ace3c5bb2947615424) Merged-In:I0e6f9ae0a363d17497207c92eadcac64ca42693f --- src/com/android/launcher3/icons/IconCache.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/icons/IconCache.java b/src/com/android/launcher3/icons/IconCache.java index 3129e2af41..308a8f2e5d 100644 --- a/src/com/android/launcher3/icons/IconCache.java +++ b/src/com/android/launcher3/icons/IconCache.java @@ -41,9 +41,9 @@ import android.os.Trace; import android.os.UserHandle; import android.text.TextUtils; import android.util.Log; -import android.util.Pair; import androidx.annotation.NonNull; +import androidx.core.util.Pair; import com.android.launcher3.InvariantDeviceProfile; import com.android.launcher3.LauncherFiles; @@ -339,6 +339,16 @@ public class IconCache extends BaseIconCache { List> iconRequestInfos) { Map, List>> iconLoadSubsectionsMap = iconRequestInfos.stream() + .filter(iconRequest -> { + if (iconRequest.itemInfo.getTargetComponent() != null) { + return true; + } + Log.i(TAG, + "Skipping Item info with null component name: " + + iconRequest.itemInfo); + iconRequest.itemInfo.bitmap = getDefaultIcon(iconRequest.itemInfo.user); + return false; + }) .collect(groupingBy(iconRequest -> Pair.create(iconRequest.itemInfo.user, iconRequest.useLowResIcon))); From 8d68c6150f910744feeb538fdc9c548c03b7dd3c Mon Sep 17 00:00:00 2001 From: Lucas Dupin Date: Thu, 14 Apr 2022 14:06:11 -0700 Subject: [PATCH 15/18] Add flag that disables depth on overlay scroll Test: manual Fixes: 229261804 Change-Id: I132d9b5ca78255447ca72655b0a1fb1a4f86c3a1 (cherry picked from commit 4d9086807578f79c5c9e4eb4069814a824e8c294) Merged-In: I132d9b5ca78255447ca72655b0a1fb1a4f86c3a1 --- .../com/android/launcher3/statehandlers/DepthController.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/quickstep/src/com/android/launcher3/statehandlers/DepthController.java b/quickstep/src/com/android/launcher3/statehandlers/DepthController.java index 3b02599ada..eda08239d6 100644 --- a/quickstep/src/com/android/launcher3/statehandlers/DepthController.java +++ b/quickstep/src/com/android/launcher3/statehandlers/DepthController.java @@ -53,6 +53,7 @@ import java.util.function.Consumer; public class DepthController implements StateHandler, BaseActivity.MultiWindowModeChangedListener { + private static final boolean OVERLAY_SCROLL_ENABLED = false; public static final FloatProperty DEPTH = new FloatProperty("depth") { @Override @@ -294,6 +295,9 @@ public class DepthController implements StateHandler, } public void onOverlayScrollChanged(float progress) { + if (!OVERLAY_SCROLL_ENABLED) { + return; + } // Add some padding to the progress, such we don't change the depth on the last frames of // the animation. It's possible that a user flinging the feed quickly would scroll // horizontally by accident, causing the device to enter client composition unnecessarily. From e391a12d7cceabefbdb0f828101fa5e3f4e4574f Mon Sep 17 00:00:00 2001 From: Alex Chau Date: Fri, 6 May 2022 20:17:57 +0100 Subject: [PATCH 16/18] Add DisplayController in PreviewContext's allowed objects Fix: 231526132 Test: switch grids Change-Id: Ie43c54c5fbbea51ee3b795be6baa9c2eaf5e15e4 (cherry picked from commit 114572268581eead50b6f536959c50ef9da9d276) Merged-In: Ie43c54c5fbbea51ee3b795be6baa9c2eaf5e15e4 --- .../android/launcher3/graphics/LauncherPreviewRenderer.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java b/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java index a11bd4fdad..d5bcb0cbcb 100644 --- a/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java +++ b/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java @@ -83,6 +83,7 @@ import com.android.launcher3.pm.UserCache; import com.android.launcher3.uioverrides.PredictedAppIconInflater; import com.android.launcher3.uioverrides.plugins.PluginManagerWrapper; import com.android.launcher3.util.ComponentKey; +import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.IntArray; import com.android.launcher3.util.IntSet; import com.android.launcher3.util.MainThreadInitializedObject.SandboxContext; @@ -129,7 +130,7 @@ public class LauncherPreviewRenderer extends ContextWrapper super(base, UserCache.INSTANCE, InstallSessionHelper.INSTANCE, LauncherAppState.INSTANCE, InvariantDeviceProfile.INSTANCE, CustomWidgetManager.INSTANCE, PluginManagerWrapper.INSTANCE, - WindowManagerProxy.INSTANCE); + WindowManagerProxy.INSTANCE, DisplayController.INSTANCE); mIdp = idp; mObjectMap.put(InvariantDeviceProfile.INSTANCE, idp); mObjectMap.put(LauncherAppState.INSTANCE, From 86a6cb0694c94785c15a894fffe822a24c097560 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Mon, 11 Jul 2022 11:03:54 -0700 Subject: [PATCH 17/18] Fixing tab width and panner not aligned with the all-apps icons Bug: 234008165 Test: Verified on device Change-Id: Ibec3eed4aef730439d79b086d6ae23b63b66361e Merged-in: Ibec3eed4aef730439d79b086d6ae23b63b66361e (cherry picked from commit 524f4c4fbab4107856db4860f0f8f157fed53f72) Merged-In: Ibec3eed4aef730439d79b086d6ae23b63b66361e --- .../launcher3/allapps/WorkEduCard.java | 18 +++++---- .../launcher3/allapps/WorkModeSwitch.java | 39 ++++++++++++++++--- .../PersonalWorkSlidingTabStrip.java | 22 +++++++++++ 3 files changed, 67 insertions(+), 12 deletions(-) diff --git a/src/com/android/launcher3/allapps/WorkEduCard.java b/src/com/android/launcher3/allapps/WorkEduCard.java index 836cd5af93..c357764811 100644 --- a/src/com/android/launcher3/allapps/WorkEduCard.java +++ b/src/com/android/launcher3/allapps/WorkEduCard.java @@ -15,6 +15,8 @@ */ package com.android.launcher3.allapps; +import static com.android.launcher3.workprofile.PersonalWorkSlidingTabStrip.getTabWidth; + import android.content.Context; import android.util.AttributeSet; import android.view.View; @@ -87,14 +89,10 @@ public class WorkEduCard extends FrameLayout implements } @Override - public void onAnimationRepeat(Animation animation) { - - } + public void onAnimationRepeat(Animation animation) { } @Override - public void onAnimationStart(Animation animation) { - - } + public void onAnimationStart(Animation animation) { } private void removeCard() { if (mPosition == -1) { @@ -107,8 +105,14 @@ public class WorkEduCard extends FrameLayout implements } } + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int size = MeasureSpec.getSize(widthMeasureSpec); + findViewById(R.id.wrapper).getLayoutParams().width = getTabWidth(getContext(), size); + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + public void setPosition(int position) { mPosition = position; } - } diff --git a/src/com/android/launcher3/allapps/WorkModeSwitch.java b/src/com/android/launcher3/allapps/WorkModeSwitch.java index 733577eabf..f26ed87298 100644 --- a/src/com/android/launcher3/allapps/WorkModeSwitch.java +++ b/src/com/android/launcher3/allapps/WorkModeSwitch.java @@ -16,20 +16,24 @@ package com.android.launcher3.allapps; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TURN_OFF_WORK_APPS_TAP; +import static com.android.launcher3.workprofile.PersonalWorkSlidingTabStrip.getTabWidth; import android.content.Context; import android.graphics.Insets; import android.graphics.Rect; import android.util.AttributeSet; import android.view.View; +import android.view.ViewGroup.MarginLayoutParams; import android.view.ViewGroup; import android.view.WindowInsets; import android.widget.Button; import com.android.launcher3.DeviceProfile; import com.android.launcher3.Insettable; +import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.anim.KeyboardInsetAnimationCallback; +import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.model.StringCache; import com.android.launcher3.views.ActivityContext; import com.android.launcher3.workprofile.PersonalWorkSlidingTabStrip; @@ -85,16 +89,41 @@ public class WorkModeSwitch extends Button implements Insettable, View.OnClickLi @Override public void setInsets(Rect insets) { - int bottomInset = insets.bottom - mInsets.bottom; mInsets.set(insets); - ViewGroup.MarginLayoutParams marginLayoutParams = - (ViewGroup.MarginLayoutParams) getLayoutParams(); - if (marginLayoutParams != null) { - marginLayoutParams.bottomMargin = bottomInset + marginLayoutParams.bottomMargin; + ViewGroup.MarginLayoutParams lp = (MarginLayoutParams) getLayoutParams(); + if (lp != null) { + int bottomMargin = getResources().getDimensionPixelSize(R.dimen.work_fab_margin_bottom); + if (FeatureFlags.ENABLE_FLOATING_SEARCH_BAR.get()) { + bottomMargin <<= 1; // Double margin to add space above search bar. + bottomMargin += getResources().getDimensionPixelSize(R.dimen.qsb_widget_height); + } + + DeviceProfile dp = ActivityContext.lookupContext(getContext()).getDeviceProfile(); + if (!dp.isGestureMode) { + if (dp.isTaskbarPresent) { + bottomMargin += dp.taskbarSize; + } else { + bottomMargin += insets.bottom; + } + } + + lp.bottomMargin = bottomMargin; } } + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + DeviceProfile dp = ActivityContext.lookupContext(getContext()).getDeviceProfile(); + View parent = (View) getParent(); + int size = parent.getWidth() - parent.getPaddingLeft() - parent.getPaddingRight() + - 2 * dp.allAppsLeftRightPadding; + int tabWidth = getTabWidth(getContext(), size); + int shift = (size - tabWidth) / 2 + dp.allAppsLeftRightPadding; + setTranslationX(Utilities.isRtl(getResources()) ? shift : -shift); + } + @Override public void onActivePageChanged(int page) { mOnWorkTab = page == ActivityAllAppsContainerView.AdapterHolder.WORK; diff --git a/src/com/android/launcher3/workprofile/PersonalWorkSlidingTabStrip.java b/src/com/android/launcher3/workprofile/PersonalWorkSlidingTabStrip.java index 11185fb511..49db2a0b5f 100644 --- a/src/com/android/launcher3/workprofile/PersonalWorkSlidingTabStrip.java +++ b/src/com/android/launcher3/workprofile/PersonalWorkSlidingTabStrip.java @@ -23,7 +23,9 @@ import android.widget.LinearLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.android.launcher3.DeviceProfile; import com.android.launcher3.pageindicators.PageIndicator; +import com.android.launcher3.views.ActivityContext; /** * Supports two indicator colors, dedicated for personal and work tabs. @@ -72,6 +74,26 @@ public class PersonalWorkSlidingTabStrip extends LinearLayout implements PageInd return false; } + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + if (getPaddingLeft() == 0 && getPaddingRight() == 0) { + // If any padding is not specified, restrict the width to emulate padding + int size = MeasureSpec.getSize(widthMeasureSpec); + size = getTabWidth(getContext(), size); + widthMeasureSpec = MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY); + } + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + /** + * Returns distance between left and right app icons + */ + public static int getTabWidth(Context context, int totalWidth) { + DeviceProfile grid = ActivityContext.lookupContext(context).getDeviceProfile(); + int iconPadding = totalWidth / grid.numShownAllAppsColumns - grid.allAppsIconSizePx; + return totalWidth - iconPadding; + } + /** * Interface definition for a callback to be invoked when an active page has been changed. */ From b2b614e1693fc6c024ff8ea692265acc11410895 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Wed, 22 Jun 2022 13:34:23 -0700 Subject: [PATCH 18/18] Removing tabWidth calculation and using DeviceProfile directly This removes some dependency on FloatingHeaderView, making it easier to replace Bug: 234008165 Test: Verified that the UI does not change Change-Id: I363c98c23f84fe570ea9cb1a40128359f5b67c9f Merged-In: I363c98c23f84fe570ea9cb1a40128359f5b67c9f (cherry picked from commit 42b640404aa3e5b3990f9220797809c9ab3a066f) Merged-In: I363c98c23f84fe570ea9cb1a40128359f5b67c9f --- .../appprediction/AppsDividerView.java | 8 ----- .../appprediction/PredictionRowView.java | 7 ---- .../launcher3/allapps/FloatingHeaderRow.java | 5 --- .../launcher3/allapps/FloatingHeaderView.java | 33 ++----------------- .../launcher3/allapps/PluginHeaderRow.java | 5 --- .../launcher3/allapps/WorkEduCard.java | 2 -- .../launcher3/allapps/WorkModeSwitch.java | 6 ++-- .../launcher3/allapps/WorkProfileManager.java | 20 ----------- 8 files changed, 5 insertions(+), 81 deletions(-) diff --git a/quickstep/src/com/android/launcher3/appprediction/AppsDividerView.java b/quickstep/src/com/android/launcher3/appprediction/AppsDividerView.java index 0284ae4803..f42b39fb2d 100644 --- a/quickstep/src/com/android/launcher3/appprediction/AppsDividerView.java +++ b/quickstep/src/com/android/launcher3/appprediction/AppsDividerView.java @@ -21,7 +21,6 @@ import static com.android.launcher3.util.OnboardingPrefs.ALL_APPS_VISITED_COUNT; import android.annotation.TargetApi; import android.content.Context; import android.graphics.Canvas; -import android.graphics.Rect; import android.graphics.Typeface; import android.os.Build; import android.text.Layout; @@ -33,7 +32,6 @@ import android.view.View; import androidx.annotation.ColorInt; import androidx.core.content.ContextCompat; -import com.android.launcher3.DeviceProfile; import com.android.launcher3.R; import com.android.launcher3.allapps.FloatingHeaderRow; import com.android.launcher3.allapps.FloatingHeaderView; @@ -238,12 +236,6 @@ public class AppsDividerView extends View implements FloatingHeaderRow { getPaddingBottom() + getPaddingTop()); } - @Override - public void setInsets(Rect insets, DeviceProfile grid) { - int leftRightPadding = grid.allAppsLeftRightPadding; - setPadding(leftRightPadding, getPaddingTop(), leftRightPadding, getPaddingBottom()); - } - @Override public void setVerticalScroll(int scroll, boolean isScrolledOut) { setTranslationY(scroll); diff --git a/quickstep/src/com/android/launcher3/appprediction/PredictionRowView.java b/quickstep/src/com/android/launcher3/appprediction/PredictionRowView.java index 1dec73721c..351a3bc164 100644 --- a/quickstep/src/com/android/launcher3/appprediction/PredictionRowView.java +++ b/quickstep/src/com/android/launcher3/appprediction/PredictionRowView.java @@ -19,7 +19,6 @@ package com.android.launcher3.appprediction; import android.annotation.TargetApi; import android.content.Context; import android.graphics.Canvas; -import android.graphics.Rect; import android.os.Build; import android.util.AttributeSet; import android.view.LayoutInflater; @@ -251,12 +250,6 @@ public class PredictionRowView getTypeClass() { return PredictionRowView.class; diff --git a/src/com/android/launcher3/allapps/FloatingHeaderRow.java b/src/com/android/launcher3/allapps/FloatingHeaderRow.java index 6ff2132286..75e527aaa8 100644 --- a/src/com/android/launcher3/allapps/FloatingHeaderRow.java +++ b/src/com/android/launcher3/allapps/FloatingHeaderRow.java @@ -15,11 +15,8 @@ */ package com.android.launcher3.allapps; -import android.graphics.Rect; import android.view.View; -import com.android.launcher3.DeviceProfile; - /** * A abstract representation of a row in all-apps view */ @@ -29,8 +26,6 @@ public interface FloatingHeaderRow { void setup(FloatingHeaderView parent, FloatingHeaderRow[] allRows, boolean tabsHidden); - void setInsets(Rect insets, DeviceProfile grid); - int getExpectedHeight(); /** diff --git a/src/com/android/launcher3/allapps/FloatingHeaderView.java b/src/com/android/launcher3/allapps/FloatingHeaderView.java index 6ecbad24e8..d0331c9266 100644 --- a/src/com/android/launcher3/allapps/FloatingHeaderView.java +++ b/src/com/android/launcher3/allapps/FloatingHeaderView.java @@ -30,7 +30,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.recyclerview.widget.RecyclerView; -import com.android.launcher3.DeviceProfile; import com.android.launcher3.Insettable; import com.android.launcher3.R; import com.android.launcher3.allapps.BaseAllAppsContainerView.AdapterHolder; @@ -158,22 +157,6 @@ public class FloatingHeaderView extends LinearLayout implements PluginManagerWrapper.INSTANCE.get(getContext()).removePluginListener(this); } - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - mTabLayout.getLayoutParams().width = getTabWidth(); - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - } - - /** - * Returns distance between left and right app icons - */ - public int getTabWidth() { - DeviceProfile grid = ActivityContext.lookupContext(getContext()).getDeviceProfile(); - int totalWidth = getMeasuredWidth() - getPaddingLeft() - getPaddingRight(); - int iconPadding = totalWidth / grid.numShownAllAppsColumns - grid.allAppsIconSizePx; - return totalWidth - iconPadding - grid.allAppsIconDrawablePaddingPx; - } - private void recreateAllRowsArray() { int pluginCount = mPluginRows.size(); if (pluginCount == 0) { @@ -423,15 +406,6 @@ public class FloatingHeaderView extends LinearLayout implements p.y = getTop() - mCurrentRV.getTop() - ((ViewGroup) mCurrentRV.getParent()).getTop(); } - public boolean hasVisibleContent() { - for (FloatingHeaderRow row : mAllRows) { - if (row.hasVisibleContent()) { - return true; - } - } - return false; - } - public boolean isHeaderProtectionSupported() { return mHeaderProtectionSupported; } @@ -443,10 +417,9 @@ public class FloatingHeaderView extends LinearLayout implements @Override public void setInsets(Rect insets) { - DeviceProfile grid = ActivityContext.lookupContext(getContext()).getDeviceProfile(); - for (FloatingHeaderRow row : mAllRows) { - row.setInsets(insets, grid); - } + int leftRightPadding = ActivityContext.lookupContext(getContext()) + .getDeviceProfile().allAppsLeftRightPadding; + setPadding(leftRightPadding, getPaddingTop(), leftRightPadding, getPaddingBottom()); } public T findFixedRowByType(Class type) { diff --git a/src/com/android/launcher3/allapps/PluginHeaderRow.java b/src/com/android/launcher3/allapps/PluginHeaderRow.java index 5b5fbb7ff9..a9d36d1909 100644 --- a/src/com/android/launcher3/allapps/PluginHeaderRow.java +++ b/src/com/android/launcher3/allapps/PluginHeaderRow.java @@ -18,10 +18,8 @@ package com.android.launcher3.allapps; import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; -import android.graphics.Rect; import android.view.View; -import com.android.launcher3.DeviceProfile; import com.android.systemui.plugins.AllAppsRow; /** @@ -42,9 +40,6 @@ public class PluginHeaderRow implements FloatingHeaderRow { public void setup(FloatingHeaderView parent, FloatingHeaderRow[] allRows, boolean tabsHidden) { } - @Override - public void setInsets(Rect insets, DeviceProfile grid) { } - @Override public int getExpectedHeight() { return mPlugin.getExpectedHeight(); diff --git a/src/com/android/launcher3/allapps/WorkEduCard.java b/src/com/android/launcher3/allapps/WorkEduCard.java index c357764811..539cff1a37 100644 --- a/src/com/android/launcher3/allapps/WorkEduCard.java +++ b/src/com/android/launcher3/allapps/WorkEduCard.java @@ -72,8 +72,6 @@ public class WorkEduCard extends FrameLayout implements protected void onFinishInflate() { super.onFinishInflate(); findViewById(R.id.action_btn).setOnClickListener(this); - MarginLayoutParams lp = ((MarginLayoutParams) findViewById(R.id.wrapper).getLayoutParams()); - lp.width = mActivityContext.getAppsView().getFloatingHeaderView().getTabWidth(); } @Override diff --git a/src/com/android/launcher3/allapps/WorkModeSwitch.java b/src/com/android/launcher3/allapps/WorkModeSwitch.java index f26ed87298..edb012854a 100644 --- a/src/com/android/launcher3/allapps/WorkModeSwitch.java +++ b/src/com/android/launcher3/allapps/WorkModeSwitch.java @@ -24,7 +24,6 @@ import android.graphics.Rect; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup.MarginLayoutParams; -import android.view.ViewGroup; import android.view.WindowInsets; import android.widget.Button; @@ -54,7 +53,6 @@ public class WorkModeSwitch extends Button implements Insettable, View.OnClickLi private boolean mWorkEnabled; private boolean mOnWorkTab; - public WorkModeSwitch(Context context) { this(context, null, 0); } @@ -90,7 +88,7 @@ public class WorkModeSwitch extends Button implements Insettable, View.OnClickLi @Override public void setInsets(Rect insets) { mInsets.set(insets); - ViewGroup.MarginLayoutParams lp = (MarginLayoutParams) getLayoutParams(); + MarginLayoutParams lp = (MarginLayoutParams) getLayoutParams(); if (lp != null) { int bottomMargin = getResources().getDimensionPixelSize(R.dimen.work_fab_margin_bottom); if (FeatureFlags.ENABLE_FLOATING_SEARCH_BAR.get()) { @@ -99,6 +97,7 @@ public class WorkModeSwitch extends Button implements Insettable, View.OnClickLi } DeviceProfile dp = ActivityContext.lookupContext(getContext()).getDeviceProfile(); + lp.rightMargin = lp.leftMargin = dp.allAppsLeftRightPadding; if (!dp.isGestureMode) { if (dp.isTaskbarPresent) { bottomMargin += dp.taskbarSize; @@ -111,7 +110,6 @@ public class WorkModeSwitch extends Button implements Insettable, View.OnClickLi } } - @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); diff --git a/src/com/android/launcher3/allapps/WorkProfileManager.java b/src/com/android/launcher3/allapps/WorkProfileManager.java index b70cb13b07..2f5b7a2dd3 100644 --- a/src/com/android/launcher3/allapps/WorkProfileManager.java +++ b/src/com/android/launcher3/allapps/WorkProfileManager.java @@ -26,7 +26,6 @@ import android.os.Process; import android.os.UserHandle; import android.os.UserManager; import android.util.Log; -import android.view.ViewGroup; import androidx.annotation.IntDef; import androidx.annotation.Nullable; @@ -34,7 +33,6 @@ import androidx.annotation.RequiresApi; import com.android.launcher3.DeviceProfile; import com.android.launcher3.R; -import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.workprofile.PersonalWorkSlidingTabStrip; @@ -144,24 +142,6 @@ public class WorkProfileManager implements PersonalWorkSlidingTabStrip.OnActiveP mWorkModeSwitch = (WorkModeSwitch) mAllApps.getLayoutInflater().inflate( R.layout.work_mode_fab, mAllApps, false); } - ViewGroup.MarginLayoutParams lp = - (ViewGroup.MarginLayoutParams) mWorkModeSwitch.getLayoutParams(); - int workFabMarginBottom = - mWorkModeSwitch.getResources().getDimensionPixelSize( - R.dimen.work_fab_margin_bottom); - if (FeatureFlags.ENABLE_FLOATING_SEARCH_BAR.get()) { - workFabMarginBottom <<= 1; // Double margin to add space above search bar. - workFabMarginBottom += - mWorkModeSwitch.getResources().getDimensionPixelSize(R.dimen.qsb_widget_height); - } - if (!mAllApps.mActivityContext.getDeviceProfile().isGestureMode){ - workFabMarginBottom += mAllApps.mActivityContext.getDeviceProfile().getInsets().bottom; - } - lp.bottomMargin = workFabMarginBottom; - int totalScreenWidth = mDeviceProfile.widthPx; - int personalWorkTabWidth = - mAllApps.mActivityContext.getAppsView().getFloatingHeaderView().getTabWidth(); - lp.rightMargin = lp.leftMargin = (totalScreenWidth - personalWorkTabWidth) / 2; if (mWorkModeSwitch.getParent() != mAllApps) { mAllApps.addView(mWorkModeSwitch); }