mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-08-31 21:41:33 +00:00
make state toggle auto-collapse responsive to screen size
This commit is contained in:
parent
3a3e4ae6a6
commit
b58f32b51a
2 changed files with 60 additions and 38 deletions
|
@ -4,6 +4,7 @@ import android.os.Bundle;
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.ViewTreeObserver;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
import com.newsblur.R;
|
import com.newsblur.R;
|
||||||
|
@ -13,14 +14,20 @@ import com.newsblur.util.StateFilter;
|
||||||
|
|
||||||
public class FeedIntelligenceSelectorFragment extends Fragment implements StateChangedListener {
|
public class FeedIntelligenceSelectorFragment extends Fragment implements StateChangedListener {
|
||||||
|
|
||||||
public static final String FRAGMENT_TAG = "feedIntelligenceSelector";
|
|
||||||
private StateToggleButton button;
|
private StateToggleButton button;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
View v = inflater.inflate(R.layout.fragment_intelligenceselector, null);
|
final View v = inflater.inflate(R.layout.fragment_intelligenceselector, null);
|
||||||
button = (StateToggleButton) v.findViewById(R.id.fragment_intelligence_statebutton);
|
button = (StateToggleButton) v.findViewById(R.id.fragment_intelligence_statebutton);
|
||||||
button.setStateListener(this);
|
button.setStateListener(this);
|
||||||
|
v.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
||||||
|
@Override
|
||||||
|
public void onGlobalLayout() {
|
||||||
|
button.setParentWidthPX(v.getWidth());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,13 +15,19 @@ import butterknife.OnClick;
|
||||||
|
|
||||||
import com.newsblur.R;
|
import com.newsblur.R;
|
||||||
import com.newsblur.util.StateFilter;
|
import com.newsblur.util.StateFilter;
|
||||||
|
import com.newsblur.util.UIUtils;
|
||||||
|
|
||||||
public class StateToggleButton extends LinearLayout {
|
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 StateChangedListener stateChangedListener;
|
||||||
|
|
||||||
|
private int parentWidthPX = 0;
|
||||||
|
|
||||||
@Bind(R.id.toggle_all) ViewGroup allButton;
|
@Bind(R.id.toggle_all) ViewGroup allButton;
|
||||||
@Bind(R.id.toggle_all_icon) View allButtonIcon;
|
@Bind(R.id.toggle_all_icon) View allButtonIcon;
|
||||||
@Bind(R.id.toggle_all_text) View allButtonText;
|
@Bind(R.id.toggle_all_text) View allButtonText;
|
||||||
|
@ -49,7 +55,7 @@ public class StateToggleButton extends LinearLayout {
|
||||||
savedButton.getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING);
|
savedButton.getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING);
|
||||||
}
|
}
|
||||||
|
|
||||||
setState(currentState);
|
setState(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setStateListener(final StateChangedListener stateChangedListener) {
|
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})
|
@OnClick({R.id.toggle_all, R.id.toggle_some, R.id.toggle_focus, R.id.toggle_saved})
|
||||||
public void onClickToggle(View v) {
|
public void onClickToggle(View v) {
|
||||||
if (v.getId() == R.id.toggle_all) {
|
if (v.getId() == R.id.toggle_all) {
|
||||||
changeState(StateFilter.ALL);
|
setState(StateFilter.ALL);
|
||||||
} else if (v.getId() == R.id.toggle_some) {
|
} else if (v.getId() == R.id.toggle_some) {
|
||||||
changeState(StateFilter.SOME);
|
setState(StateFilter.SOME);
|
||||||
} else if (v.getId() == R.id.toggle_focus) {
|
} else if (v.getId() == R.id.toggle_focus) {
|
||||||
changeState(StateFilter.BEST);
|
setState(StateFilter.BEST);
|
||||||
} else if (v.getId() == R.id.toggle_saved) {
|
} 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) {
|
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);
|
allButton.setEnabled(state != StateFilter.ALL);
|
||||||
allButtonIcon.setAlpha(state == StateFilter.ALL ? 1.0f : 0.6f);
|
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);
|
someButton.setEnabled(state != StateFilter.SOME);
|
||||||
someButtonIcon.setAlpha(state == StateFilter.SOME ? 1.0f : 0.6f);
|
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);
|
focusButton.setEnabled(state != StateFilter.BEST);
|
||||||
focusButtonIcon.setAlpha(state == StateFilter.BEST ? 1.0f : 0.6f);
|
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);
|
savedButton.setEnabled(state != StateFilter.SAVED);
|
||||||
savedButtonIcon.setAlpha(state == StateFilter.SAVED ? 1.0f : 0.6f);
|
savedButtonIcon.setAlpha(state == StateFilter.SAVED ? 1.0f : 0.6f);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface StateChangedListener {
|
public interface StateChangedListener {
|
||||||
|
|
Loading…
Add table
Reference in a new issue