package org.commcare.utils; import android.app.Activity; import android.content.Context; import android.content.Intent; import org.commcare.activities.DispatchActivity; import org.commcare.activities.UnrecoverableErrorActivity; /** * Utils for exiting and restarting the app */ public class LifecycleUtils { public static void triggerHandledAppExit(Context c, String message, String title) { triggerHandledAppExit(c, message, title, true); } public static void triggerHandledAppExit(Context c, String message, String title, boolean useExtraMessage) { Intent i = new Intent(c, UnrecoverableErrorActivity.class); i.putExtra(UnrecoverableErrorActivity.EXTRA_ERROR_TITLE, title); i.putExtra(UnrecoverableErrorActivity.EXTRA_ERROR_MESSAGE, message); i.putExtra(UnrecoverableErrorActivity.EXTRA_USE_MESSAGE, useExtraMessage); // start a new stack and forget where we were (so we don't restart the app from there) i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | Intent.FLAG_ACTIVITY_CLEAR_TOP); c.startActivity(i); } public static void restartCommCare(Activity originActivity, boolean systemExit) { restartCommCare(originActivity, DispatchActivity.class, systemExit); } public static void restartCommCare(Activity originActivity, Class c, boolean systemExit) { Intent intent = new Intent(originActivity, c); // Make sure that the new stack starts with the given class, and clear everything between. intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); originActivity.moveTaskToBack(true); originActivity.startActivity(intent); originActivity.finish(); if (systemExit) { System.exit(0); } } }