package info.nightscout.androidaps.plugins.Overview.Dialogs; import android.app.Activity; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.ProgressBar; import android.widget.TextView; import com.squareup.otto.Subscribe; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.events.EventPumpStatusChanged; import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.plugins.Overview.events.EventDismissBolusprogressIfRunning; import info.nightscout.androidaps.plugins.Overview.events.EventOverviewBolusProgress; import info.nightscout.androidaps.plugins.DanaR.events.EventDanaRBolusStart; public class BolusProgressDialog extends DialogFragment implements View.OnClickListener { private static Logger log = LoggerFactory.getLogger(BolusProgressDialog.class); Button stopButton; TextView statusView; TextView stopPressedView; ProgressBar progressBar; BolusProgressHelperActivity helperActivity; static double amount; public static boolean bolusEnded = false; public static boolean running = true; boolean started = false; public BolusProgressDialog() { super(); } public void setInsulin(double amount) { this.amount = amount; bolusEnded = false; } public void setHelperActivity(BolusProgressHelperActivity activity) { this.helperActivity = activity; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { getDialog().setTitle(String.format(MainApp.sResources.getString(R.string.overview_bolusprogress_goingtodeliver), amount)); View view = inflater.inflate(R.layout.overview_bolusprogress_dialog, container, false); stopButton = (Button) view.findViewById(R.id.overview_bolusprogress_stop); statusView = (TextView) view.findViewById(R.id.overview_bolusprogress_status); stopPressedView = (TextView) view.findViewById(R.id.overview_bolusprogress_stoppressed); progressBar = (ProgressBar) view.findViewById(R.id.overview_bolusprogress_progressbar); stopButton.setOnClickListener(this); progressBar.setMax(100); statusView.setText(MainApp.sResources.getString(R.string.waitingforpump)); setCancelable(false); return view; } @Override public void onResume() { super.onResume(); if (getDialog() != null) getDialog().getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); MainApp.bus().register(this); running = true; if (bolusEnded) dismiss(); } @Override public void dismiss() { super.dismiss(); if (helperActivity != null) { helperActivity.finish(); } } @Override public void onPause() { super.onPause(); MainApp.bus().unregister(this); running = false; } @Override public void onClick(View view) { switch (view.getId()) { case R.id.overview_bolusprogress_stop: log.debug("Stop bolus delivery button pressed"); stopPressedView.setVisibility(View.VISIBLE); PumpInterface pump = MainApp.getConfigBuilder(); pump.stopBolusDelivering(); break; } } @Subscribe public void onStatusEvent(final EventOverviewBolusProgress ev) { Activity activity = getActivity(); if (activity != null) { activity.runOnUiThread(new Runnable() { @Override public void run() { log.debug("Status: " + ev.status + " Percent: " + ev.percent); statusView.setText(ev.status); progressBar.setProgress(ev.percent); if (ev.percent == 100) { stopButton.setVisibility(View.INVISIBLE); scheduleDismiss(); } } }); } } @Subscribe public void onStatusEvent(final EventDanaRBolusStart ev) { started = true; } @Subscribe public void onStatusEvent(final EventDismissBolusprogressIfRunning ev) { if(BolusProgressDialog.running){ dismiss(); } } @Subscribe public void onStatusEvent(final EventPumpStatusChanged c) { Activity activity = getActivity(); if (activity != null) { activity.runOnUiThread( new Runnable() { @Override public void run() { statusView.setText(c.textStatus()); } } ); } } private void scheduleDismiss() { Thread t = new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } BolusProgressDialog.bolusEnded = true; Activity activity = getActivity(); if (activity != null) { activity.runOnUiThread( new Runnable() { @Override public void run() { try { dismiss(); } catch (Exception e) { e.printStackTrace(); // TODO: do this better way } } }); } } }); t.start(); } }