feat: sincronizar cor do tema via account data da conta Matrix
A cor escolhida no Appearance passa a ser guardada em im.fluffychat.account_config (primary_color), em vez de apenas nas preferencias locais do dispositivo. - ApplicationAccountConfig ganha primaryColor, preservado em updateApplicationAccountConfig e no novo setApplicationAccountColor - ThemeController restaura a cor da conta activa, aguarda accountDataLoading e reage a alteracoes remotas via onSync - A cor final e derivada de _accountPrimaryColor ?? _localPrimaryColor, evitando corrida entre as preferencias locais e o sync - Matrix notifica a troca de conta activa em initMatrix, setActiveClient e logout, corrigindo o indice do cliente activo - Apagar o wallpaper preserva a cor; testes de serializacao do modelo
This commit is contained in:
@@ -27,20 +27,35 @@ extension ApplicationAccountConfigExtension on Client {
|
||||
wallpaperOpacity:
|
||||
config.wallpaperOpacity ?? currentConfig.wallpaperOpacity,
|
||||
wallpaperBlur: config.wallpaperBlur ?? currentConfig.wallpaperBlur,
|
||||
primaryColor: config.primaryColor ?? currentConfig.primaryColor,
|
||||
).toJson(),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> setApplicationAccountColor(int? primaryColor) {
|
||||
final currentConfig = applicationAccountConfig;
|
||||
return setApplicationAccountConfig(
|
||||
ApplicationAccountConfig(
|
||||
wallpaperUrl: currentConfig.wallpaperUrl,
|
||||
wallpaperOpacity: currentConfig.wallpaperOpacity,
|
||||
wallpaperBlur: currentConfig.wallpaperBlur,
|
||||
primaryColor: primaryColor,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class ApplicationAccountConfig {
|
||||
final Uri? wallpaperUrl;
|
||||
final double? wallpaperOpacity;
|
||||
final double? wallpaperBlur;
|
||||
final int? primaryColor;
|
||||
|
||||
const ApplicationAccountConfig({
|
||||
this.wallpaperUrl,
|
||||
this.wallpaperOpacity,
|
||||
this.wallpaperBlur,
|
||||
this.primaryColor,
|
||||
});
|
||||
|
||||
static double _sanitizedOpacity(double? opacity) {
|
||||
@@ -58,11 +73,13 @@ class ApplicationAccountConfig {
|
||||
json.tryGet<double>('wallpaper_opacity'),
|
||||
),
|
||||
wallpaperBlur: json.tryGet<double>('wallpaper_blur'),
|
||||
primaryColor: json.tryGet<int>('primary_color'),
|
||||
);
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'wallpaper_url': wallpaperUrl?.toString(),
|
||||
'wallpaper_opacity': wallpaperOpacity,
|
||||
'wallpaper_blur': wallpaperBlur,
|
||||
'primary_color': primaryColor,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user