package org.commcare.activities;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;
import org.commcare.dalvik.R;
import org.commcare.utils.CommCareExceptionHandler;
import org.commcare.utils.LifecycleUtils;
import org.javarosa.core.services.locale.Localization;
/**
* Shows reason for unrecoverable crash to user and restarts CommCare
*
* @author Phillip Mates (pmates@dimagi.com)
*/
public class CrashWarningActivity extends Activity {
private int errorMessageVisibility = View.GONE;
private static final String ERROR_VISIBLE = "error-message-is-visible";
private LinearLayout errorView;
private ImageButton infoButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loadSaveInstanceState(savedInstanceState);
setContentView(R.layout.activity_crash_warning);
setupUi();
}
private void loadSaveInstanceState(Bundle savedInstanceState) {
if (savedInstanceState != null) {
errorMessageVisibility =
savedInstanceState.getInt(ERROR_VISIBLE, View.GONE);
}
}
private void setupUi() {
setupButtons();
setupText();
}
private void setupButtons() {
Button closeButton = (Button)findViewById(R.id.RestartCommCare);
closeButton.setText(Localization.get("crash.warning.button"));
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LifecycleUtils.restartCommCare(CrashWarningActivity.this, true);
}
});
infoButton = (ImageButton)findViewById(R.id.InfoButton);
infoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
toggleErrorMessageVisibility();
}
});
}
private void setupText() {
TextView simpleWarningView = (TextView)findViewById(R.id.SimpleWarningMessage);
simpleWarningView.setText(Localization.get("crash.warning.header"));
TextView errorMessageView = (TextView)findViewById(R.id.ErrorText);
Intent intent = getIntent();
if (intent.hasExtra(CommCareExceptionHandler.WARNING_MESSAGE_KEY)) {
String warningMessage =
intent.getStringExtra(CommCareExceptionHandler.WARNING_MESSAGE_KEY);
errorMessageView.setText(Localization.get("crash.warning.detail") + "\n" + warningMessage);
}
errorView = (LinearLayout)findViewById(R.id.Error);
errorView.setVisibility(errorMessageVisibility);
updateButtonState();
}
private void toggleErrorMessageVisibility() {
if (errorView.getVisibility() == View.GONE) {
errorView.setVisibility(View.VISIBLE);
} else {
errorView.setVisibility(View.GONE);
}
updateButtonState();
}
private void updateButtonState() {
if (errorView.getVisibility() == View.GONE) {
infoButton.setImageResource(R.drawable.icon_info_outline_neutral);
} else {
infoButton.setImageResource(R.drawable.icon_info_fill_neutral);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(ERROR_VISIBLE, errorView.getVisibility());
}
}