Restyle both screens into a dark card-based Material3 look: near-black
background, rounded surface cards, muted uppercase section labels, tonal
buttons, and a filled accent Save button. Update MainActivity DND status
colors to the new palette.
- android:allowBackup=false so config (trigger, sound URIs, duration) is not
extractable via adb backup or auto-restored to another device.
- SmsReceiver no longer logs received message body/sender (could contain
sensitive content); uses generic debug logs instead.
Lets the user silence the ring early from the notification instead of waiting
out the full configured duration. ACTION_STOP stops playback, restores
volume/focus, and removes the foreground notification.
DND silences the media stream by default, so playback on STREAM_MUSIC was
invisible during DND even though the notification showed. Switch to
STREAM_ALARM + USAGE_ALARM, which DND exempts by default, and restore/force
the alarm stream volume instead of media.
Adds a Settings screen (SettingsActivity) where the user configures:
- the SMS trigger phrase (replaces hardcoded RING_NOW/PLAY_SONG)
- the sound: system ringtone (with picker) or a picked audio file
- the play duration (5-300s, replaces the fixed 30s)
Values persist via RingConfig (SharedPreferences). SmsReceiver matches the
configured phrase; RingService plays the stored Uri for the configured length.
Removes the old MediaStore by-name song search and its hardcoded duration.
protectionLevel only applies to app-defined <permission> elements. On a
<uses-permission> it misclassifies RECEIVE_SMS so the system never offers
the runtime grant dialog.
- settings.gradle.kts: add dependencyResolutionManagement repositories so app deps resolve
- activity_main.xml: move help text with raw quotes to a string resource (commands_help)
- RingService.kt: import NotificationChannel and PendingIntent
- gradle wrapper: add gradlew + gradle-wrapper.jar, regenerate properties
- add .gitignore for build outputs and local.properties