diff --git a/config/app_config.json b/config/app_config.json index 0dcf525..22e520b 100644 --- a/config/app_config.json +++ b/config/app_config.json @@ -5,5 +5,6 @@ "quickconnect_key": "8887779", "orientation": "Landscape", "touch": "True", - "max_resolution": "1920x1080" + "max_resolution": "1920x1080", + "edit_feature_enabled": true } \ No newline at end of file diff --git a/src/main.py b/src/main.py index 2ebdd5b..abfdec1 100644 --- a/src/main.py +++ b/src/main.py @@ -1078,6 +1078,7 @@ class SettingsPopup(Popup): self.ids.orientation_input.text = self.player.config.get('orientation', 'Landscape') self.ids.touch_input.text = self.player.config.get('touch', 'True') self.ids.resolution_input.text = self.player.config.get('max_resolution', 'auto') + self.ids.edit_enabled_checkbox.active = self.player.config.get('edit_feature_enabled', True) # Update status info self.ids.playlist_info.text = f'Playlist Version: {self.player.playlist_version}' @@ -1118,6 +1119,12 @@ class SettingsPopup(Popup): Window.remove_widget(self.keyboard_widget) self.keyboard_widget = None + def on_edit_feature_toggle(self, is_active): + """Handle edit feature checkbox toggle""" + Logger.info(f"SettingsPopup: Edit feature {'enabled' if is_active else 'disabled'}") + # Update config immediately so it's available + self.player.config['edit_feature_enabled'] = is_active + def on_popup_dismiss(self, *args): """Handle popup dismissal - resume playback and restart cursor hide timer""" # Hide and remove keyboard @@ -1224,6 +1231,7 @@ class SettingsPopup(Popup): self.player.config['orientation'] = self.ids.orientation_input.text self.player.config['touch'] = self.ids.touch_input.text self.player.config['max_resolution'] = self.ids.resolution_input.text + self.player.config['edit_feature_enabled'] = self.ids.edit_enabled_checkbox.active # Save to file self.player.save_config() @@ -1838,12 +1846,23 @@ class SignagePlayer(Widget): Show edit interface for current image Workflow: - 1. Validate media type (must be image) - 2. Check edit_on_player permission from server - 3. Prompt for card swipe (5 second timeout) - 4. Open edit interface with card data stored - 5. When saved, card data is included in metadata and sent to server + 1. Check if edit feature is enabled in settings + 2. Validate media type (must be image) + 3. Check edit_on_player permission from server + 4. Prompt for card swipe (5 second timeout) + 5. Open edit interface with card data stored + 6. When saved, card data is included in metadata and sent to server """ + # Check 0: Verify edit feature is enabled in player settings + edit_feature_enabled = self.config.get('edit_feature_enabled', True) + if not edit_feature_enabled: + Logger.warning("SignagePlayer: Edit feature is disabled in settings") + # Show error message briefly + self.ids.status_label.text = 'Edit feature disabled - Enable in settings' + self.ids.status_label.opacity = 1 + Clock.schedule_once(lambda dt: setattr(self.ids.status_label, 'opacity', 0), 2) + return + # Check if current media is an image if not self.playlist or self.current_index >= len(self.playlist): Logger.warning("SignagePlayer: No media to edit") diff --git a/src/signage_player.kv b/src/signage_player.kv index d21bee0..f100738 100644 --- a/src/signage_player.kv +++ b/src/signage_player.kv @@ -493,6 +493,36 @@ write_tab: False on_touch_down: root.on_input_touch(self, args[1]) if self.collide_point(*args[1].pos) else None + # Edit Feature Enable/Disable + BoxLayout: + orientation: 'horizontal' + size_hint_y: None + height: dp(40) + spacing: dp(10) + + Label: + text: 'Enable Edit Feature:' + size_hint_x: 0.3 + text_size: self.size + halign: 'left' + valign: 'middle' + + CheckBox: + id: edit_enabled_checkbox + size_hint_x: None + width: dp(40) + active: True + on_active: root.on_edit_feature_toggle(self.active) + + Label: + text: '(Allow editing images on this player)' + size_hint_x: 0.4 + font_size: sp(12) + text_size: self.size + halign: 'left' + valign: 'middle' + color: 0.7, 0.7, 0.7, 1 + Widget: size_hint_y: 0.05