make state toggle auto-collapse responsive to screen size

This commit is contained in:
dosiecki 2016-05-04 18:38:51 -07:00
parent 3a3e4ae6a6
commit b58f32b51a
2 changed files with 60 additions and 38 deletions

View file

@ -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);
}
}

View file

@ -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 {