package org.acra; import android.app.Activity; import android.os.Bundle; import android.widget.Toast; import org.acra.collector.CrashReportData; import org.acra.util.ToastSender; import java.io.IOException; import static org.acra.ACRA.LOG_TAG; import static org.acra.ReportField.USER_COMMENT; import static org.acra.ReportField.USER_EMAIL; /** * Activity which implements the base functionality for a CrashReportDialog * Activities which extend from this class can override onCreate() to create a custom view, * but they must call super.onCreate() at the beginning of the method. * * The methods sendCrash(comment, usrEmail) and cancelReports() can be used to send or cancel * sending of reports respectively. * * This Activity will be instantiated with 2 arguments: * <ol> * <li>{@link ACRAConstants#EXTRA_REPORT_FILE_NAME}</li> * <li>{@link ACRAConstants#EXTRA_REPORT_EXCEPTION}</li> * </ol> */ public abstract class BaseCrashReportDialog extends Activity { private String mReportFileName; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ACRA.log.d(LOG_TAG, "CrashReportDialog extras=" + getIntent().getExtras()); final boolean forceCancel = getIntent().getBooleanExtra(ACRAConstants.EXTRA_FORCE_CANCEL, false); if (forceCancel) { ACRA.log.d(LOG_TAG, "Forced reports deletion."); cancelReports(); finish(); return; } mReportFileName = getIntent().getStringExtra(ACRAConstants.EXTRA_REPORT_FILE_NAME); ACRA.log.d(LOG_TAG, "Opening CrashReportDialog for " + mReportFileName); if (mReportFileName == null) { finish(); } } /** * Cancel any pending crash reports */ protected void cancelReports() { ACRA.getErrorReporter().deletePendingNonApprovedReports(false); } /** * Send crash report given user's comment and email address. If none should be empty strings * @param comment Comment (may be null) provided by the user. * @param userEmail Email address (may be null) provided by the client. */ protected void sendCrash(String comment, String userEmail) { final CrashReportPersister persister = new CrashReportPersister(getApplicationContext()); try { ACRA.log.d(LOG_TAG, "Add user comment to " + mReportFileName); final CrashReportData crashData = persister.load(mReportFileName); crashData.put(USER_COMMENT, comment == null ? "" : comment); crashData.put(USER_EMAIL, userEmail == null ? "" : userEmail); persister.store(crashData, mReportFileName); } catch (IOException e) { ACRA.log.w(LOG_TAG, "User comment not added: ", e); } // Start the report sending task ACRA.log.v(LOG_TAG, "About to start SenderWorker from CrashReportDialog"); ACRA.getErrorReporter().startSendingReports(false, true); // Optional Toast to thank the user final int toastId = ACRA.getConfig().resDialogOkToast(); if (toastId != 0) { ToastSender.sendToast(getApplicationContext(), toastId, Toast.LENGTH_LONG); } } }