fixed live activity coloring

This commit is contained in:
Marton Kiss 2025-01-31 10:20:52 +01:00
parent ee0e724b8a
commit 67649cc5fd
5 changed files with 71 additions and 50 deletions

View File

@ -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 // Color Converter
extension Color { extension Color {
init(hex: String, alpha: Double = 1.0) { init(hex: String, alpha: Double = 1.0) {
@ -62,7 +73,6 @@ struct LockScreenLiveActivityView: View {
.font(.body) .font(.body)
.bold() .bold()
.padding(.trailing, 90) .padding(.trailing, 90)
} else { } else {
MultilineTextView(text: "\(context.state.index) \(context.state.title) - \(context.state.subtitle)", limit: 25) MultilineTextView(text: "\(context.state.index) \(context.state.title) - \(context.state.subtitle)", limit: 25)
.font(.body) .font(.body)
@ -84,6 +94,7 @@ struct LockScreenLiveActivityView: View {
.resizable() .resizable()
.aspectRatio(contentMode: .fit) .aspectRatio(contentMode: .fit)
.frame(width: CGFloat(8), height: CGFloat(8)) .frame(width: CGFloat(8), height: CGFloat(8))
.foregroundStyle(.secondary)
Text("\(context.state.nextSubject) - \(context.state.nextRoom)") Text("\(context.state.nextSubject) - \(context.state.nextRoom)")
.font(.caption) .font(.caption)
} }
@ -107,11 +118,15 @@ struct LockScreenLiveActivityView: View {
.monospacedDigit() .monospacedDigit()
.padding(.trailing) .padding(.trailing)
} }
// .activityBackgroundTint(
// context.state.color != "#676767"
// ? Color(hex: context.state.color)
// : Color.clear
// )
.activityBackgroundTint( .activityBackgroundTint(
context.state.color != "#676767" Color.clear
? Color(hex: context.state.color)
: Color.clear
) )
.foregroundStyle(Color(hex: context.state.color))
} }
} }

View File

@ -5,6 +5,7 @@ import 'dart:async';
import 'package:refilc/api/providers/liveactivity/platform_channel.dart'; import 'package:refilc/api/providers/liveactivity/platform_channel.dart';
import 'package:refilc/helpers/subject.dart'; import 'package:refilc/helpers/subject.dart';
import 'package:refilc/models/settings.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/lesson.dart';
import 'package:refilc_kreta_api/models/week.dart'; import 'package:refilc_kreta_api/models/week.dart';
import 'package:refilc/utils/format.dart'; import 'package:refilc/utils/format.dart';
@ -84,11 +85,14 @@ class LiveCardProvider extends ChangeNotifier {
} }
Map<String, String> toMap() { Map<String, String> toMap() {
print("LIVE ACTIVITY COLOR BELOW:");
print(_settings.liveActivityColor.toHexString().substring(2));
String color = '#${_settings.liveActivityColor.toHexString().substring(2)}';
switch (currentState) { switch (currentState) {
case LiveCardState.morning: case LiveCardState.morning:
return { return {
"color": "color": color,
'#${_settings.liveActivityColor.toString().substring(10, 16)}',
"icon": nextLesson != null "icon": nextLesson != null
? SubjectIcon.resolveName(subject: nextLesson?.subject) ? SubjectIcon.resolveName(subject: nextLesson?.subject)
: "book", : "book",
@ -112,8 +116,7 @@ class LiveCardProvider extends ChangeNotifier {
case LiveCardState.afternoon: case LiveCardState.afternoon:
return { return {
"color": "color": color,
'#${_settings.liveActivityColor.toString().substring(10, 16)}',
"icon": nextLesson != null "icon": nextLesson != null
? SubjectIcon.resolveName(subject: nextLesson?.subject) ? SubjectIcon.resolveName(subject: nextLesson?.subject)
: "book", : "book",
@ -137,8 +140,7 @@ class LiveCardProvider extends ChangeNotifier {
case LiveCardState.night: case LiveCardState.night:
return { return {
"color": "color": color,
'#${_settings.liveActivityColor.toString().substring(10, 16)}',
"icon": nextLesson != null "icon": nextLesson != null
? SubjectIcon.resolveName(subject: nextLesson?.subject) ? SubjectIcon.resolveName(subject: nextLesson?.subject)
: "book", : "book",
@ -162,8 +164,7 @@ class LiveCardProvider extends ChangeNotifier {
case LiveCardState.duringLesson: case LiveCardState.duringLesson:
return { return {
"color": "color": color,
'#${_settings.liveActivityColor.toString().substring(10, 16)}',
"icon": currentLesson != null "icon": currentLesson != null
? SubjectIcon.resolveName(subject: currentLesson?.subject) ? SubjectIcon.resolveName(subject: currentLesson?.subject)
: "book", : "book",
@ -174,7 +175,8 @@ class LiveCardProvider extends ChangeNotifier {
ShortSubject.resolve(subject: currentLesson?.subject) ShortSubject.resolve(subject: currentLesson?.subject)
.capital() .capital()
: "", : "",
"subtitle": "Terem: ${currentLesson?.room.replaceAll("_", " ") ?? ""}", "subtitle":
"Terem: ${currentLesson?.room.replaceAll("_", " ") ?? ""}",
"description": currentLesson?.description ?? "", "description": currentLesson?.description ?? "",
"startDate": ((currentLesson?.start.millisecondsSinceEpoch ?? 0) - "startDate": ((currentLesson?.start.millisecondsSinceEpoch ?? 0) -
_delay.inMilliseconds) _delay.inMilliseconds)
@ -199,8 +201,7 @@ class LiveCardProvider extends ChangeNotifier {
final diff = getFloorDifference(); final diff = getFloorDifference();
return { return {
"color": "color": color,
'#${_settings.liveActivityColor.toString().substring(10, 16)}',
"icon": iconFloorMap[diff] ?? "cup.and.saucer", "icon": iconFloorMap[diff] ?? "cup.and.saucer",
"title": "Szünet", "title": "Szünet",
"description": "go $diff".i18n.fill([ "description": "go $diff".i18n.fill([
@ -362,7 +363,11 @@ class LiveCardProvider extends ChangeNotifier {
} }
//END //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) { nextLesson!.start.difference(now).inMinutes > 60) {
debugPrint("Több, mint 1 óra van az első óráig. Befejezés..."); debugPrint("Több, mint 1 óra van az első óráig. Befejezés...");
PlatformChannel.endLiveActivity(); PlatformChannel.endLiveActivity();

View File

@ -500,7 +500,7 @@ class SettingsProvider extends ChangeNotifier {
renameSubjectsItalics: false, renameSubjectsItalics: false,
renameTeachersEnabled: false, renameTeachersEnabled: false,
renameTeachersItalics: false, renameTeachersItalics: false,
liveActivityColor: const Color(0xFF676767), liveActivityColor: const Color(0x00000000),
welcomeMessage: '', welcomeMessage: '',
appIcon: 'refilc_default', appIcon: 'refilc_default',
currentThemeId: '', currentThemeId: '',

View File

@ -922,6 +922,7 @@ class _LiveActivityColorSettingState extends State<LiveActivityColorSetting> {
child: Column(children: [ child: Column(children: [
MaterialColorPicker( MaterialColorPicker(
allowShades: false, allowShades: false,
colors: [...fullMaterialColors],
selectedColor: settings.liveActivityColor, selectedColor: settings.liveActivityColor,
onMainColorChange: (k) { onMainColorChange: (k) {
if (!Provider.of<PlusProvider>(context, listen: false) if (!Provider.of<PlusProvider>(context, listen: false)