asistencia/attendance-ubb/src/main/java/cl/cromer/ubb/attendance/Progress.java

175 lines
5.2 KiB
Java

package cl.cromer.ubb.attendance;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.ActivityInfo;
import android.graphics.Point;
import android.os.Build;
import android.view.Display;
import android.view.Surface;
/**
* This class handles the display of the progress bar.
* @author Chris Cromer
* Copyright 2013 - 2016
*/
public final class Progress {
protected ProgressDialog progressBar = null;
public Activity activity = null;
protected Context context = null;
/**
* This method will show a progress bar on the screen.
* @param context The context of the parent activity.
* @param type If 1 show loading dialog if 2 show a downloading dialog. If not set there
* won't be any style or message.
*/
public void show(Context context, int type) {
this.context = context;
if (progressBar != null && progressBar.isShowing()) {
progressBar.dismiss();
}
progressBar = new ProgressDialog(this.context);
if (type == 1) {
progressBar.setMessage(this.context.getString(R.string.general_loading));
progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
}
else if (type == 2) {
progressBar.setIndeterminate(true);
progressBar.setMessage(this.context.getString(R.string.general_downloading));
progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
}
progressBar.setProgress(0);
progressBar.setMax(100);
progressBar.show();
}
/**
* This method sets the message in the progress bar.
* @param message The message you want to show.
*/
public void setMessage(String message) {
progressBar.setMessage(message);
}
/**
* This method sets if the progress is indeterminate or not.
* @param indeterminate True or false. If true we don't know the size of the file we are
* downloading. If false we can predict how long the download will take.
*/
public void setIndeterminate(boolean indeterminate) {
progressBar.setIndeterminate(indeterminate);
}
/**
* This method updates the progress percentage.
* @param progress The percentage of the download that is complete out of 100%.
*/
public void setProgress(int progress) {
progressBar.setProgress(progress);
}
/**
* This method sets whether or not the progress bar is cancelable or not .
* @param cancelable True or false.
*/
public void setCancelable(boolean cancelable) {
progressBar.setCancelable(cancelable);
if (cancelable) {
progressBar.setCanceledOnTouchOutside(false);
}
}
/**
* This method is used to set a listener for when a user wants to cancel a download.
* @param listener The listener to pass to the progress bar.
*/
public void setOnCancelListener(DialogInterface.OnCancelListener listener) {
progressBar.setOnCancelListener(listener);
}
/**
* This method checks to see if the progress bar is drawn on the screen.
* @return boolean Returns true if showing or false if it isn't.
*/
public boolean isShowing() {
return progressBar.isShowing();
}
/**
* This method erases the progress bar from the screen if it is showing.
*/
public void dismiss() {
if (progressBar != null && progressBar.isShowing()) {
progressBar.dismiss();
}
}
/**
* This method will lock the screen rotation. Important to prevent force closes when the user
* changes orientation.
*/
public void lockRotation() {
Display display = activity.getWindowManager().getDefaultDisplay();
int rotation = display.getRotation();
int height;
int width;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) {
//noinspection deprecation
height = display.getHeight();
//noinspection deprecation
width = display.getWidth();
}
else {
Point size = new Point();
display.getSize(size);
height = size.y;
width = size.x;
}
switch (rotation) {
case Surface.ROTATION_90:
if (width > height) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
else {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
}
break;
case Surface.ROTATION_180:
if (height > width) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
}
else {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
break;
case Surface.ROTATION_270:
if (width > height) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
else {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
break;
default :
if (height > width) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
else {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}
}
/**
* This method will unlock the screen rotation.
*/
public void unlockRotation() {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
}