package com.pro;
import android.app.AlertDialog;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.SpannableString;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
public class ProgressDialog1 extends AlertDialog {
public static final int STYLE_SPINNER = 0;
/** Creates a ProgressDialog1 with a horizontal progress bar.
*/
public static final int STYLE_HORIZONTAL = 1;
public static final int STYLE_DISMISS = -1;
private ProgressBar mProgress_h;
private int mProgressStyle = STYLE_SPINNER;
private TextView mProgressNumber_s,message_tv,message_ed_tv,message_center_tv,message_all_tv;
private int mMax;
private int mProgressVal;
private int mSecondaryProgressVal;
private int mIncrementBy;
private int mIncrementSecondaryBy;
private Drawable mProgressDrawable;
private Drawable mIndeterminateDrawable;
private CharSequence mMessage = "";
private boolean mIndeterminate;
private boolean mHasStarted;
private Handler mViewUpdateHandler;
private Context mContext;
private LinearLayout layout,layout_h,layout_s,layout_message_h;
private LinearLayout layout_progress_h,layout_progress_s;
private TextView message_h,number_ed,number_cen,number_all,progress_number2;
private ProgressBar progress_h,progress;
private SpannableString tmp;
public SpannableString getTmp() {
return tmp;
}
public void setTmp(SpannableString tmp) {
this.tmp = tmp;
}
public ProgressDialog1(Context context) {
this(context, android.R.style.Theme_Panel);
mContext = context;
}
public ProgressDialog1(Context context, int theme) {
super(context, theme);
}
public static ProgressDialog1 show(Context context, CharSequence title,
CharSequence message) {
return show(context, title, message, false);
}
public static ProgressDialog1 show(Context context, CharSequence title,
CharSequence message, boolean indeterminate) {
return show(context, title, message, indeterminate, false, null);
}
public static ProgressDialog1 show(Context context, CharSequence title,
CharSequence message, boolean indeterminate, boolean cancelable) {
return show(context, title, message, indeterminate, cancelable, null);
}
public static ProgressDialog1 show(Context context, CharSequence title,
CharSequence message, boolean indeterminate,
boolean cancelable, OnCancelListener cancelListener) {
ProgressDialog1 dialog = new ProgressDialog1(context);
dialog.setTitle(title);
dialog.setMessage(message);
dialog.setIndeterminate(indeterminate);
dialog.setCancelable(cancelable);
dialog.setOnCancelListener(cancelListener);
dialog.show();
return dialog;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
if (mProgressStyle == STYLE_HORIZONTAL)
{
/* Use a separate handler to update the text views as they
* must be updated on the same thread that created them.
*/
mViewUpdateHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
/* Update the number and percent */
int progress = mProgress_h.getProgress();
int max = mProgress_h.getMax();
message_tv.setText(getMessage());
message_ed_tv.setText(""+progress);
message_all_tv.setText(""+max);
}
};
View view = initLayout();
layout_progress_h = layout_h;
layout_progress_s = layout_s;
layout_progress_s.setVisibility(View.GONE);
mProgress_h = progress_h;
mProgressNumber_s = progress_number2;
message_tv = message_h;
message_ed_tv = number_ed;
message_center_tv = number_cen;
message_all_tv = number_all;
message_center_tv.setText("/");
setView(view);
}
if (mMax > 0) {
setMax(mMax);
}
if (mProgressVal > 0) {
setProgress(mProgressVal);
}
if (mSecondaryProgressVal > 0) {
setSecondaryProgress(mSecondaryProgressVal);
}
if (mIncrementBy > 0) {
incrementProgressBy(mIncrementBy);
}
if (mIncrementSecondaryBy > 0) {
incrementSecondaryProgressBy(mIncrementSecondaryBy);
}
if (mProgressDrawable != null) {
setProgressDrawable(mProgressDrawable);
}
if (mIndeterminateDrawable != null) {
setIndeterminateDrawable(mIndeterminateDrawable);
}
if (mMessage != null) {
setMessage(mMessage);
}
setIndeterminate(mIndeterminate);
onProgressChanged();
super.onCreate(savedInstanceState);
}
@Override
public void onStart() {
super.onStart();
mHasStarted = true;
}
@Override
protected void onStop() {
super.onStop();
mHasStarted = false;
}
public void setProgress(int value) {
if (mHasStarted) {
mProgress_h.setProgress(value);
onProgressChanged();
} else {
mProgressVal = value;
}
}
public void setSecondaryProgress(int secondaryProgress) {
if (mProgress_h != null) {
mProgress_h.setSecondaryProgress(secondaryProgress);
onProgressChanged();
} else {
mSecondaryProgressVal = secondaryProgress;
}
}
public int getProgress() {
if (mProgress_h != null) {
return mProgress_h.getProgress();
}
return mProgressVal;
}
public int getSecondaryProgress() {
if (mProgress_h != null) {
return mProgress_h.getSecondaryProgress();
}
return mSecondaryProgressVal;
}
public int getMax() {
if (mProgress_h != null) {
return mProgress_h.getMax();
}
return mMax;
}
public void setMax(int max) {
if (mProgress_h != null) {
mProgress_h.setMax(max);
onProgressChanged();
} else {
mMax = max;
}
}
public void incrementProgressBy(int diff) {
if (mProgress_h != null) {
mProgress_h.incrementProgressBy(diff);
onProgressChanged();
} else {
mIncrementBy += diff;
}
}
public void incrementSecondaryProgressBy(int diff) {
if (mProgress_h != null) {
mProgress_h.incrementSecondaryProgressBy(diff);
onProgressChanged();
} else {
mIncrementSecondaryBy += diff;
}
}
public void setProgressDrawable(Drawable d) {
if (mProgress_h != null) {
mProgress_h.setProgressDrawable(d);
} else {
mProgressDrawable = d;
}
}
public void setIndeterminateDrawable(Drawable d) {
if (mProgress_h != null) {
mProgress_h.setIndeterminateDrawable(d);
} else {
mIndeterminateDrawable = d;
}
}
public void setIndeterminate(boolean indeterminate) {
if (mProgress_h != null) {
mProgress_h.setIndeterminate(indeterminate);
} else {
mIndeterminate = indeterminate;
}
}
public boolean isIndeterminate() {
if (mProgress_h != null) {
return mProgress_h.isIndeterminate();
}
return mIndeterminate;
}
@Override
public void setMessage(CharSequence message) {
if (mProgress_h != null) {
if (mProgressStyle == STYLE_HORIZONTAL) {
mMessage = message;
}
} else {
mMessage = message;
}
}
public void setProgressStyle(int style) {
mProgressStyle = style;
}
private void onProgressChanged() {
if (mProgressStyle == STYLE_HORIZONTAL) {
mViewUpdateHandler.sendEmptyMessage(0);
}
}
public void setDynamicStyle(int style,CharSequence message){
mProgressNumber_s.setText(message);
if (style == STYLE_HORIZONTAL) {
layout_progress_h.setVisibility(View.VISIBLE);
layout_progress_s.setVisibility(View.GONE);
}else if(style == STYLE_SPINNER){
layout_progress_s.setVisibility(View.VISIBLE);
layout_progress_h.setVisibility(View.GONE);
}else {
}
}
private CharSequence getMessage()
{
return mMessage;
}
private LinearLayout initLayout()
{
layout = new LinearLayout(mContext);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
layout_h = new LinearLayout(mContext);
layout_h.setOrientation(LinearLayout.VERTICAL);
layout_h.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
layout_message_h = new LinearLayout(mContext);
layout_message_h.setOrientation(LinearLayout.HORIZONTAL);
layout_message_h.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
layout_message_h.setGravity(Gravity.CENTER);
message_h = new TextView(mContext);
message_h.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
message_h.setMinHeight(30);
message_h.setWidth(60);
number_ed = new TextView(mContext);
number_ed.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
number_ed.setGravity(Gravity.RIGHT);
number_ed.setMinHeight(30);
number_ed.setWidth(40);
number_cen = new TextView(mContext);
number_cen.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
number_cen.setMinHeight(30);
number_all = new TextView(mContext);
number_all.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
number_all.setMinHeight(30);
layout_message_h.addView(message_h);
layout_message_h.addView(number_ed);
layout_message_h.addView(number_cen);
layout_message_h.addView(number_all);
progress_h = new ProgressBar(mContext);
BeanUtils.setFieldValue(progress_h, "mOnlyIndeterminate", new Boolean(false));
BeanUtils.setFieldValue(progress_h, "mMinHeight", new Integer(15));
progress_h.setIndeterminate(false);
progress_h.setProgressDrawable(mContext.getResources().getDrawable(android.R.drawable.progress_horizontal));
progress_h.setIndeterminateDrawable(mContext.getResources().getDrawable(android.R.drawable.progress_indeterminate_horizontal));
progress_h.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
layout_h.addView(layout_message_h);
layout_h.addView(progress_h);
layout_s = new LinearLayout(mContext);
layout_s.setOrientation(LinearLayout.HORIZONTAL);
layout_s.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
progress = new ProgressBar(mContext);
progress.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
BeanUtils.setFieldValue(progress, "mMinHeight", new Integer(45));
progress.setMax(10000);
progress_number2 = new TextView(mContext);
progress_number2.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
progress_number2.setPadding(20, 10, 0, 0);
layout_s.addView(progress);
layout_s.addView(progress_number2);
layout.addView(layout_h);
layout.addView(layout_s);
return layout;
}
}