Merge pull request #983 from jotomo/issue-939

WIP: Fix bolus progress dialog not closing with onPause/onResume cycle
This commit is contained in:
Milos Kozak 2018-05-02 23:20:29 +02:00 committed by GitHub
commit a35c925930
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 57 additions and 52 deletions

View file

@ -245,12 +245,27 @@ public class MainApp extends Application {
}
}
public void stopKeepAliveService() {
if (keepAliveReceiver != null)
KeepAliveReceiver.cancelAlarm(this);
}
public static void subscribe(Object subscriber) {
try {
bus().register(subscriber);
} catch (IllegalArgumentException e) {
// already registered
}
}
public static void unsubscribe(Object subscriber) {
try {
bus().unregister(subscriber);
} catch (IllegalArgumentException e) {
// already unregistered
}
}
public static Bus bus() {
return sBus;
}

View file

@ -42,7 +42,7 @@ public class BolusProgressDialog extends DialogFragment implements View.OnClickL
}
public void setInsulin(double amount) {
this.amount = amount;
BolusProgressDialog.amount = amount;
bolusEnded = false;
}
@ -55,10 +55,10 @@ public class BolusProgressDialog extends DialogFragment implements View.OnClickL
Bundle savedInstanceState) {
getDialog().setTitle(String.format(MainApp.gs(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 = view.findViewById(R.id.overview_bolusprogress_stop);
statusView = view.findViewById(R.id.overview_bolusprogress_status);
stopPressedView = view.findViewById(R.id.overview_bolusprogress_stoppressed);
progressBar = view.findViewById(R.id.overview_bolusprogress_progressbar);
stopButton.setOnClickListener(this);
progressBar.setMax(100);
statusView.setText(MainApp.gs(R.string.waitingforpump));
@ -70,16 +70,25 @@ public class BolusProgressDialog extends DialogFragment implements View.OnClickL
@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();
if (bolusEnded) {
dismiss();
} else {
if (getDialog() != null)
getDialog().getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
MainApp.subscribe(this);
running = true;
}
}
@Override
public void dismiss() {
super.dismiss();
try {
super.dismiss();
} catch (IllegalStateException e) {
// dialog not running yet. onResume will try again. Set bolusEnded to make extra
// sure onResume will catch this
bolusEnded = true;
}
if (helperActivity != null) {
helperActivity.finish();
}
@ -88,7 +97,7 @@ public class BolusProgressDialog extends DialogFragment implements View.OnClickL
@Override
public void onPause() {
super.onPause();
MainApp.bus().unregister(this);
MainApp.unsubscribe(this);
running = false;
}
@ -109,16 +118,13 @@ public class BolusProgressDialog extends DialogFragment implements View.OnClickL
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();
}
activity.runOnUiThread(() -> {
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();
}
});
}
@ -133,41 +139,25 @@ public class BolusProgressDialog extends DialogFragment implements View.OnClickL
@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());
}
}
);
activity.runOnUiThread(() -> statusView.setText(c.textStatus()));
}
}
private void scheduleDismiss() {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
SystemClock.sleep(5000);
BolusProgressDialog.bolusEnded = true;
Activity activity = getActivity();
if (activity != null) {
activity.runOnUiThread(
new Runnable() {
@Override
public void run() {
try {
dismiss();
} catch (Exception e) {
log.error("Unhandled exception", e);
}
}
});
}
Thread t = new Thread(() -> {
SystemClock.sleep(5000);
BolusProgressDialog.bolusEnded = true;
Activity activity = getActivity();
if (activity != null) {
activity.runOnUiThread(() -> {
try {
dismiss();
} catch (Exception e) {
log.error("Unhandled exception", e);
}
});
}
});
t.start();