diff --git a/export_presets.cfg b/export_presets.cfg index dacdae4..ebd6ac5 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -136,7 +136,7 @@ permissions/location_hardware=false permissions/manage_accounts=false permissions/manage_app_tokens=false permissions/manage_documents=false -permissions/manage_external_storage=true +permissions/manage_external_storage=false permissions/master_clear=false permissions/media_content_control=false permissions/modify_audio_settings=false @@ -150,13 +150,13 @@ permissions/process_outgoing_calls=false permissions/read_calendar=false permissions/read_call_log=false permissions/read_contacts=false -permissions/read_external_storage=false +permissions/read_external_storage=true permissions/read_frame_buffer=false permissions/read_history_bookmarks=false permissions/read_input_state=false permissions/read_logs=false permissions/read_media_audio=false -permissions/read_media_images=false +permissions/read_media_images=true permissions/read_media_video=false permissions/read_media_visual_user_selected=false permissions/read_phone_state=false @@ -205,7 +205,7 @@ permissions/write_apn_settings=false permissions/write_calendar=false permissions/write_call_log=false permissions/write_contacts=false -permissions/write_external_storage=false +permissions/write_external_storage=true permissions/write_gservices=false permissions/write_history_bookmarks=false permissions/write_profile=false @@ -356,7 +356,7 @@ permissions/location_hardware=false permissions/manage_accounts=false permissions/manage_app_tokens=false permissions/manage_documents=false -permissions/manage_external_storage=true +permissions/manage_external_storage=false permissions/master_clear=false permissions/media_content_control=false permissions/modify_audio_settings=false @@ -370,13 +370,13 @@ permissions/process_outgoing_calls=false permissions/read_calendar=false permissions/read_call_log=false permissions/read_contacts=false -permissions/read_external_storage=false +permissions/read_external_storage=true permissions/read_frame_buffer=false permissions/read_history_bookmarks=false permissions/read_input_state=false permissions/read_logs=false permissions/read_media_audio=false -permissions/read_media_images=false +permissions/read_media_images=true permissions/read_media_video=false permissions/read_media_visual_user_selected=false permissions/read_phone_state=false @@ -425,7 +425,7 @@ permissions/write_apn_settings=false permissions/write_calendar=false permissions/write_call_log=false permissions/write_contacts=false -permissions/write_external_storage=false +permissions/write_external_storage=true permissions/write_gservices=false permissions/write_history_bookmarks=false permissions/write_profile=false diff --git a/project.godot b/project.godot index 4451062..d28280b 100644 --- a/project.godot +++ b/project.godot @@ -52,7 +52,6 @@ import/fbx/enabled=false [gui] timers/tooltip_delay_sec=0.4 -theme/custom="uid://dreumigwm5s8q" [input] diff --git a/src/autoload/Configs.gd b/src/autoload/Configs.gd index 14f28c8..0aad1fc 100644 --- a/src/autoload/Configs.gd +++ b/src/autoload/Configs.gd @@ -36,6 +36,8 @@ signal tab_selected(index: int) @warning_ignore("unused_signal") signal layout_changed +var current_sdk: int = -1 + const savedata_path = "user://savedata.tres" var savedata: SaveData: set(new_value): diff --git a/src/config_classes/SaveData.gd b/src/config_classes/SaveData.gd index 8000c6f..ad27624 100644 --- a/src/config_classes/SaveData.gd +++ b/src/config_classes/SaveData.gd @@ -867,6 +867,6 @@ func get_active_tab_dir() -> String: func get_last_dir() -> String: _validate_recent_dirs() if _recent_dirs.is_empty() or not DirAccess.dir_exists_absolute(_recent_dirs[0]): - return OS.get_system_dir(OS.SYSTEM_DIR_PICTURES) + return OS.get_system_dir(OS.SYSTEM_DIR_DOCUMENTS) else: return _recent_dirs[0] diff --git a/src/config_classes/TabData.gd b/src/config_classes/TabData.gd index de58faf..42efcec 100644 --- a/src/config_classes/TabData.gd +++ b/src/config_classes/TabData.gd @@ -74,8 +74,14 @@ func _save_svg_text() -> void: func save_to_bound_path() -> void: if Configs.savedata.get_active_tab() != self: return - FileAccess.open(svg_file_path, FileAccess.WRITE).store_string(State.get_export_text()) - queue_sync() + var f := FileAccess.open(svg_file_path, FileAccess.WRITE) + if f != null: + f.store_string(State.get_export_text()) + queue_sync() + else: + # Failed to save to the bound file path. + # Opening export dialog to save and bind a new path. + FileUtils.open_export_dialog(ImageExportData.new(), queue_sync) func setup_svg_text(new_text: String, fully_load := true) -> void: _svg_text = new_text diff --git a/src/ui_parts/editor_scene.gd b/src/ui_parts/editor_scene.gd index 1a617c4..b34bae9 100644 --- a/src/ui_parts/editor_scene.gd +++ b/src/ui_parts/editor_scene.gd @@ -12,6 +12,8 @@ func _ready() -> void: Configs.layout_changed.connect(update_layout) update_layout() update_theme() + var version = JavaClassWrapper.wrap("android.os.Build$VERSION") + if version: Configs.current_sdk = version.SDK_INT func update_theme() -> void: var stylebox := StyleBoxFlat.new() diff --git a/src/utils/FileUtils.gd b/src/utils/FileUtils.gd index 3b33f4a..9047ab8 100644 --- a/src/utils/FileUtils.gd +++ b/src/utils/FileUtils.gd @@ -95,8 +95,6 @@ static func open_export_dialog(export_data: ImageExportData, final_callback := C export_dialog.files_selected.connect(non_native_callback) static func open_xml_export_dialog(xml: String, file_name: String) -> void: - if not OS.request_permissions(): - return if OS.has_feature("web"): _web_save(xml.to_utf8_buffer(), "application/xml") else: @@ -120,6 +118,9 @@ static func open_xml_export_dialog(xml: String, file_name: String) -> void: func(paths: PackedStringArray) -> void: _finish_xml_export(paths[0], xml)) static func _finish_export(file_path: String, export_data: ImageExportData) -> void: + if not (file_path.contains("/Documents/") or file_path.contains("/Download/")): + OS.alert("Saving is only allowed in the Documents or Download directories.", "Save Failed") + return if file_path.get_extension().is_empty(): file_path += "." + export_data.format @@ -181,8 +182,13 @@ static func open_xml_import_dialog(completion_callback: Callable) -> void: # On web, the completion callback can't use the full file path. static func _open_import_dialog(extensions: PackedStringArray, completion_callback: Callable, multi_select := false) -> void: - if not OS.request_permissions(): + var permission := "android.permission.READ_MEDIA_IMAGES" + if Configs.current_sdk < 33: + permission = "android.permission.READ_EXTERNAL_STORAGE" + + if not OS.request_permission(permission): return + var extensions_with_dots := PackedStringArray() for extension in extensions: extensions_with_dots.append("." + extension)