// Project StopWatch // Source code file: // Version 2, which accounts for device rotation // and pausing the app. package it372.stopwatch; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private int seconds; private boolean running; private boolean wasRunning; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); seconds = 0; running = false; if (savedInstanceState != null) { seconds = savedInstanceState.getInt("seconds"); running = savedInstanceState.getBoolean("running"); wasRunning = savedInstanceState.getBoolean("wasRunning"); } runTimer( ); } @Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); savedInstanceState.putInt("seconds", seconds); savedInstanceState.putBoolean("running", running); savedInstanceState.putBoolean("wasRunning", wasRunning); } // Event listener for Start button. public void onClickStart(View view) { running = true; } // Event listener for Click button. public void onClickStop(View view) { running = false; } // Event listener for Reset button. public void onClickReset(View view) { running = false; seconds = 0; } @Override public void onPause( ) { super.onPause( ); wasRunning = running; running = false; } @Override public void onResume( ) { super.onResume( ); if (wasRunning) { running = true; } } private void runTimer( ) { final TextView timeView = findViewById(R.id.txt_time); final Handler handler = new Handler( ); handler.post(new Runnable( ) { @Override public void run( ) { int hours = seconds / 3600; int minutes = (seconds % 3600) / 60; int secs = seconds % 60; String formattedTime = String.format( "%d:%02d:%02d", hours, minutes, secs); timeView.setText(formattedTime); if (running) { seconds++; } handler.postDelayed(this, 1000); } }); } }