Loading res/layout/all_apps_content_layout.xml 0 → 100644 +27 −0 Original line number Diff line number Diff line <?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. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/apps_list_view_override" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/search_container_all_apps" android:clipToPadding="false" android:descendantFocusability="afterDescendants" android:focusable="true" android:layout_marginTop="@dimen/all_apps_header_top_padding" android:orientation="vertical"> </LinearLayout> src/com/android/launcher3/Launcher.java +1 −0 Original line number Diff line number Diff line Loading @@ -1547,6 +1547,7 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, mOverlayManager.onActivityDestroyed(this); mAppTransitionManager.unregisterRemoteAnimations(); mUserChangedCallbackCloseable.close(); mAllAppsController.onActivityDestroyed(); } public LauncherAccessibilityDelegate getAccessibilityDelegate() { Loading src/com/android/launcher3/allapps/AllAppsTransitionController.java +58 −5 Original line number Diff line number Diff line package com.android.launcher3.allapps; import static com.android.launcher3.LauncherState.ALL_APPS; import static com.android.launcher3.LauncherState.ALL_APPS_CONTENT; import static com.android.launcher3.LauncherState.ALL_APPS_HEADER_EXTRA; import static com.android.launcher3.LauncherState.APPS_VIEW_ITEM_MASK; Loading @@ -17,7 +18,10 @@ import static com.android.launcher3.util.SystemUiController.UI_STATE_ALL_APPS; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.content.Context; import android.util.FloatProperty; import android.view.View; import android.view.ViewGroup; import android.view.animation.Interpolator; import com.android.launcher3.DeviceProfile; Loading @@ -30,8 +34,11 @@ import com.android.launcher3.anim.AnimationSuccessListener; import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.anim.PropertySetter; import com.android.launcher3.states.StateAnimationConfig; import com.android.launcher3.uioverrides.plugins.PluginManagerWrapper; import com.android.launcher3.util.Themes; import com.android.launcher3.views.ScrimView; import com.android.systemui.plugins.AllAppsSearchPlugin; import com.android.systemui.plugins.PluginListener; /** * Handles AllApps view transition. Loading @@ -43,7 +50,8 @@ import com.android.launcher3.views.ScrimView; * If release velocity < THRES1, snap according to either top or bottom depending on whether it's * closer to top or closer to the page indicator. */ public class AllAppsTransitionController implements StateHandler, OnDeviceProfileChangeListener { public class AllAppsTransitionController implements StateHandler, OnDeviceProfileChangeListener, PluginListener<AllAppsSearchPlugin> { public static final FloatProperty<AllAppsTransitionController> ALL_APPS_PROGRESS = new FloatProperty<AllAppsTransitionController>("allAppsProgress") { Loading Loading @@ -79,6 +87,9 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil private float mScrollRangeDelta = 0; private AllAppsSearchPlugin mPlugin; private View mPluginContent; public AllAppsTransitionController(Launcher l) { mLauncher = l; mShiftRange = mLauncher.getDeviceProfile().heightPx; Loading Loading @@ -145,6 +156,7 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil setProgress(state.getVerticalProgress(mLauncher)); setAlphas(state, new StateAnimationConfig(), NO_ANIM_PROPERTY_SETTER); onProgressAnimationEnd(); updatePlugin(state); } /** Loading Loading @@ -178,6 +190,20 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil builder.add(anim); setAlphas(toState, config, builder); updatePlugin(toState); } private void updatePlugin(LauncherState toState) { if (mPlugin == null) return; if (toState == ALL_APPS) { // TODO: change this from toggle event to continuous transition event. mPlugin.setEditText(mAppsView.getSearchUiManager().setTextSearchEnabled(true)); } else { mAppsView.getSearchUiManager().setTextSearchEnabled(false); mPlugin.setEditText(null); } } public Animator createSpringAnimation(float... progressValues) { Loading @@ -196,10 +222,15 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil Interpolator allAppsFade = config.getInterpolator(ANIM_ALL_APPS_FADE, LINEAR); Interpolator headerFade = config.getInterpolator(ANIM_ALL_APPS_HEADER_FADE, allAppsFade); if (mPlugin == null) { setter.setViewAlpha(mAppsView.getContentView(), hasAllAppsContent ? 1 : 0, allAppsFade); setter.setViewAlpha(mAppsView.getScrollBar(), hasAllAppsContent ? 1 : 0, allAppsFade); mAppsView.getFloatingHeaderView().setContentVisibility(hasHeaderExtra, hasAllAppsContent, setter, headerFade, allAppsFade); mAppsView.getFloatingHeaderView().setContentVisibility(hasHeaderExtra, hasAllAppsContent, setter, headerFade, allAppsFade); } else { setter.setViewAlpha(mPluginContent, hasAllAppsContent ? 1 : 0, allAppsFade); } mAppsView.getSearchUiManager().setContentVisibility(visibleElements, setter, allAppsFade); setter.setInt(mScrimView, ScrimView.DRAG_HANDLE_ALPHA, Loading @@ -215,6 +246,8 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil public void setupViews(AllAppsContainerView appsView, ScrimView scrimView) { mAppsView = appsView; mScrimView = scrimView; PluginManagerWrapper.INSTANCE.get(mLauncher) .addPluginListener(this, AllAppsSearchPlugin.class, false); } /** Loading @@ -238,4 +271,24 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil mAppsView.reset(false /* animate */); } } @Override public void onPluginConnected(AllAppsSearchPlugin plugin, Context context) { mPlugin = plugin; mPluginContent = mLauncher.getLayoutInflater().inflate( R.layout.all_apps_content_layout, mAppsView, false); mAppsView.addView(mPluginContent); mPluginContent.setAlpha(0f); mPlugin.setup((ViewGroup) mPluginContent); } @Override public void onPluginDisconnected(AllAppsSearchPlugin plugin) { mPlugin = null; mAppsView.removeView(mPluginContent); } public void onActivityDestroyed() { PluginManagerWrapper.INSTANCE.get(mLauncher).removePluginListener(this); } } src/com/android/launcher3/allapps/SearchUiManager.java +13 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,9 @@ package com.android.launcher3.allapps; import android.graphics.Rect; import android.view.KeyEvent; import android.view.animation.Interpolator; import android.widget.EditText; import androidx.annotation.Nullable; import com.android.launcher3.anim.PropertySetter; Loading Loading @@ -52,4 +55,14 @@ public interface SearchUiManager { */ void setContentVisibility(int visibleElements, PropertySetter setter, Interpolator interpolator); /** * Called to control how the search UI result should be handled. * * @param isEnabled when {@code true}, the search is all handled inside AOSP * and is not overlayable. * @return the searchbox edit text object */ @Nullable EditText setTextSearchEnabled(boolean isEnabled); } src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java +6 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup.MarginLayoutParams; import android.view.animation.Interpolator; import android.widget.EditText; import com.android.launcher3.BaseDraggingActivity; import com.android.launcher3.DeviceProfile; Loading Loading @@ -214,4 +215,9 @@ public class AppsSearchContainerLayout extends ExtendedEditText Interpolator interpolator) { setter.setViewAlpha(this, (visibleElements & ALL_APPS_HEADER) != 0 ? 1 : 0, interpolator); } @Override public EditText setTextSearchEnabled(boolean isEnabled) { return this; } } Loading
res/layout/all_apps_content_layout.xml 0 → 100644 +27 −0 Original line number Diff line number Diff line <?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. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/apps_list_view_override" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/search_container_all_apps" android:clipToPadding="false" android:descendantFocusability="afterDescendants" android:focusable="true" android:layout_marginTop="@dimen/all_apps_header_top_padding" android:orientation="vertical"> </LinearLayout>
src/com/android/launcher3/Launcher.java +1 −0 Original line number Diff line number Diff line Loading @@ -1547,6 +1547,7 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, mOverlayManager.onActivityDestroyed(this); mAppTransitionManager.unregisterRemoteAnimations(); mUserChangedCallbackCloseable.close(); mAllAppsController.onActivityDestroyed(); } public LauncherAccessibilityDelegate getAccessibilityDelegate() { Loading
src/com/android/launcher3/allapps/AllAppsTransitionController.java +58 −5 Original line number Diff line number Diff line package com.android.launcher3.allapps; import static com.android.launcher3.LauncherState.ALL_APPS; import static com.android.launcher3.LauncherState.ALL_APPS_CONTENT; import static com.android.launcher3.LauncherState.ALL_APPS_HEADER_EXTRA; import static com.android.launcher3.LauncherState.APPS_VIEW_ITEM_MASK; Loading @@ -17,7 +18,10 @@ import static com.android.launcher3.util.SystemUiController.UI_STATE_ALL_APPS; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.content.Context; import android.util.FloatProperty; import android.view.View; import android.view.ViewGroup; import android.view.animation.Interpolator; import com.android.launcher3.DeviceProfile; Loading @@ -30,8 +34,11 @@ import com.android.launcher3.anim.AnimationSuccessListener; import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.anim.PropertySetter; import com.android.launcher3.states.StateAnimationConfig; import com.android.launcher3.uioverrides.plugins.PluginManagerWrapper; import com.android.launcher3.util.Themes; import com.android.launcher3.views.ScrimView; import com.android.systemui.plugins.AllAppsSearchPlugin; import com.android.systemui.plugins.PluginListener; /** * Handles AllApps view transition. Loading @@ -43,7 +50,8 @@ import com.android.launcher3.views.ScrimView; * If release velocity < THRES1, snap according to either top or bottom depending on whether it's * closer to top or closer to the page indicator. */ public class AllAppsTransitionController implements StateHandler, OnDeviceProfileChangeListener { public class AllAppsTransitionController implements StateHandler, OnDeviceProfileChangeListener, PluginListener<AllAppsSearchPlugin> { public static final FloatProperty<AllAppsTransitionController> ALL_APPS_PROGRESS = new FloatProperty<AllAppsTransitionController>("allAppsProgress") { Loading Loading @@ -79,6 +87,9 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil private float mScrollRangeDelta = 0; private AllAppsSearchPlugin mPlugin; private View mPluginContent; public AllAppsTransitionController(Launcher l) { mLauncher = l; mShiftRange = mLauncher.getDeviceProfile().heightPx; Loading Loading @@ -145,6 +156,7 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil setProgress(state.getVerticalProgress(mLauncher)); setAlphas(state, new StateAnimationConfig(), NO_ANIM_PROPERTY_SETTER); onProgressAnimationEnd(); updatePlugin(state); } /** Loading Loading @@ -178,6 +190,20 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil builder.add(anim); setAlphas(toState, config, builder); updatePlugin(toState); } private void updatePlugin(LauncherState toState) { if (mPlugin == null) return; if (toState == ALL_APPS) { // TODO: change this from toggle event to continuous transition event. mPlugin.setEditText(mAppsView.getSearchUiManager().setTextSearchEnabled(true)); } else { mAppsView.getSearchUiManager().setTextSearchEnabled(false); mPlugin.setEditText(null); } } public Animator createSpringAnimation(float... progressValues) { Loading @@ -196,10 +222,15 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil Interpolator allAppsFade = config.getInterpolator(ANIM_ALL_APPS_FADE, LINEAR); Interpolator headerFade = config.getInterpolator(ANIM_ALL_APPS_HEADER_FADE, allAppsFade); if (mPlugin == null) { setter.setViewAlpha(mAppsView.getContentView(), hasAllAppsContent ? 1 : 0, allAppsFade); setter.setViewAlpha(mAppsView.getScrollBar(), hasAllAppsContent ? 1 : 0, allAppsFade); mAppsView.getFloatingHeaderView().setContentVisibility(hasHeaderExtra, hasAllAppsContent, setter, headerFade, allAppsFade); mAppsView.getFloatingHeaderView().setContentVisibility(hasHeaderExtra, hasAllAppsContent, setter, headerFade, allAppsFade); } else { setter.setViewAlpha(mPluginContent, hasAllAppsContent ? 1 : 0, allAppsFade); } mAppsView.getSearchUiManager().setContentVisibility(visibleElements, setter, allAppsFade); setter.setInt(mScrimView, ScrimView.DRAG_HANDLE_ALPHA, Loading @@ -215,6 +246,8 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil public void setupViews(AllAppsContainerView appsView, ScrimView scrimView) { mAppsView = appsView; mScrimView = scrimView; PluginManagerWrapper.INSTANCE.get(mLauncher) .addPluginListener(this, AllAppsSearchPlugin.class, false); } /** Loading @@ -238,4 +271,24 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil mAppsView.reset(false /* animate */); } } @Override public void onPluginConnected(AllAppsSearchPlugin plugin, Context context) { mPlugin = plugin; mPluginContent = mLauncher.getLayoutInflater().inflate( R.layout.all_apps_content_layout, mAppsView, false); mAppsView.addView(mPluginContent); mPluginContent.setAlpha(0f); mPlugin.setup((ViewGroup) mPluginContent); } @Override public void onPluginDisconnected(AllAppsSearchPlugin plugin) { mPlugin = null; mAppsView.removeView(mPluginContent); } public void onActivityDestroyed() { PluginManagerWrapper.INSTANCE.get(mLauncher).removePluginListener(this); } }
src/com/android/launcher3/allapps/SearchUiManager.java +13 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,9 @@ package com.android.launcher3.allapps; import android.graphics.Rect; import android.view.KeyEvent; import android.view.animation.Interpolator; import android.widget.EditText; import androidx.annotation.Nullable; import com.android.launcher3.anim.PropertySetter; Loading Loading @@ -52,4 +55,14 @@ public interface SearchUiManager { */ void setContentVisibility(int visibleElements, PropertySetter setter, Interpolator interpolator); /** * Called to control how the search UI result should be handled. * * @param isEnabled when {@code true}, the search is all handled inside AOSP * and is not overlayable. * @return the searchbox edit text object */ @Nullable EditText setTextSearchEnabled(boolean isEnabled); }
src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java +6 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup.MarginLayoutParams; import android.view.animation.Interpolator; import android.widget.EditText; import com.android.launcher3.BaseDraggingActivity; import com.android.launcher3.DeviceProfile; Loading Loading @@ -214,4 +215,9 @@ public class AppsSearchContainerLayout extends ExtendedEditText Interpolator interpolator) { setter.setViewAlpha(this, (visibleElements & ALL_APPS_HEADER) != 0 ? 1 : 0, interpolator); } @Override public EditText setTextSearchEnabled(boolean isEnabled) { return this; } }