Add edit feature enable/disable setting

- Added checkbox in Settings screen to enable/disable edit feature
- Setting stored in app_config.json as 'edit_feature_enabled'
- Edit workflow now validates: player setting, media type, server permission, card auth
- Shows appropriate error message when edit is blocked at any validation step
- Defaults to enabled (true) if not set
- All conditions must be met for edit interface to open
This commit is contained in:
2025-12-08 14:30:12 +02:00
parent af1e671c7f
commit 9d32f43ac7
3 changed files with 56 additions and 6 deletions

View File

@@ -5,5 +5,6 @@
"quickconnect_key": "8887779",
"orientation": "Landscape",
"touch": "True",
"max_resolution": "1920x1080"
"max_resolution": "1920x1080",
"edit_feature_enabled": true
}

View File

@@ -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")

View File

@@ -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