Merge "Rub some butter on dictionary list scrolling."
This commit is contained in:
commit
ec9670ac3d
3 changed files with 39 additions and 3 deletions
|
@ -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) {
|
||||
|
@ -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.
|
||||
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
||||
/**
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
@ -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…
Reference in a new issue