2014-02-10 02:10:30 +01:00
/*************************************************************************/
/* os_android.h */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
2017-08-27 14:16:55 +02:00
/* https://godotengine.org */
2014-02-10 02:10:30 +01:00
/*************************************************************************/
2022-01-13 09:45:09 +01:00
/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
2014-02-10 02:10:30 +01:00
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
2018-01-05 00:50:27 +01:00
2014-02-10 02:10:30 +01:00
# ifndef OS_ANDROID_H
# define OS_ANDROID_H
2017-03-05 16:44:50 +01:00
# include "audio_driver_opensl.h"
2018-09-11 18:13:45 +02:00
# include "core/os/main_loop.h"
2014-02-10 02:10:30 +01:00
# include "drivers/unix/os_unix.h"
2017-03-05 16:44:50 +01:00
# include "main/input_default.h"
2017-01-16 19:19:45 +01:00
# include "servers/audio_server.h"
2014-02-10 02:10:30 +01:00
# include "servers/visual/rasterizer.h"
2015-09-04 04:24:55 +02:00
2019-03-13 13:51:55 +01:00
class GodotJavaWrapper ;
class GodotIOJavaWrapper ;
2014-03-14 02:57:24 +01:00
2014-02-10 02:10:30 +01:00
class OS_Android : public OS_Unix {
2022-10-05 19:43:36 +02:00
// https://developer.android.com/reference/android/view/PointerIcon
// mapping between Godot's cursor shape to Android's'
int android_cursors [ CURSOR_MAX ] = {
1000 , //CURSOR_ARROW
1008 , //CURSOR_IBEAM
1002 , //CURSOR_POINTIN
1007 , //CURSOR_CROSS
1004 , //CURSOR_WAIT
1004 , //CURSOR_BUSY
1021 , //CURSOR_DRAG
1021 , //CURSOR_CAN_DRO
1000 , //CURSOR_FORBIDD (no corresponding icon in Android's icon so fallback to default)
1015 , //CURSOR_VSIZE
1014 , //CURSOR_HSIZE
1017 , //CURSOR_BDIAGSI
1016 , //CURSOR_FDIAGSI
1020 , //CURSOR_MOVE
1015 , //CURSOR_VSPLIT
1014 , //CURSOR_HSPLIT
1003 , //CURSOR_HELP
} ;
const int CURSOR_TYPE_NULL = 0 ;
MouseMode mouse_mode = MouseMode : : MOUSE_MODE_VISIBLE ;
CursorShape cursor_shape = CursorShape : : CURSOR_ARROW ;
2014-06-28 04:21:45 +02:00
bool use_apk_expansion ;
2021-09-24 14:07:44 +02:00
bool secondary_gl_available = false ;
2015-12-02 15:15:48 +01:00
2014-02-10 02:10:30 +01:00
VisualServer * visual_server ;
2014-12-02 18:02:41 +01:00
2016-07-02 16:48:02 +02:00
mutable String data_dir_cache ;
2021-02-22 22:54:12 +01:00
mutable String cache_dir_cache ;
2016-07-02 16:48:02 +02:00
2014-03-14 02:57:24 +01:00
AudioDriverOpenSL audio_driver_android ;
2022-05-30 23:13:49 +02:00
const char * gl_extensions = nullptr ;
2014-02-10 02:10:30 +01:00
InputDefault * input ;
VideoMode default_videomode ;
2022-05-30 23:13:49 +02:00
MainLoop * main_loop = nullptr ;
2014-02-10 02:10:30 +01:00
2019-03-13 13:51:55 +01:00
GodotJavaWrapper * godot_java ;
GodotIOJavaWrapper * godot_io_java ;
2018-07-19 23:58:15 +02:00
int video_driver_index ;
2016-07-23 13:15:55 +02:00
2021-08-07 02:10:28 +02:00
bool transparency_enabled = false ;
2014-02-10 02:10:30 +01:00
public :
2021-06-25 15:45:16 +02:00
static const char * ANDROID_EXEC_PATH ;
2022-05-23 14:02:12 +02:00
virtual bool tts_is_speaking ( ) const ;
virtual bool tts_is_paused ( ) const ;
virtual Array tts_get_voices ( ) const ;
virtual void tts_speak ( const String & p_text , const String & p_voice , int p_volume = 50 , float p_pitch = 1.f , float p_rate = 1.f , int p_utterance_id = 0 , bool p_interrupt = false ) ;
virtual void tts_pause ( ) ;
virtual void tts_resume ( ) ;
virtual void tts_stop ( ) ;
2018-09-13 03:38:39 +02:00
// functions used by main to initialize/deinitialize the OS
2014-02-10 02:10:30 +01:00
virtual int get_video_driver_count ( ) const ;
2017-03-05 16:44:50 +01:00
virtual const char * get_video_driver_name ( int p_driver ) const ;
2014-02-10 02:10:30 +01:00
virtual int get_audio_driver_count ( ) const ;
2017-03-05 16:44:50 +01:00
virtual const char * get_audio_driver_name ( int p_driver ) const ;
2014-02-10 02:10:30 +01:00
2018-07-19 23:58:15 +02:00
virtual int get_current_video_driver ( ) const ;
2014-02-10 02:10:30 +01:00
virtual void initialize_core ( ) ;
2018-01-03 18:26:44 +01:00
virtual Error initialize ( const VideoMode & p_desired , int p_video_driver , int p_audio_driver ) ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
virtual void set_main_loop ( MainLoop * p_main_loop ) ;
2014-02-10 02:10:30 +01:00
virtual void delete_main_loop ( ) ;
virtual void finalize ( ) ;
typedef int64_t ProcessID ;
2019-03-13 13:51:55 +01:00
GodotJavaWrapper * get_godot_java ( ) ;
GodotIOJavaWrapper * get_godot_io_java ( ) ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
virtual void alert ( const String & p_alert , const String & p_title = " ALERT! " ) ;
2019-03-05 03:06:37 +01:00
virtual bool request_permission ( const String & p_name ) ;
2019-10-06 20:17:44 +02:00
virtual bool request_permissions ( ) ;
virtual Vector < String > get_granted_permissions ( ) const ;
2014-02-10 02:10:30 +01:00
2018-01-13 14:40:20 +01:00
virtual Error open_dynamic_library ( const String p_path , void * & p_library_handle , bool p_also_set_library_path = false ) ;
2017-03-29 17:29:38 +02:00
virtual Point2 get_mouse_position ( ) const ;
2014-02-10 02:10:30 +01:00
virtual int get_mouse_button_state ( ) const ;
2017-03-05 16:44:50 +01:00
virtual void set_window_title ( const String & p_title ) ;
2014-02-10 02:10:30 +01:00
2017-03-05 16:44:50 +01:00
virtual void set_video_mode ( const VideoMode & p_video_mode , int p_screen = 0 ) ;
virtual VideoMode get_video_mode ( int p_screen = 0 ) const ;
virtual void get_fullscreen_mode_list ( List < VideoMode > * p_list , int p_screen = 0 ) const ;
2016-03-09 00:00:52 +01:00
2015-11-27 15:40:04 +01:00
virtual void set_keep_screen_on ( bool p_enabled ) ;
2016-03-09 00:00:52 +01:00
2015-03-23 15:31:03 +01:00
virtual Size2 get_window_size ( ) const ;
2020-10-26 20:07:54 +01:00
virtual Rect2 get_window_safe_area ( ) const ;
2022-04-24 19:04:05 +02:00
virtual Array get_display_cutouts ( ) const ;
2015-03-23 15:31:03 +01:00
2019-05-20 19:36:24 +02:00
virtual String get_name ( ) const ;
2014-02-10 02:10:30 +01:00
virtual MainLoop * get_main_loop ( ) const ;
virtual bool can_draw ( ) const ;
void main_loop_begin ( ) ;
2022-03-28 02:55:52 +02:00
bool main_loop_iterate ( bool * r_should_swap_buffers = nullptr ) ;
2014-02-10 02:10:30 +01:00
void main_loop_end ( ) ;
void main_loop_focusout ( ) ;
void main_loop_focusin ( ) ;
virtual bool has_touchscreen_ui_hint ( ) const ;
virtual bool has_virtual_keyboard ( ) const ;
2022-07-07 20:22:28 +02:00
virtual void show_virtual_keyboard ( const String & p_existing_text , const Rect2 & p_screen_rect = Rect2 ( ) , VirtualKeyboardType p_type = KEYBOARD_TYPE_DEFAULT , int p_max_input_length = - 1 , int p_cursor_start = - 1 , int p_cursor_end = - 1 ) ;
2014-02-10 02:10:30 +01:00
virtual void hide_virtual_keyboard ( ) ;
2017-10-04 10:39:31 +02:00
virtual int get_virtual_keyboard_height ( ) const ;
2014-02-10 02:10:30 +01:00
2022-10-05 19:43:36 +02:00
virtual void set_cursor_shape ( CursorShape p_shape ) ;
virtual CursorShape get_cursor_shape ( ) const ;
virtual void set_mouse_mode ( MouseMode p_mode ) ;
virtual MouseMode get_mouse_mode ( ) const ;
2017-03-05 16:44:50 +01:00
void set_opengl_extensions ( const char * p_gl_extensions ) ;
2014-02-10 02:10:30 +01:00
void set_display_size ( Size2 p_size ) ;
2021-09-24 14:07:44 +02:00
void set_offscreen_gl_available ( bool p_available ) ;
virtual bool is_offscreen_gl_available ( ) const ;
virtual void set_offscreen_gl_current ( bool p_current ) ;
2014-02-10 02:10:30 +01:00
virtual void set_screen_orientation ( ScreenOrientation p_orientation ) ;
2020-10-23 00:22:45 +02:00
virtual ScreenOrientation get_screen_orientation ( ) const ;
2014-02-10 02:10:30 +01:00
virtual Error shell_open ( String p_uri ) ;
2021-06-25 15:45:16 +02:00
virtual String get_executable_path ( ) const ;
2017-11-17 15:25:22 +01:00
virtual String get_user_data_dir ( ) const ;
2021-07-11 03:39:31 +02:00
virtual String get_data_path ( ) const ;
virtual String get_cache_path ( ) const ;
2014-02-10 02:10:30 +01:00
virtual String get_resource_dir ( ) const ;
virtual String get_locale ( ) const ;
2018-04-03 17:58:17 +02:00
virtual void set_clipboard ( const String & p_text ) ;
virtual String get_clipboard ( ) const ;
2022-01-19 13:06:44 +01:00
virtual bool has_clipboard ( ) const ;
2014-02-10 02:10:30 +01:00
virtual String get_model_name ( ) const ;
2017-03-05 16:44:50 +01:00
virtual int get_screen_dpi ( int p_screen = 0 ) const ;
2022-04-04 11:22:51 +02:00
virtual float get_screen_scale ( int p_screen = - 1 ) const ;
virtual float get_screen_max_scale ( ) const ;
2022-03-06 00:34:56 +01:00
virtual float get_screen_refresh_rate ( int p_screen = 0 ) const ;
2014-02-10 02:10:30 +01:00
2021-08-07 02:10:28 +02:00
virtual bool get_window_per_pixel_transparency_enabled ( ) const { return transparency_enabled ; }
virtual void set_window_per_pixel_transparency_enabled ( bool p_enabled ) { ERR_FAIL_MSG ( " Setting per-pixel transparency is not supported at runtime, please set it in project settings instead. " ) ; }
2017-08-07 12:17:31 +02:00
virtual String get_unique_id ( ) const ;
2014-02-10 02:10:30 +01:00
2021-07-11 03:39:31 +02:00
virtual String get_system_dir ( SystemDir p_dir , bool p_shared_storage = true ) const ;
2014-12-02 18:02:41 +01:00
2022-07-05 10:50:26 +02:00
virtual Error move_to_trash ( const String & p_path ) ;
2017-03-05 16:44:50 +01:00
void process_accelerometer ( const Vector3 & p_accelerometer ) ;
2017-11-10 23:42:23 +01:00
void process_gravity ( const Vector3 & p_gravity ) ;
2017-03-05 16:44:50 +01:00
void process_magnetometer ( const Vector3 & p_magnetometer ) ;
void process_gyroscope ( const Vector3 & p_gyroscope ) ;
2014-03-14 02:57:24 +01:00
2016-01-24 05:11:59 +01:00
virtual bool is_joy_known ( int p_device ) ;
virtual String get_joy_guid ( int p_device ) const ;
2019-08-17 17:27:29 +02:00
void vibrate_handheld ( int p_duration_ms ) ;
2016-01-24 05:11:59 +01:00
2021-06-25 15:45:16 +02:00
virtual String get_config_path ( ) const ;
virtual Error execute ( const String & p_path , const List < String > & p_arguments , bool p_blocking = true , ProcessID * r_child_id = nullptr , String * r_pipe = nullptr , int * r_exitcode = nullptr , bool read_stderr = false , Mutex * p_pipe_mutex = nullptr , bool p_open_console = false ) ;
2017-07-19 22:00:46 +02:00
virtual bool _check_internal_feature_support ( const String & p_feature ) ;
2019-03-13 13:51:55 +01:00
OS_Android ( GodotJavaWrapper * p_godot_java , GodotIOJavaWrapper * p_godot_io_java , bool p_use_apk_expansion ) ;
2014-02-10 02:10:30 +01:00
~ OS_Android ( ) ;
2021-06-25 15:45:16 +02:00
private :
Error create_instance ( const List < String > & p_arguments , ProcessID * r_child_id ) ;
2014-02-10 02:10:30 +01:00
} ;
2022-05-30 23:13:49 +02:00
# endif // OS_ANDROID_H