Skip to content

Instantly share code, notes, and snippets.

@cliffgr
Created November 2, 2016 11:43
Show Gist options
  • Save cliffgr/747d9e556519e78009feec3c22a6b66d to your computer and use it in GitHub Desktop.
Save cliffgr/747d9e556519e78009feec3c22a6b66d to your computer and use it in GitHub Desktop.
Rating Filter
package com.ethos.main.ui.widgets;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import com.ethos.doers.R;
import com.ethos.main.ui.utils.Logger;
import java.util.ArrayList;
/**
* Created by cliff on 24/10/2016.
*/
public class Widget_Rating_Filter extends LinearLayout implements View.OnClickListener {
private ArrayList<ButtonFilter> buttons = new ArrayList<>();
private ButtonFilter btn_focus;
private Rate rateListener;
private int[] btn_id = {R.id.rate1, R.id.rate2, R.id.rate3, R.id.rate4, R.id.rate5};
public Widget_Rating_Filter(Context context) {
super(context);
init();
}
public Widget_Rating_Filter(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public Widget_Rating_Filter(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
inflate(getContext(), R.layout.view_rating, this);
for (int aBtn_id : btn_id) {
ButtonFilter button = new ButtonFilter((Button) findViewById(aBtn_id), false);
button.getbButton().setOnClickListener(this);
buttons.add(button);
}
}
public void setRateListener(Rate listener){
this.rateListener=listener;
}
@Override
public void onClick(View v) {
Logger.Loge(getClass(), "onClick", "V" + v.getId());
switch (v.getId()) {
case R.id.rate1:
if (buttons.get(0).isEnable()) {
changeOfCurrentSelectedButton(null,-1);
changeStateOfButtons(buttons.get(0).isEnable(), 0);
} else {
changeOfCurrentSelectedButton(buttons.get(0),0);
changeStateOfButtons(buttons.get(0).isEnable(), 0);
}
break;
case R.id.rate2:
if (buttons.get(1).isEnable()) {
changeOfCurrentSelectedButton(null,-1);
changeStateOfButtons(buttons.get(1).isEnable(), 1);
} else {
changeOfCurrentSelectedButton(buttons.get(1),1);
changeStateOfButtons(buttons.get(1).isEnable(), 1);
}
break;
case R.id.rate3:
if (buttons.get(2).isEnable()) {
changeOfCurrentSelectedButton(null,-1);
changeStateOfButtons(buttons.get(2).isEnable(), 2);
} else {
changeOfCurrentSelectedButton(buttons.get(2),2);
changeStateOfButtons(buttons.get(2).isEnable(), 2);
}
break;
case R.id.rate4:
if (buttons.get(3).isEnable()) {
changeOfCurrentSelectedButton(null,-1);
changeStateOfButtons(buttons.get(3).isEnable(), 3);
} else {
changeOfCurrentSelectedButton(buttons.get(3),3);
changeStateOfButtons(buttons.get(3).isEnable(), 3);
}
break;
case R.id.rate5:
if (buttons.get(4).isEnable()) {
changeOfCurrentSelectedButton(null,-1);
changeStateOfButtons(buttons.get(4).isEnable(), 4);
} else {
changeOfCurrentSelectedButton(buttons.get(4),4);
changeStateOfButtons(buttons.get(4).isEnable(), 4);
}
break;
}
}
private void changeOfCurrentSelectedButton(ButtonFilter buttonFilter,int position){
btn_focus=buttonFilter;
if(btn_focus==null){
rateListener.returnSelectedRate(0);
}else{
rateListener.returnSelectedRate(position+1);
}
}
private void changeStateOfButtons(boolean enable, int position ) {
Logger.Loge(getClass(), "changeStateOfButtons", "enable :" + enable + " position :" + position);
for (int i = 0; i < buttons.size(); i++) {
Button button = buttons.get(i).getbButton();
if(i>=position) {
if (enable) {
buttons.get(i).setEnable(!enable);
button.setBackgroundColor(Color.GRAY);
} else {
buttons.get(i).setEnable(enable);
button.setBackgroundColor(getResources().getColor(R.color.appPrimary));
}
}else{
buttons.get(i).setEnable(!enable);
button.setBackgroundColor(Color.GRAY);
}
}
}
class ButtonFilter {
private Button bButton;
private boolean isEnable;
ButtonFilter(Button btn, boolean isEnable) {
this.bButton = btn;
this.isEnable = isEnable;
}
private Button getbButton() {
return bButton;
}
public void setbButton(Button bButton) {
this.bButton = bButton;
}
private boolean isEnable() {
return isEnable;
}
private void setEnable(boolean enable) {
isEnable = enable;
}
}
public interface Rate{
void returnSelectedRate(int filter);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment