package cn.mutils.app.ui;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
import cn.mutils.app.event.listener.OnSelectedChangeListener;
@SuppressWarnings({"unused", "UnusedAssignment"})
@SuppressLint("MissingSuperCall")
public class TabBar extends LinearLayout implements View.OnClickListener {
/**
* Handler for fluent experience
*/
protected Handler mSelectedDispatcher;
protected OnSelectedChangeListener mOnSelectedChangeListener;
protected int mSelectedIndex = -1;
protected int mSelectedIndexTryAgain = -1;
public TabBar(Context context) {
super(context);
}
public TabBar(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onFinishInflate() {
for (int i = 0, size = this.getChildCount(); i < size; i++) {
View item = this.getChildAt(i);
if (item instanceof TabItem) {
TabItem tabItem = ((TabItem) item);
if (tabItem.getIndex() == -1) {
tabItem.setIndex(i);
}
}
item.setOnClickListener(this);
if (i == 0) {
item.setSelected(true);
mSelectedIndex = 0;
}
}
}
public void setEnabled(boolean enabled, int index) {
if (index < this.getChildCount()) {
this.getChildAt(index).setEnabled(enabled);
}
}
public void tryAgain() {
if (mSelectedIndexTryAgain == -1) {
return;
}
if (mOnSelectedChangeListener != null) {
if (mOnSelectedChangeListener.onInterceptTryAgain(this, mSelectedIndexTryAgain)) {
mSelectedIndexTryAgain = -1;
return;
}
}
this.setSelectedIndex(mSelectedIndexTryAgain);
mSelectedIndexTryAgain = -1;
}
public int getSelectedIndex() {
return mSelectedIndex;
}
public void setSelectedIndex(int selectedIndex) {
if (selectedIndex < 0 || selectedIndex >= this.getChildCount()) {
if (mSelectedIndex != -1) {
this.getChildAt(mSelectedIndex).setSelected(false);
}
mSelectedIndex = -1;
return;
}
if (mSelectedIndex == selectedIndex) {
return;
}
if (mOnSelectedChangeListener != null) {
if (mOnSelectedChangeListener.onInterceptChange(this, selectedIndex)) {
mSelectedIndexTryAgain = selectedIndex;
return;
}
}
if (mSelectedIndex >= 0) {
this.getChildAt(mSelectedIndex).setSelected(false);
}
mSelectedIndex = selectedIndex;
mSelectedIndexTryAgain = -1;
this.getChildAt(mSelectedIndex).setSelected(true);
if (mOnSelectedChangeListener != null) {
if (mSelectedDispatcher == null) {
mSelectedDispatcher = new Handler(Looper.getMainLooper());
} else {
mSelectedDispatcher.removeCallbacksAndMessages(null);
}
mSelectedDispatcher.post(new SelectedRunnable());
}
}
public void setOnSelectedChangeListener(OnSelectedChangeListener listener) {
mOnSelectedChangeListener = listener;
}
@Override
public void onClick(View v) {
int index = -1;
if (v instanceof TabItem) {
index = ((TabItem) v).getIndex();
if (index < 0) {
index = this.indexOfChild(v);
}
} else {
index = this.indexOfChild(v);
}
this.setSelectedIndex(index);
}
class SelectedRunnable implements Runnable {
@Override
public void run() {
if (mOnSelectedChangeListener != null) {
mOnSelectedChangeListener.onChanged(TabBar.this, mSelectedIndex);
}
}
}
}