Today i'm gonna share some utility methods i use very often while developing. Creating a popup dialog, a confirm dialog, ok-cancel-dialog, check if a third part app is installed, redirect to google play store if some app is missing and so on are common tasks in our daily business.
/**
* Use this class to create alert dialogs on the fly, redirect to google play store and so on...< br / >
* < br / >Author: Ricardo Ferreira, 8/13/15
*/
public final class AppUtil {
/**
* Shows a confirm dialog with a custom message and custom quit button text.
* If you pass null to btnTxt, "ok" will be shown per default.
*
* @param context the apps context This value can't be null.
* @param msg the message to be shown. his value can't be null or empty.
* @param btnTxt the text to be shown in the quit button. For example "close"
*/
public static void showConfirmDialog(@NonNull final Context context, @NonNull final String msg, final String btnTxt) {
if (msg.isEmpty()) {
throw new IllegalArgumentException("This value can't be empty!");
}
final AlertDialog dialog = new AlertDialog.Builder(context).setMessage(msg)
.setPositiveButton((btnTxt == null ? "Ok" : btnTxt), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).create();
dialog.show();
}
/**
* Shows a confirm dialog with a custom message, custom buttons and custom actions.
*
* @param ctx the apps context. This value can't be null.
* @param msg the message to be shown This value can't be null or empty.
* @param okBtn the text to be shown in the ok button. If you pass null, ok will be shown per default
* @param cancelBtn the text to be shown in the cancel button. If you pass null, cancel will be shown per default
* @param okAction the action to be performed as soon as the user presses the ok button. if you pass null, nothing happens.
* @param cancelAction the action to be performed as soon as the user presses the cancel button. if you pass null, nothing happens.
* @param backPressendAction the action to be performed as soon as the user presses the system back button. if you pass null, nothing happens.
*/
public static void showOkCancelDialog(@NonNull final Context ctx, @NonNull final String msg, final String okBtn, final String cancelBtn, final AlertAction okAction, final AlertAction cancelAction, final AlertAction backPressendAction) {
if (msg.isEmpty()) {
throw new IllegalArgumentException("This value can't be empty!");
}
final AlertDialog dialog = new AlertDialog.Builder(ctx).setMessage(msg)
.setPositiveButton((okBtn == null ? "Ok" : okBtn), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
if (okAction != null) {
okAction.perform();
}
}
}).setNegativeButton((cancelBtn == null ? "Cancel" : cancelBtn), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
if (cancelAction != null) {
cancelAction.perform();
}
}
}).setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
dialog.dismiss();
if (backPressendAction != null) {
backPressendAction.perform();
}
}
}).create();
dialog.show();
}
public interface AlertAction {
void perform();
}
/**
* Use this method to check if a third part app is istalled or not
* @param ctx the app's context
* @param packageName the third part app's package name. something like: com.example.package
* @return true if the app is installed.
*/
public static boolean isAppInstalled(final Context ctx, final String packageName) {
PackageManager pm = ctx.getPackageManager();
boolean installed = false;
try {
pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
installed = true;
} catch (PackageManager.NameNotFoundException e) {
installed = false;
}
return installed;
}
/**
* Use this method to open the google play store
* @param activity the app which wants to redirect to the google play store
* @param googlePlayStoreId the third part app's package name. something like: com.example.package
* @param requestCode the request code to be used in the method onActivityForResult in the app which called this method.
*/
public static void navigateToGooglePlayStore(final Activity activity, final String googlePlayStoreId, final int requestCode) {
try {
activity.startActivityForResult(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + googlePlayStoreId)), requestCode);
} catch (android.content.ActivityNotFoundException anfe) {
// last chance: try again a second time with a different approach
activity.startActivityForResult(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + googlePlayStoreId)), requestCode);
}
}
}
Usage Example:
//...
// check if app is istalled return AppUtil.isAppInstalled(context,packageName); //...
// redirect to google play store AppUtil.navigateToGooglePlayStore(activity ,googlePlayStoreId, requestCode); //...
// create a Ok-Cancel-Dialog
final String msg = "The app will no work without PagSeguro.";
AppUtil.showOkCancelDialog(context, msg, "Install", "Cancel",
new AppUtil.AlertAction() {
@Override
public void perform() {
navigateToGooglePlayStore(PAG_SEGURO_PACKAGE_NAME);
}
}, new AppUtil.AlertAction() {
@Override
public void perform() {
finish();
}
}, new AppUtil.AlertAction() {
@Override
public void perform() {
finish();
}
});
//... code omitted
That's all! hope you like it! :)
😱👇 PROMOTIONAL DISCOUNT: BOOKS AND IPODS PRO 😱👇
Be sure to read, it will change your life!
Show your work by Austin Kleon: https://amzn.to/34NVmwx
This book is a must read - it will put you in another level! (Expert)
Agile Software Development, Principles, Patterns, and Practices: https://amzn.to/30WQSm2
Write cleaner code and stand out!
Clean Code - A Handbook of Agile Software Craftsmanship: https://amzn.to/33RvaSv
This book is very practical, straightforward and to the point! Worth every penny!
Kotlin for Android App Development (Developer's Library): https://amzn.to/33VZ6gp
Needless to say, these are top right?
Apple AirPods Pro: https://amzn.to/2GOICxy
😱👆 PROMOTIONAL DISCOUNT: BOOKS AND IPODS PRO 😱👆