Loading java/src/com/android/inputmethod/dictionarypack/ButtonSwitcher.java +12 −3 Original line number Diff line number Diff line Loading @@ -57,6 +57,11 @@ public class ButtonSwitcher extends FrameLayout { super(context, attrs, defStyle); } public void reset() { mStatus = NOT_INITIALIZED; mAnimateToStatus = NOT_INITIALIZED; } @Override protected void onLayout(final boolean changed, final int left, final int top, final int right, final int bottom) { Loading @@ -64,9 +69,7 @@ public class ButtonSwitcher extends FrameLayout { mInstallButton = (Button)findViewById(R.id.dict_install_button); mCancelButton = (Button)findViewById(R.id.dict_cancel_button); mDeleteButton = (Button)findViewById(R.id.dict_delete_button); mInstallButton.setOnClickListener(mOnClickListener); mCancelButton.setOnClickListener(mOnClickListener); mDeleteButton.setOnClickListener(mOnClickListener); setInternalOnClickListener(mOnClickListener); setButtonPositionWithoutAnimation(mStatus); if (mAnimateToStatus != NOT_INITIALIZED) { // We have been asked to animate before we were ready, so we took a note of it. Loading Loading @@ -139,6 +142,12 @@ public class ButtonSwitcher extends FrameLayout { public void setInternalOnClickListener(final OnClickListener listener) { mOnClickListener = listener; if (null != mInstallButton) { // Already laid out : do it now mInstallButton.setOnClickListener(mOnClickListener); mCancelButton.setOnClickListener(mOnClickListener); mDeleteButton.setOnClickListener(mOnClickListener); } } private ViewPropertyAnimator animateButton(final View button, final int direction) { Loading java/src/com/android/inputmethod/dictionarypack/DictionaryListInterfaceState.java +16 −0 Original line number Diff line number Diff line Loading @@ -16,8 +16,11 @@ package com.android.inputmethod.dictionarypack; import android.view.View; import com.android.inputmethod.latin.CollectionUtils; import java.util.ArrayList; import java.util.HashMap; /** Loading @@ -37,6 +40,7 @@ public class DictionaryListInterfaceState { } private HashMap<String, State> mWordlistToState = CollectionUtils.newHashMap(); private ArrayList<View> mViewCache = CollectionUtils.newArrayList(); public boolean isOpen(final String wordlistId) { final State state = mWordlistToState.get(wordlistId); Loading Loading @@ -64,4 +68,16 @@ public class DictionaryListInterfaceState { state.mOpen = false; } } public View findFirstOrphanedView() { for (final View v : mViewCache) { if (null == v.getParent()) return v; } return null; } public View addToCacheAndReturnView(final View view) { mViewCache.add(view); return view; } } java/src/com/android/inputmethod/dictionarypack/WordListPreference.java +11 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,14 @@ public final class WordListPreference extends Preference { setSummary(getSummary(status)); } @Override public View onCreateView(final ViewGroup parent) { final View orphanedView = mInterfaceState.findFirstOrphanedView(); if (null != orphanedView) return orphanedView; // Will be sent to onBindView final View newView = super.onCreateView(parent); return mInterfaceState.addToCacheAndReturnView(newView); } private String getSummary(final int status) { switch (status) { // If we are deleting the word list, for the user it's like it's already deleted. Loading Loading @@ -209,6 +217,9 @@ public final class WordListPreference extends Preference { final ButtonSwitcher buttonSwitcher = (ButtonSwitcher)view.findViewById(R.id.wordlist_button_switcher); // We need to clear the state of the button switcher, because we reuse views; if we didn't // reset it would animate from whatever its old state was. buttonSwitcher.reset(); if (mInterfaceState.isOpen(mWordlistId)) { // The button is open. final int previousStatus = mInterfaceState.getStatus(mWordlistId); Loading Loading
java/src/com/android/inputmethod/dictionarypack/ButtonSwitcher.java +12 −3 Original line number Diff line number Diff line Loading @@ -57,6 +57,11 @@ public class ButtonSwitcher extends FrameLayout { super(context, attrs, defStyle); } public void reset() { mStatus = NOT_INITIALIZED; mAnimateToStatus = NOT_INITIALIZED; } @Override protected void onLayout(final boolean changed, final int left, final int top, final int right, final int bottom) { Loading @@ -64,9 +69,7 @@ public class ButtonSwitcher extends FrameLayout { mInstallButton = (Button)findViewById(R.id.dict_install_button); mCancelButton = (Button)findViewById(R.id.dict_cancel_button); mDeleteButton = (Button)findViewById(R.id.dict_delete_button); mInstallButton.setOnClickListener(mOnClickListener); mCancelButton.setOnClickListener(mOnClickListener); mDeleteButton.setOnClickListener(mOnClickListener); setInternalOnClickListener(mOnClickListener); setButtonPositionWithoutAnimation(mStatus); if (mAnimateToStatus != NOT_INITIALIZED) { // We have been asked to animate before we were ready, so we took a note of it. Loading Loading @@ -139,6 +142,12 @@ public class ButtonSwitcher extends FrameLayout { public void setInternalOnClickListener(final OnClickListener listener) { mOnClickListener = listener; if (null != mInstallButton) { // Already laid out : do it now mInstallButton.setOnClickListener(mOnClickListener); mCancelButton.setOnClickListener(mOnClickListener); mDeleteButton.setOnClickListener(mOnClickListener); } } private ViewPropertyAnimator animateButton(final View button, final int direction) { Loading
java/src/com/android/inputmethod/dictionarypack/DictionaryListInterfaceState.java +16 −0 Original line number Diff line number Diff line Loading @@ -16,8 +16,11 @@ package com.android.inputmethod.dictionarypack; import android.view.View; import com.android.inputmethod.latin.CollectionUtils; import java.util.ArrayList; import java.util.HashMap; /** Loading @@ -37,6 +40,7 @@ public class DictionaryListInterfaceState { } private HashMap<String, State> mWordlistToState = CollectionUtils.newHashMap(); private ArrayList<View> mViewCache = CollectionUtils.newArrayList(); public boolean isOpen(final String wordlistId) { final State state = mWordlistToState.get(wordlistId); Loading Loading @@ -64,4 +68,16 @@ public class DictionaryListInterfaceState { state.mOpen = false; } } public View findFirstOrphanedView() { for (final View v : mViewCache) { if (null == v.getParent()) return v; } return null; } public View addToCacheAndReturnView(final View view) { mViewCache.add(view); return view; } }
java/src/com/android/inputmethod/dictionarypack/WordListPreference.java +11 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,14 @@ public final class WordListPreference extends Preference { setSummary(getSummary(status)); } @Override public View onCreateView(final ViewGroup parent) { final View orphanedView = mInterfaceState.findFirstOrphanedView(); if (null != orphanedView) return orphanedView; // Will be sent to onBindView final View newView = super.onCreateView(parent); return mInterfaceState.addToCacheAndReturnView(newView); } private String getSummary(final int status) { switch (status) { // If we are deleting the word list, for the user it's like it's already deleted. Loading Loading @@ -209,6 +217,9 @@ public final class WordListPreference extends Preference { final ButtonSwitcher buttonSwitcher = (ButtonSwitcher)view.findViewById(R.id.wordlist_button_switcher); // We need to clear the state of the button switcher, because we reuse views; if we didn't // reset it would animate from whatever its old state was. buttonSwitcher.reset(); if (mInterfaceState.isOpen(mWordlistId)) { // The button is open. final int previousStatus = mInterfaceState.getStatus(mWordlistId); Loading