diff --git a/assets/icons/settings/animations.png b/assets/icons/settings/animations.png new file mode 100644 index 0000000..90f93c8 Binary files /dev/null and b/assets/icons/settings/animations.png differ diff --git a/lib/app/clipboard/presentation/states/clipboard_daemon_integration_state_view.dart b/lib/app/clipboard/presentation/states/clipboard_daemon_integration_state_view.dart index 2a932c3..5f29db4 100644 --- a/lib/app/clipboard/presentation/states/clipboard_daemon_integration_state_view.dart +++ b/lib/app/clipboard/presentation/states/clipboard_daemon_integration_state_view.dart @@ -5,6 +5,7 @@ import 'package:cliptopia/app/clipboard/presentation/widgets/download_button.dar import 'package:cliptopia/config/assets/app_animations.dart'; import 'package:cliptopia/config/assets/app_icons.dart'; import 'package:cliptopia/config/themes/app_theme.dart'; +import 'package:cliptopia/core/storage/storage.dart'; import 'package:cliptopia/widgets/app_close_button.dart'; import 'package:cliptopia/widgets/topbar/backdrop_panel.dart'; import 'package:cliptopia/widgets/topbar/top_bar.dart'; @@ -132,6 +133,10 @@ class _ClipboardDaemonIntegrationStateViewState Lottie.asset( AppAnimations.downloading, width: 100, + animate: Storage.get( + StorageKeys.animationEnabledKey, + fallback: + StorageValues.defaultAnimationEnabledKey), ), ], ), diff --git a/lib/app/clipboard/presentation/states/clipboard_empty_state_view.dart b/lib/app/clipboard/presentation/states/clipboard_empty_state_view.dart index 32c6f1d..d01784e 100644 --- a/lib/app/clipboard/presentation/states/clipboard_empty_state_view.dart +++ b/lib/app/clipboard/presentation/states/clipboard_empty_state_view.dart @@ -6,6 +6,7 @@ import 'package:cliptopia/constants/typedefs.dart'; import 'package:cliptopia/core/database/database.dart'; import 'package:cliptopia/core/search_engine.dart'; import 'package:cliptopia/core/services/injector.dart'; +import 'package:cliptopia/core/storage/storage.dart'; import 'package:cliptopia/widgets/app_close_button.dart'; import 'package:cliptopia/widgets/topbar/backdrop_panel.dart'; import 'package:cliptopia/widgets/topbar/top_bar.dart'; @@ -132,6 +133,8 @@ class _ClipboardEmptyStateViewState extends State { AppAnimations.getEmptyAnimationOnCause(widget.cause), fit: BoxFit.fitWidth, repeat: widget.cause != EmptyCause.noImageElements, + animate: Storage.get(StorageKeys.animationEnabledKey, + fallback: StorageValues.defaultAnimationEnabledKey), ), ), ), diff --git a/lib/app/clipboard/presentation/states/clipboard_loading_state_view.dart b/lib/app/clipboard/presentation/states/clipboard_loading_state_view.dart index 9c2dbfd..b1004ab 100644 --- a/lib/app/clipboard/presentation/states/clipboard_loading_state_view.dart +++ b/lib/app/clipboard/presentation/states/clipboard_loading_state_view.dart @@ -1,5 +1,6 @@ import 'package:cliptopia/config/assets/app_animations.dart'; import 'package:cliptopia/config/themes/app_theme.dart'; +import 'package:cliptopia/core/storage/storage.dart'; import 'package:cliptopia/widgets/app_close_button.dart'; import 'package:cliptopia/widgets/topbar/top_bar.dart'; import 'package:flutter/material.dart'; @@ -36,7 +37,11 @@ class ClipboardLoadingStateView extends StatelessWidget { child: Stack( children: [ Align( - child: Lottie.asset(AppAnimations.loading), + child: Lottie.asset( + AppAnimations.loading, + animate: Storage.get(StorageKeys.animationEnabledKey, + fallback: StorageValues.defaultAnimationEnabledKey), + ), ), const Align( alignment: Alignment.topCenter, diff --git a/lib/app/commands/presentation/states/commands_empty_state_view.dart b/lib/app/commands/presentation/states/commands_empty_state_view.dart index bbc0f6a..7272e3b 100644 --- a/lib/app/commands/presentation/states/commands_empty_state_view.dart +++ b/lib/app/commands/presentation/states/commands_empty_state_view.dart @@ -7,6 +7,7 @@ import 'package:cliptopia/constants/typedefs.dart'; import 'package:cliptopia/core/database/database.dart'; import 'package:cliptopia/core/search_engine.dart'; import 'package:cliptopia/core/services/injector.dart'; +import 'package:cliptopia/core/storage/storage.dart'; import 'package:cliptopia/core/utils.dart'; import 'package:cliptopia/widgets/app_close_button.dart'; import 'package:cliptopia/widgets/topbar/backdrop_panel.dart'; @@ -125,6 +126,8 @@ class _CommandsEmptyStateViewState extends State { child: Lottie.asset( AppAnimations.getEmptyAnimationOnCause(widget.cause), fit: BoxFit.fitWidth, + animate: Storage.get(StorageKeys.animationEnabledKey, + fallback: StorageValues.defaultAnimationEnabledKey), ), ), ), diff --git a/lib/app/emojis/presentation/states/emojis_empty_state_view.dart b/lib/app/emojis/presentation/states/emojis_empty_state_view.dart index 40c655f..d61c616 100644 --- a/lib/app/emojis/presentation/states/emojis_empty_state_view.dart +++ b/lib/app/emojis/presentation/states/emojis_empty_state_view.dart @@ -5,6 +5,7 @@ import 'package:cliptopia/config/themes/app_theme.dart'; import 'package:cliptopia/constants/typedefs.dart'; import 'package:cliptopia/core/database/database.dart'; import 'package:cliptopia/core/services/injector.dart'; +import 'package:cliptopia/core/storage/storage.dart'; import 'package:cliptopia/widgets/app_close_button.dart'; import 'package:cliptopia/widgets/topbar/top_bar.dart'; import 'package:flutter/material.dart'; @@ -65,6 +66,8 @@ class _EmojisEmptyStateViewState extends State { child: Lottie.asset( AppAnimations.emojis, fit: BoxFit.fitWidth, + animate: Storage.get(StorageKeys.animationEnabledKey, + fallback: StorageValues.defaultAnimationEnabledKey), ), ), ), diff --git a/lib/app/emojis/presentation/states/emojis_initialized_state_view.dart b/lib/app/emojis/presentation/states/emojis_initialized_state_view.dart index 836c3c7..8621454 100644 --- a/lib/app/emojis/presentation/states/emojis_initialized_state_view.dart +++ b/lib/app/emojis/presentation/states/emojis_initialized_state_view.dart @@ -8,6 +8,7 @@ import 'package:cliptopia/config/themes/app_theme.dart'; import 'package:cliptopia/constants/typedefs.dart'; import 'package:cliptopia/core/database/database.dart'; import 'package:cliptopia/core/services/injector.dart'; +import 'package:cliptopia/core/storage/storage.dart'; import 'package:cliptopia/widgets/app_close_button.dart'; import 'package:cliptopia/widgets/topbar/top_bar.dart'; import 'package:flutter/material.dart'; @@ -80,6 +81,8 @@ class _EmojisInitializedStateViewState AppAnimations.emojis, width: 200, fit: BoxFit.fitWidth, + animate: Storage.get(StorageKeys.animationEnabledKey, + fallback: StorageValues.defaultAnimationEnabledKey), ), ), ), diff --git a/lib/app/emojis/presentation/states/emojis_loading_state_view.dart b/lib/app/emojis/presentation/states/emojis_loading_state_view.dart index 10dc06b..047d0af 100644 --- a/lib/app/emojis/presentation/states/emojis_loading_state_view.dart +++ b/lib/app/emojis/presentation/states/emojis_loading_state_view.dart @@ -1,5 +1,6 @@ import 'package:cliptopia/config/assets/app_animations.dart'; import 'package:cliptopia/config/themes/app_theme.dart'; +import 'package:cliptopia/core/storage/storage.dart'; import 'package:cliptopia/widgets/app_close_button.dart'; import 'package:cliptopia/widgets/topbar/top_bar.dart'; import 'package:flutter/material.dart'; @@ -35,6 +36,8 @@ class EmojisLoadingStateView extends StatelessWidget { AppAnimations.emojis, width: 200, reverse: true, + animate: Storage.get(StorageKeys.animationEnabledKey, + fallback: StorageValues.defaultAnimationEnabledKey), ), ), const Align( diff --git a/lib/app/notes/presentation/states/notes_empty_state_view.dart b/lib/app/notes/presentation/states/notes_empty_state_view.dart index 99fc5a9..2045f5b 100644 --- a/lib/app/notes/presentation/states/notes_empty_state_view.dart +++ b/lib/app/notes/presentation/states/notes_empty_state_view.dart @@ -7,6 +7,7 @@ import 'package:cliptopia/constants/typedefs.dart'; import 'package:cliptopia/core/database/database.dart'; import 'package:cliptopia/core/search_engine.dart'; import 'package:cliptopia/core/services/injector.dart'; +import 'package:cliptopia/core/storage/storage.dart'; import 'package:cliptopia/core/utils.dart'; import 'package:cliptopia/widgets/app_close_button.dart'; import 'package:cliptopia/widgets/topbar/backdrop_panel.dart'; @@ -126,6 +127,8 @@ class _NotesEmptyStateViewState extends State { AppAnimations.getEmptyAnimationOnCause(widget.cause), fit: BoxFit.fitWidth, repeat: widget.cause != EmptyCause.noNoteElements, + animate: Storage.get(StorageKeys.animationEnabledKey, + fallback: StorageValues.defaultAnimationEnabledKey), ), ), ), diff --git a/lib/app/powermode/presentation/dialogs/daemon_manager_dialog.dart b/lib/app/powermode/presentation/dialogs/daemon_manager_dialog.dart index 52fd071..cad4704 100644 --- a/lib/app/powermode/presentation/dialogs/daemon_manager_dialog.dart +++ b/lib/app/powermode/presentation/dialogs/daemon_manager_dialog.dart @@ -36,6 +36,8 @@ class _DaemonManagerDialogState extends State { Lottie.asset( AppAnimations.downloading, width: 300, + animate: Storage.get(StorageKeys.animationEnabledKey, + fallback: StorageValues.defaultAnimationEnabledKey), ), Text( "Downloading Cliptopia Daemon", @@ -181,6 +183,8 @@ class _DaemonManagerDialogState extends State { Lottie.asset( AppAnimations.connection, width: 250, + animate: Storage.get(StorageKeys.animationEnabledKey, + fallback: StorageValues.defaultAnimationEnabledKey), ), Text( "Please integrate the Cliptopia Daemon", @@ -224,6 +228,8 @@ class _DaemonManagerDialogState extends State { AppAnimations.sleeping, width: 250, filterQuality: FilterQuality.high, + animate: Storage.get(StorageKeys.animationEnabledKey, + fallback: StorageValues.defaultAnimationEnabledKey), ), Text( "Looks like your cliptopia-daemon is not running", diff --git a/lib/app/powermode/presentation/panels/collections/command_panel.dart b/lib/app/powermode/presentation/panels/collections/command_panel.dart index bde4679..43a7a73 100644 --- a/lib/app/powermode/presentation/panels/collections/command_panel.dart +++ b/lib/app/powermode/presentation/panels/collections/command_panel.dart @@ -126,6 +126,8 @@ class _CommandPanelState extends State { child: Lottie.asset( AppAnimations.commandsEmpty, width: 200, + animate: Storage.get(StorageKeys.animationEnabledKey, + fallback: StorageValues.defaultAnimationEnabledKey), ), ), Text( diff --git a/lib/app/powermode/presentation/panels/collections/file_panel.dart b/lib/app/powermode/presentation/panels/collections/file_panel.dart index d319b11..42cadf3 100644 --- a/lib/app/powermode/presentation/panels/collections/file_panel.dart +++ b/lib/app/powermode/presentation/panels/collections/file_panel.dart @@ -1,10 +1,10 @@ import 'package:cliptopia/app/powermode/domain/entity/typedefs.dart'; import 'package:cliptopia/app/powermode/presentation/panels/widgets/file_card.dart'; -import 'package:cliptopia/core/powermode/power_utils.dart'; import 'package:cliptopia/config/assets/app_animations.dart'; import 'package:cliptopia/config/assets/app_icons.dart'; import 'package:cliptopia/config/themes/app_theme.dart'; import 'package:cliptopia/core/powermode/power_data_handler.dart'; +import 'package:cliptopia/core/powermode/power_utils.dart'; import 'package:cliptopia/core/storage/storage.dart'; import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; @@ -128,6 +128,8 @@ class _FilePanelState extends State { AppAnimations.filesEmpty, width: 200, repeat: false, + animate: Storage.get(StorageKeys.animationEnabledKey, + fallback: StorageValues.defaultAnimationEnabledKey), ), ), Text( diff --git a/lib/app/powermode/presentation/panels/collections/text_panel.dart b/lib/app/powermode/presentation/panels/collections/text_panel.dart index 7be002b..dd32aa7 100644 --- a/lib/app/powermode/presentation/panels/collections/text_panel.dart +++ b/lib/app/powermode/presentation/panels/collections/text_panel.dart @@ -1,10 +1,10 @@ import 'package:cliptopia/app/powermode/domain/entity/typedefs.dart'; -import 'package:cliptopia/core/powermode/power_utils.dart'; import 'package:cliptopia/app/powermode/presentation/panels/widgets/text_card.dart'; import 'package:cliptopia/config/assets/app_animations.dart'; import 'package:cliptopia/config/assets/app_icons.dart'; import 'package:cliptopia/config/themes/app_theme.dart'; import 'package:cliptopia/core/powermode/power_data_handler.dart'; +import 'package:cliptopia/core/powermode/power_utils.dart'; import 'package:cliptopia/core/storage/storage.dart'; import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; @@ -117,6 +117,8 @@ class _TextPanelState extends State { AppAnimations.notesEmpty, width: 200, repeat: false, + animate: Storage.get(StorageKeys.animationEnabledKey, + fallback: StorageValues.defaultAnimationEnabledKey), ), ), Text( diff --git a/lib/app/powermode/presentation/panels/images_panel.dart b/lib/app/powermode/presentation/panels/images_panel.dart index d2be0bd..e17e35f 100644 --- a/lib/app/powermode/presentation/panels/images_panel.dart +++ b/lib/app/powermode/presentation/panels/images_panel.dart @@ -171,6 +171,8 @@ class _ImagesPanelState extends State { AppAnimations.imagesEmpty, width: 175, repeat: false, + animate: Storage.get(StorageKeys.animationEnabledKey, + fallback: StorageValues.defaultAnimationEnabledKey), ), ), ], diff --git a/lib/app/powermode/presentation/panels/search_panel.dart b/lib/app/powermode/presentation/panels/search_panel.dart index 2ea3d3e..b844e46 100644 --- a/lib/app/powermode/presentation/panels/search_panel.dart +++ b/lib/app/powermode/presentation/panels/search_panel.dart @@ -2,7 +2,6 @@ import 'package:cliptopia/app/powermode/presentation/dialogs/daemon_manager_dial import 'package:cliptopia/app/powermode/presentation/dialogs/power_mode_settings.dart'; import 'package:cliptopia/app/powermode/presentation/panels/widgets/date_filter.dart'; import 'package:cliptopia/app/powermode/presentation/panels/widgets/power_search_field.dart'; -import 'package:cliptopia/core/powermode/power_utils.dart'; import 'package:cliptopia/config/assets/app_icons.dart'; import 'package:cliptopia/config/themes/app_theme.dart'; import 'package:cliptopia/core/powermode/power_data_handler.dart'; diff --git a/lib/app/powermode/presentation/panels/widgets/date_filter.dart b/lib/app/powermode/presentation/panels/widgets/date_filter.dart index 8815e9e..96d69e0 100644 --- a/lib/app/powermode/presentation/panels/widgets/date_filter.dart +++ b/lib/app/powermode/presentation/panels/widgets/date_filter.dart @@ -1,6 +1,5 @@ import 'package:cliptopia/app/filter/presentation/widgets/filter_dialog_button.dart'; import 'package:cliptopia/app/powermode/domain/entity/typedefs.dart'; -import 'package:cliptopia/core/powermode/power_utils.dart'; import 'package:cliptopia/config/assets/app_icons.dart'; import 'package:cliptopia/config/themes/app_theme.dart'; import 'package:cliptopia/constants/typedefs.dart'; diff --git a/lib/app/settings/presentation/states/settings_initialized_state_view.dart b/lib/app/settings/presentation/states/settings_initialized_state_view.dart index 48b417b..493b22c 100644 --- a/lib/app/settings/presentation/states/settings_initialized_state_view.dart +++ b/lib/app/settings/presentation/states/settings_initialized_state_view.dart @@ -256,12 +256,13 @@ class _SettingsInitializedStateViewState ), ), Option( - title: "Enable animations", - description: "Toggle this to enable or disable animations", + title: "App Animations", + description: + "Toggle animations for motion sensitive eyes, or other problems", active: Storage.get(StorageKeys.animationEnabledKey, fallback: StorageValues.defaultAnimationEnabledKey) == StorageValues.defaultAnimationEnabledKey, - icon: AppIcons.animation, + icon: AppIcons.animations, onChanged: (enabled) { setState(() { Storage.set(StorageKeys.animationEnabledKey, enabled); @@ -607,7 +608,12 @@ class _SettingsInitializedStateViewState SizedBox( width: MediaQuery.of(context).size.width, ), - Lottie.asset(AppAnimations.shield, width: 300), + Lottie.asset( + AppAnimations.shield, + width: 300, + animate: Storage.get(StorageKeys.animationEnabledKey, + fallback: StorageValues.defaultAnimationEnabledKey), + ), Text( "No content filter detected, looks like you also removed the default ones\nPlease not that any password or key you copy will be watched", textAlign: TextAlign.center, diff --git a/lib/config/assets/app_icons.dart b/lib/config/assets/app_icons.dart index a8c7185..95ff645 100644 --- a/lib/config/assets/app_icons.dart +++ b/lib/config/assets/app_icons.dart @@ -47,6 +47,7 @@ class AppIcons { static const correct = 'assets/icons/settings/correct.png'; static const incorrect = 'assets/icons/settings/incorrect.png'; static const theme = 'assets/icons/settings/theme.png'; + static const animations = 'assets/icons/settings/animations.png'; // Power Mode static const copyLight = 'assets/icons/power-mode/copy-light.png'; @@ -74,5 +75,4 @@ class AppIcons { static const cache = 'assets/icons/cache.png'; static const magic = 'assets/icons/magic.png'; static const appIcon = 'assets/icons/app-icon.png'; - static const animation = 'assets/icons/app-icon.png'; // TODO } diff --git a/lib/core/search_engine.dart b/lib/core/search_engine.dart index 1b5e32a..ae58843 100644 --- a/lib/core/search_engine.dart +++ b/lib/core/search_engine.dart @@ -1,5 +1,4 @@ import 'package:cliptopia/constants/typedefs.dart'; -import 'package:cliptopia/core/logger.dart'; class SearchEngine { String _searchText = ""; diff --git a/lib/core/storage/storage.dart b/lib/core/storage/storage.dart index 3a07d6c..5cedd57 100644 --- a/lib/core/storage/storage.dart +++ b/lib/core/storage/storage.dart @@ -116,6 +116,7 @@ class StorageValues { static const defaultViewMode = 'default'; static const backgroundViewMode = 'background'; - static const defaultCliptopiaPath = 'cliptopia'; + static const defaultCliptopiaPath = + '/usr/bin/cliptopia'; // manual installer default static const defaultAnimationEnabledKey = true; } diff --git a/lib/widgets/topbar/power_mode_button.dart b/lib/widgets/topbar/power_mode_button.dart index 64f94ec..4731ec4 100644 --- a/lib/widgets/topbar/power_mode_button.dart +++ b/lib/widgets/topbar/power_mode_button.dart @@ -3,9 +3,9 @@ import 'dart:io'; import 'package:cliptopia/config/assets/app_icons.dart'; import 'package:cliptopia/config/themes/app_theme.dart'; import 'package:cliptopia/core/app_session.dart'; -import 'package:cliptopia/core/storage/storage.dart'; import 'package:cliptopia/core/powermode/power_utils.dart'; import 'package:cliptopia/core/services/injector.dart'; +import 'package:cliptopia/core/storage/storage.dart'; import 'package:flutter/material.dart'; class PowerModeButton extends StatefulWidget { @@ -39,11 +39,20 @@ class _PowerModeButtonState extends State { fallback: StorageValues.defaultCliptopiaPath); if (await FileSystemEntity.type(cliptopiaPath) == FileSystemEntityType.notFound) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( + void notify() { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( content: Text( - 'The Cliptopia executable was not found at $cliptopiaPath. You might be running Cliptopia in development mode.')), - ); + 'The Cliptopia executable was not found at $cliptopiaPath.\nYou might be running Cliptopia in development mode.' + '\nIf not installed from source, you should create a link to the executable (`/usr/bin/cliptopia`)', + style: AppTheme.fontSize(14).withColor(AppTheme.background), + ), + showCloseIcon: true, + ), + ); + } + + notify(); } else { await Process.start(cliptopiaPath, ['--silent', '--power']); Injector.find().endSession(); diff --git a/linux/my_application.cc b/linux/my_application.cc index f50345f..7a1cf24 100644 --- a/linux/my_application.cc +++ b/linux/my_application.cc @@ -66,12 +66,11 @@ static void my_application_activate(GApplication* application) { gtk_window_set_resizable(window, FALSE); if (global_argv != NULL && - hasFlag("--silent", length, global_argv) && - hasFlag("--power", length, global_argv)) { - GdkDisplay* display = gdk_display_get_default(); - GdkMonitor* monitor = gdk_display_get_primary_monitor(display); + hasFlag("--silent", length, global_argv) && + hasFlag("--power", length, global_argv)) { + GdkScreen* screen = gtk_window_get_screen(window); GdkRectangle monitor_rect; - gdk_monitor_get_geometry(monitor, &monitor_rect); + gdk_screen_get_monitor_geometry(screen, 0, &monitor_rect); gtk_window_set_default_size(window, monitor_rect.width, monitor_rect.height); } else { gtk_window_set_default_size(window, 750, 650);