Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d51b81d8 authored by Lei Yu's avatar Lei Yu Committed by Android (Google) Code Review
Browse files

Merge "Refine animation to remove strange reshuffling animation"

parents 557d8305 0fd7190f
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -18,15 +18,22 @@ package com.android.settings.dashboard;
import android.support.v4.view.ViewCompat;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.RecyclerView.ViewHolder;
import com.android.settingslib.drawer.Tile;

public class DashboardItemAnimator extends DefaultItemAnimator {

    @Override
    public boolean animateChange(ViewHolder oldHolder, ViewHolder newHolder, int fromX, int fromY,
            int toX, int toY) {
        if (oldHolder == newHolder) {
        final Object tag = oldHolder.itemView.getTag();
        if (tag instanceof Tile && oldHolder == newHolder) {
            // When this view has other move animation running, skip this value to avoid
            // animations interrupt each other.
            if (!isRunning()) {
                fromX += ViewCompat.getTranslationX(oldHolder.itemView);
                fromY += ViewCompat.getTranslationY(oldHolder.itemView);
            }

            if (fromX == toX && fromY == toY) {
                dispatchMoveFinished(oldHolder);
                return false;
+1 −0
Original line number Diff line number Diff line
@@ -263,6 +263,7 @@ public class DashboardSummary extends InstrumentedPreferenceFragment
    public void onConditionsChanged() {
        Log.d(TAG, "onConditionsChanged");
        mAdapter.setConditions(mConditionManager.getConditions());
        mDashboard.scrollToPosition(0);
    }

    private class SuggestionLoader extends AsyncTask<Void, Void, List<Tile>> {
+13 −2
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.widget.TextView;
import com.android.settings.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.dashboard.SupportItemAdapter.ViewHolder;
import com.android.settingslib.drawer.Tile;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -41,20 +42,30 @@ public class DashboardItemAnimatorTest {
        final Context context = ShadowApplication.getInstance().getApplicationContext();
        mDashboardItemAnimator = new DashboardItemAnimator();
        mViewHolder = new ViewHolder(new TextView(context));
        mViewHolder.itemView.setTag(new Tile());
    }

    @Test
    public void testAnimateChange_NoOffset_NoPendingAnimation() {
    public void testAnimateChange_NoPositionChange_NoPendingAnimation() {
        final boolean hasPendingAnimation = mDashboardItemAnimator
                .animateChange(mViewHolder, mViewHolder, 0, 1, 0, 1);
        assertThat(hasPendingAnimation).isFalse();
    }

    @Test
    public void testAnimateChange_HasOffset_HasPendingAnimation() {
    public void testAnimateChange_HasPositionChange_HasPendingAnimation() {
        final boolean hasPendingAnimation = mDashboardItemAnimator
                .animateChange(mViewHolder, mViewHolder, 0, 0, 1, 1);
        assertThat(hasPendingAnimation).isTrue();
    }

    @Test
    public void testAnimateChange_HasRunningAnimationWhileNoPositionChange_NoPendingAnimation() {
        // Set pending move animations
        mDashboardItemAnimator.animateMove(mViewHolder, 0, 0, 1, 1);

        final boolean hasPendingAnimation = mDashboardItemAnimator
                .animateChange(mViewHolder, mViewHolder, 0, 1, 0, 1);
        assertThat(hasPendingAnimation).isFalse();
    }
}