Back to project page Android-DoubleProgressBar.
The source code is released under:
Apache License
If you think the Android project Android-DoubleProgressBar listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.simaomata.common; /*from w ww .j av a 2s .c o m*/ /* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ 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.Spannable; import android.text.SpannableString; import android.text.style.StyleSpan; import android.view.LayoutInflater; import android.view.View; import android.widget.ProgressBar; import android.widget.TextView; import com.simaomata.R; import java.text.NumberFormat; /** * <p>A dialog showing a progress indicator and an optional text message or view. * Only a text message or a view can be used at the same time.</p> * <p>The dialog can be made cancelable on back key press.</p> * <p>The progress range is 0..10000.</p> */ public class DoubleProgressDialog extends AlertDialog { private ProgressBar mProgress; private ProgressBar mSecondaryProgress; private TextView mProgressNumber; private String mProgressNumberFormat; private TextView mProgressPercent; private NumberFormat mProgressPercentFormat; private TextView mSecondaryProgressNumber; private TextView mSecondaryProgressPercent; 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; public DoubleProgressDialog(Context context) { super(context); this.mContext = context; } public DoubleProgressDialog(Context context, int theme) { super(context, theme); this.mContext = context; } @Override protected void onCreate(Bundle savedInstanceState) { LayoutInflater inflater = LayoutInflater.from(mContext); /* 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.getProgress(); int max = mProgress.getMax(); double percent = (double) progress / (double) max; String format = mProgressNumberFormat; mProgressNumber.setText(String.format(format, progress, max)); SpannableString tmp = new SpannableString(mProgressPercentFormat.format(percent)); tmp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, tmp.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); mProgressPercent.setText(tmp); /* Update the number and percent of the second bar */ progress = mSecondaryProgress.getSecondaryProgress(); max = mProgress.getMax(); // Use the same max a the top bar percent = (double) progress / (double) max; mSecondaryProgressNumber.setText(String.format(format, progress, max)); tmp = new SpannableString(mProgressPercentFormat.format(percent)); tmp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, tmp.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); mSecondaryProgressPercent.setText(tmp); } }; View view = inflater.inflate(R.layout.alert_dialog_double_progress, null); mProgress = (ProgressBar) view.findViewById(R.id.progress); mSecondaryProgress = (ProgressBar) view.findViewById(R.id.secondaryProgress); mProgressNumber = (TextView) view.findViewById(R.id.progress_number); mProgressNumberFormat = "%d/%d"; mProgressPercent = (TextView) view.findViewById(R.id.progress_percent); mProgressPercentFormat = NumberFormat.getPercentInstance(); mProgressPercentFormat.setMaximumFractionDigits(0); mSecondaryProgressNumber = (TextView) view.findViewById(R.id.secondary_progress_number); mSecondaryProgressPercent = (TextView) view.findViewById(R.id.secondary_progress_percent); 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.setProgress(value); onProgressChanged(); } else { mProgressVal = value; } } public void setSecondaryProgress(int secondaryProgress) { if (mSecondaryProgress != null) { mSecondaryProgress.setSecondaryProgress(secondaryProgress); onProgressChanged(); } else { mSecondaryProgressVal = secondaryProgress; } } public int getProgress() { if (mProgress != null) { return mProgress.getProgress(); } return mProgressVal; } public int getSecondaryProgress() { if (mSecondaryProgress != null) { // We only use the secondary progress on the second bar // Seems to be more usable that way.. return mSecondaryProgress.getSecondaryProgress(); } return mSecondaryProgressVal; } public int getMax() { if (mProgress != null) { return mProgress.getMax(); } return mMax; } public void setMax(int max) { if (mProgress != null) { mProgress.setMax(max); onProgressChanged(); } else { mMax = max; } } public void incrementProgressBy(int diff) { if (mProgress != null) { mProgress.incrementProgressBy(diff); onProgressChanged(); } else { mIncrementBy += diff; } } public void incrementSecondaryProgressBy(int diff) { if (mSecondaryProgress != null) { mSecondaryProgress.incrementSecondaryProgressBy(diff); onProgressChanged(); } else { mIncrementSecondaryBy += diff; } } public void setProgressDrawable(Drawable d) { if (mProgress != null) { mProgress.setProgressDrawable(d); } else { mProgressDrawable = d; } } public void setIndeterminateDrawable(Drawable d) { if (mProgress != null) { mProgress.setIndeterminateDrawable(d); } else { mIndeterminateDrawable = d; } } public void setIndeterminate(boolean indeterminate) { if (mProgress != null) { mProgress.setIndeterminate(indeterminate); } else { mIndeterminate = indeterminate; } } public boolean isIndeterminate() { if (mProgress != null) { return mProgress.isIndeterminate(); } return mIndeterminate; } @Override public void setMessage(CharSequence message) { if (mProgress != null) { super.setMessage(message); } else { mMessage = message; } } /** * Change the format of Progress Number. The default is "current/max". * Should not be called during the number is progressing. * @param format Should contain two "%d". The first is used for current number * and the second is used for the maximum. * @hide */ public void setProgressNumberFormat(String format) { mProgressNumberFormat = format; } private void onProgressChanged() { mViewUpdateHandler.sendEmptyMessage(0); } }