diff --git a/refilc/android/app/src/main/res/layout/timetable_item.xml b/refilc/android/app/src/main/res/layout/timetable_item.xml index f057d2d..c72dc65 100644 --- a/refilc/android/app/src/main/res/layout/timetable_item.xml +++ b/refilc/android/app/src/main/res/layout/timetable_item.xml @@ -20,7 +20,7 @@ android:gravity="center" android:text="1." android:textColor="@color/filc" - android:textColorLink="#ff3D7BF4" + android:textColorLink="#ff052460" android:textSize="30sp" android:textStyle="bold" tools:ignore="HardcodedText" /> @@ -110,4 +110,4 @@ android:textColor="@color/white" tools:ignore="HardcodedText" /> - \ No newline at end of file + diff --git a/refilc/android/app/src/main/res/values/colors.xml b/refilc/android/app/src/main/res/values/colors.xml index 955cc10..f1facef 100644 --- a/refilc/android/app/src/main/res/values/colors.xml +++ b/refilc/android/app/src/main/res/values/colors.xml @@ -27,7 +27,7 @@ #ffFFCC00 #40FFD60A #ff34C759 - #ff3D7BF4 + #ff052460 #ff5AC8FA #ff007AFF #ff5856D6 @@ -49,8 +49,8 @@ #ffFFD60A #40FFD60A #ff32D74B - #ff3D7BF4 - #ff3D93F5 + #ff052460 + #ff06348f #ff64D2FF #ff0A84FF #ff5E5CE6 @@ -66,4 +66,4 @@ #FFF06292 #FFBA68C8 #FF22AC9B - \ No newline at end of file + diff --git a/refilc/ios/livecard/livecard.swift b/refilc/ios/livecard/livecard.swift index f5f27e7..0271d1c 100644 --- a/refilc/ios/livecard/livecard.swift +++ b/refilc/ios/livecard/livecard.swift @@ -52,14 +52,31 @@ struct LockScreenLiveActivityView: View { VStack(alignment: .center) { // Jelenlegi óra VStack { - Text(context.state.index + " " + context.state.title) - .font(.body) - .bold() - .multilineTextAlignment(.center) + if(context.state.title.contains("Az első órádig")) { + Text(context.state.title) + .font(.system(size: 15)) + .bold() + .multilineTextAlignment(.center) + } else if(context.state.title == "Szünet") { + Text(context.state.title) + .font(.body) + .bold() + .padding(.trailing, 90) - Text("Terem: \(context.state.subtitle)") - .italic() - .font(.caption) + } else { + MultilineTextView(text: "\(context.state.index) \(context.state.title)", limit: 25) + .font(.body) + .bold() + .multilineTextAlignment(.center) + } + + //Terem + if (!context.state.subtitle.isEmpty) { + Text(context.state.subtitle) + .italic() + .bold() + .font(.system(size: 13)) + } } // Leírás @@ -69,6 +86,7 @@ struct LockScreenLiveActivityView: View { } // Következő óra + if(context.state.nextSubject != "" && context.state.nextRoom != "") { HStack { Image(systemName: "arrow.right") .resizable() @@ -80,18 +98,24 @@ struct LockScreenLiveActivityView: View { .font(.caption2) } .multilineTextAlignment(.center) + } else { + Spacer(minLength: 5) + Text("Ez az utolsó óra! Kitartást!") + .font(.system(size: 15)) + } + } .padding(15) Spacer() - + // Visszaszámláló Text(timerInterval: context.state.date, countsDown: true) .multilineTextAlignment(.center) .frame(width: 85) .font(.title2) .monospacedDigit() - .padding(.trailing, CGFloat(24)) + .padding(.trailing) } .activityBackgroundTint( context.state.color != "#676767" @@ -109,7 +133,7 @@ struct LiveCardWidget: Widget { LockScreenLiveActivityView(context: context) /// Dynamic Island } dynamicIsland: { context in - + /// Expanded return DynamicIsland { DynamicIslandExpandedRegion(.leading) { @@ -133,39 +157,95 @@ struct LiveCardWidget: Widget { ).progressViewStyle(.circular) } } - DynamicIslandExpandedRegion(.center) { - VStack(alignment: .center) { - Text(context.state.index + context.state.title) - .lineLimit(1) - .font(.body) - .bold() - - Text(context.state.subtitle) - .lineLimit(1) - .font(.subheadline) - Spacer() - - Text(context.state.description) - .lineLimit(2) - .font(.caption) - }.padding(EdgeInsets(top: 0.0, leading: 5.0, bottom: 0.0, trailing: 0.0)) - } + DynamicIslandExpandedRegion(.center) { + VStack(alignment: .center) { + // Első óra előtti expanded DynamicIsland + if(context.state.title.contains("Az első órádig")) { + Text("Az első órád:") + .font(.body) + .bold() + .padding(.trailing, -15) + MultilineTextView(text: "\(context.state.nextSubject)", limit: 25) + .font(.body) + .padding(.trailing, -25) + + Text("Ebben a teremben:") + .font(.body) + .bold() + .padding(.leading, 15) + Text(context.state.nextRoom) + .font(.body) + .padding(.leading, 15) + } else if(context.state.title == "Szünet") { + // Amikor szünet van, expanded DynamicIsland + Text(context.state.title) + .lineLimit(1) + .font(.body) + .bold() + .padding(.leading, 15) + + Spacer(minLength: 5) + Text("Következő óra és terem:") + .font(.system(size: 13)) + .padding(.leading, 25) + Text(context.state.nextSubject) + .font(.caption) + .padding(.leading, 15) + Text(context.state.nextRoom) + .font(.caption2) + .padding(.leading, 15) + + } else { + // Amikor óra van, expanded DynamicIsland + MultilineTextView(text: "\(context.state.index) \(context.state.title)", limit: 25) + .lineLimit(1) + .font(.body) + .bold() + .padding(.trailing, -35) + + Text(context.state.subtitle) + .lineLimit(1) + .italic() + .bold() + .font(.system(size: 13)) + .padding(.trailing, -50) + + Spacer(minLength: 5) + + if(context.state.nextRoom != "" && context.state.nextSubject != "") { + Text("Következő óra és terem:") + .font(.system(size: 14)) + .padding(.trailing, -35) + Spacer(minLength: 2) + Text(context.state.nextSubject) + .modifier(DynamicFontSizeModifier(text: context.state.nextSubject)) + .padding(.trailing, -35) + Text(context.state.nextRoom) + // ignore: based on nextSubject characters, I check that the font size of the room is the same as the next subject. + .modifier(DynamicFontSizeModifier(text: context.state.nextSubject)) + .padding(.trailing, -35) + } else { + Text("Ez az utolsó óra! Kitartást!") + .font(.system(size: 14)) + .padding(.trailing, -30) + } + } + + + }.padding(EdgeInsets(top: 0.0, leading: 5.0, bottom: 0.0, trailing: 0.0)) + } + /// Compact } compactLeading: { - Label { - Text(context.state.title) - } icon: { - Image(systemName: context.state.icon) - } - .font(.caption2) + Image(systemName: context.state.icon) } compactTrailing: { Text(timerInterval: context.state.date, countsDown: true) .multilineTextAlignment(.center) .frame(width: 40) .font(.caption2) - + /// Collapsed } minimal: { VStack(alignment: .center, content: { @@ -191,7 +271,59 @@ struct LiveCardWidget: Widget { context.state.color != "#676767" ? Color(hex: context.state.color) : Color.clear - ) + ) + } + } +} + +struct MultilineTextView: View { + var text: String + var limit: Int = 20 // default is 20 character + + var body: some View { + let words = text.split(separator: " ") + var currentLine = "" + var lines: [String] = [] + + for word in words { + if (currentLine.count + word.count + 1) > limit { + lines.append(currentLine) + currentLine = "" + } + if !currentLine.isEmpty { + currentLine += " " + } + currentLine += word + } + if !currentLine.isEmpty { + lines.append(currentLine) + } + + return VStack(alignment: .center) { + ForEach(lines, id: \.self) { line in + Text(line) + } + Spacer(minLength: 1) + } + } +} + +struct DynamicFontSizeModifier: ViewModifier { + var text: String + + func body(content: Content) -> some View { + content + .font(.system(size: fontSize(for: text))) + } + + private func fontSize(for text: String) -> CGFloat { + let length = text.count + if length < 10 { + return 12 + } else if length < 20 { + return 12 + } else { + return 11 } } } diff --git a/refilc/lib/api/providers/live_card_provider.dart b/refilc/lib/api/providers/live_card_provider.dart index 1d581db..4e0443b 100644 --- a/refilc/lib/api/providers/live_card_provider.dart +++ b/refilc/lib/api/providers/live_card_provider.dart @@ -92,7 +92,7 @@ class LiveCardProvider extends ChangeNotifier { "icon": nextLesson != null ? SubjectIcon.resolveName(subject: nextLesson?.subject) : "book", - "title": "Első órádig:", + "title": "Jó reggelt! Az első órádig:", "subtitle": "", "description": "", "startDate": storeFirstRunDate != null @@ -117,7 +117,7 @@ class LiveCardProvider extends ChangeNotifier { "icon": nextLesson != null ? SubjectIcon.resolveName(subject: nextLesson?.subject) : "book", - "title": "Első órádig:", + "title": "Jó napot! Az első órádig:", "subtitle": "", "description": "", "startDate": storeFirstRunDate != null @@ -142,7 +142,7 @@ class LiveCardProvider extends ChangeNotifier { "icon": nextLesson != null ? SubjectIcon.resolveName(subject: nextLesson?.subject) : "book", - "title": "Első órádig:", + "title": "Jó estét! Az első órádig:", "subtitle": "", "description": "", "startDate": storeFirstRunDate != null @@ -174,7 +174,7 @@ class LiveCardProvider extends ChangeNotifier { ShortSubject.resolve(subject: currentLesson?.subject) .capital() : "", - "subtitle": currentLesson?.room.replaceAll("_", " ") ?? "", + "subtitle": "Terem: ${currentLesson?.room.replaceAll("_", " ") ?? ""}", "description": currentLesson?.description ?? "", "startDate": ((currentLesson?.start.millisecondsSinceEpoch ?? 0) - _delay.inMilliseconds)