diff --git a/app/src/main/java/com/example/countdowntimer/CountdownCanvasView.kt b/app/src/main/java/com/example/countdowntimer/CountdownCanvasView.kt
index 23c9373..05d82fd 100644
--- a/app/src/main/java/com/example/countdowntimer/CountdownCanvasView.kt
+++ b/app/src/main/java/com/example/countdowntimer/CountdownCanvasView.kt
@@ -24,12 +24,12 @@ class CountdownCanvasView @JvmOverloads constructor(
isFakeBoldText = false
}
private val ringPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
- color = Color.parseColor("#6750A4")
+ color = ContextCompat.getColor(context, R.color.md_color_ring_progress)
style = Paint.Style.STROKE
strokeWidth = 16f
}
private val ringBgPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
- color = Color.parseColor("#D0BCFF")
+ color = ContextCompat.getColor(context, R.color.md_color_ring_track)
style = Paint.Style.STROKE
strokeWidth = 16f
}
diff --git a/app/src/main/java/com/example/countdowntimer/CountdownDialog.kt b/app/src/main/java/com/example/countdowntimer/CountdownDialog.kt
index fc7391c..9283278 100644
--- a/app/src/main/java/com/example/countdowntimer/CountdownDialog.kt
+++ b/app/src/main/java/com/example/countdowntimer/CountdownDialog.kt
@@ -18,8 +18,8 @@ class CountdownDialog(
private val prefs: SharedPreferences
) : Dialog(context) {
private lateinit var cvCountdown: CountdownCanvasView
- private lateinit var btnStop: Button
- private lateinit var btnRestart: Button
+ private lateinit var btnStop: View
+ private lateinit var btnRestart: View
private lateinit var btnDismiss: Button
private var timer: CountDownTimer? = null
private var toneGenerator: ToneGenerator? = null
@@ -61,14 +61,10 @@ class CountdownDialog(
val progress = millisUntilFinished.toFloat() / durationMillis
cvCountdown.setProgress(progress)
- if (millisUntilFinished >= durationMillis) {
- cvCountdown.setText(context.getString(R.string.countdown_text))
- } else {
- val secondsLeft = (millisUntilFinished / 1000).toInt() + 1
- cvCountdown.setText(secondsLeft.toString())
- }
+ val secondsLeft = (millisUntilFinished / 1000).toInt() + 1
+ cvCountdown.setText(secondsLeft.toString())
- if (millisUntilFinished <= 3000 && millisUntilFinished > 1000) {
+ if (secondsLeft >= 1 && secondsLeft <= 3) {
playTone(ToneGenerator.TONE_PROP_BEEP)
if (prefs.getBoolean("vibration", true)) {
vibrator?.vibrate(50)
diff --git a/app/src/main/res/color/chip_duration_bg.xml b/app/src/main/res/color/chip_duration_bg.xml
new file mode 100644
index 0000000..bdc80ea
--- /dev/null
+++ b/app/src/main/res/color/chip_duration_bg.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/btn_duration_default.xml b/app/src/main/res/drawable/btn_duration_default.xml
new file mode 100644
index 0000000..2b6aa9a
--- /dev/null
+++ b/app/src/main/res/drawable/btn_duration_default.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/btn_duration_disabled.xml b/app/src/main/res/drawable/btn_duration_disabled.xml
new file mode 100644
index 0000000..fba660c
--- /dev/null
+++ b/app/src/main/res/drawable/btn_duration_disabled.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/btn_duration_pressed.xml b/app/src/main/res/drawable/btn_duration_pressed.xml
new file mode 100644
index 0000000..959a18a
--- /dev/null
+++ b/app/src/main/res/drawable/btn_duration_pressed.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/btn_duration_selector.xml b/app/src/main/res/drawable/btn_duration_selector.xml
new file mode 100644
index 0000000..d1ca3c1
--- /dev/null
+++ b/app/src/main/res/drawable/btn_duration_selector.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/btn_restart_default.xml b/app/src/main/res/drawable/btn_restart_default.xml
new file mode 100644
index 0000000..ddb0683
--- /dev/null
+++ b/app/src/main/res/drawable/btn_restart_default.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/btn_restart_disabled.xml b/app/src/main/res/drawable/btn_restart_disabled.xml
new file mode 100644
index 0000000..65f568e
--- /dev/null
+++ b/app/src/main/res/drawable/btn_restart_disabled.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/btn_restart_pressed.xml b/app/src/main/res/drawable/btn_restart_pressed.xml
new file mode 100644
index 0000000..8e8b1d2
--- /dev/null
+++ b/app/src/main/res/drawable/btn_restart_pressed.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/btn_restart_selector.xml b/app/src/main/res/drawable/btn_restart_selector.xml
new file mode 100644
index 0000000..fe1fc1f
--- /dev/null
+++ b/app/src/main/res/drawable/btn_restart_selector.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/btn_start_default.xml b/app/src/main/res/drawable/btn_start_default.xml
new file mode 100644
index 0000000..75da366
--- /dev/null
+++ b/app/src/main/res/drawable/btn_start_default.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/btn_start_disabled.xml b/app/src/main/res/drawable/btn_start_disabled.xml
new file mode 100644
index 0000000..115d0f3
--- /dev/null
+++ b/app/src/main/res/drawable/btn_start_disabled.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/btn_start_pressed.xml b/app/src/main/res/drawable/btn_start_pressed.xml
new file mode 100644
index 0000000..0b55851
--- /dev/null
+++ b/app/src/main/res/drawable/btn_start_pressed.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/btn_start_selector.xml b/app/src/main/res/drawable/btn_start_selector.xml
new file mode 100644
index 0000000..2f1e1fe
--- /dev/null
+++ b/app/src/main/res/drawable/btn_start_selector.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/btn_stop_default.xml b/app/src/main/res/drawable/btn_stop_default.xml
new file mode 100644
index 0000000..3539165
--- /dev/null
+++ b/app/src/main/res/drawable/btn_stop_default.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/btn_stop_disabled.xml b/app/src/main/res/drawable/btn_stop_disabled.xml
new file mode 100644
index 0000000..81f3883
--- /dev/null
+++ b/app/src/main/res/drawable/btn_stop_disabled.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/btn_stop_pressed.xml b/app/src/main/res/drawable/btn_stop_pressed.xml
new file mode 100644
index 0000000..c9cb0db
--- /dev/null
+++ b/app/src/main/res/drawable/btn_stop_pressed.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/btn_stop_selector.xml b/app/src/main/res/drawable/btn_stop_selector.xml
new file mode 100644
index 0000000..1b56174
--- /dev/null
+++ b/app/src/main/res/drawable/btn_stop_selector.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_keyboard_arrow_down.xml b/app/src/main/res/drawable/ic_keyboard_arrow_down.xml
index 39a4ecb..b3cfeec 100644
--- a/app/src/main/res/drawable/ic_keyboard_arrow_down.xml
+++ b/app/src/main/res/drawable/ic_keyboard_arrow_down.xml
@@ -4,6 +4,6 @@
android:viewportWidth="24"
android:viewportHeight="24">
diff --git a/app/src/main/res/drawable/ic_refresh_square.xml b/app/src/main/res/drawable/ic_refresh_square.xml
new file mode 100644
index 0000000..fad7ca3
--- /dev/null
+++ b/app/src/main/res/drawable/ic_refresh_square.xml
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_stop_square.xml b/app/src/main/res/drawable/ic_stop_square.xml
new file mode 100644
index 0000000..556ce06
--- /dev/null
+++ b/app/src/main/res/drawable/ic_stop_square.xml
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 6f117ca..50595d1 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -110,15 +110,22 @@
-
+ android:drawablePadding="8dp"
+ android:paddingStart="16dp"
+ android:paddingEnd="16dp"
+ android:textColor="#FFFFFF"
+ android:textSize="18sp"
+ android:textStyle="bold"
+ android:gravity="center"
+ android:includeFontPadding="false" />
-
+ android:textColor="#FFFFFF"
+ android:textSize="16sp"
+ android:textStyle="bold" />
diff --git a/app/src/main/res/layout/dialog_countdown.xml b/app/src/main/res/layout/dialog_countdown.xml
index 0f64242..0abdf12 100644
--- a/app/src/main/res/layout/dialog_countdown.xml
+++ b/app/src/main/res/layout/dialog_countdown.xml
@@ -5,47 +5,79 @@
android:layout_height="match_parent"
android:background="#80000000">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml
index 685ae9d..ea1197c 100644
--- a/app/src/main/res/values-night/colors.xml
+++ b/app/src/main/res/values-night/colors.xml
@@ -2,4 +2,6 @@
#1B3A1B
#0D1F0D
+ #A5D6A7
+ #2E7D32
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
index 7c0969e..795bd9b 100644
--- a/app/src/main/res/values-night/themes.xml
+++ b/app/src/main/res/values-night/themes.xml
@@ -1,6 +1,7 @@
#A5D6A7
+ #2E7D32
#869F7C
#2E7D32
+ #81C784
#4C6842
#F1F8E9
diff --git a/goal_prompt.txt b/goal_prompt.txt
new file mode 100644
index 0000000..35a21ef
--- /dev/null
+++ b/goal_prompt.txt
@@ -0,0 +1,88 @@
+# Goal: Redesign all buttons into bold, square, visually striking interactive elements
+
+## Objective
+Replace every basic/rectangular button in the app with larger, square-aspect-ratio buttons that have eye-catching visual design. The goal is to transform the UI from a generic Material 3 look into a distinctive, personality-rich interface that matches the playful "BONG HIT TIMER" brand.
+
+## Current State
+The app uses 4 visible buttons across 2 screens:
+
+**MainActivity (home screen):**
+- `btnDurationLabel` — outlined button showing selected duration (e.g. "10s") with a dropdown arrow. Uses `Widget.Material3.Button.OutlinedButton` with 20dp corners.
+- `btnStart` — filled button labeled "Start Timer" with a play icon. Uses `Widget.Material3.Button` with 20dp corners.
+
+**CountdownDialog (timer screen):**
+- `btnStop` — plain Android `Button` labeled "Stop" (default styling, small)
+- `btnRestart` — plain Android `Button` labeled "Restart" (default styling, small)
+- `btnDismiss` — plain Android `Button` labeled "Dismiss" (currently gone, shows after timer completes)
+
+## Design Requirements
+
+### 1. Square Aspect Ratio
+- Change all buttons from `wrap_content` rectangles to a fixed square size (e.g., `120dp` x `120dp` or `100dp` x `100dp`)
+- Use `app:layout_constraintDimensionRatio="1:1"` where dynamic sizing is needed
+- Buttons should feel substantial and tappable, not compact
+
+### 2. Visual Interest — Each button should have its own personality
+Create custom drawable backgrounds for each button type. Design ideas (pick the best approach):
+
+- **Circular/spherical buttons** — Buttons that look like physical 3D balls or pucks. Use gradient fills with highlights/shadows to create a convex "pressable" look.
+- **Neon/glow effect** — Since the app is a bong hit timer, a subtle neon glow that pulses or intensifies during countdown would be thematically appropriate.
+- **Retro/gaming arcade style** — Bold colors, thick borders, pressed/active states that simulate physical button depression.
+- **Gradient + icon centering** — For the timer screen, center the stop/restart icons prominently in the square buttons with bold gradient backgrounds.
+
+### 3. Interactive States
+Every button must have rich feedback:
+- **Pressed/active state** — noticeable visual change (shrink, darker shade, or inner glow)
+- **Default state** — visually engaging with gradients, shadows, or subtle animations
+- **Disabled state** — reduced opacity but still recognizable
+
+### 4. Icon Integration
+Square buttons are perfect for icon-first design:
+- **Stop button** — large centered pause/stop icon
+- **Restart button** — large centered refresh/replay icon
+- **Start button** — center the play icon, consider removing the text label since the icon is universal
+- **Duration label** — consider a pill-shaped or circular chip that pulses when tapped
+
+### 5. Color Palette
+Stay within the existing green theme (`#2E7D32` primary, `#4C6842` secondary, `#E8F5E9`/`#C8E6C9` gradient) but push it further:
+- Use the primary green for the start/positive actions
+- A red/coral accent for stop
+- A neutral or blue for restart/duration selection
+- Consider gradient transitions within each button (e.g., green to darker green top-to-bottom for a 3D effect)
+
+### 6. Shadow & Elevation
+- Add drop shadows to all buttons for depth (use `app:strokeWidth="0dp"` and custom `rippleColor` for Material buttons)
+- Create a `btn_square_default.xml` and `btn_square_pressed.xml` in `res/drawable/` for each button type
+- The pressed state should visually simulate "pressing in" (reduced shadow, lighter/darker fill)
+
+## Technical Implementation
+
+### New drawable files to create (in `res/drawable/`):
+- `btn_start_square.xml` — gradient + shadow drawable for start button
+- `btn_start_square_pressed.xml` — pressed state variant
+- `btn_stop_square.xml` — gradient + shadow drawable for stop button
+- `btn_stop_square_pressed.xml` — pressed state variant
+- `btn_restart_square.xml` — gradient + shadow drawable for restart button
+- `btn_restart_square_pressed.xml` — pressed state variant
+- `btn_duration_chip.xml` — drawable for duration selector
+
+### Layout changes needed:
+- `activity_main.xml`:
+ - `btnDurationLabel`: change to square dimensions, wrap text/icon in center, apply new drawable
+ - `btnStart`: change to square, center play icon, apply new drawable
+- `dialog_countdown.xml`:
+ - `btnStop`: change from `Button` to `com.google.android.material.button.MaterialButton`, set square dimensions, apply drawable
+ - `btnRestart`: same treatment
+ - `btnDismiss`: same treatment, keep as gone by default
+ - Adjust the ConstraintLayout chain to accommodate square buttons (may need a horizontal chain with proper spacing)
+
+### Code changes needed:
+- `CountdownDialog.kt`: Set button backgrounds programmatically if needed, ensure clickable/pressable states work
+- No changes to button click logic — only visual overhaul
+
+## Constraints
+- Use only Material 3 components already in the dependency (`com.google.android.material:material:1.11.0`)
+- Traditional XML layouts — no Compose
+- Minimum SDK 24 — no API 30+ features
+- Keep the app's existing green aesthetic but make it bolder
+- Maintain accessibility (minimum 48dp touch target, sufficient contrast)