Files
Lawnchair/quickstep/src/com/android/quickstep/util/UnfoldMoveFromCenterWorkspaceAnimator.java
T
Nick Chameyev 875c1b2735 Update unfold transition package name
These changes contain only updating of the package name.
Changing it to more specific package name in order to
not confuse with Android SDK classes.

Bug: 190818044
Test: manual
Change-Id: I9434ef1b82ebfe9bd032637276873777297c9022
2021-08-18 17:22:17 +01:00

141 lines
5.2 KiB
Java

/*
* 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.quickstep.util;
import android.annotation.NonNull;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import com.android.launcher3.BubbleTextView;
import com.android.launcher3.CellLayout;
import com.android.launcher3.Hotseat;
import com.android.launcher3.Launcher;
import com.android.launcher3.ShortcutAndWidgetContainer;
import com.android.launcher3.Workspace;
import com.android.launcher3.widget.NavigableAppWidgetHostView;
import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator;
import com.android.systemui.shared.animation.UnfoldMoveFromCenterAnimator.TranslationApplier;
import com.android.systemui.unfold.UnfoldTransitionProgressProvider;
import java.util.HashMap;
import java.util.Map;
/**
* Animation that moves launcher icons and widgets from center to the sides (final position)
*/
public class UnfoldMoveFromCenterWorkspaceAnimator
implements UnfoldTransitionProgressProvider.TransitionProgressListener {
private final Launcher mLauncher;
private final UnfoldMoveFromCenterAnimator mMoveFromCenterAnimation;
private final Map<ViewGroup, Boolean> mOriginalClipToPadding = new HashMap<>();
private final Map<ViewGroup, Boolean> mOriginalClipChildren = new HashMap<>();
public UnfoldMoveFromCenterWorkspaceAnimator(Launcher launcher, WindowManager windowManager) {
mLauncher = launcher;
mMoveFromCenterAnimation = new UnfoldMoveFromCenterAnimator(windowManager,
new WorkspaceViewsTranslationApplier());
}
@Override
public void onTransitionStarted() {
mMoveFromCenterAnimation.updateDisplayProperties();
Workspace workspace = mLauncher.getWorkspace();
Hotseat hotseat = mLauncher.getHotseat();
// App icons and widgets
workspace
.forEachVisiblePage(page -> {
final CellLayout cellLayout = (CellLayout) page;
ShortcutAndWidgetContainer itemsContainer = cellLayout
.getShortcutsAndWidgets();
disableClipping(cellLayout);
for (int i = 0; i < itemsContainer.getChildCount(); i++) {
View child = itemsContainer.getChildAt(i);
mMoveFromCenterAnimation.registerViewForAnimation(child);
}
});
disableClipping(workspace);
// Hotseat icons
ViewGroup hotseatIcons = hotseat.getShortcutsAndWidgets();
disableClipping(hotseat);
for (int i = 0; i < hotseatIcons.getChildCount(); i++) {
View child = hotseatIcons.getChildAt(i);
mMoveFromCenterAnimation.registerViewForAnimation(child);
}
onTransitionProgress(0f);
}
@Override
public void onTransitionProgress(float progress) {
mMoveFromCenterAnimation.onTransitionProgress(progress);
}
@Override
public void onTransitionFinished() {
mMoveFromCenterAnimation.onTransitionFinished();
mMoveFromCenterAnimation.clearRegisteredViews();
restoreClipping(mLauncher.getWorkspace());
mLauncher.getWorkspace().forEachVisiblePage(page -> restoreClipping((CellLayout) page));
restoreClipping(mLauncher.getHotseat());
mOriginalClipChildren.clear();
mOriginalClipToPadding.clear();
}
private void disableClipping(ViewGroup view) {
mOriginalClipToPadding.put(view, view.getClipToPadding());
mOriginalClipChildren.put(view, view.getClipChildren());
view.setClipToPadding(false);
view.setClipChildren(false);
}
private void restoreClipping(ViewGroup view) {
final Boolean originalClipToPadding = mOriginalClipToPadding.get(view);
if (originalClipToPadding != null) {
view.setClipToPadding(originalClipToPadding);
}
final Boolean originalClipChildren = mOriginalClipChildren.get(view);
if (originalClipChildren != null) {
view.setClipChildren(originalClipChildren);
}
}
private static class WorkspaceViewsTranslationApplier implements TranslationApplier {
@Override
public void apply(@NonNull View view, float x, float y) {
if (view instanceof NavigableAppWidgetHostView) {
((NavigableAppWidgetHostView) view).setTranslationForMoveFromCenterAnimation(x, y);
} else if (view instanceof BubbleTextView) {
((BubbleTextView) view).setTranslationForMoveFromCenterAnimation(x, y);
} else {
view.setTranslationX(x);
view.setTranslationY(y);
}
}
}
}