Merge "Revert "Update animations for TM-QPR: Overview > OverviewSplitSelect transition"" into tm-qpr-dev
This commit is contained in:
-3
@@ -188,9 +188,6 @@ public class QuickstepAtomicAnimationFactory extends
|
|||||||
AllAppsSwipeController.applyAllAppsToNormalConfig(mActivity, config);
|
AllAppsSwipeController.applyAllAppsToNormalConfig(mActivity, config);
|
||||||
} else if (fromState == NORMAL && toState == ALL_APPS) {
|
} else if (fromState == NORMAL && toState == ALL_APPS) {
|
||||||
AllAppsSwipeController.applyNormalToAllAppsAnimConfig(mActivity, config);
|
AllAppsSwipeController.applyNormalToAllAppsAnimConfig(mActivity, config);
|
||||||
} else if (fromState == OVERVIEW && toState == OVERVIEW_SPLIT_SELECT) {
|
|
||||||
config.setInterpolator(ANIM_OVERVIEW_ACTIONS_FADE,
|
|
||||||
clampToProgress(LINEAR, 0, 0.167f));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,8 +16,6 @@
|
|||||||
|
|
||||||
package com.android.launcher3.uioverrides.states;
|
package com.android.launcher3.uioverrides.states;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
|
|
||||||
import com.android.launcher3.Launcher;
|
import com.android.launcher3.Launcher;
|
||||||
import com.android.quickstep.views.RecentsView;
|
import com.android.quickstep.views.RecentsView;
|
||||||
|
|
||||||
@@ -26,8 +24,6 @@ import com.android.quickstep.views.RecentsView;
|
|||||||
* pinned and user is selecting the second one
|
* pinned and user is selecting the second one
|
||||||
*/
|
*/
|
||||||
public class SplitScreenSelectState extends OverviewState {
|
public class SplitScreenSelectState extends OverviewState {
|
||||||
private static final int OVERVIEW_SPLIT_SELECT_SLIDE_IN_DURATION = 500;
|
|
||||||
|
|
||||||
public SplitScreenSelectState(int id) {
|
public SplitScreenSelectState(int id) {
|
||||||
super(id);
|
super(id);
|
||||||
}
|
}
|
||||||
@@ -42,9 +38,4 @@ public class SplitScreenSelectState extends OverviewState {
|
|||||||
RecentsView recentsView = launcher.getOverviewPanel();
|
RecentsView recentsView = launcher.getOverviewPanel();
|
||||||
return recentsView.getSplitSelectTranslation();
|
return recentsView.getSplitSelectTranslation();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getTransitionDuration(Context context, boolean isToState) {
|
|
||||||
return OVERVIEW_SPLIT_SELECT_SLIDE_IN_DURATION;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,8 @@ package com.android.quickstep.views;
|
|||||||
|
|
||||||
import static com.android.launcher3.AbstractFloatingView.TYPE_TASK_MENU;
|
import static com.android.launcher3.AbstractFloatingView.TYPE_TASK_MENU;
|
||||||
import static com.android.launcher3.anim.Interpolators.ACCEL;
|
import static com.android.launcher3.anim.Interpolators.ACCEL;
|
||||||
import static com.android.launcher3.anim.Interpolators.FASTER_OUT_SLOWER_IN;
|
import static com.android.launcher3.anim.Interpolators.DEACCEL_3;
|
||||||
import static com.android.launcher3.anim.Interpolators.LINEAR;
|
import static com.android.launcher3.anim.Interpolators.LINEAR;
|
||||||
import static com.android.launcher3.anim.Interpolators.clampToProgress;
|
|
||||||
|
|
||||||
import android.animation.ValueAnimator;
|
import android.animation.ValueAnimator;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -201,16 +200,10 @@ public class FloatingTaskView extends FrameLayout {
|
|||||||
RectF floatingTaskViewBounds = new RectF();
|
RectF floatingTaskViewBounds = new RectF();
|
||||||
|
|
||||||
if (fadeWithThumbnail) {
|
if (fadeWithThumbnail) {
|
||||||
// FloatingTaskThumbnailView: thumbnail fades out to transparent
|
|
||||||
animation.addFloat(mThumbnailView, LauncherAnimUtils.VIEW_ALPHA,
|
|
||||||
1, 0, clampToProgress(LINEAR, 0, 0.267f));
|
|
||||||
|
|
||||||
// SplitPlaceholderView: gray background fades in at the same time, then new icon fades
|
|
||||||
// in
|
|
||||||
animation.addFloat(mSplitPlaceholderView, SplitPlaceholderView.ALPHA_FLOAT,
|
animation.addFloat(mSplitPlaceholderView, SplitPlaceholderView.ALPHA_FLOAT,
|
||||||
0, 1, clampToProgress(LINEAR, 0, 0.267f));
|
0, 1, ACCEL);
|
||||||
animation.addFloat(mSplitPlaceholderView, SplitPlaceholderView.ICON_ALPHA,
|
animation.addFloat(mThumbnailView, LauncherAnimUtils.VIEW_ALPHA,
|
||||||
0, 1, clampToProgress(LINEAR, 0.333f, 0.5f));
|
1, 0, DEACCEL_3);
|
||||||
} else if (isStagedTask) {
|
} else if (isStagedTask) {
|
||||||
// Fade in the placeholder view when split is initiated from homescreen / all apps
|
// Fade in the placeholder view when split is initiated from homescreen / all apps
|
||||||
// icons.
|
// icons.
|
||||||
@@ -221,15 +214,12 @@ public class FloatingTaskView extends FrameLayout {
|
|||||||
}
|
}
|
||||||
|
|
||||||
MultiValueUpdateListener listener = new MultiValueUpdateListener() {
|
MultiValueUpdateListener listener = new MultiValueUpdateListener() {
|
||||||
// SplitPlaceholderView: rectangle translates and stretches to new position
|
final FloatProp mDx = new FloatProp(0, prop.dX, 0, animDuration, LINEAR);
|
||||||
final FloatProp mDx = new FloatProp(0, prop.dX, 0, animDuration,
|
final FloatProp mDy = new FloatProp(0, prop.dY, 0, animDuration, LINEAR);
|
||||||
clampToProgress(FASTER_OUT_SLOWER_IN, 0, 0.833f));
|
|
||||||
final FloatProp mDy = new FloatProp(0, prop.dY, 0, animDuration,
|
|
||||||
clampToProgress(FASTER_OUT_SLOWER_IN, 0, 0.833f));
|
|
||||||
final FloatProp mTaskViewScaleX = new FloatProp(1f, prop.finalTaskViewScaleX, 0,
|
final FloatProp mTaskViewScaleX = new FloatProp(1f, prop.finalTaskViewScaleX, 0,
|
||||||
animDuration, clampToProgress(FASTER_OUT_SLOWER_IN, 0, 0.833f));
|
animDuration, LINEAR);
|
||||||
final FloatProp mTaskViewScaleY = new FloatProp(1f, prop.finalTaskViewScaleY, 0,
|
final FloatProp mTaskViewScaleY = new FloatProp(1f, prop.finalTaskViewScaleY, 0,
|
||||||
animDuration, clampToProgress(FASTER_OUT_SLOWER_IN, 0, 0.833f));
|
animDuration, LINEAR);
|
||||||
@Override
|
@Override
|
||||||
public void onUpdate(float percent, boolean initOnly) {
|
public void onUpdate(float percent, boolean initOnly) {
|
||||||
// Calculate the icon position.
|
// Calculate the icon position.
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ import static com.android.launcher3.anim.Interpolators.ACCEL;
|
|||||||
import static com.android.launcher3.anim.Interpolators.ACCEL_0_75;
|
import static com.android.launcher3.anim.Interpolators.ACCEL_0_75;
|
||||||
import static com.android.launcher3.anim.Interpolators.ACCEL_DEACCEL;
|
import static com.android.launcher3.anim.Interpolators.ACCEL_DEACCEL;
|
||||||
import static com.android.launcher3.anim.Interpolators.DEACCEL_2;
|
import static com.android.launcher3.anim.Interpolators.DEACCEL_2;
|
||||||
import static com.android.launcher3.anim.Interpolators.EMPHASIZED_DECELERATE;
|
|
||||||
import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN;
|
import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN;
|
||||||
import static com.android.launcher3.anim.Interpolators.FINAL_FRAME;
|
import static com.android.launcher3.anim.Interpolators.FINAL_FRAME;
|
||||||
import static com.android.launcher3.anim.Interpolators.LINEAR;
|
import static com.android.launcher3.anim.Interpolators.LINEAR;
|
||||||
@@ -114,7 +113,6 @@ import androidx.annotation.NonNull;
|
|||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.UiThread;
|
import androidx.annotation.UiThread;
|
||||||
import androidx.core.graphics.ColorUtils;
|
import androidx.core.graphics.ColorUtils;
|
||||||
import androidx.dynamicanimation.animation.SpringForce;
|
|
||||||
|
|
||||||
import com.android.launcher3.BaseActivity;
|
import com.android.launcher3.BaseActivity;
|
||||||
import com.android.launcher3.BaseActivity.MultiWindowModeChangedListener;
|
import com.android.launcher3.BaseActivity.MultiWindowModeChangedListener;
|
||||||
@@ -127,7 +125,6 @@ import com.android.launcher3.Utilities;
|
|||||||
import com.android.launcher3.anim.AnimatorListeners;
|
import com.android.launcher3.anim.AnimatorListeners;
|
||||||
import com.android.launcher3.anim.AnimatorPlaybackController;
|
import com.android.launcher3.anim.AnimatorPlaybackController;
|
||||||
import com.android.launcher3.anim.PendingAnimation;
|
import com.android.launcher3.anim.PendingAnimation;
|
||||||
import com.android.launcher3.anim.SpringAnimationBuilder;
|
|
||||||
import com.android.launcher3.anim.SpringProperty;
|
import com.android.launcher3.anim.SpringProperty;
|
||||||
import com.android.launcher3.compat.AccessibilityManagerCompat;
|
import com.android.launcher3.compat.AccessibilityManagerCompat;
|
||||||
import com.android.launcher3.config.FeatureFlags;
|
import com.android.launcher3.config.FeatureFlags;
|
||||||
@@ -445,9 +442,6 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||||||
private static final float ANIMATION_DISMISS_PROGRESS_MIDPOINT = 0.5f;
|
private static final float ANIMATION_DISMISS_PROGRESS_MIDPOINT = 0.5f;
|
||||||
private static final float END_DISMISS_TRANSLATION_INTERPOLATION_OFFSET = 0.75f;
|
private static final float END_DISMISS_TRANSLATION_INTERPOLATION_OFFSET = 0.75f;
|
||||||
|
|
||||||
private static final float INITIAL_SPRING_DISMISS_TRANSLATION_INTERPOLATION_OFFSET = 0.133f;
|
|
||||||
private static final float ADDITIONAL_SPRING_DISMISS_TRANSLATION_INTERPOLATION_OFFSET = 0.033f;
|
|
||||||
|
|
||||||
private static final float SIGNIFICANT_MOVE_SCREEN_WIDTH_PERCENTAGE = 0.15f;
|
private static final float SIGNIFICANT_MOVE_SCREEN_WIDTH_PERCENTAGE = 0.15f;
|
||||||
|
|
||||||
protected final RecentsOrientedState mOrientationState;
|
protected final RecentsOrientedState mOrientationState;
|
||||||
@@ -2831,20 +2825,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||||||
|
|
||||||
RectF startingTaskRect = new RectF();
|
RectF startingTaskRect = new RectF();
|
||||||
if (mSplitHiddenTaskView != null) {
|
if (mSplitHiddenTaskView != null) {
|
||||||
// Split staging is initiated, hide the original TaskView except for the icon (which
|
mSplitHiddenTaskView.setVisibility(INVISIBLE);
|
||||||
// needs to animate out over time)
|
|
||||||
// If needed, visibility should be toggled back on in resetFromSplitSelectionState().
|
|
||||||
for (int i = 0; i < mSplitHiddenTaskView.getChildCount(); i++) {
|
|
||||||
View child = mSplitHiddenTaskView.getChildAt(i);
|
|
||||||
if (child != mSplitHiddenTaskView.mIconView) {
|
|
||||||
child.setVisibility(INVISIBLE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Icon animates out over time
|
|
||||||
anim.addFloat(mSplitHiddenTaskView, TaskView.ICON_ALPHA, 1, 0,
|
|
||||||
clampToProgress(LINEAR, 0, 0.167f));
|
|
||||||
|
|
||||||
mFirstFloatingTaskView = FloatingTaskView.getFloatingTaskView(mActivity,
|
mFirstFloatingTaskView = FloatingTaskView.getFloatingTaskView(mActivity,
|
||||||
mSplitHiddenTaskView.getThumbnail(),
|
mSplitHiddenTaskView.getThumbnail(),
|
||||||
mSplitHiddenTaskView.getThumbnail().getThumbnail(),
|
mSplitHiddenTaskView.getThumbnail().getThumbnail(),
|
||||||
@@ -2861,15 +2842,9 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||||||
false /* fadeWithThumbnail */, true /* isStagedTask */);
|
false /* fadeWithThumbnail */, true /* isStagedTask */);
|
||||||
}
|
}
|
||||||
|
|
||||||
// SplitInstructionsView: animate in
|
|
||||||
mSplitInstructionsView = SplitInstructionsView.getSplitInstructionsView(mActivity);
|
mSplitInstructionsView = SplitInstructionsView.getSplitInstructionsView(mActivity);
|
||||||
mSplitInstructionsView.setAlpha(0);
|
mSplitInstructionsView.setAlpha(0);
|
||||||
anim.addFloat(mSplitInstructionsView, SplitInstructionsView.CONTAINER_ALPHA, 0, 1,
|
anim.addFloat(mSplitInstructionsView, SplitInstructionsView.ALPHA_FLOAT, 0, 1, ACCEL);
|
||||||
clampToProgress(LINEAR, 0, 0.167f));
|
|
||||||
anim.addFloat(mSplitInstructionsView, SplitInstructionsView.TEXT_ALPHA, 0, 1,
|
|
||||||
clampToProgress(LINEAR, 0.1f, 0.267f));
|
|
||||||
anim.addFloat(mSplitInstructionsView, mSplitInstructionsView.UNFOLD, 0.1f, 1,
|
|
||||||
clampToProgress(EMPHASIZED_DECELERATE, 0, 0.667f));
|
|
||||||
|
|
||||||
InteractionJankMonitorWrapper.begin(this,
|
InteractionJankMonitorWrapper.begin(this,
|
||||||
InteractionJankMonitorWrapper.CUJ_SPLIT_SCREEN_ENTER, "First tile selected");
|
InteractionJankMonitorWrapper.CUJ_SPLIT_SCREEN_ENTER, "First tile selected");
|
||||||
@@ -3149,22 +3124,11 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||||||
// Animate task with index >= dismissed index and in the same row as the
|
// Animate task with index >= dismissed index and in the same row as the
|
||||||
// dismissed index or next focused index. Offset successive task dismissal
|
// dismissed index or next focused index. Offset successive task dismissal
|
||||||
// durations for a staggered effect.
|
// durations for a staggered effect.
|
||||||
distanceFromDismissedTask++;
|
float animationStartProgress = Utilities.boundToRange(
|
||||||
// If user is initiating splitscreen from the focused (large) task, we use a
|
INITIAL_DISMISS_TRANSLATION_INTERPOLATION_OFFSET
|
||||||
// spring-based animation and timings. For other, smaller, repositions, we currently
|
+ ADDITIONAL_DISMISS_TRANSLATION_INTERPOLATION_OFFSET
|
||||||
// fall back on a less complicated linear animation and timings.
|
* ++distanceFromDismissedTask, 0f,
|
||||||
float animationStartProgress = isFocusedTaskDismissed && nextFocusedTaskView == null
|
dismissTranslationInterpolationEnd);
|
||||||
? Utilities.boundToRange(
|
|
||||||
INITIAL_SPRING_DISMISS_TRANSLATION_INTERPOLATION_OFFSET
|
|
||||||
+ ADDITIONAL_SPRING_DISMISS_TRANSLATION_INTERPOLATION_OFFSET
|
|
||||||
* (int) Math.ceil(distanceFromDismissedTask / 2f), 0f,
|
|
||||||
dismissTranslationInterpolationEnd)
|
|
||||||
: Utilities.boundToRange(
|
|
||||||
INITIAL_DISMISS_TRANSLATION_INTERPOLATION_OFFSET
|
|
||||||
+ ADDITIONAL_DISMISS_TRANSLATION_INTERPOLATION_OFFSET
|
|
||||||
* distanceFromDismissedTask, 0f,
|
|
||||||
dismissTranslationInterpolationEnd);
|
|
||||||
|
|
||||||
if (taskView == nextFocusedTaskView) {
|
if (taskView == nextFocusedTaskView) {
|
||||||
// Enlarge the task to be focused next, and translate into focus position.
|
// Enlarge the task to be focused next, and translate into focus position.
|
||||||
float scale = mTaskWidth / (float) mLastComputedGridTaskSize.width();
|
float scale = mTaskWidth / (float) mLastComputedGridTaskSize.width();
|
||||||
@@ -3199,36 +3163,12 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||||||
primaryTranslation +=
|
primaryTranslation +=
|
||||||
mIsRtl ? -mSplitPlaceholderSize : mSplitPlaceholderSize;
|
mIsRtl ? -mSplitPlaceholderSize : mSplitPlaceholderSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Transitioning to split select -- set up staggered spring animation for
|
|
||||||
// other TaskViews.
|
|
||||||
Animator taskSlideIn = new SpringAnimationBuilder(taskView.mActivity)
|
|
||||||
.setDampingRatio(0.85f)
|
|
||||||
.setStiffness(SpringForce.STIFFNESS_LOW)
|
|
||||||
.setEndValue(mIsRtl ? primaryTranslation : -primaryTranslation)
|
|
||||||
.setStartValue(
|
|
||||||
taskView.getPrimaryDismissTranslationProperty()
|
|
||||||
.get(taskView)
|
|
||||||
)
|
|
||||||
.build(taskView, taskView.getPrimaryDismissTranslationProperty());
|
|
||||||
long taskSlideInDuration = taskSlideIn.getDuration();
|
|
||||||
anim.add(taskSlideIn);
|
|
||||||
taskSlideIn
|
|
||||||
.setDuration(taskSlideInDuration)
|
|
||||||
.setStartDelay(
|
|
||||||
Math.round(animationStartProgress * anim.getDuration()));
|
|
||||||
} else {
|
|
||||||
// Task was dismissed individually -- translate other TaskViews to fill the
|
|
||||||
// vacant space.
|
|
||||||
|
|
||||||
// TODO (b/242075836): This dismiss animation uses a linear transition.
|
|
||||||
// When the above bug is fixed, it can use the same (nicer) spring
|
|
||||||
// transition as the focused task split case above.
|
|
||||||
anim.setFloat(taskView, taskView.getPrimaryDismissTranslationProperty(),
|
|
||||||
mIsRtl ? primaryTranslation : -primaryTranslation,
|
|
||||||
clampToProgress(LINEAR, animationStartProgress,
|
|
||||||
dismissTranslationInterpolationEnd));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
anim.setFloat(taskView, taskView.getPrimaryDismissTranslationProperty(),
|
||||||
|
mIsRtl ? primaryTranslation : -primaryTranslation,
|
||||||
|
clampToProgress(LINEAR, animationStartProgress,
|
||||||
|
dismissTranslationInterpolationEnd));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3249,8 +3189,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||||||
final boolean finalCloseGapBetweenClearAll = closeGapBetweenClearAll;
|
final boolean finalCloseGapBetweenClearAll = closeGapBetweenClearAll;
|
||||||
final boolean finalSnapToLastTask = snapToLastTask;
|
final boolean finalSnapToLastTask = snapToLastTask;
|
||||||
final boolean finalIsFocusedTaskDismissed = isFocusedTaskDismissed;
|
final boolean finalIsFocusedTaskDismissed = isFocusedTaskDismissed;
|
||||||
|
mPendingAnimation.addEndListener(new Consumer<Boolean>() {
|
||||||
Consumer endConsumer = new Consumer<Boolean>() {
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(Boolean success) {
|
public void accept(Boolean success) {
|
||||||
if (ENABLE_QUICKSTEP_LIVE_TILE.get() && mEnableDrawingLiveTile
|
if (ENABLE_QUICKSTEP_LIVE_TILE.get() && mEnableDrawingLiveTile
|
||||||
@@ -3460,9 +3399,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||||||
onDismissAnimationEnds();
|
onDismissAnimationEnds();
|
||||||
mPendingAnimation = null;
|
mPendingAnimation = null;
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
|
|
||||||
mPendingAnimation.addListener(AnimatorListeners.forEndCallback(endConsumer));
|
|
||||||
return anim;
|
return anim;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4283,6 +4220,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
|||||||
resetTaskVisuals();
|
resetTaskVisuals();
|
||||||
mSplitHiddenTaskViewIndex = -1;
|
mSplitHiddenTaskViewIndex = -1;
|
||||||
if (mSplitHiddenTaskView != null) {
|
if (mSplitHiddenTaskView != null) {
|
||||||
|
mSplitHiddenTaskView.setVisibility(VISIBLE);
|
||||||
mSplitHiddenTaskView = null;
|
mSplitHiddenTaskView = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import android.view.ViewGroup;
|
|||||||
import android.widget.FrameLayout;
|
import android.widget.FrameLayout;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.widget.AppCompatTextView;
|
|
||||||
|
|
||||||
import com.android.launcher3.DeviceProfile;
|
import com.android.launcher3.DeviceProfile;
|
||||||
import com.android.launcher3.R;
|
import com.android.launcher3.R;
|
||||||
@@ -41,10 +40,9 @@ import com.android.launcher3.util.DisplayController;
|
|||||||
*/
|
*/
|
||||||
public class SplitInstructionsView extends FrameLayout {
|
public class SplitInstructionsView extends FrameLayout {
|
||||||
private final StatefulActivity mLauncher;
|
private final StatefulActivity mLauncher;
|
||||||
private AppCompatTextView mTextView;
|
|
||||||
|
|
||||||
public static final FloatProperty<SplitInstructionsView> CONTAINER_ALPHA =
|
public static final FloatProperty<SplitInstructionsView> ALPHA_FLOAT =
|
||||||
new FloatProperty<SplitInstructionsView>("SplitInstructionsContainerAlpha") {
|
new FloatProperty<SplitInstructionsView>("SplitInstructionsAlpha") {
|
||||||
@Override
|
@Override
|
||||||
public void setValue(SplitInstructionsView splitInstructionsView, float v) {
|
public void setValue(SplitInstructionsView splitInstructionsView, float v) {
|
||||||
splitInstructionsView.setVisibility(v != 0 ? VISIBLE : GONE);
|
splitInstructionsView.setVisibility(v != 0 ? VISIBLE : GONE);
|
||||||
@@ -57,32 +55,6 @@ public class SplitInstructionsView extends FrameLayout {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public static final FloatProperty<SplitInstructionsView> UNFOLD =
|
|
||||||
new FloatProperty<SplitInstructionsView>("SplitInstructionsUnfold") {
|
|
||||||
@Override
|
|
||||||
public void setValue(SplitInstructionsView splitInstructionsView, float v) {
|
|
||||||
splitInstructionsView.setScaleY(v);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Float get(SplitInstructionsView splitInstructionsView) {
|
|
||||||
return splitInstructionsView.getScaleY();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public static final FloatProperty<SplitInstructionsView> TEXT_ALPHA =
|
|
||||||
new FloatProperty<SplitInstructionsView>("SplitInstructionsTextAlpha") {
|
|
||||||
@Override
|
|
||||||
public void setValue(SplitInstructionsView splitInstructionsView, float v) {
|
|
||||||
splitInstructionsView.mTextView.setAlpha(v);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Float get(SplitInstructionsView splitInstructionsView) {
|
|
||||||
return splitInstructionsView.mTextView.getAlpha();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public SplitInstructionsView(Context context) {
|
public SplitInstructionsView(Context context) {
|
||||||
this(context, null);
|
this(context, null);
|
||||||
}
|
}
|
||||||
@@ -105,9 +77,6 @@ public class SplitInstructionsView extends FrameLayout {
|
|||||||
false
|
false
|
||||||
);
|
);
|
||||||
|
|
||||||
splitInstructionsView.mTextView = splitInstructionsView.findViewById(
|
|
||||||
R.id.split_instructions_text);
|
|
||||||
|
|
||||||
dragLayer.addView(splitInstructionsView);
|
dragLayer.addView(splitInstructionsView);
|
||||||
return splitInstructionsView;
|
return splitInstructionsView;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,19 +47,6 @@ public class SplitPlaceholderView extends FrameLayout {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public static final FloatProperty<SplitPlaceholderView> ICON_ALPHA =
|
|
||||||
new FloatProperty<SplitPlaceholderView>("SplitViewIconAlpha") {
|
|
||||||
@Override
|
|
||||||
public void setValue(SplitPlaceholderView splitPlaceholderView, float v) {
|
|
||||||
splitPlaceholderView.mIconView.setAlpha(v);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Float get(SplitPlaceholderView splitPlaceholderView) {
|
|
||||||
return splitPlaceholderView.mIconView.getAlpha();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private IconView mIconView;
|
private IconView mIconView;
|
||||||
|
|
||||||
|
|||||||
@@ -323,19 +323,6 @@ public class TaskView extends FrameLayout implements Reusable {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public static final FloatProperty<TaskView> ICON_ALPHA =
|
|
||||||
new FloatProperty<TaskView>("iconAlpha") {
|
|
||||||
@Override
|
|
||||||
public void setValue(TaskView taskView, float v) {
|
|
||||||
taskView.mIconView.setAlpha(v);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Float get(TaskView taskView) {
|
|
||||||
return taskView.mIconView.getAlpha();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
protected Task mTask;
|
protected Task mTask;
|
||||||
protected TaskThumbnailView mSnapshotView;
|
protected TaskThumbnailView mSnapshotView;
|
||||||
|
|||||||
@@ -50,8 +50,6 @@ public class Interpolators {
|
|||||||
public static final Interpolator ACCEL_DEACCEL = new AccelerateDecelerateInterpolator();
|
public static final Interpolator ACCEL_DEACCEL = new AccelerateDecelerateInterpolator();
|
||||||
|
|
||||||
public static final Interpolator FAST_OUT_SLOW_IN = new PathInterpolator(0.4f, 0f, 0.2f, 1f);
|
public static final Interpolator FAST_OUT_SLOW_IN = new PathInterpolator(0.4f, 0f, 0.2f, 1f);
|
||||||
public static final Interpolator FASTER_OUT_SLOWER_IN =
|
|
||||||
new PathInterpolator(0.3f, 0f, 0.1f, 1f);
|
|
||||||
|
|
||||||
public static final Interpolator AGGRESSIVE_EASE = new PathInterpolator(0.2f, 0f, 0f, 1f);
|
public static final Interpolator AGGRESSIVE_EASE = new PathInterpolator(0.2f, 0f, 0f, 1f);
|
||||||
public static final Interpolator AGGRESSIVE_EASE_IN_OUT = new PathInterpolator(0.6f,0, 0.4f, 1);
|
public static final Interpolator AGGRESSIVE_EASE_IN_OUT = new PathInterpolator(0.6f,0, 0.4f, 1);
|
||||||
|
|||||||
@@ -440,7 +440,7 @@ public class LandscapePagedViewHandler implements PagedOrientationHandler {
|
|||||||
public void setSplitInstructionsParams(View out, DeviceProfile dp, int splitInstructionsHeight,
|
public void setSplitInstructionsParams(View out, DeviceProfile dp, int splitInstructionsHeight,
|
||||||
int splitInstructionsWidth, int threeButtonNavShift) {
|
int splitInstructionsWidth, int threeButtonNavShift) {
|
||||||
out.setPivotX(0);
|
out.setPivotX(0);
|
||||||
out.setPivotY(splitInstructionsHeight);
|
out.setPivotY(0);
|
||||||
out.setRotation(getDegreesRotated());
|
out.setRotation(getDegreesRotated());
|
||||||
int distanceToEdge = out.getResources().getDimensionPixelSize(
|
int distanceToEdge = out.getResources().getDimensionPixelSize(
|
||||||
R.dimen.split_instructions_bottom_margin_phone_landscape);
|
R.dimen.split_instructions_bottom_margin_phone_landscape);
|
||||||
@@ -448,8 +448,8 @@ public class LandscapePagedViewHandler implements PagedOrientationHandler {
|
|||||||
int insetCorrectionX = dp.getInsets().left;
|
int insetCorrectionX = dp.getInsets().left;
|
||||||
// Center the view in case of unbalanced insets on top or bottom of screen
|
// Center the view in case of unbalanced insets on top or bottom of screen
|
||||||
int insetCorrectionY = (dp.getInsets().bottom - dp.getInsets().top) / 2;
|
int insetCorrectionY = (dp.getInsets().bottom - dp.getInsets().top) / 2;
|
||||||
out.setTranslationX(distanceToEdge - insetCorrectionX);
|
out.setTranslationX(splitInstructionsHeight + distanceToEdge - insetCorrectionX);
|
||||||
out.setTranslationY(((-splitInstructionsHeight - splitInstructionsWidth) / 2f)
|
out.setTranslationY(((splitInstructionsHeight - splitInstructionsWidth) / 2f)
|
||||||
+ insetCorrectionY);
|
+ insetCorrectionY);
|
||||||
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) out.getLayoutParams();
|
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) out.getLayoutParams();
|
||||||
// Setting gravity to LEFT instead of the lint-recommended START because we always want this
|
// Setting gravity to LEFT instead of the lint-recommended START because we always want this
|
||||||
|
|||||||
@@ -500,7 +500,7 @@ public class PortraitPagedViewHandler implements PagedOrientationHandler {
|
|||||||
public void setSplitInstructionsParams(View out, DeviceProfile dp, int splitInstructionsHeight,
|
public void setSplitInstructionsParams(View out, DeviceProfile dp, int splitInstructionsHeight,
|
||||||
int splitInstructionsWidth, int threeButtonNavShift) {
|
int splitInstructionsWidth, int threeButtonNavShift) {
|
||||||
out.setPivotX(0);
|
out.setPivotX(0);
|
||||||
out.setPivotY(splitInstructionsHeight);
|
out.setPivotY(0);
|
||||||
out.setRotation(getDegreesRotated());
|
out.setRotation(getDegreesRotated());
|
||||||
int distanceToEdge;
|
int distanceToEdge;
|
||||||
if ((DisplayController.getNavigationMode(out.getContext()) == THREE_BUTTONS)
|
if ((DisplayController.getNavigationMode(out.getContext()) == THREE_BUTTONS)
|
||||||
|
|||||||
@@ -190,7 +190,7 @@ public class SeascapePagedViewHandler extends LandscapePagedViewHandler {
|
|||||||
public void setSplitInstructionsParams(View out, DeviceProfile dp, int splitInstructionsHeight,
|
public void setSplitInstructionsParams(View out, DeviceProfile dp, int splitInstructionsHeight,
|
||||||
int splitInstructionsWidth, int threeButtonNavShift) {
|
int splitInstructionsWidth, int threeButtonNavShift) {
|
||||||
out.setPivotX(0);
|
out.setPivotX(0);
|
||||||
out.setPivotY(splitInstructionsHeight);
|
out.setPivotY(0);
|
||||||
out.setRotation(getDegreesRotated());
|
out.setRotation(getDegreesRotated());
|
||||||
int distanceToEdge = out.getResources().getDimensionPixelSize(
|
int distanceToEdge = out.getResources().getDimensionPixelSize(
|
||||||
R.dimen.split_instructions_bottom_margin_phone_landscape);
|
R.dimen.split_instructions_bottom_margin_phone_landscape);
|
||||||
@@ -198,8 +198,9 @@ public class SeascapePagedViewHandler extends LandscapePagedViewHandler {
|
|||||||
int insetCorrectionX = dp.getInsets().right;
|
int insetCorrectionX = dp.getInsets().right;
|
||||||
// Center the view in case of unbalanced insets on top or bottom of screen
|
// Center the view in case of unbalanced insets on top or bottom of screen
|
||||||
int insetCorrectionY = (dp.getInsets().bottom - dp.getInsets().top) / 2;
|
int insetCorrectionY = (dp.getInsets().bottom - dp.getInsets().top) / 2;
|
||||||
out.setTranslationX(splitInstructionsWidth - distanceToEdge + insetCorrectionX);
|
out.setTranslationX(splitInstructionsWidth - splitInstructionsHeight - distanceToEdge
|
||||||
out.setTranslationY(((-splitInstructionsHeight + splitInstructionsWidth) / 2f)
|
+ insetCorrectionX);
|
||||||
|
out.setTranslationY(((splitInstructionsHeight + splitInstructionsWidth) / 2f)
|
||||||
+ insetCorrectionY);
|
+ insetCorrectionY);
|
||||||
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) out.getLayoutParams();
|
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) out.getLayoutParams();
|
||||||
// Setting gravity to RIGHT instead of the lint-recommended END because we always want this
|
// Setting gravity to RIGHT instead of the lint-recommended END because we always want this
|
||||||
|
|||||||
Reference in New Issue
Block a user