diff --git a/app/src/main/java/com/ericsson/uecontrol/core/UeBehaviour.java b/app/src/main/java/com/ericsson/uecontrol/core/UeBehaviour.java index 2a28cd4..a5e8b2c 100755 --- a/app/src/main/java/com/ericsson/uecontrol/core/UeBehaviour.java +++ b/app/src/main/java/com/ericsson/uecontrol/core/UeBehaviour.java @@ -50,12 +50,6 @@ public abstract class UeBehaviour implements Serializable{ return !running; } - /** - * @return true is this behaviour is currently running - */ - public boolean isRunning(){ - return running; - } public void setExecutionListener(BehaviourExecutionListener l){ execListener = l; diff --git a/app/src/main/java/com/ericsson/uecontrol/core/UeControlExecutor.java b/app/src/main/java/com/ericsson/uecontrol/core/UeControlExecutor.java index b8c6279..6df5b02 100755 --- a/app/src/main/java/com/ericsson/uecontrol/core/UeControlExecutor.java +++ b/app/src/main/java/com/ericsson/uecontrol/core/UeControlExecutor.java @@ -64,7 +64,7 @@ public class UeControlExecutor implements Runnable, UeBehaviour.DataHandledListe public synchronized void execute(){ - if(thread == null || !thread.isAlive()) { + if(!isRunning()) { terminate = false; thread = new Thread(this); thread.start(); @@ -78,12 +78,25 @@ public class UeControlExecutor implements Runnable, UeBehaviour.DataHandledListe terminate = true; if(currentlyActive != null) currentlyActive.terminate(); + + // Wait for the execution to finnish + if(isRunning()){ + synchronized (thread){ + try { thread.wait(); }catch(InterruptedException e) {log.error(null,e);} + } + } + } + + public synchronized void reset(){ + terminate(); + currentlyActive = null; } public boolean isRunning(){ - if(currentlyActive == null) - return false; - return currentlyActive.isRunning(); + return thread != null && thread.isAlive(); + //if(currentlyActive == null) + // return false; + //return currentlyActive.isRunning(); } public void run(){ @@ -107,7 +120,7 @@ public class UeControlExecutor implements Runnable, UeBehaviour.DataHandledListe log.info("Running behaviour: " + currentlyActive.getName()); currentlyActive.run(); - if(isRunning()) { + if(!terminate) { int index = behaviours.indexOf(currentlyActive) + 1; if (index < behaviours.size()) currentlyActive = behaviours.get(index); @@ -116,6 +129,7 @@ public class UeControlExecutor implements Runnable, UeBehaviour.DataHandledListe } } log.info("Execution completed"); + synchronized (thread){thread.notifyAll();} } diff --git a/app/src/main/java/com/ericsson/uecontrol/gui/EditActivity.java b/app/src/main/java/com/ericsson/uecontrol/gui/EditActivity.java index 55a5472..64c0043 100755 --- a/app/src/main/java/com/ericsson/uecontrol/gui/EditActivity.java +++ b/app/src/main/java/com/ericsson/uecontrol/gui/EditActivity.java @@ -98,6 +98,8 @@ public class EditActivity extends ListActivity implements AdapterView.OnItemClic File input = new File(this.getFilesDir(), MainActivity.BEHAVIOUR_SAVE_FILE); executor.save(input.getAbsolutePath()); log.debug("Saved current state"); + log.debug("Resetting executor"); + executor.reset(); }catch(Exception e){log.error(null, e);} super.onPause(); } diff --git a/app/src/main/java/com/ericsson/uecontrol/gui/MainActivity.java b/app/src/main/java/com/ericsson/uecontrol/gui/MainActivity.java index e6fbea8..6244795 100755 --- a/app/src/main/java/com/ericsson/uecontrol/gui/MainActivity.java +++ b/app/src/main/java/com/ericsson/uecontrol/gui/MainActivity.java @@ -164,6 +164,10 @@ public class MainActivity extends FragmentActivity implements OnSharedPreference updateExecutionState(); return true; } + else if (id == R.id.action_reset) { + currentExecutor.reset(); + updateExecutionState(); + } else if (id == R.id.action_edit) { if(!currentExecutor.isRunning()) { Intent intent = new Intent(this, EditActivity.class); diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml index 0e0351f..f9c8062 100755 --- a/app/src/main/res/menu/main.xml +++ b/app/src/main/res/menu/main.xml @@ -1,10 +1,15 @@ + + About Debug Logging Enable application debug logging + Reset