48 lines
1.2 KiB
Java
48 lines
1.2 KiB
Java
![]() |
package medic.gateway.alert;
|
||
|
|
||
|
import android.app.ProgressDialog;
|
||
|
import android.content.Context;
|
||
|
|
||
|
/**
|
||
|
* Handle the lifecycle of {@code ProgressDialog}s. These need a little bit of
|
||
|
* care to make sure that:
|
||
|
*
|
||
|
* 1. they are dismissed when the parent {@code Context} is destroyed, and
|
||
|
* 2. they are not dismissed when they are not being displayed
|
||
|
*
|
||
|
* If you create an instance of this class, be careful to call `.dismiss()` when
|
||
|
* the parent {@code Context}'s {@code onDestroy()} method is called.
|
||
|
*/
|
||
|
final class Thinking {
|
||
|
private final ProgressDialog dialog;
|
||
|
|
||
|
private Thinking(ProgressDialog dialog) {
|
||
|
this.dialog = dialog;
|
||
|
}
|
||
|
|
||
|
public void dismiss() {
|
||
|
if(dialog.isShowing()) dialog.dismiss();
|
||
|
}
|
||
|
|
||
|
//> FACTORIES
|
||
|
static Thinking show(Context ctx) {
|
||
|
return show(ctx, null);
|
||
|
}
|
||
|
|
||
|
static Thinking show(Context ctx, int messageId) {
|
||
|
return show(ctx, ctx.getString(messageId));
|
||
|
}
|
||
|
|
||
|
static Thinking show(Context ctx, String message) {
|
||
|
ProgressDialog p = new ProgressDialog(ctx);
|
||
|
p.setProgressStyle(ProgressDialog.STYLE_SPINNER);
|
||
|
if(message != null) p.setMessage(message);
|
||
|
p.setIndeterminate(true);
|
||
|
p.setCanceledOnTouchOutside(false);
|
||
|
|
||
|
p.show();
|
||
|
|
||
|
return new Thinking(p);
|
||
|
}
|
||
|
}
|