feat(web+android): Honigtopf mit Brief statt Glocke fuer Benachrichtigungen

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
marcandClaude Opus 5 committed 2026-09-24 16:53:06 +02:00
1 parent 899c98977a
commit e8582381ec
6 files changed
+59 -8

No files matched your search

+8 -1
View File
@@ -80,7 +80,7 @@ Die Android-App zählt eigenständig weiter (mehrere APKs pro Release). Welche d
## [3.1] — 2026-09-22 ## [3.1] — 2026-09-22
**Android:** 1.15 (versionCode 18) → 1.22 (versionCode 25). 1.16 brachte den Rollbalken, 1.17 bis 1.21 machten ihn bedienbar, 1.19 das Bearbeiten der Warteschlange, 1.22 die Wischgeste, den Mischen-Fehler und die zwei neuen Designs. **Android:** 1.15 (versionCode 18) → 1.23 (versionCode 26). 1.16 brachte den Rollbalken, 1.17 bis 1.21 machten ihn bedienbar, 1.19 das Bearbeiten der Warteschlange, 1.22 die Wischgeste, den Mischen-Fehler und die zwei neuen Designs, 1.23 den Honigtopf.
### Added ### Added
- **Zwei neue Designs: Violet und Crimson (Web + Android)** — ein helles Lila auf tiefem - **Zwei neue Designs: Violet und Crimson (Web + Android)** — ein helles Lila auf tiefem
@@ -126,6 +126,13 @@ Die Android-App zählt eigenständig weiter (mehrere APKs pro Release). Welche d
### Changed ### Changed
- **Benachrichtigungen tragen einen Honigtopf mit Brief statt der Glocke (Web + Android)** —
reine Strichzeichnung wie die übrigen Symbole, damit sie die Akzentfarbe annimmt, wenn etwas
Ungelesenes anliegt. Im Web als Inline-SVG, in Android als Vektor-Drawable mit denselben
Konturen, an beiden Stellen (Kopfzeile und Kopf des Benachrichtigungsfensters).
- Bei 18 px zählt jeder Strich: die erste Fassung hatte einen zu großen Brief und einen geraden
Topf, das verlief zu einer Fläche. Der Topf hat jetzt einen gewölbten Bauch und der Brief
sitzt kleiner in der Mitte — gerendert und in Originalgröße gegengesehen.
- **Der Rollbalken läuft nur noch über den Inhalt, nicht über die Suchleiste (Web)** — die - **Der Rollbalken läuft nur noch über den Inhalt, nicht über die Suchleiste (Web)** — die
Kopfzeile mit Suche, Glocke und Zahnrad lag **im** Rollbereich und blieb per `sticky` oben Kopfzeile mit Suche, Glocke und Zahnrad lag **im** Rollbereich und blieb per `sticky` oben
kleben. Der Balken gehört zum Rollbereich und reichte damit bis ganz nach oben, neben eine kleben. Der Balken gehört zum Rollbereich und reichte damit bis ganz nach oben, neben eine
+2 -2
View File
@@ -14,8 +14,8 @@ android {
applicationId = "com.novasonic.app" applicationId = "com.novasonic.app"
minSdk = 26 minSdk = 26
targetSdk = 35 targetSdk = 35
versionCode = 25 versionCode = 26
versionName = "1.22" versionName = "1.23"
// Host der eigenen NovaSonic-Web-App — Ziel der geteilten Links. Einmal in // Host der eigenen NovaSonic-Web-App — Ziel der geteilten Links. Einmal in
// gradle.properties setzen (novasonicHost=music.example.com); ohne Angabe bleibt der // gradle.properties setzen (novasonicHost=music.example.com); ohne Angabe bleibt der
// Platzhalter stehen und der App-Link greift schlicht nicht. // Platzhalter stehen und der App-Link greift schlicht nicht.
@@ -9,7 +9,6 @@ import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowForward import androidx.compose.material.icons.automirrored.filled.ArrowForward
import androidx.compose.material.icons.filled.Close import androidx.compose.material.icons.filled.Close
import androidx.compose.material.icons.filled.Notifications
import androidx.compose.material3.* import androidx.compose.material3.*
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@@ -26,6 +25,8 @@ import com.novasonic.app.ui.theme.*
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Date import java.util.Date
import java.util.Locale import java.util.Locale
import androidx.compose.ui.res.painterResource
import com.novasonic.app.R
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@@ -49,7 +50,7 @@ fun NotificationSheet(
.fillMaxWidth() .fillMaxWidth()
.padding(start = 20.dp, end = 8.dp, top = 18.dp, bottom = 12.dp), .padding(start = 20.dp, end = 8.dp, top = 18.dp, bottom = 12.dp),
) { ) {
Icon(Icons.Default.Notifications, null, Icon(painterResource(R.drawable.ic_honigtopf_brief), null,
tint = NsAccent, modifier = Modifier.size(18.dp)) tint = NsAccent, modifier = Modifier.size(18.dp))
Spacer(Modifier.width(8.dp)) Spacer(Modifier.width(8.dp))
Text( Text(
@@ -8,7 +8,6 @@ import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Notifications
import androidx.compose.material.icons.filled.PlayArrow import androidx.compose.material.icons.filled.PlayArrow
import androidx.compose.material.icons.filled.Settings import androidx.compose.material.icons.filled.Settings
import androidx.compose.material3.* import androidx.compose.material3.*
@@ -33,6 +32,8 @@ import com.novasonic.app.data.NotificationStore
import com.novasonic.app.ui.component.AlbumCard import com.novasonic.app.ui.component.AlbumCard
import com.novasonic.app.ui.theme.* import com.novasonic.app.ui.theme.*
import com.novasonic.app.viewmodel.HomeViewModel import com.novasonic.app.viewmodel.HomeViewModel
import androidx.compose.ui.res.painterResource
import com.novasonic.app.R
private val greetingsWithName = listOf( private val greetingsWithName = listOf(
"Ready for some beats,", "Ready for some beats,",
@@ -120,7 +121,7 @@ fun HomeScreen(
} }
) { ) {
IconButton(onClick = onBellClick) { IconButton(onClick = onBellClick) {
Icon(Icons.Default.Notifications, "Benachrichtigungen", Icon(painterResource(R.drawable.ic_honigtopf_brief), "Benachrichtigungen",
tint = if (unreadCount > 0) NsAccent else NsOnSurface2) tint = if (unreadCount > 0) NsAccent else NsOnSurface2)
} }
} }
@@ -0,0 +1,42 @@
<!-- Benachrichtigungen: Honigtopf mit Brief statt der ueblichen Glocke.
Reine Strichzeichnung wie die uebrigen Symbole, damit Icon(tint = …) sie einfaerben kann. -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<!-- Deckelrand -->
<path
android:pathData="M4.7,4.6 L19.3,4.6 A1.1,1.1 0 0 1 20.4,5.7 L20.4,6.5 A1.1,1.1 0 0 1 19.3,7.6 L4.7,7.6 A1.1,1.1 0 0 1 3.6,6.5 L3.6,5.7 A1.1,1.1 0 0 1 4.7,4.6 Z"
android:fillColor="#00000000"
android:strokeColor="#FFFFFFFF"
android:strokeWidth="1.7"
android:strokeLineJoin="round" />
<!-- Topfkoerper, nach unten leicht verjuengt -->
<path
android:pathData="M5.5,7.6 c-1.1,3.9 -0.7,8.2 0.7,10.4 a2,2 0 0 0 1.7,0.9 h8.2 a2,2 0 0 0 1.7,-0.9 c1.4,-2.2 1.8,-6.5 0.7,-10.4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFFFF"
android:strokeWidth="1.7"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
<!-- Brief -->
<path
android:pathData="M9,11.7 L15,11.7 A0.7,0.7 0 0 1 15.7,12.4 L15.7,15.6 A0.7,0.7 0 0 1 15,16.3 L9,16.3 A0.7,0.7 0 0 1 8.3,15.6 L8.3,12.4 A0.7,0.7 0 0 1 9,11.7 Z"
android:fillColor="#00000000"
android:strokeColor="#FFFFFFFF"
android:strokeWidth="1.5"
android:strokeLineJoin="round" />
<!-- Brieflasche -->
<path
android:pathData="M8.6,12.1 L12,14.4 L15.4,12.1"
android:fillColor="#00000000"
android:strokeColor="#FFFFFFFF"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:strokeLineJoin="round" />
</vector>
+1 -1
View File
@@ -110,7 +110,7 @@
</div> </div>
<div style="display:flex;align-items:center;gap:2px;flex-shrink:0"> <div style="display:flex;align-items:center;gap:2px;flex-shrink:0">
<button class="hbtn notif-bell-btn" onclick="toggleNotifPanel()" title="Benachrichtigungen" style="padding:8px;color:var(--text2)"> <button class="hbtn notif-bell-btn" onclick="toggleNotifPanel()" title="Benachrichtigungen" style="padding:8px;color:var(--text2)">
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 0 1-3.46 0"/></svg> <!-- Honigtopf mit Brief statt Glocke --><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><rect x="3.6" y="4.6" width="16.8" height="3" rx="1.1"/><path d="M5.5 7.6c-1.1 3.9-.7 8.2.7 10.4a2 2 0 0 0 1.7.9h8.2a2 2 0 0 0 1.7-.9c1.4-2.2 1.8-6.5.7-10.4"/><rect x="8.3" y="11.7" width="7.4" height="4.6" rx="0.7" stroke-width="1.5"/><path d="M8.6 12.1 12 14.4l3.4-2.3" stroke-width="1.5"/></svg>
<span class="notif-badge" style="display:none">0</span> <span class="notif-badge" style="display:none">0</span>
</button> </button>
<button class="hbtn" onclick="openSettings()" title="Einstellungen" style="padding:8px;color:var(--text2)"> <button class="hbtn" onclick="openSettings()" title="Einstellungen" style="padding:8px;color:var(--text2)">