diff --git a/clients/android/NewsBlur/src/com/newsblur/fragment/FeedIntelligenceSelectorFragment.java b/clients/android/NewsBlur/src/com/newsblur/fragment/FeedIntelligenceSelectorFragment.java index 493a5e57b..98e099f4c 100644 --- a/clients/android/NewsBlur/src/com/newsblur/fragment/FeedIntelligenceSelectorFragment.java +++ b/clients/android/NewsBlur/src/com/newsblur/fragment/FeedIntelligenceSelectorFragment.java @@ -4,6 +4,7 @@ import android.os.Bundle; import android.app.Fragment; import android.view.LayoutInflater; import android.view.View; +import android.view.ViewTreeObserver; import android.view.ViewGroup; import com.newsblur.R; @@ -12,25 +13,31 @@ import com.newsblur.view.StateToggleButton.StateChangedListener; import com.newsblur.util.StateFilter; public class FeedIntelligenceSelectorFragment extends Fragment implements StateChangedListener { - - public static final String FRAGMENT_TAG = "feedIntelligenceSelector"; - private StateToggleButton button; - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View v = inflater.inflate(R.layout.fragment_intelligenceselector, null); - button = (StateToggleButton) v.findViewById(R.id.fragment_intelligence_statebutton); - button.setStateListener(this); - return v; - } + + private StateToggleButton button; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + final View v = inflater.inflate(R.layout.fragment_intelligenceselector, null); + button = (StateToggleButton) v.findViewById(R.id.fragment_intelligence_statebutton); + button.setStateListener(this); + v.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + button.setParentWidthPX(v.getWidth()); + } + }); + + return v; + } - @Override - public void changedState(StateFilter state) { - ((StateChangedListener) getActivity()).changedState(state); - } - - public void setState(StateFilter state) { - button.setState(state); - } + @Override + public void changedState(StateFilter state) { + ((StateChangedListener) getActivity()).changedState(state); + } + + public void setState(StateFilter state) { + button.setState(state); + } } diff --git a/clients/android/NewsBlur/src/com/newsblur/view/StateToggleButton.java b/clients/android/NewsBlur/src/com/newsblur/view/StateToggleButton.java index 3e9e77c2c..f25863f29 100644 --- a/clients/android/NewsBlur/src/com/newsblur/view/StateToggleButton.java +++ b/clients/android/NewsBlur/src/com/newsblur/view/StateToggleButton.java @@ -15,13 +15,19 @@ import butterknife.OnClick; import com.newsblur.R; import com.newsblur.util.StateFilter; +import com.newsblur.util.UIUtils; public class StateToggleButton extends LinearLayout { - private StateFilter currentState = StateFilter.SOME; + /** the parent width in dp under which the widget will auto-collapse to a compact form */ + private final static int COLLAPSE_WIDTH_DP = 450; + + private StateFilter state = StateFilter.SOME; private StateChangedListener stateChangedListener; + private int parentWidthPX = 0; + @Bind(R.id.toggle_all) ViewGroup allButton; @Bind(R.id.toggle_all_icon) View allButtonIcon; @Bind(R.id.toggle_all_text) View allButtonText; @@ -49,7 +55,7 @@ public class StateToggleButton extends LinearLayout { savedButton.getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING); } - setState(currentState); + setState(state); } public void setStateListener(final StateChangedListener stateChangedListener) { @@ -59,42 +65,51 @@ public class StateToggleButton extends LinearLayout { @OnClick({R.id.toggle_all, R.id.toggle_some, R.id.toggle_focus, R.id.toggle_saved}) public void onClickToggle(View v) { if (v.getId() == R.id.toggle_all) { - changeState(StateFilter.ALL); + setState(StateFilter.ALL); } else if (v.getId() == R.id.toggle_some) { - changeState(StateFilter.SOME); + setState(StateFilter.SOME); } else if (v.getId() == R.id.toggle_focus) { - changeState(StateFilter.BEST); + setState(StateFilter.BEST); } else if (v.getId() == R.id.toggle_saved) { - changeState(StateFilter.SAVED); + setState(StateFilter.SAVED); } } - public void changeState(StateFilter state) { - setState(state); - if (stateChangedListener != null) { - stateChangedListener.changedState(currentState); - } - } - public void setState(StateFilter state) { - currentState = state; + this.state = state; + updateButtonStates(); + if (stateChangedListener != null) { + stateChangedListener.changedState(this.state); + } + } - allButtonText.setVisibility(state == StateFilter.ALL ? View.VISIBLE : View.GONE); + public void setParentWidthPX(int parentWidthPX) { + this.parentWidthPX = parentWidthPX; + updateButtonStates(); + } + + public void updateButtonStates() { + boolean compactMode = true; + if (parentWidthPX > 0) { + float widthDP = UIUtils.px2dp(getContext(), parentWidthPX); + if (widthDP > COLLAPSE_WIDTH_DP) compactMode = false; + } + + allButtonText.setVisibility((!compactMode || state == StateFilter.ALL) ? View.VISIBLE : View.GONE); allButton.setEnabled(state != StateFilter.ALL); allButtonIcon.setAlpha(state == StateFilter.ALL ? 1.0f : 0.6f); - someButtonText.setVisibility(state == StateFilter.SOME ? View.VISIBLE : View.GONE); + someButtonText.setVisibility((!compactMode || state == StateFilter.SOME) ? View.VISIBLE : View.GONE); someButton.setEnabled(state != StateFilter.SOME); someButtonIcon.setAlpha(state == StateFilter.SOME ? 1.0f : 0.6f); - focusButtonText.setVisibility(state == StateFilter.BEST ? View.VISIBLE : View.GONE); + focusButtonText.setVisibility((!compactMode || state == StateFilter.BEST) ? View.VISIBLE : View.GONE); focusButton.setEnabled(state != StateFilter.BEST); focusButtonIcon.setAlpha(state == StateFilter.BEST ? 1.0f : 0.6f); - savedButtonText.setVisibility(state == StateFilter.SAVED ? View.VISIBLE : View.GONE); + savedButtonText.setVisibility((!compactMode || state == StateFilter.SAVED) ? View.VISIBLE : View.GONE); savedButton.setEnabled(state != StateFilter.SAVED); savedButtonIcon.setAlpha(state == StateFilter.SAVED ? 1.0f : 0.6f); - } public interface StateChangedListener {