diff options
Diffstat (limited to 'platform/android/os_android.cpp')
| -rw-r--r-- | platform/android/os_android.cpp | 170 | 
1 files changed, 67 insertions, 103 deletions
diff --git a/platform/android/os_android.cpp b/platform/android/os_android.cpp index 3ba8468e0b..93d39859f2 100644 --- a/platform/android/os_android.cpp +++ b/platform/android/os_android.cpp @@ -46,6 +46,9 @@  #include <dlfcn.h> +#include "java_godot_io_wrapper.h" +#include "java_godot_wrapper.h" +  class AndroidLogger : public Logger {  public:  	virtual void logv(const char *p_format, va_list p_list, bool p_err) { @@ -118,20 +121,19 @@ int OS_Android::get_current_video_driver() const {  Error OS_Android::initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver) { -	bool use_gl3 = get_gl_version_code_func() >= 0x00030000; +	bool use_gl3 = godot_java->get_gles_version_code() >= 0x00030000;  	use_gl3 = use_gl3 && (GLOBAL_GET("rendering/quality/driver/driver_name") == "GLES3");  	bool gl_initialization_error = false;  	while (true) {  		if (use_gl3) {  			if (RasterizerGLES3::is_viable() == OK) { -				if (gfx_init_func) -					gfx_init_func(gfx_init_ud, false); +				godot_java->gfx_init(false);  				RasterizerGLES3::register_config();  				RasterizerGLES3::make_current();  				break;  			} else { -				if (GLOBAL_GET("rendering/quality/driver/driver_fallback") == "Best") { +				if (GLOBAL_GET("rendering/quality/driver/fallback_to_gles2")) {  					p_video_driver = VIDEO_DRIVER_GLES2;  					use_gl3 = false;  					continue; @@ -142,8 +144,7 @@ Error OS_Android::initialize(const VideoMode &p_desired, int p_video_driver, int  			}  		} else {  			if (RasterizerGLES2::is_viable() == OK) { -				if (gfx_init_func) -					gfx_init_func(gfx_init_ud, true); +				godot_java->gfx_init(true);  				RasterizerGLES2::register_config();  				RasterizerGLES2::make_current();  				break; @@ -195,11 +196,23 @@ void OS_Android::finalize() {  	memdelete(input);  } +GodotJavaWrapper *OS_Android::get_godot_java() { +	return godot_java; +} + +GodotIOJavaWrapper *OS_Android::get_godot_io_java() { +	return godot_io_java; +} +  void OS_Android::alert(const String &p_alert, const String &p_title) {  	//print("ALERT: %s\n", p_alert.utf8().get_data()); -	if (alert_func) -		alert_func(p_alert, p_title); +	godot_java->alert(p_alert, p_title); +} + +bool OS_Android::request_permission(const String &p_name) { + +	return godot_java->request_permission(p_name);  }  Error OS_Android::open_dynamic_library(const String p_path, void *&p_library_handle, bool p_also_set_library_path) { @@ -256,9 +269,7 @@ void OS_Android::get_fullscreen_mode_list(List<VideoMode> *p_list, int p_screen)  void OS_Android::set_keep_screen_on(bool p_enabled) {  	OS::set_keep_screen_on(p_enabled); -	if (set_keep_screen_on_func) { -		set_keep_screen_on_func(p_enabled); -	} +	godot_java->set_keep_screen_on(p_enabled);  }  Size2 OS_Android::get_window_size() const { @@ -281,14 +292,6 @@ bool OS_Android::can_draw() const {  	return true; //always?  } -void OS_Android::set_cursor_shape(CursorShape p_shape) { - -	//android really really really has no mouse.. how amazing.. -} - -void OS_Android::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, const Vector2 &p_hotspot) { -} -  void OS_Android::main_loop_begin() {  	if (main_loop) @@ -499,18 +502,16 @@ bool OS_Android::has_virtual_keyboard() const {  }  int OS_Android::get_virtual_keyboard_height() const { -	if (get_virtual_keyboard_height_func) { -		return get_virtual_keyboard_height_func(); -	} +	return godot_io_java->get_vk_height(); -	ERR_PRINT("Cannot obtain virtual keyboard height."); -	return 0; +	// ERR_PRINT("Cannot obtain virtual keyboard height."); +	// return 0;  }  void OS_Android::show_virtual_keyboard(const String &p_existing_text, const Rect2 &p_screen_rect) { -	if (show_virtual_keyboard_func) { -		show_virtual_keyboard_func(p_existing_text); +	if (godot_io_java->has_vk()) { +		godot_io_java->show_vk(p_existing_text);  	} else {  		ERR_PRINT("Virtual keyboard not available"); @@ -519,9 +520,9 @@ void OS_Android::show_virtual_keyboard(const String &p_existing_text, const Rect  void OS_Android::hide_virtual_keyboard() { -	if (hide_virtual_keyboard_func) { +	if (godot_io_java->has_vk()) { -		hide_virtual_keyboard_func(); +		godot_io_java->hide_vk();  	} else {  		ERR_PRINT("Virtual keyboard not available"); @@ -548,19 +549,9 @@ void OS_Android::set_display_size(Size2 p_size) {  	default_videomode.height = p_size.y;  } -void OS_Android::reload_gfx() { - -	if (gfx_init_func) -		gfx_init_func(gfx_init_ud, use_gl2); -	//if (rasterizer) -	//	rasterizer->reload_vram(); -} -  Error OS_Android::shell_open(String p_uri) { -	if (open_uri_func) -		return open_uri_func(p_uri) ? ERR_CANT_OPEN : OK; -	return ERR_UNAVAILABLE; +	return godot_io_java->open_uri(p_uri);  }  String OS_Android::get_resource_dir() const { @@ -570,23 +561,29 @@ String OS_Android::get_resource_dir() const {  String OS_Android::get_locale() const { -	if (get_locale_func) -		return get_locale_func(); +	String locale = godot_io_java->get_locale(); +	if (locale != "") { +		return locale; +	} +  	return OS_Unix::get_locale();  }  void OS_Android::set_clipboard(const String &p_text) { -	if (set_clipboard_func) { -		set_clipboard_func(p_text); +	// DO we really need the fallback to OS_Unix here?! +	if (godot_java->has_set_clipboard()) { +		godot_java->set_clipboard(p_text);  	} else {  		OS_Unix::set_clipboard(p_text);  	}  }  String OS_Android::get_clipboard() const { -	if (get_clipboard_func) { -		return get_clipboard_func(); + +	// DO we really need the fallback to OS_Unix here?! +	if (godot_java->has_get_clipboard()) { +		return godot_java->get_clipboard();  	}  	return OS_Unix::get_clipboard(); @@ -594,22 +591,16 @@ String OS_Android::get_clipboard() const {  String OS_Android::get_model_name() const { -	if (get_model_func) -		return get_model_func(); +	String model = godot_io_java->get_model(); +	if (model != "") +		return model; +  	return OS_Unix::get_model_name();  }  int OS_Android::get_screen_dpi(int p_screen) const { -	if (get_screen_dpi_func) { -		return get_screen_dpi_func(); -	} -	return 160; -} - -void OS_Android::set_need_reload_hooks(bool p_needs_them) { - -	use_reload_hooks = p_needs_them; +	return godot_io_java->get_screen_dpi();  }  String OS_Android::get_user_data_dir() const { @@ -617,8 +608,8 @@ String OS_Android::get_user_data_dir() const {  	if (data_dir_cache != String())  		return data_dir_cache; -	if (get_user_data_dir_func) { -		String data_dir = get_user_data_dir_func(); +	String data_dir = godot_io_java->get_user_data_dir(); +	if (data_dir != "") {  		//store current dir  		char real_current_dir_name[2048]; @@ -645,45 +636,43 @@ String OS_Android::get_user_data_dir() const {  void OS_Android::set_screen_orientation(ScreenOrientation p_orientation) { -	if (set_screen_orientation_func) -		set_screen_orientation_func(p_orientation); +	godot_io_java->set_screen_orientation(p_orientation);  }  String OS_Android::get_unique_id() const { -	if (get_unique_id_func) -		return get_unique_id_func(); +	String unique_id = godot_io_java->get_unique_id(); +	if (unique_id != "") +		return unique_id; +  	return OS::get_unique_id();  }  Error OS_Android::native_video_play(String p_path, float p_volume, String p_audio_track, String p_subtitle_track) {  	// FIXME: Add support for volume, audio and subtitle tracks -	if (video_play_func) -		video_play_func(p_path); + +	godot_io_java->play_video(p_path);  	return OK;  }  bool OS_Android::native_video_is_playing() const { -	if (video_is_playing_func) -		return video_is_playing_func(); -	return false; + +	return godot_io_java->is_video_playing();  }  void OS_Android::native_video_pause() { -	if (video_pause_func) -		video_pause_func(); + +	godot_io_java->pause_video();  }  String OS_Android::get_system_dir(SystemDir p_dir) const { -	if (get_system_dir_func) -		return get_system_dir_func(p_dir); -	return String("."); +	return godot_io_java->get_system_dir(p_dir);  }  void OS_Android::native_video_stop() { -	if (video_stop_func) -		video_stop_func(); + +	godot_io_java->stop_video();  }  void OS_Android::set_context_is_16_bits(bool p_is_16) { @@ -706,7 +695,7 @@ String OS_Android::get_joy_guid(int p_device) const {  }  bool OS_Android::_check_internal_feature_support(const String &p_feature) { -	if (p_feature == "mobile" || p_feature == "etc" || p_feature == "etc2") { +	if (p_feature == "mobile") {  		//TODO support etc2 only if GLES3 driver is selected  		return true;  	} @@ -726,7 +715,7 @@ bool OS_Android::_check_internal_feature_support(const String &p_feature) {  	return false;  } -OS_Android::OS_Android(GFXInitFunc p_gfx_init_func, void *p_gfx_init_ud, OpenURIFunc p_open_uri_func, GetUserDataDirFunc p_get_user_data_dir_func, GetLocaleFunc p_get_locale_func, GetModelFunc p_get_model_func, GetScreenDPIFunc p_get_screen_dpi_func, ShowVirtualKeyboardFunc p_show_vk, HideVirtualKeyboardFunc p_hide_vk, VirtualKeyboardHeightFunc p_vk_height_func, SetScreenOrientationFunc p_screen_orient, GetUniqueIDFunc p_get_unique_id, GetSystemDirFunc p_get_sdir_func, GetGLVersionCodeFunc p_get_gl_version_func, VideoPlayFunc p_video_play_func, VideoIsPlayingFunc p_video_is_playing_func, VideoPauseFunc p_video_pause_func, VideoStopFunc p_video_stop_func, SetKeepScreenOnFunc p_set_keep_screen_on_func, AlertFunc p_alert_func, SetClipboardFunc p_set_clipboard_func, GetClipboardFunc p_get_clipboard_func, bool p_use_apk_expansion) { +OS_Android::OS_Android(GodotJavaWrapper *p_godot_java, GodotIOJavaWrapper *p_godot_io_java, bool p_use_apk_expansion) {  	use_apk_expansion = p_use_apk_expansion;  	default_videomode.width = 800; @@ -734,38 +723,13 @@ OS_Android::OS_Android(GFXInitFunc p_gfx_init_func, void *p_gfx_init_ud, OpenURI  	default_videomode.fullscreen = true;  	default_videomode.resizable = false; -	gfx_init_func = p_gfx_init_func; -	gfx_init_ud = p_gfx_init_ud;  	main_loop = NULL;  	gl_extensions = NULL;  	//rasterizer = NULL;  	use_gl2 = false; -	open_uri_func = p_open_uri_func; -	get_user_data_dir_func = p_get_user_data_dir_func; -	get_locale_func = p_get_locale_func; -	get_model_func = p_get_model_func; -	get_screen_dpi_func = p_get_screen_dpi_func; -	get_unique_id_func = p_get_unique_id; -	get_system_dir_func = p_get_sdir_func; -	get_gl_version_code_func = p_get_gl_version_func; - -	video_play_func = p_video_play_func; -	video_is_playing_func = p_video_is_playing_func; -	video_pause_func = p_video_pause_func; -	video_stop_func = p_video_stop_func; - -	show_virtual_keyboard_func = p_show_vk; -	hide_virtual_keyboard_func = p_hide_vk; -	get_virtual_keyboard_height_func = p_vk_height_func; - -	set_clipboard_func = p_set_clipboard_func; -	get_clipboard_func = p_get_clipboard_func; - -	set_screen_orientation_func = p_screen_orient; -	set_keep_screen_on_func = p_set_keep_screen_on_func; -	alert_func = p_alert_func; -	use_reload_hooks = false; +	godot_java = p_godot_java; +	godot_io_java = p_godot_io_java;  	Vector<Logger *> loggers;  	loggers.push_back(memnew(AndroidLogger));  |