diff --git a/refilc/ios/livecard/livecard.swift b/refilc/ios/livecard/livecard.swift index 939cfe8..55f431e 100644 --- a/refilc/ios/livecard/livecard.swift +++ b/refilc/ios/livecard/livecard.swift @@ -11,6 +11,17 @@ struct Widgets: WidgetBundle { } } +// text contrast background +extension Text { + func getContrastText(backgroundColor: Color) -> some View { + var r, g, b, a: CGFloat + (r, g, b, a) = (0, 0, 0, 0) + UIColor(backgroundColor).getRed(&r, green: &g, blue: &b, alpha: &a) + let luminance = 0.2126 * r + 0.7152 * g + 0.0722 * b + return luminance < 0.6 ? self.foregroundColor(.white) : self.foregroundColor(.black) + } +} + // Color Converter extension Color { init(hex: String, alpha: Double = 1.0) { @@ -62,7 +73,6 @@ struct LockScreenLiveActivityView: View { .font(.body) .bold() .padding(.trailing, 90) - } else { MultilineTextView(text: "\(context.state.index) \(context.state.title) - \(context.state.subtitle)", limit: 25) .font(.body) @@ -84,6 +94,7 @@ struct LockScreenLiveActivityView: View { .resizable() .aspectRatio(contentMode: .fit) .frame(width: CGFloat(8), height: CGFloat(8)) + .foregroundStyle(.secondary) Text("\(context.state.nextSubject) - \(context.state.nextRoom)") .font(.caption) } @@ -107,11 +118,15 @@ struct LockScreenLiveActivityView: View { .monospacedDigit() .padding(.trailing) } +// .activityBackgroundTint( +// context.state.color != "#676767" +// ? Color(hex: context.state.color) +// : Color.clear +// ) .activityBackgroundTint( - context.state.color != "#676767" - ? Color(hex: context.state.color) - : Color.clear + Color.clear ) + .foregroundStyle(Color(hex: context.state.color)) } } diff --git a/refilc/lib/api/providers/live_card_provider.dart b/refilc/lib/api/providers/live_card_provider.dart index d1d2922..36a02d7 100644 --- a/refilc/lib/api/providers/live_card_provider.dart +++ b/refilc/lib/api/providers/live_card_provider.dart @@ -5,6 +5,7 @@ import 'dart:async'; import 'package:refilc/api/providers/liveactivity/platform_channel.dart'; import 'package:refilc/helpers/subject.dart'; import 'package:refilc/models/settings.dart'; +import 'package:refilc/ui/flutter_colorpicker/utils.dart'; import 'package:refilc_kreta_api/models/lesson.dart'; import 'package:refilc_kreta_api/models/week.dart'; import 'package:refilc/utils/format.dart'; @@ -84,11 +85,14 @@ class LiveCardProvider extends ChangeNotifier { } Map toMap() { + print("LIVE ACTIVITY COLOR BELOW:"); + print(_settings.liveActivityColor.toHexString().substring(2)); + String color = '#${_settings.liveActivityColor.toHexString().substring(2)}'; + switch (currentState) { case LiveCardState.morning: return { - "color": - '#${_settings.liveActivityColor.toString().substring(10, 16)}', + "color": color, "icon": nextLesson != null ? SubjectIcon.resolveName(subject: nextLesson?.subject) : "book", @@ -97,23 +101,22 @@ class LiveCardProvider extends ChangeNotifier { "description": "", "startDate": storeFirstRunDate != null ? ((storeFirstRunDate?.millisecondsSinceEpoch ?? 0) - - (_delay.inMilliseconds)) - .toString() + (_delay.inMilliseconds)) + .toString() : "", "endDate": ((nextLesson?.start.millisecondsSinceEpoch ?? 0) - - _delay.inMilliseconds) + _delay.inMilliseconds) .toString(), "nextSubject": nextLesson != null ? nextLesson?.subject.renamedTo ?? - ShortSubject.resolve(subject: nextLesson?.subject).capital() + ShortSubject.resolve(subject: nextLesson?.subject).capital() : "", "nextRoom": nextLesson?.room.replaceAll("_", " ") ?? "", }; case LiveCardState.afternoon: return { - "color": - '#${_settings.liveActivityColor.toString().substring(10, 16)}', + "color": color, "icon": nextLesson != null ? SubjectIcon.resolveName(subject: nextLesson?.subject) : "book", @@ -122,23 +125,22 @@ class LiveCardProvider extends ChangeNotifier { "description": "", "startDate": storeFirstRunDate != null ? ((storeFirstRunDate?.millisecondsSinceEpoch ?? 0) - - (_delay.inMilliseconds)) - .toString() + (_delay.inMilliseconds)) + .toString() : "", "endDate": ((nextLesson?.start.millisecondsSinceEpoch ?? 0) - - _delay.inMilliseconds) + _delay.inMilliseconds) .toString(), "nextSubject": nextLesson != null ? nextLesson?.subject.renamedTo ?? - ShortSubject.resolve(subject: nextLesson?.subject).capital() + ShortSubject.resolve(subject: nextLesson?.subject).capital() : "", "nextRoom": nextLesson?.room.replaceAll("_", " ") ?? "", }; case LiveCardState.night: return { - "color": - '#${_settings.liveActivityColor.toString().substring(10, 16)}', + "color": color, "icon": nextLesson != null ? SubjectIcon.resolveName(subject: nextLesson?.subject) : "book", @@ -147,44 +149,44 @@ class LiveCardProvider extends ChangeNotifier { "description": "", "startDate": storeFirstRunDate != null ? ((storeFirstRunDate?.millisecondsSinceEpoch ?? 0) - - (_delay.inMilliseconds)) - .toString() + (_delay.inMilliseconds)) + .toString() : "", "endDate": ((nextLesson?.start.millisecondsSinceEpoch ?? 0) - - _delay.inMilliseconds) + _delay.inMilliseconds) .toString(), "nextSubject": nextLesson != null ? nextLesson?.subject.renamedTo ?? - ShortSubject.resolve(subject: nextLesson?.subject).capital() + ShortSubject.resolve(subject: nextLesson?.subject).capital() : "", "nextRoom": nextLesson?.room.replaceAll("_", " ") ?? "", }; case LiveCardState.duringLesson: return { - "color": - '#${_settings.liveActivityColor.toString().substring(10, 16)}', + "color": color, "icon": currentLesson != null ? SubjectIcon.resolveName(subject: currentLesson?.subject) : "book", "index": - currentLesson != null ? '${currentLesson!.lessonIndex}. ' : "", + currentLesson != null ? '${currentLesson!.lessonIndex}. ' : "", "title": currentLesson != null ? currentLesson?.subject.renamedTo ?? - ShortSubject.resolve(subject: currentLesson?.subject) - .capital() + ShortSubject.resolve(subject: currentLesson?.subject) + .capital() : "", - "subtitle": "Terem: ${currentLesson?.room.replaceAll("_", " ") ?? ""}", + "subtitle": + "Terem: ${currentLesson?.room.replaceAll("_", " ") ?? ""}", "description": currentLesson?.description ?? "", "startDate": ((currentLesson?.start.millisecondsSinceEpoch ?? 0) - - _delay.inMilliseconds) + _delay.inMilliseconds) .toString(), "endDate": ((currentLesson?.end.millisecondsSinceEpoch ?? 0) - - _delay.inMilliseconds) + _delay.inMilliseconds) .toString(), "nextSubject": nextLesson != null ? nextLesson?.subject.renamedTo ?? - ShortSubject.resolve(subject: nextLesson?.subject).capital() + ShortSubject.resolve(subject: nextLesson?.subject).capital() : "", "nextRoom": nextLesson?.room.replaceAll("_", " ") ?? "", }; @@ -199,24 +201,23 @@ class LiveCardProvider extends ChangeNotifier { final diff = getFloorDifference(); return { - "color": - '#${_settings.liveActivityColor.toString().substring(10, 16)}', + "color": color, "icon": iconFloorMap[diff] ?? "cup.and.saucer", "title": "Szünet", "description": "go $diff".i18n.fill([ diff != "to room" ? (nextLesson!.getFloor() ?? 0) : nextLesson!.room ]), "startDate": ((prevLesson?.end.millisecondsSinceEpoch ?? 0) - - _delay.inMilliseconds) + _delay.inMilliseconds) .toString(), "endDate": ((nextLesson?.start.millisecondsSinceEpoch ?? 0) - - _delay.inMilliseconds) + _delay.inMilliseconds) .toString(), "nextSubject": (nextLesson != null - ? nextLesson?.subject.renamedTo ?? - ShortSubject.resolve(subject: nextLesson?.subject) - .capital() - : "") + ? nextLesson?.subject.renamedTo ?? + ShortSubject.resolve(subject: nextLesson?.subject) + .capital() + : "") .capital(), "nextRoom": nextLesson?.room.replaceAll("_", " ") ?? "", "index": "", @@ -243,8 +244,8 @@ class LiveCardProvider extends ChangeNotifier { DateTime now = _now().add(_delay); if ((currentState == LiveCardState.morning || - currentState == LiveCardState.afternoon || - currentState == LiveCardState.night) && + currentState == LiveCardState.afternoon || + currentState == LiveCardState.night) && storeFirstRunDate == null) { storeFirstRunDate = now; } @@ -253,9 +254,9 @@ class LiveCardProvider extends ChangeNotifier { // Filter label lessons #128 today = today .where((lesson) => - lesson.status?.name != "Elmaradt" && - lesson.subject.id != '' && - !lesson.isEmpty) + lesson.status?.name != "Elmaradt" && + lesson.subject.id != '' && + !lesson.isEmpty) .toList(); if (today.isNotEmpty) { @@ -263,7 +264,7 @@ class LiveCardProvider extends ChangeNotifier { today.sort((a, b) => a.start.compareTo(b.start)); final _lesson = today.firstWhere( - (l) => l.start.isBefore(now) && l.end.isAfter(now), + (l) => l.start.isBefore(now) && l.end.isAfter(now), orElse: () => Lesson.fromJson({})); if (_lesson.start.year != 0) { @@ -328,7 +329,7 @@ class LiveCardProvider extends ChangeNotifier { hasActivityStarted = true; } else if (!hasActivityStarted && ((currentState == LiveCardState.duringLesson && - currentLesson != null) || + currentLesson != null) || currentState == LiveCardState.duringBreak)) { debugPrint("Óra van, vagy szünet, de nincs LiveActivity. létrehozás..."); PlatformChannel.createLiveActivity(toMap()); @@ -362,7 +363,11 @@ class LiveCardProvider extends ChangeNotifier { } //END - if ((currentState == LiveCardState.afternoon || currentState == LiveCardState.morning || currentState == LiveCardState.night) && hasActivityStarted && nextLesson != null && + if ((currentState == LiveCardState.afternoon || + currentState == LiveCardState.morning || + currentState == LiveCardState.night) && + hasActivityStarted && + nextLesson != null && nextLesson!.start.difference(now).inMinutes > 60) { debugPrint("Több, mint 1 óra van az első óráig. Befejezés..."); PlatformChannel.endLiveActivity(); @@ -389,4 +394,4 @@ class LiveCardProvider extends ChangeNotifier { List _today(TimetableProvider p) => (p.getWeek(Week.current()) ?? []) .where((l) => _sameDate(l.date, _now())) .toList(); -} \ No newline at end of file +} diff --git a/refilc/lib/main.dart b/refilc/lib/main.dart index 360b706..2129c16 100644 --- a/refilc/lib/main.dart +++ b/refilc/lib/main.dart @@ -214,7 +214,7 @@ Widget errorBuilder(FlutterErrorDetails details) { } }); - return Container(); + return Container(); }); } diff --git a/refilc/lib/models/settings.dart b/refilc/lib/models/settings.dart index bc75a50..2f295a0 100644 --- a/refilc/lib/models/settings.dart +++ b/refilc/lib/models/settings.dart @@ -500,7 +500,7 @@ class SettingsProvider extends ChangeNotifier { renameSubjectsItalics: false, renameTeachersEnabled: false, renameTeachersItalics: false, - liveActivityColor: const Color(0xFF676767), + liveActivityColor: const Color(0x00000000), welcomeMessage: '', appIcon: 'refilc_default', currentThemeId: '', diff --git a/refilc_mobile_ui/lib/screens/settings/settings_helper.dart b/refilc_mobile_ui/lib/screens/settings/settings_helper.dart index 4cc2e37..f24cb14 100644 --- a/refilc_mobile_ui/lib/screens/settings/settings_helper.dart +++ b/refilc_mobile_ui/lib/screens/settings/settings_helper.dart @@ -922,6 +922,7 @@ class _LiveActivityColorSettingState extends State { child: Column(children: [ MaterialColorPicker( allowShades: false, + colors: [...fullMaterialColors], selectedColor: settings.liveActivityColor, onMainColorChange: (k) { if (!Provider.of(context, listen: false)