mirror of https://github.com/tasks/tasks
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
256 lines
7.9 KiB
Java
256 lines
7.9 KiB
Java
/**
|
|
* Copyright (c) 2012 Todoroo Inc
|
|
*
|
|
* See the file "LICENSE" for the full license governing this code.
|
|
*/
|
|
package com.todoroo.andlib.utility;
|
|
|
|
|
|
import android.app.Activity;
|
|
import android.app.AlertDialog;
|
|
import android.app.Dialog;
|
|
import android.app.ProgressDialog;
|
|
import android.content.Context;
|
|
import android.content.DialogInterface;
|
|
import android.view.View;
|
|
import android.webkit.WebView;
|
|
|
|
import org.tasks.api.R;
|
|
|
|
public class DialogUtilities {
|
|
|
|
/**
|
|
* Displays a dialog box with a EditText and an ok / cancel
|
|
*
|
|
* @param activity
|
|
* @param text
|
|
* @param okListener
|
|
*/
|
|
public static void viewDialog(final Activity activity, final String text,
|
|
final View view, final DialogInterface.OnClickListener okListener,
|
|
final DialogInterface.OnClickListener cancelListener) {
|
|
if(activity.isFinishing()) {
|
|
return;
|
|
}
|
|
|
|
tryOnUiThread(activity, new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
new AlertDialog.Builder(activity)
|
|
.setTitle(R.string.DLG_question_title)
|
|
.setMessage(text)
|
|
.setView(view)
|
|
.setIcon(android.R.drawable.ic_dialog_alert)
|
|
.setPositiveButton(android.R.string.ok, okListener)
|
|
.setNegativeButton(android.R.string.cancel, cancelListener)
|
|
.show().setOwnerActivity(activity);
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Display an OK dialog with HTML content
|
|
*
|
|
* @param context
|
|
* @param html
|
|
* @param title
|
|
*/
|
|
public static void htmlDialog(Context context, String html, int title) {
|
|
WebView webView = new WebView(context);
|
|
webView.loadDataWithBaseURL("file:///android_asset/", html, "text/html", "utf-8", null);
|
|
webView.setBackgroundColor(0);
|
|
|
|
new AlertDialog.Builder(context)
|
|
.setTitle(title)
|
|
.setView(webView)
|
|
.setIcon(android.R.drawable.ic_dialog_info)
|
|
.setPositiveButton(android.R.string.ok, null)
|
|
.show();
|
|
}
|
|
|
|
/**
|
|
* Displays a dialog box with an OK button
|
|
*
|
|
* @param activity
|
|
* @param text
|
|
* @param okListener
|
|
*/
|
|
public static void okDialog(final Activity activity, final String text,
|
|
final DialogInterface.OnClickListener okListener) {
|
|
if(activity.isFinishing()) {
|
|
return;
|
|
}
|
|
|
|
tryOnUiThread(activity, new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
new AlertDialog.Builder(activity)
|
|
.setTitle(R.string.DLG_information_title)
|
|
.setMessage(text)
|
|
.setIcon(android.R.drawable.ic_dialog_alert)
|
|
.setPositiveButton(android.R.string.ok, okListener)
|
|
.show().setOwnerActivity(activity);
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Displays a dialog box with an OK button
|
|
*
|
|
* @param activity
|
|
* @param text
|
|
* @param okListener
|
|
*/
|
|
public static void okDialog(final Activity activity, final String title,
|
|
final int icon, final CharSequence text,
|
|
final DialogInterface.OnClickListener okListener) {
|
|
if(activity.isFinishing()) {
|
|
return;
|
|
}
|
|
|
|
tryOnUiThread(activity, new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
new AlertDialog.Builder(activity)
|
|
.setTitle(title)
|
|
.setMessage(text)
|
|
.setIcon(icon)
|
|
.setPositiveButton(android.R.string.ok, okListener)
|
|
.show().setOwnerActivity(activity);
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Displays a dialog box with OK and Cancel buttons and custom title
|
|
*
|
|
* @param activity
|
|
* @param title
|
|
* @param text
|
|
* @param okListener
|
|
* @param cancelListener
|
|
*/
|
|
public static void okCancelDialog(final Activity activity, final String title,
|
|
final String text, final DialogInterface.OnClickListener okListener,
|
|
final DialogInterface.OnClickListener cancelListener) {
|
|
|
|
okCancelCustomDialog(activity, title, text, android.R.string.ok, android.R.string.cancel, android.R.drawable.ic_dialog_alert, okListener, cancelListener);
|
|
}
|
|
|
|
/**
|
|
* Displays a dialog box with OK and Cancel buttons
|
|
*
|
|
* @param activity
|
|
* @param text
|
|
* @param okListener
|
|
* @param cancelListener
|
|
*/
|
|
public static void okCancelDialog(final Activity activity, final String text,
|
|
final DialogInterface.OnClickListener okListener,
|
|
final DialogInterface.OnClickListener cancelListener) {
|
|
|
|
okCancelCustomDialog(activity, activity.getString(R.string.DLG_confirm_title), text, android.R.string.ok, android.R.string.cancel, android.R.drawable.ic_dialog_alert, okListener, cancelListener);
|
|
|
|
}
|
|
|
|
/**
|
|
* Displays a dialog box with custom titled OK and cancel button titles
|
|
*/
|
|
|
|
public static void okCancelCustomDialog(final Activity activity, final String title, final String text,
|
|
final int okTitleId, final int cancelTitleId,
|
|
final int icon,
|
|
final DialogInterface.OnClickListener okListener,
|
|
final DialogInterface.OnClickListener cancelListener) {
|
|
if(activity.isFinishing()) {
|
|
return;
|
|
}
|
|
|
|
tryOnUiThread(activity, new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
new AlertDialog.Builder(activity)
|
|
.setTitle(R.string.DLG_confirm_title)
|
|
.setMessage(text)
|
|
.setTitle(title)
|
|
.setIcon(icon)
|
|
.setPositiveButton(okTitleId, okListener)
|
|
.setNegativeButton(cancelTitleId, cancelListener)
|
|
.show().setOwnerActivity(activity);
|
|
}
|
|
});
|
|
}
|
|
|
|
/** Run runnable with progress dialog */
|
|
public static ProgressDialog runWithProgressDialog(final Activity activity, final Runnable runnable) {
|
|
final ProgressDialog progressdiag = progressDialog(activity, activity.getString(R.string.DLG_wait));
|
|
new Thread(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
try {
|
|
runnable.run();
|
|
} catch (Exception e) {
|
|
DialogUtilities.okDialog(activity,
|
|
activity.getString(R.string.DLG_error, e.toString()), null);
|
|
} finally {
|
|
DialogUtilities.dismissDialog(activity, progressdiag);
|
|
}
|
|
}
|
|
}).start();
|
|
|
|
return progressdiag;
|
|
}
|
|
|
|
/**
|
|
* Displays a progress dialog. Must be run on the UI thread
|
|
* @param context
|
|
* @param text
|
|
* @return
|
|
*/
|
|
public static ProgressDialog progressDialog(Activity context, String text) {
|
|
ProgressDialog dialog = new ProgressDialog(context);
|
|
dialog.setIndeterminate(true);
|
|
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
|
|
dialog.setMessage(text);
|
|
dialog.show();
|
|
dialog.setOwnerActivity(context);
|
|
return dialog;
|
|
}
|
|
|
|
/**
|
|
* Dismiss a dialog off the UI thread
|
|
*
|
|
* @param activity
|
|
* @param dialog
|
|
*/
|
|
public static void dismissDialog(Activity activity, final Dialog dialog) {
|
|
if(dialog == null) {
|
|
return;
|
|
}
|
|
tryOnUiThread(activity, new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
try {
|
|
dialog.dismiss();
|
|
} catch (Exception e) {
|
|
// could have killed activity
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
private static void tryOnUiThread(Activity activity, final Runnable runnable) {
|
|
activity.runOnUiThread(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
try {
|
|
runnable.run();
|
|
} catch (Exception e) {
|
|
// probably window was closed
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|