diff --git a/java/res/layout/dictionary_line.xml b/java/res/layout/dictionary_line.xml index a8d15ab73cbad2819f437db7c0b95b5a8c7064c5..9eeea697e5a1d82081e2f301f1852e4a0e144b21 100644 --- a/java/res/layout/dictionary_line.xml +++ b/java/res/layout/dictionary_line.xml @@ -71,14 +71,18 @@ </LinearLayout> - <Button - android:id="@+android:id/wordlist_button" + <com.android.inputmethod.dictionarypack.ButtonSwitcher + android:id="@+android:id/wordlist_button_switcher" android:layout_weight="0" android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="right|center_vertical" - android:singleLine="true" - android:textAppearance="?android:attr/textAppearanceMedium" - android:text="@string/install_dict" /> - + android:layout_height="wrap_content"> + <Button + android:id="@+android:id/dict_install_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="right|center_vertical" + android:singleLine="true" + android:textAppearance="?android:attr/textAppearanceMedium" + android:text="@string/install_dict" /> + </com.android.inputmethod.dictionarypack.ButtonSwitcher> </LinearLayout> diff --git a/java/src/com/android/inputmethod/dictionarypack/ButtonSwitcher.java b/java/src/com/android/inputmethod/dictionarypack/ButtonSwitcher.java new file mode 100644 index 0000000000000000000000000000000000000000..a062298f2003ff27c1ce5fb286a0bf9057090f1c --- /dev/null +++ b/java/src/com/android/inputmethod/dictionarypack/ButtonSwitcher.java @@ -0,0 +1,69 @@ +/** + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package com.android.inputmethod.dictionarypack; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.widget.Button; +import android.widget.FrameLayout; + +import com.android.inputmethod.latin.R; + +/** + * A view that handles buttons inside it according to a status. + */ +public class ButtonSwitcher extends FrameLayout { + // Animation directions + public static final int ANIMATION_IN = 1; + public static final int ANIMATION_OUT = 2; + + public ButtonSwitcher(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public ButtonSwitcher(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public void setText(final CharSequence text) { + ((Button)findViewById(R.id.dict_install_button)).setText(text); + } + + public void setInternalButtonVisiblility(final int visibility) { + findViewById(R.id.dict_install_button).setVisibility(visibility); + } + + public void setInternalOnClickListener(final OnClickListener listener) { + findViewById(R.id.dict_install_button).setOnClickListener(listener); + } + + public void animateButton(final int direction) { + final View button = findViewById(R.id.dict_install_button); + final float outerX = getWidth(); + final float innerX = button.getX() - button.getTranslationX(); + if (View.INVISIBLE == button.getVisibility()) { + button.setTranslationX(outerX - innerX); + button.setVisibility(View.VISIBLE); + } + if (ANIMATION_IN == direction) { + button.animate().translationX(0); + } else { + button.animate().translationX(outerX - innerX); + } + } +} diff --git a/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java b/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java index 6d302daa218b7a3af87750aeeab3d86933f6cfd5..f1c0228082e8b24a3ef01b05b6d1c24934f2f2f4 100644 --- a/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java +++ b/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java @@ -23,7 +23,6 @@ import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; -import android.widget.Button; import android.widget.ListView; import com.android.inputmethod.latin.R; @@ -61,10 +60,6 @@ public final class WordListPreference extends Preference { // The status public int mStatus; - // Animation directions - static final private int ANIMATION_IN = 1; - static final private int ANIMATION_OUT = 2; - private final DictionaryListInterfaceState mInterfaceState; private final OnWordListPreferenceClick mPreferenceClickHandler = new OnWordListPreferenceClick(); @@ -192,10 +187,12 @@ public final class WordListPreference extends Preference { protected void onBindView(final View view) { super.onBindView(view); ((ViewGroup)view).setLayoutTransition(null); - final Button button = (Button)view.findViewById(R.id.wordlist_button); - button.setText(getButtonLabel(mStatus)); - button.setVisibility(mInterfaceState.isOpen(mWordlistId) ? View.VISIBLE : View.INVISIBLE); - button.setOnClickListener(mActionButtonClickHandler); + final ButtonSwitcher buttonSwitcher = + (ButtonSwitcher)view.findViewById(R.id.wordlist_button_switcher); + buttonSwitcher.setText(getButtonLabel(mStatus)); + buttonSwitcher.setInternalButtonVisiblility(mInterfaceState.isOpen(mWordlistId) ? + View.VISIBLE : View.INVISIBLE); + buttonSwitcher.setInternalOnClickListener(mActionButtonClickHandler); view.setOnClickListener(mPreferenceClickHandler); } @@ -224,32 +221,17 @@ public final class WordListPreference extends Preference { listView.getLastVisiblePosition() - listView.getFirstVisiblePosition(); // The "lastDisplayedIndex" is actually displayed, hence the <= for (int i = 0; i <= lastDisplayedIndex; ++i) { - final Button button = - (Button)listView.getChildAt(i).findViewById(R.id.wordlist_button); + final ButtonSwitcher buttonSwitcher = (ButtonSwitcher)listView.getChildAt(i) + .findViewById(R.id.wordlist_button_switcher); if (i == indexToOpen) { - animateButton(button, ANIMATION_IN); + buttonSwitcher.animateButton(ButtonSwitcher.ANIMATION_IN); } else { - animateButton(button, ANIMATION_OUT); + buttonSwitcher.animateButton(ButtonSwitcher.ANIMATION_OUT); } } } } - private void animateButton(final Button button, final int direction) { - if (null == button) return; - final float outerX = ((View)button.getParent()).getWidth(); - final float innerX = button.getX() - button.getTranslationX(); - if (View.INVISIBLE == button.getVisibility()) { - button.setTranslationX(outerX - innerX); - button.setVisibility(View.VISIBLE); - } - if (ANIMATION_IN == direction) { - button.animate().translationX(0); - } else { - button.animate().translationX(outerX - innerX); - } - } - private class OnActionButtonClick implements View.OnClickListener { @Override public void onClick(final View v) {