mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-20 11:18:21 +00:00
[automerger] Fixing launcher going to a different state when dragging an icon from different activity am: 4dcda06542
Change-Id: Ifcb89488c351ba866026cfbdf3645b4358eeac8f
This commit is contained in:
@@ -50,6 +50,7 @@ import android.graphics.Matrix;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.os.CancellationSignal;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.util.Log;
|
||||
@@ -236,8 +237,14 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag
|
||||
return bounds;
|
||||
}
|
||||
|
||||
public void setRemoteAnimationProvider(RemoteAnimationProvider animationProvider) {
|
||||
public void setRemoteAnimationProvider(final RemoteAnimationProvider animationProvider,
|
||||
CancellationSignal cancellationSignal) {
|
||||
mRemoteAnimationProvider = animationProvider;
|
||||
cancellationSignal.setOnCancelListener(() -> {
|
||||
if (animationProvider == mRemoteAnimationProvider) {
|
||||
mRemoteAnimationProvider = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -20,6 +20,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.CancellationSignal;
|
||||
import android.os.Handler;
|
||||
|
||||
import com.android.launcher3.states.InternalStateHandler;
|
||||
@@ -48,10 +49,11 @@ public class LauncherInitListener extends InternalStateHandler implements Activi
|
||||
|
||||
// Set a one-time animation provider. After the first call, this will get cleared.
|
||||
// TODO: Probably also check the intended target id.
|
||||
CancellationSignal cancellationSignal = new CancellationSignal();
|
||||
appTransitionManager.setRemoteAnimationProvider((targets) -> {
|
||||
|
||||
// On the first call clear the reference.
|
||||
appTransitionManager.setRemoteAnimationProvider(null);
|
||||
cancellationSignal.cancel();
|
||||
RemoteAnimationProvider provider = mRemoteAnimationProvider;
|
||||
mRemoteAnimationProvider = null;
|
||||
|
||||
@@ -59,7 +61,7 @@ public class LauncherInitListener extends InternalStateHandler implements Activi
|
||||
return provider.createWindowAnimation(targets);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}, cancellationSignal);
|
||||
}
|
||||
OverviewCallbacks.get(launcher).onInitOverviewTransition();
|
||||
return mOnInitListener.test(launcher, alreadyOnHome);
|
||||
|
||||
@@ -25,14 +25,19 @@ import static com.android.launcher3.LauncherState.NORMAL;
|
||||
import static com.android.launcher3.LauncherState.OVERVIEW;
|
||||
import static com.android.launcher3.allapps.DiscoveryBounce.HOME_BOUNCE_SEEN;
|
||||
import static com.android.launcher3.allapps.DiscoveryBounce.SHELF_BOUNCE_SEEN;
|
||||
import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_CLOSING;
|
||||
|
||||
import android.animation.AnimatorSet;
|
||||
import android.animation.ValueAnimator;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.os.CancellationSignal;
|
||||
import android.util.Base64;
|
||||
|
||||
import com.android.launcher3.AbstractFloatingView;
|
||||
import com.android.launcher3.DeviceProfile;
|
||||
import com.android.launcher3.Launcher;
|
||||
import com.android.launcher3.LauncherAppTransitionManagerImpl;
|
||||
import com.android.launcher3.LauncherState;
|
||||
import com.android.launcher3.LauncherStateManager;
|
||||
import com.android.launcher3.LauncherStateManager.StateHandler;
|
||||
@@ -41,6 +46,8 @@ import com.android.launcher3.anim.AnimatorPlaybackController;
|
||||
import com.android.launcher3.util.TouchController;
|
||||
import com.android.quickstep.OverviewInteractionState;
|
||||
import com.android.quickstep.RecentsModel;
|
||||
import com.android.quickstep.util.RemoteAnimationTargetSet;
|
||||
import com.android.quickstep.util.RemoteFadeOutAnimationListener;
|
||||
import com.android.quickstep.views.RecentsView;
|
||||
import com.android.systemui.shared.system.ActivityCompat;
|
||||
import com.android.systemui.shared.system.WindowManagerWrapper;
|
||||
@@ -179,6 +186,23 @@ public class UiFactory {
|
||||
}
|
||||
}
|
||||
|
||||
public static void useFadeOutAnimationForLauncherStart(Launcher launcher,
|
||||
CancellationSignal cancellationSignal) {
|
||||
LauncherAppTransitionManagerImpl appTransitionManager =
|
||||
(LauncherAppTransitionManagerImpl) launcher.getAppTransitionManager();
|
||||
appTransitionManager.setRemoteAnimationProvider((targets) -> {
|
||||
|
||||
// On the first call clear the reference.
|
||||
cancellationSignal.cancel();
|
||||
|
||||
ValueAnimator fadeAnimation = ValueAnimator.ofFloat(1, 0);
|
||||
fadeAnimation.addUpdateListener(new RemoteFadeOutAnimationListener(targets));
|
||||
AnimatorSet anim = new AnimatorSet();
|
||||
anim.play(fadeAnimation);
|
||||
return anim;
|
||||
}, cancellationSignal);
|
||||
}
|
||||
|
||||
public static boolean dumpActivity(Activity activity, PrintWriter writer) {
|
||||
if (!Utilities.IS_DEBUG_DEVICE) {
|
||||
return false;
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright (C) 2018 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 static com.android.quickstep.util.RemoteAnimationProvider.prepareTargetsForFirstFrame;
|
||||
import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_CLOSING;
|
||||
|
||||
import android.animation.ValueAnimator;
|
||||
import android.animation.ValueAnimator.AnimatorUpdateListener;
|
||||
|
||||
import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
|
||||
import com.android.systemui.shared.system.TransactionCompat;
|
||||
|
||||
/**
|
||||
* Animation listener which fades out the closing targets
|
||||
*/
|
||||
public class RemoteFadeOutAnimationListener implements AnimatorUpdateListener {
|
||||
|
||||
private final RemoteAnimationTargetSet mTarget;
|
||||
private boolean mFirstFrame = true;
|
||||
|
||||
public RemoteFadeOutAnimationListener(RemoteAnimationTargetCompat[] targets) {
|
||||
mTarget = new RemoteAnimationTargetSet(targets, MODE_CLOSING);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationUpdate(ValueAnimator valueAnimator) {
|
||||
TransactionCompat t = new TransactionCompat();
|
||||
if (mFirstFrame) {
|
||||
prepareTargetsForFirstFrame(mTarget.unfilteredApps, t, MODE_CLOSING);
|
||||
mFirstFrame = false;
|
||||
}
|
||||
|
||||
float alpha = 1 - valueAnimator.getAnimatedFraction();
|
||||
for (RemoteAnimationTargetCompat app : mTarget.apps) {
|
||||
t.setAlpha(app.leash, alpha);
|
||||
}
|
||||
t.apply();
|
||||
}
|
||||
}
|
||||
@@ -159,7 +159,7 @@ public abstract class BaseItemDragListener extends InternalStateHandler implemen
|
||||
postCleanup();
|
||||
}
|
||||
|
||||
private void postCleanup() {
|
||||
protected void postCleanup() {
|
||||
clearReference();
|
||||
if (mLauncher != null) {
|
||||
// Remove any drag params from the launcher intent since the drag operation is complete.
|
||||
|
||||
@@ -22,14 +22,17 @@ import android.content.pm.LauncherApps.PinItemRequest;
|
||||
import android.graphics.Rect;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.CancellationSignal;
|
||||
import android.view.DragEvent;
|
||||
import android.view.View;
|
||||
import android.widget.RemoteViews;
|
||||
|
||||
import com.android.launcher3.DragSource;
|
||||
import com.android.launcher3.ItemInfo;
|
||||
import com.android.launcher3.Launcher;
|
||||
import com.android.launcher3.LauncherAppWidgetProviderInfo;
|
||||
import com.android.launcher3.PendingAddItemInfo;
|
||||
import com.android.launcher3.uioverrides.UiFactory;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto;
|
||||
import com.android.launcher3.widget.PendingAddShortcutInfo;
|
||||
import com.android.launcher3.widget.PendingAddWidgetInfo;
|
||||
@@ -44,11 +47,13 @@ import com.android.launcher3.widget.WidgetAddFlowHandler;
|
||||
public class PinItemDragListener extends BaseItemDragListener {
|
||||
|
||||
private final PinItemRequest mRequest;
|
||||
private final CancellationSignal mCancelSignal;
|
||||
|
||||
public PinItemDragListener(PinItemRequest request, Rect previewRect,
|
||||
int previewBitmapWidth, int previewViewWidth) {
|
||||
super(previewRect, previewBitmapWidth, previewViewWidth);
|
||||
mRequest = request;
|
||||
mCancelSignal = new CancellationSignal();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -59,6 +64,15 @@ public class PinItemDragListener extends BaseItemDragListener {
|
||||
return super.onDragStart(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean init(Launcher launcher, boolean alreadyOnHome) {
|
||||
super.init(launcher, alreadyOnHome);
|
||||
if (!alreadyOnHome) {
|
||||
UiFactory.useFadeOutAnimationForLauncherStart(launcher, mCancelSignal);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PendingItemDragHelper createDragHelper() {
|
||||
final PendingAddItemInfo item;
|
||||
@@ -95,6 +109,12 @@ public class PinItemDragListener extends BaseItemDragListener {
|
||||
targetParent.containerType = LauncherLogProto.ContainerType.PINITEM;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void postCleanup() {
|
||||
super.postCleanup();
|
||||
mCancelSignal.cancel();
|
||||
}
|
||||
|
||||
public static RemoteViews getPreview(PinItemRequest request) {
|
||||
Bundle extras = request.getExtras();
|
||||
if (extras != null &&
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.android.launcher3.uioverrides;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.os.CancellationSignal;
|
||||
|
||||
import com.android.launcher3.Launcher;
|
||||
import com.android.launcher3.LauncherStateManager.StateHandler;
|
||||
@@ -51,6 +52,9 @@ public class UiFactory {
|
||||
|
||||
public static void onTrimMemory(Launcher launcher, int level) { }
|
||||
|
||||
public static void useFadeOutAnimationForLauncherStart(Launcher launcher,
|
||||
CancellationSignal cancellationSignal) { }
|
||||
|
||||
public static boolean dumpActivity(Activity activity, PrintWriter writer) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user