Im Band ist Platz für mehr als einen Wert

Die Begründung für „ein Wert je Seite" war falsch gerechnet: der Arm ist bei
fünf Kacheln je 376 Punkte breit, und ein Wert braucht davon knapp sechzig. Die
Zahl im Kopf war die der schmalen Insel, nicht die des ausgefahrenen Arms.

Jetzt bis zu vier Elemente je Seite, in wählbarer Reihenfolge — Uhr, Wetter,
Akku, CPU, Speicher, Temperatur. Kein Ziehen zum Umsortieren: bei höchstens vier
Einträgen ist Herausnehmen und wieder Hinzufügen schneller als eine Ziehgeste,
die man erst finden muss.

„Nichts" ist keine Wahl mehr, sondern die leere Liste — zwei Wege, dasselbe zu
sagen, waren einer zu viel.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-05 21:32:24 +02:00
co-authored by Claude Opus 5
parent e3b215a1dd
commit fd29df51cf
4 changed files with 92 additions and 55 deletions
+17 -14
View File
@@ -202,12 +202,10 @@ struct BrightnessActivity: NotchActivity {
/// Die Elemente, die links und rechts der Notch sitzen können.
///
/// **Eine Wahl je Seite, keine Liste.** Der Arm ist bei fünf Kacheln rund 200
/// Punkte breit und liegt auf Menüleistenhöhe — dort passt ein Wert, nicht drei.
/// Eine Mehrfachauswahl anzubieten hieße, ein Gedränge zu ermöglichen, das man
/// hinterher wieder wegräumen muss.
/// Mehrere je Seite: der Arm ist bei fünf Kacheln rund 376 Punkte breit, und ein
/// Wert braucht davon knapp sechzig. Vier nebeneinander sind kein Gedränge,
/// sondern eine Zeile.
enum BandAccessory: String, Codable, CaseIterable, Sendable {
case none
case clock
case weather
case battery
@@ -217,7 +215,6 @@ enum BandAccessory: String, Codable, CaseIterable, Sendable {
var localizedName: LocalizedStringKey {
switch self {
case .none: "band.none"
case .clock: "band.clock"
case .weather: "band.weather"
case .battery: "band.battery"
@@ -240,22 +237,28 @@ struct BandSlotView: View {
let weather: WeatherModel?
let metrics: MetricsModel?
private var kind: BandAccessory {
private var kinds: [BandAccessory] {
edge == .leading ? model.bandLeading : model.bandTrailing
}
var body: some View {
content
.padding(.leading, edge == .leading ? Onyx.Space.xl : Onyx.Space.lg)
.padding(.trailing, edge == .leading ? Onyx.Space.lg : Onyx.Space.xl)
.frame(maxWidth: .infinity, alignment: edge == .leading ? .leading : .trailing)
HStack(spacing: Onyx.Space.xl) {
ForEach(kinds, id: \.self) { kind in
content(kind)
}
}
.padding(.leading, edge == .leading ? Onyx.Space.xl : Onyx.Space.lg)
.padding(.trailing, edge == .leading ? Onyx.Space.lg : Onyx.Space.xl)
.frame(maxWidth: .infinity, alignment: edge == .leading ? .leading : .trailing)
// Was nicht mehr hineinpasst, wird abgeschnitten statt den Arm über die
// Notch hinauszuschieben. Die Obergrenze in den Einstellungen sorgt
// dafür, dass es dazu im Normalfall nicht kommt.
.fixedSize(horizontal: true, vertical: false)
}
@ViewBuilder
private var content: some View {
private func content(_ kind: BandAccessory) -> some View {
switch kind {
case .none:
EmptyView()
case .clock:
// Die eine Angabe, die keine Quelle braucht.
TimelineView(.everyMinute) { context in