// Project StopWatch // Source code file: // Version 1, which does not account for device // rotation and pausing the app. package it372.ssmith.stopwatch; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.widget.TextView; import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; public class MainActivity extends AppCompatActivity { private int seconds; private boolean running; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EdgeToEdge.enable(this); setContentView(R.layout.activity_main); ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); return insets; }); seconds = 0; running = false; runTimer( ); } // 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; } 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); } }); } }