UI Android

//package org.anddev.andengine.util.progress;
/**
 * (c) 2010 Nicolas Gramlich 
 * (c) 2011 Zynga Inc.
 * 
 * @author Nicolas Gramlich
 * @since 18:07:35 - 09.07.2009
 */
public class ProgressMonitor implements IProgressListener {
  //          
  // Constants
  //          
  //          
  // Fields
  //          
  private final ProgressMonitor mParentProgressMonitor;
  private final IProgressListener mListener;
  private int mSubMonitorRangeFrom = 0;
  private int mSubMonitorRangeTo = 100;
  private int mProgress = 0;
  //          
  // Constructors
  //          
  public ProgressMonitor(final IProgressListener pListener) {
    this.mListener = pListener;
    this.mParentProgressMonitor = null;
  }
  public ProgressMonitor(final ProgressMonitor pParent){
    this.mListener = null;
    this.mParentProgressMonitor = pParent;
  }
  //          
  // Getter & Setter
  //          
  public ProgressMonitor getParentProgressMonitor() {
    return this.mParentProgressMonitor;
  }
  public int getProgress() {
    return this.mProgress;
  }
  public void setSubMonitorRange(final int pSubMonitorRangeFrom, final int pSubMonitorRangeTo) {
    this.mSubMonitorRangeFrom = pSubMonitorRangeFrom;
    this.mSubMonitorRangeTo = pSubMonitorRangeTo;
  }
  //          
  // Methods for/from SuperClass/Interfaces
  //          
  /**
   * @param pProgress between 0 and 100.
   */
  @Override
  public void onProgressChanged(final int pProgress){
    this.mProgress = pProgress;
    if(this.mParentProgressMonitor != null) {
      this.mParentProgressMonitor.onSubProgressChanged(pProgress);
    } else {
      this.mListener.onProgressChanged(pProgress);
    }
  }
  private void onSubProgressChanged(final int pSubProgress){
    final int subRange = this.mSubMonitorRangeTo- this.mSubMonitorRangeFrom;
    final int subProgressInRange = this.mSubMonitorRangeFrom + (int)(subRange * pSubProgress / 100f);
    if(this.mParentProgressMonitor != null) {
      this.mParentProgressMonitor.onSubProgressChanged(subProgressInRange);
    }else{
      this.mListener.onProgressChanged(subProgressInRange);
    }
  }
}
/**
 * (c) 2010 Nicolas Gramlich 
 * (c) 2011 Zynga Inc.
 * 
 * @author Nicolas Gramlich
 * @since 20:52:44 - 03.01.2010
 */
 interface ProgressCallable {
  //          
  // Final Fields
  //          
  //          
  // Methods
  //          
  /**
   * Computes a result, or throws an exception if unable to do so.
   * @param pProgressListener
   * @return computed result
   * @throws Exception if unable to compute a result
   */
  public T call(final IProgressListener pProgressListener) throws Exception;
}
/**
 * (c) 2010 Nicolas Gramlich 
 * (c) 2011 Zynga Inc.
 * 
 * @author Nicolas Gramlich
 * @since 18:07:35 - 09.07.2009
 */
 interface IProgressListener {
  //          
  // Constants
  //          
  //          
  // Methods
  //          
  /**
   * @param pProgress between 0 and 100.
   */
  public void onProgressChanged(final int pProgress);
}