package de.hems.trafficsim; import androidx.appcompat.app.AppCompatActivity; import androidx.constraintlayout.widget.ConstraintLayout; import android.os.Bundle; import android.os.Looper; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; import java.util.List; import java.util.Observable; import java.util.Observer; public class MainActivity extends AppCompatActivity implements Observer { protected Track track; protected TimeRecordView trackView; protected Worker worker; protected LinearLayout viewStack; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.track = new Track(25, 100); this.track.addObserver(this); this.viewStack = (LinearLayout) findViewById(R.id.trackViewStack); } @Override public void update(Observable observable, Object o) { final Track trackRef = this.track; //final TimeRecordView viewRef = this.trackView; final LinearLayout viewStackRef = this.viewStack; //final List newRecords = (List) o; final MainActivity mainActivity = this; runOnUiThread(new Runnable() { @Override public void run() { TimeRecordView newTrView = new TimeRecordView(mainActivity, trackRef); if (viewStackRef.getChildCount() > 0) viewStackRef.removeViewAt(0); viewStackRef.addView(newTrView); } }); } public void onStepButtonClick(View view) { this.track.timeElapse(); } public void onPlayButtonClick(View view) { Button playButton = (Button) findViewById(R.id.playButton); playButton.setEnabled(false); Button stepButton = (Button) findViewById(R.id.stepButton); stepButton.setEnabled(false); Button stopButton = (Button) findViewById(R.id.stopButton); stopButton.setEnabled(true); this.worker = new Worker(track); this.worker.start(); } public void onStopButtonClick(View view) { Button playButton = (Button) findViewById(R.id.playButton); playButton.setEnabled(true); Button stepButton = (Button) findViewById(R.id.stepButton); stepButton.setEnabled(true); Button stopButton = (Button) findViewById(R.id.stopButton); stopButton.setEnabled(false); this.worker.setStop(true); try { this.worker.join(); } catch (InterruptedException ex) { } } }