package com.marshalchen.common.uimodule.simplemodule;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import com.marshalchen.common.uimodule.widgets.R;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ProgressLayout extends RelativeLayout {
private static final String TAG_PROGRESS = "ProgressLayout.TAG_PROGRESS";
private View mProgressView;
private List<View> mContentViews = new ArrayList<View>();
public ProgressLayout(Context context) {
super(context);
}
public ProgressLayout(Context context, AttributeSet attrs) {
super(context, attrs);
init(attrs);
}
public ProgressLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(attrs);
}
private void init(AttributeSet attrs) {
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.ProgressLayout);
int backgroundColor = a.getColor(R.styleable.ProgressLayout_progressLayoutProgressBackground, Color.TRANSPARENT);
boolean startFromProgress = a.getBoolean(R.styleable.ProgressLayout_progressLayoutProgress, false);
a.recycle();
LayoutParams layoutParams;
// if progressBackground color == Color.TRANSPARENT just add progress bar
if (backgroundColor == Color.TRANSPARENT) {
mProgressView = new ProgressBar(getContext());
layoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.addRule(CENTER_IN_PARENT);
} else { // else wrap progress bar in LinearLayout and set background color to LinearLayout
LinearLayout linearLayout = new LinearLayout(getContext());
linearLayout.setGravity(Gravity.CENTER);
linearLayout.setBackgroundColor(backgroundColor);
layoutParams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
ProgressBar progressBar = new ProgressBar(getContext());
linearLayout.addView(progressBar);
mProgressView = linearLayout;
}
mProgressView.setTag(TAG_PROGRESS);
if (!startFromProgress) {
mProgressView.setVisibility(View.GONE);
}
addView(mProgressView, layoutParams);
}
@Override
public void addView(View child, int index, ViewGroup.LayoutParams params) {
super.addView(child, index, params);
if (child.getTag() == null || !child.getTag().equals(TAG_PROGRESS)) {
mContentViews.add(child);
}
}
public boolean isProgress() {
return mProgressView.getVisibility() == View.VISIBLE;
}
public void setProgress(boolean visible) {
setProgress(visible, Collections.<Integer>emptyList());
}
public void setProgress(boolean visible, List<Integer> skipIds) {
mProgressView.setVisibility(visible ? View.VISIBLE : View.GONE);
for (View v : mContentViews) {
if (!skipIds.contains(v.getId())) {
v.setVisibility(visible ? View.GONE : View.VISIBLE);
}
}
}
}