package com.kedzie.vbox.app; import android.app.Dialog; import android.content.DialogInterface.OnCancelListener; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.ProgressBar; import android.widget.TextView; import com.actionbarsherlock.app.SherlockDialogFragment; import com.kedzie.vbox.R; import com.kedzie.vbox.api.IProgress; /** * Dialog with two separate progress bars for primary/secondary operations. Also an optional cancel button. */ public class VBoxProgressDialog extends SherlockDialogFragment { /** Ongoing operation */ private IProgress _progress; private OnCancelListener _cancelListener; private boolean _cancelable; private ProgressBar _primaryProgress; private ProgressBar _secondaryProgress; private TextView _primaryText; private TextView _operationText; private TextView _operationCountText; private TextView _timeRemainingText; private Button _cancelButton; @Override public Dialog onCreateDialog(Bundle savedInstanceState) { return super.onCreateDialog(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = getLayoutInflater(savedInstanceState).inflate(R.layout.progress_dialog, container, false); _primaryText = (TextView)view.findViewById(R.id.message); _primaryProgress = (ProgressBar)view.findViewById(R.id.primary_progress); _operationText = (TextView)view.findViewById(R.id.operation_description); _operationCountText = (TextView)view.findViewById(R.id.operation_number); _secondaryProgress = (ProgressBar)view.findViewById(R.id.secondary_progress); _timeRemainingText = (TextView)view.findViewById(R.id.time_remaining); _cancelButton = (Button)view.findViewById(R.id.cancel_button); _cancelButton.setEnabled(_cancelable); _cancelButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { getDialog().dismiss(); if(_cancelable && _progress!=null) _progress.cancel(); if(_cancelListener!=null) _cancelListener.onCancel(getDialog()); } }); return view; } public void update(IProgress progress) { _progress=progress; if(_primaryProgress==null) return; _primaryProgress.setProgress(progress.getPercent()); _primaryText.setText(progress.getDescription()); _secondaryProgress.setProgress(progress.getOperationPercent()); _operationText.setText(progress.getOperationDescription()); _operationCountText.setText(progress.getOperation()+"/"+progress.getOperationCount()); _timeRemainingText.setText(progress.getTimeRemaining()+" seconds"); _cancelable = progress.getCancelable(); } public void setOnCancelListener(OnCancelListener listener) { _cancelListener = listener; } public void setCancelable(boolean cancelable) { _cancelable=cancelable; } }