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

Commit fa51a86b authored by Jean Chalard's avatar Jean Chalard Committed by Android Git Automerger
Browse files

am 9799b7dc: am fb34869f: Merge "[PB8] Add an animation upon status change."

* commit '9799b7dc':
  [PB8] Add an animation upon status change.
parents 03b6259b 9799b7dc
Loading
Loading
Loading
Loading
+22 −6
Original line number Diff line number Diff line
@@ -16,9 +16,12 @@

package com.android.inputmethod.dictionarypack;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewPropertyAnimator;
import android.widget.Button;
import android.widget.FrameLayout;

@@ -115,22 +118,35 @@ public class ButtonSwitcher extends FrameLayout {
    }

    private void animateButtonPosition(final int oldStatus, final int newStatus) {
        animateButton(getButton(oldStatus), ANIMATION_OUT);
        animateButton(getButton(newStatus), ANIMATION_IN);
        final View oldButton = getButton(oldStatus);
        final View newButton = getButton(newStatus);
        if (null != oldButton && null != newButton) {
            // Transition between two buttons : animate out, then in
            animateButton(oldButton, ANIMATION_OUT).setListener(
                    new AnimatorListenerAdapter() {
                        @Override
                        public void onAnimationEnd(final Animator animation) {
                            animateButton(newButton, ANIMATION_IN);
                        }
                    });
        } else if (null != oldButton) {
            animateButton(oldButton, ANIMATION_OUT);
        } else if (null != newButton) {
            animateButton(newButton, ANIMATION_IN);
        }
    }

    public void setInternalOnClickListener(final OnClickListener listener) {
        mOnClickListener = listener;
    }

    private void animateButton(final View button, final int direction) {
        if (null == button) return;
    private ViewPropertyAnimator animateButton(final View button, final int direction) {
        final float outerX = getWidth();
        final float innerX = button.getX() - button.getTranslationX();
        if (ANIMATION_IN == direction) {
            button.animate().translationX(0);
            return button.animate().translationX(0);
        } else {
            button.animate().translationX(outerX - innerX);
            return button.animate().translationX(outerX - innerX);
        }
    }
}
+6 −0
Original line number Diff line number Diff line
@@ -44,6 +44,12 @@ public class DictionaryListInterfaceState {
        return state.mOpen;
    }

    public int getStatus(final String wordlistId) {
        final State state = mWordlistToState.get(wordlistId);
        if (null == state) return MetadataDbHelper.STATUS_UNKNOWN;
        return state.mStatus;
    }

    public void setOpen(final String wordlistId, final int status) {
        final State newState;
        final State state = mWordlistToState.get(wordlistId);
+14 −2
Original line number Diff line number Diff line
@@ -191,8 +191,20 @@ public final class WordListPreference extends Preference {
        ((ViewGroup)view).setLayoutTransition(null);
        final ButtonSwitcher buttonSwitcher =
                (ButtonSwitcher)view.findViewById(R.id.wordlist_button_switcher);
        buttonSwitcher.setStatusAndUpdateVisuals(mInterfaceState.isOpen(mWordlistId) ?
                getButtonSwitcherStatus(mStatus) : ButtonSwitcher.STATUS_NO_BUTTON);
        if (mInterfaceState.isOpen(mWordlistId)) {
            // The button is open.
            final int previousStatus = mInterfaceState.getStatus(mWordlistId);
            buttonSwitcher.setStatusAndUpdateVisuals(getButtonSwitcherStatus(previousStatus));
            if (previousStatus != mStatus) {
                // We come here if the status has changed since last time. We need to animate
                // the transition.
                buttonSwitcher.setStatusAndUpdateVisuals(getButtonSwitcherStatus(mStatus));
                mInterfaceState.setOpen(mWordlistId, mStatus);
            }
        } else {
            // The button is closed.
            buttonSwitcher.setStatusAndUpdateVisuals(ButtonSwitcher.STATUS_NO_BUTTON);
        }
        buttonSwitcher.setInternalOnClickListener(mActionButtonClickHandler);
        view.setOnClickListener(mPreferenceClickHandler);
    }